Skip to content

How the AI Handles WhatsApp Messages

When a customer messages your garage on WhatsApp, Torqueflow’s AI reads the message, decides what it is about, and either answers, books an appointment, or hands off to a human with a written context summary. Staff never get “blind” escalations and the AI never replies to something it is not confident it can handle. This article explains the triage flow, what each intent does, when the AI stays quiet, and how to take back control of a conversation.

  • WhatsApp is connected via Settings > WhatsApp Integration (see settings/whatsapp-settings).
  • Communication AI is enabled for your organisation. If AI is off, WhatsApp messages still land in the inbox but the AI never processes them.
  • A service advisor role with messages.view and messages.manage to take over conversations.

Every inbound WhatsApp message goes through a fixed sequence:

  1. Store first, think later. The message is saved to the conversation and appears in the Messages inbox immediately. Staff always see inbound messages without waiting on the AI.
  2. Classify the intent. A background job runs the AI to categorise the message into exactly one of these intents: status_inquiry, booking_request, quote_question, general_question, escalation_request, continuation, spam, or unknown. A confidence score from 0 to 1 is attached.
  3. Route by confidence. The system only takes action when confidence is above the threshold for that intent (see table below). If confidence is too low, the message falls back to unknown and waits for a human.
  4. Respond or escalate. Depending on the intent, the AI either answers directly, starts a booking flow, or escalates to staff with a written summary.
IntentThresholdWhat happens at or above threshold
status_inquiry0.8AI answers with live work order status and ETA.
booking_request0.8AI starts a booking conversation.
quote_question0.7AI reads out the approved quote total (or says a quote is pending).
general_question0.7AI replies using the L1 support prompt.
escalation_request0.6Conversation is handed to staff with a summary.
continuationn/aContinues the current flow (booking, L1, etc).
spam0.9Marked as spam, notifications suppressed.
unknown-Stays in inbox for manual triage.

Below each threshold, the intent defaults to unknown and the message waits for a human. The AI’s best guess is still stored so staff can see a hint like “AI suggests: booking_request (62%)”.

See what the AI can answer directly (L1 support)

Section titled “See what the AI can answer directly (L1 support)”

When the intent is status_inquiry, quote_question, or general_question at sufficient confidence, the AI replies using live data:

  1. Status inquiries (“is my car ready?”) - the AI looks up the customer’s linked work order and replies with overall status, job-by-job breakdown, and the first name of the assigned technician. “Great news - your car is ready for collection!” or “We’re working on your brake pads and oil change. The brake pads are done, and the oil change is in progress.”
  2. ETA questions (“how long?”) - the AI generates an estimate based on remaining jobs and frames it carefully as an estimate, never a promise: “Based on the remaining work, I’d estimate around 2-3 hours - but I’ll make sure someone confirms if you need a precise time.”
  3. Quote questions (“how much?”) - the AI reports the approved quote total or, if the quote is pending, reminds the customer to approve it. It never fabricates prices - if there is no quote on file, it escalates to staff.
  4. General questions - the AI uses the L1 support prompt with the garage’s voice. Responses are 2-4 sentences, warm and conversational, and always end with a footer: “I’m an AI assistant. Reply HUMAN to speak to someone.

When the intent is booking_request at 0.8+ confidence, the booking agent takes over:

  1. The AI acknowledges the request and starts gathering missing details one at a time (not all at once).
  2. It asks for service type (MOT, full service, brake check, general repair) if not given.
  3. It asks which vehicle if the customer has multiple registered. If they only have one, it auto-selects and confirms.
  4. For multi-location garages, it asks which branch. For single-location, it auto-selects.
  5. It asks for a preferred date and time, handling natural language like “next Thursday” or “tomorrow morning”.
  6. It always confirms the resolved date back to the customer before checking availability (“You said ‘next Thursday’ - that’s Thursday 13 March, correct?”). This is mandatory - it prevents wrong-date bookings.
  7. It checks bay availability and presents 2-3 time slots.
  8. On customer confirmation, it creates the appointment and a new work order if one doesn’t exist, tagged source: 'whatsapp_ai'.

Clear confirmations like “yes”, “perfect”, or “go ahead” proceed to booking. Ambiguous responses like “sounds good” or “OK” get a follow-up check before the booking is created.

Escalation fires in these cases:

  1. Customer asks - “speak to someone”, “talk to a human”, “HUMAN” are classified as escalation_request and routed immediately.
  2. Low confidence - the AI cannot confidently classify the intent.
  3. Booking fallback - the booking agent cannot complete after two attempts or hits a system error.
  4. AI error - the AI service timed out or returned an error.

