How the AI Handles WhatsApp Messages
Summary
Section titled “Summary”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.
Prerequisites
Section titled “Prerequisites”- 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.viewandmessages.manageto take over conversations.
Understand the triage flow
Section titled “Understand the triage flow”Every inbound WhatsApp message goes through a fixed sequence:
- 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.
- 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, orunknown. A confidence score from 0 to 1 is attached. - 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
unknownand waits for a human. - Respond or escalate. Depending on the intent, the AI either answers directly, starts a booking flow, or escalates to staff with a written summary.
Know the confidence thresholds
Section titled “Know the confidence thresholds”| Intent | Threshold | What happens at or above threshold |
|---|---|---|
status_inquiry | 0.8 | AI answers with live work order status and ETA. |
booking_request | 0.8 | AI starts a booking conversation. |
quote_question | 0.7 | AI reads out the approved quote total (or says a quote is pending). |
general_question | 0.7 | AI replies using the L1 support prompt. |
escalation_request | 0.6 | Conversation is handed to staff with a summary. |
continuation | n/a | Continues the current flow (booking, L1, etc). |
spam | 0.9 | Marked 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:
- 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.”
- 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.”
- 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.
- 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.”
See what the AI can do for bookings
Section titled “See what the AI can do for bookings”When the intent is booking_request at 0.8+ confidence, the booking agent takes over:
- The AI acknowledges the request and starts gathering missing details one at a time (not all at once).
- It asks for service type (MOT, full service, brake check, general repair) if not given.
- It asks which vehicle if the customer has multiple registered. If they only have one, it auto-selects and confirms.
- For multi-location garages, it asks which branch. For single-location, it auto-selects.
- It asks for a preferred date and time, handling natural language like “next Thursday” or “tomorrow morning”.
- 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.
- It checks bay availability and presents 2-3 time slots.
- 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.
See how escalation to staff works
Section titled “See how escalation to staff works”Escalation fires in these cases:
- Customer asks - “speak to someone”, “talk to a human”, “HUMAN” are classified as
escalation_requestand routed immediately. - Low confidence - the AI cannot confidently classify the intent.
- Booking fallback - the booking agent cannot complete after two attempts or hits a system error.
- AI error - the AI service timed out or returned an error.
When escalation fires:
- 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.
- 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.
- 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}”.
- The escalation summary appears in the thread as a system message (centred, italic, muted styling) so staff see the context immediately.
- The conversation’s
ai_enabledflag is set tofalseandescalated_atis stamped with the current time. - All AI activity stops for that conversation. Classify, respond, and booking functions all check
ai_enabledand skip when it is false.
Staff never get a blind handoff - every escalation has a context summary attached.
Take a conversation back from the AI
Section titled “Take a conversation back from the AI”If you want to silence the AI on a conversation manually, or re-enable it after an escalation:
- Open the conversation in Messages.
- In the conversation sidebar, find the AI Enabled toggle.
- 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.
- Toggling the switch off manually silences the AI without an escalation event.
- Re-enabling posts a system message: “AI assistant re-enabled by {staff name}”.
Spot which messages the AI wrote
Section titled “Spot which messages the AI wrote”- Every AI-generated outbound message has
ai_generated: trueon the record and appears with an AI indicator in the thread. - The L1 support footer “I’m an AI assistant. Reply HUMAN to speak to someone.” is appended to responses.
- Booking confirmations are signed off as normal replies but still carry the AI flag.
Expected Outcome
Section titled “Expected Outcome”- 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.
Troubleshooting
Section titled “Troubleshooting”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.
Permissions
Section titled “Permissions”messages.view- required to see the WhatsApp inbox.messages.manage- required to toggleai_enabledon a conversation.settings.communication.manage- required to toggle Communication AI at the organisation level.