Docs/Human Handoff/Overview

Human Handoff

Human handoff moves a conversation from the AI agent to a person on your team. It isn't a separate ticketing system bolted on top — it's a status field on the conversation itself (handoff_status), and your team's Inbox, the AI's own behavior, and the SLA tracker all read from that one field. A conversation moves through up to six states over its lifecycle, and which channel it's on — website widget, WhatsApp, Messenger, Instagram, or a Zoho Desk ticket — changes what can trigger a handoff and where your team actually sees it.

The handoff lifecycle

1

AI Active — the default state

Every new conversation starts here. handoff_status is ai_active (or null on older rows, treated the same way). The AI answers on its own — nothing has asked for a person yet.
2

Something triggers a handoff

A visitor's message matches a configured trigger, the AI decides on its own that it can't help, or a Zoho Desk ticket gets created for the conversation. The conversation moves to human_requested or waiting_for_agent — either way, the AI stops replying and it sits in the queue until someone claims it. See Escalation Rules for the actual list of triggers.
3

An agent claims it → Human Active

A teammate clicks Claim conversation (WhatsApp Inbox) or Take over (the Email/Instagram/Messenger inbox). This is an atomic claim — if two agents click at the same moment, only the first succeeds and the second gets an "already claimed" error. handoff_status becomes human_active, assigned_user_id is set to that agent, and handoff_assigned_at is recorded.
4

Agent resolves it

The agent clicks Mark resolved once the request is handled. handoff_status becomes resolved and handoff_resolved_at is recorded. Nothing else happens automatically — the conversation just stays resolved and the AI does not pick it back up on its own.
5

AI Resumed — optional, agent-initiated

From human_active or resolved, an agent can click Resume AI. handoff_status becomes ai_resumed and the conversation's status flips back to active, so the AI answers again the next time the visitor writes in.
Statushandoff_status valueWhat it means
AI Activeai_activeDefault. The AI is answering; this is also the state after Resume AI.
Human Requestedhuman_requestedA keyword, an AI decision, or the Zoho Desk phrase-match triggered a handoff. Not yet claimed.
Waiting for Agentwaiting_for_agentA Zoho Desk support ticket was created for this conversation before it had been marked as handed off. Not yet claimed.
Human Activehuman_activeAn agent has claimed the conversation and is replying directly.
ResolvedresolvedAn agent marked the conversation resolved.
AI Resumedai_resumedAn agent handed the conversation back to the AI.

What actually triggers a handoff

Four separate mechanisms can start a handoff, and which ones are active depends on the channel. Website widget conversations rely on a configured AI Action; WhatsApp, Messenger and Instagram also carry a built-in trigger that needs no configuration at all.

  • A visitor's message matches the Trigger keywords on a Human Handoff AI Action, or the AI itself decides to fire that action mid-reply (website widget only).
  • The built-in "can't answer / visitor asked for a person" signal that every WhatsApp, Messenger and Instagram conversation carries automatically.
  • A Zoho Desk integration set to trigger on "Customer requests a human" wording.
  • A Zoho Desk support ticket being created for the conversation, for any reason.
ℹ️
See Escalation Rules for the exact trigger phrases, and Configuration for where each of these is set up.

What the agent sees when they take over

  • The full message transcript — AI replies, the visitor's messages, and any previous agent replies, including WhatsApp voice-note transcriptions and images.
  • Contact details captured so far: name, phone, email, detected language.
  • A linked Zoho CRM record's owner, stage, status and notes, if the lead has synced to Zoho CRM.
⚠️
There's no AI-generated handoff summary today — the database has an unused handoff_summary column, but nothing populates it. Agents read the transcript directly. See Conversation Context for the full picture.

Where handoff actually happens, per channel

⚠️
WhatsApp conversations get a dedicated Inbox at /inbox — the only page with SLA badges and cross-conversation sorting by breach. Email, Instagram and Messenger each have their own inbox tab inside that channel's page under Chatbot → Deploy, with the same Claim / Resolve / Resume AI buttons but no dedicated SLA-focused view. The website widget itself has no inbox — handing off there just means an AI Action fires, or a Zoho Desk ticket gets created.

Configuring it

There's no single Human Handoff settings page. What you configure depends on the channel — see Configuration for the specifics of each one.

Was this page helpful?