When escalation fires:

  1. The AI generates a 2-4 sentence structured summary covering: what the customer wants, what the AI has already done, why it is escalating, and the conversation sentiment.
  2. If the conversation is linked to a work order, the escalation routes to the technician or advisor assigned to that WO. Otherwise it routes to the inbox as unassigned.
  3. If the customer asked for a specific person by name, the AI fuzzy-matches against staff profiles. If found, it assigns to that person. If not, it routes as unassigned with a note: “Customer asked for {name}”.
  4. The escalation summary appears in the thread as a system message (centred, italic, muted styling) so staff see the context immediately.
  5. The conversation’s ai_enabled flag is set to false and escalated_at is stamped with the current time.
  6. All AI activity stops for that conversation. Classify, respond, and booking functions all check ai_enabled and skip when it is false.

Staff never get a blind handoff - every escalation has a context summary attached.

If you want to silence the AI on a conversation manually, or re-enable it after an escalation:

  1. Open the conversation in Messages.
  2. In the conversation sidebar, find the AI Enabled toggle.
  3. After an escalation, a prominent amber banner reads “AI paused - escalated {time ago}” with a Re-enable AI button. Click it to let the AI start classifying and replying again.
  4. Toggling the switch off manually silences the AI without an escalation event.
  5. Re-enabling posts a system message: “AI assistant re-enabled by {staff name}”.
  1. Every AI-generated outbound message has ai_generated: true on the record and appears with an AI indicator in the thread.
  2. The L1 support footer “I’m an AI assistant. Reply HUMAN to speak to someone.” is appended to responses.
  3. Booking confirmations are signed off as normal replies but still carry the AI flag.
  • You understand which messages the AI will answer, which will become bookings, and which will be handed off.
  • You can read the intent trail and confidence scores to predict what the AI will do.
  • You can take over a conversation manually and re-enable AI later without losing context.
  • Your customers get instant responses to common questions and a written handoff summary when staff get involved.

Problem: AI is not replying to any WhatsApp messages. Cause: Either Communication AI is disabled at the organisation level, or ai_enabled is false on the specific conversation (usually after an escalation). Fix: Check Settings > Communication for the AI toggle. For specific conversations, use the Re-enable AI button in the sidebar.

Problem: AI is misclassifying messages as spam. Cause: Spam threshold is 0.9 - only very confident spam is filtered. If legitimate messages are being marked, the AI’s classification is likely tripping on keywords. Fix: Report examples to Torqueflow support. The classification prompt can be tuned.

Problem: AI started booking an appointment but stopped mid-conversation. Cause: Booking fallback after two unparseable responses, a system error, or the customer asked for a human. Fix: Check the conversation - there should be an escalation summary system message explaining why. Take over from there.

Problem: Customer says the AI booked the wrong date. Cause: The AI is supposed to confirm the resolved date before booking. If this failed, it is a prompt issue - report to support. Fix: Cancel the incorrect appointment, create a new one manually, and escalate the example to support.

Problem: AI replied with “I don’t have a quote on file for this job” but the customer has a quote. Cause: The quote is not linked to the work order the AI found via the customer’s vehicle, or the customer has multiple vehicles and the AI chose the wrong one. Fix: Check the linked work order on the conversation sidebar. Link the correct quote, or take over the conversation and reply manually.

Problem: Escalation summary is missing or generic. Cause: AI summary generation failed, so a basic fallback summary was used: “Customer requested human assistance. Intent: {ai_intent}. {message_count} messages in conversation.” Fix: Functional but less rich. Read the conversation thread for full context. If this happens frequently, report to support.

  • Classification runs with concurrency capped at 10 jobs to avoid overwhelming the AI service.
  • Every classification is logged to the AI audit log with the reasoning field, which is never shown to customers.
  • The AI never responds to escalation_request - those always go to human escalation, never to L1 or booking.
  • Demo organisations classify messages normally but do not consume credits.
  • Intent trails are visible on the escalation system message: “Intent trail: booking_request (0.9) → continuation (0.7) → escalation_request (0.8)” - useful for understanding why the AI did what it did.
  • messages.view - required to see the WhatsApp inbox.
  • messages.manage - required to toggle ai_enabled on a conversation.
  • settings.communication.manage - required to toggle Communication AI at the organisation level.