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 work orders and replies with the status, the assigned technician’s first name, and an expected time where one exists: “Your Berlingo is with Tom. It should be ready by around 3pm.” The answer is scoped to the vehicle being discussed. If the customer has more than one vehicle with you and it is unclear which they mean, the AI asks (“I see you’ve got more than one vehicle with us. Which one are you asking about?”) rather than listing them. If the expected time has already passed, the AI acknowledges the work may be running over instead of repeating a stale time. With no time on record it offers to get one confirmed: “Work is in progress on your vehicle. Want me to get someone to confirm a time?”
  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. Service price questions (“how much for an MOT?”) - the AI quotes real prices from your service catalogue, for example “MOT (Class 4) - £54.85, ~45 mins”. A service priced from a labour rate is framed as a labour-only estimate with parts extra. A service with no price configured (bodywork is the common one) is offered as “pricing on request”, and the AI arranges a callback so the team can quote it properly. See “When the AI can’t fully answer” below. Keep Settings > Services current - the AI quotes whatever is there. The same prices are quoted on voice calls.
  5. 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.” For recognised customers, the reply also includes their secure customer portal link (a short tflow.link/p/... address) so they can book or check status without calling. If the customer has no active portal link, the AI mentions your phone number instead.

When the AI can’t fully answer (callbacks)

Section titled “When the AI can’t fully answer (callbacks)”

Some requests cannot be finished in the chat. The common ones are a service with no fixed price (bodywork, for example), a new or tailored quote, and a booking sent by SMS. Rather than send the customer to a dead end, the AI arranges a callback.

  1. The AI logs a callback request against the conversation before it replies. It only promises a callback once that record exists, so a promised callback always has a real task behind it for staff to action. It never promises a callback it has not logged.
  2. The reply is a plain statement, not a question: “I’ve asked a colleague to call you back on this number about that.” The AI does not tell the customer to phone the garage, because your main number is answered by your AI receptionist.
  3. For bodywork or visible damage, if the customer has a portal link, the AI also suggests sending photos so the team can have a look before they call. The callback comes first. The photos are the optional “while you wait” step. With no portal link, the AI offers the callback only.
  4. Only one open callback is held per conversation. If the customer raises another can’t-answer question while a callback is still open, the AI says it will be covered in the same call rather than promising a second one.
  5. If the callback cannot be logged, the AI does not promise one. It answers what it can and offers a soft handoff (“I’ll pass this to the team to follow up”) instead of a dead end.

The callback request appears in the Messages inbox as an escalation on that conversation, and the assigned staff get a notification. Action it like any other escalation. This behaviour applies on both WhatsApp and SMS. On voice calls the AI already offers to take details or arrange a callback during the call.

Before sharing account details, the AI verifies the customer. A few honesty rules apply:

  1. If a verification detail does not match (wrong postcode, wrong work-order reference), the AI says so plainly: “Hmm - that doesn’t quite match what’s on the account, so I can’t open up the account details just yet. Want to try again, or give me a work-order reference?” It never pretends verification succeeded.
  2. A verified customer with genuinely no open job gets a warm, clear answer: “Good news - there’s nothing currently open on your vehicle with us.” That is different from a system problem, where the AI says it cannot pull the details up right now and brings in a colleague.
  3. The AI never states a fabricated work-order status. A safety filter checks every status reply against the real records before it is sent.
  4. If a phone number is shared by more than one customer account (a household, say), the AI does not guess which person it is. It says only that more than one account uses the number and asks them to confirm their name or vehicle registration. It never lists the accounts, never greets by name, and never confirms or denies whether a particular name is on the number. Once a name or registration matches one account, the AI carries on as that customer. If it cannot work out who they are after a couple of tries, it offers a callback. This applies on WhatsApp, SMS, and voice.

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.

One deliberate behaviour worth knowing: when a customer asks for a human, the AI does not point them at your main phone number. Your main number is answered by your AI receptionist, so that would loop the customer straight back to an AI. Instead the AI offers their portal link where available, or promises a reply in the same thread: “I’ve passed this to the team - they’ll reply to you here.” Make sure escalated conversations in the inbox get a timely human reply, because that is what the customer has been told to expect.

What customers see when the AI reaches its usage limit

Section titled “What customers see when the AI reaches its usage limit”

If your organisation hits its daily or monthly AI query limit, customers do not get silence. The AI sends an explicit holding message: “Thanks for your message - we’ve got it and a member of our team will be in touch. For anything urgent, call us on {phone}.” Recognised customers also get their portal link. The message is sent at most once per customer per limit period and appears in the inbox like any other AI reply. To review or raise your limits, see Configure AI assistant settings.

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: The AI offered a callback for a service we actually price. Cause: That service has no price set in Settings > Services, so the AI treats it as something it cannot quote and arranges a callback. Fix: Add the price under Settings > Services. Once it has a price, the AI quotes it directly instead of arranging a callback.

Problem: A customer asks whether the tflow.link/p/... address in an AI reply is safe. Cause: It is the customer’s personal, secure portal sign-in link. The AI includes it for recognised customers so they can book or check status without calling. Fix: Reassure the customer it is genuine. It opens their portal for your garage and signs them in automatically. It should not be forwarded to anyone else, as it is personal to them.

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.