Docs/Human Handoff/Escalation Rules

Escalation Rules

These are the actual conditions that move a conversation out of ai_active — not general advice, but what the system checks. If a trigger isn't listed here, it doesn't exist yet.

Keyword or AI-judgement trigger (website widget)

Configured per agent as a Human Handoff AI Action (see Configuration). A visitor's message fires it when:

  • It contains one of the action's comma-separated Trigger keywords — a whole-word match for single-word triggers, a substring match anywhere in the message for multi-word phrases.
  • The AI decides on its own, based on the action's "When to use" description, that the request matches — it can fire the action even without an exact keyword hit.

If the visitor hasn't given contact details yet, this shows the lead-capture form first and holds the handoff until they submit it. If details already exist, the conversation moves to human_requested immediately.

Built-in trigger on WhatsApp, Messenger and Instagram

No configuration needed — every conversation on these three channels carries the same instruction. The AI is told to signal a handoff when:

  • The visitor asks a question it cannot answer from available information.
  • The visitor explicitly asks to speak with a person.

It also assigns a priority: high only if the visitor seems distressed or the situation is urgent, normal otherwise. Because there's no popup form on these channels, a lead is captured automatically at this point — using the visitor's phone number and known name — so the reason isn't lost even though nothing prompted for contact info.

⚠️
The AI's stated reason and priority are saved onto the auto-created lead's custom fields, not onto the conversation record — the Inbox conversation view doesn't currently display them.

Zoho Desk triggers

Covered in full on the Configuration page — four selectable conditions decide when a Zoho Desk ticket is created, and creating a ticket always pushes the conversation into the handoff queue (waiting_for_agent), regardless of which condition fired. One of the four ("Customer requests a human") additionally runs a phrase-detector against every website-widget message, independent of any AI Action you may have configured.

What is not a trigger today

⚠️
Sentiment and emotion are tracked on every conversation (sentiment, sentiment_score, primary_emotion), but nothing currently reads those fields to trigger a handoff automatically. There's also no dedicated "Talk to a human" button in the chat widget itself — handoff always goes through one of the mechanisms above.

SLA: what happens once a conversation is waiting

A handoff doesn't get a deadline just for existing — sla_due_at is only set in two places:

  • When an agent claims a WhatsApp conversation from the Inbox, it gets a 4-hour deadline from the moment of claim (if it doesn't already have one).
  • When a Zoho Desk ticket is created for a conversation's lead, it gets the same 4-hour deadline immediately, before anyone has claimed it.

Claiming an Email, Instagram or Messenger conversation does not set a deadline on its own — those channels only get one if a Zoho Desk ticket already set it earlier.

A scheduled job (whatsapp:escalate-sla — despite the name, it isn't WhatsApp-specific, it checks sla_due_at and handoff_status on any conversation) runs every minute. Any conversation still in human_requested, waiting_for_agent or human_active whose deadline has passed gets:

  • sla_breached_at set to the current time.
  • Its priority bumped to urgent.
⚠️
There's no email, Slack or push notification when SLA breaches — it's a flag, not an alert. It surfaces passively: the WhatsApp Inbox sorts breached conversations to the top of every tab and shows a red "SLA Breached" badge (or an amber "Urgent" badge if priority was bumped without a technical breach yet). Agents only see it if they're looking at the Inbox.

Was this page helpful?