AI agents get blamed for bad customer experiences. But in the deployments that go wrong, the issue usually isn't the AI - it's what happens the moment the AI decides it can't handle something. The handover to a human agent breaks, the customer repeats everything they already said, and the conversation dies.
This is a configuration problem, not a model problem. And it's fixable before you go live.
The four trigger types you need to configure
Most platforms let you set handoff triggers. Most deployments configure only one: the explicit request. That's not enough.
Explicit request is the baseline. When a user types "I want to talk to a person" or "this isn't helping," the bot should route immediately - no retries, no additional clarification. Any friction here costs trust.
Confidence threshold is the one teams skip. Every AI agent has a confidence score per response. When that score drops below a defined level - 60% is a reasonable starting point - the agent should stop attempting an answer and escalate instead. Tune this after the first two weeks of escalation data. Set it too high and you'll hand off conversations the AI could have resolved; set it too low and you'll let the AI guess at things it shouldn't.
Sentiment detection catches conversations that look fine on paper but aren't. Two short, frustrated messages in a row signals a user who is done engaging. An AI that keeps trying to help makes it worse. Configure your sentiment model to flag these sequences and route to a human.
Topic-based routing applies to categories your AI shouldn't touch regardless of confidence: refund disputes above a threshold, legal questions, security incidents, account-lockout scenarios. These route directly to a human even when the AI could generate a plausible response. Set the list deliberately and review it quarterly.
For WhatsApp agents specifically: test your explicit-request trigger against real chat logs before launch. Users on WhatsApp write casually. "help.", "??", "this is useless" - all of these are handoff signals that a library trained on formal phrases will miss.
What goes in the context packet
When a handoff fires, the receiving agent sees a context packet. Most deployments send the transcript. That's the minimum, not the goal.
A complete context packet includes: the full conversation transcript, a one-paragraph AI-generated summary of the issue, the user's identified intent and confidence score at the time of handoff, what the AI already tried (links shared, answers given), customer metadata from your CRM, and - critically - which trigger type fired the escalation.
That last item changes how the agent opens the conversation. An agent receiving a confidence-threshold handoff knows the issue is likely outside the knowledge base - something unusual the AI wasn't trained on. An agent receiving a sentiment handoff knows to lead with acknowledgment before troubleshooting. These are different conversations.
For WhatsApp: agents read the context packet before sending their first message into an active thread. Make it scannable. A summary paragraph followed by structured metadata is far easier to act on than a raw transcript dump. If your platform supports an internal agent note visible before they reply, use it.
WhatsApp handoff is not the same as live chat
This is the gap most handoff guides miss.
In web chat, the handoff is a session transition: a new widget state, a banner that signals the channel has switched. The user knows they're talking to a person now.
On WhatsApp, there's no visual channel switch. The conversation is a single thread. When a human agent takes over from the AI, the message arrives in the same thread, with no visual distinction from the AI's previous messages. Users often can't tell the difference - which is sometimes fine, and sometimes a problem.
Configure these three things for WhatsApp handoff specifically:
Agent introduction message. The agent's first message should signal the shift. "A member of our team has joined to help you" is sufficient. This doesn't break the brand experience but sets the right expectation for the user.
Thread assignment. When the handoff fires, the conversation needs to land in the right agent queue and surface in their inbox. Set a pickup window - if no agent claims the thread within five minutes, it should re-queue and trigger an escalation notification. Don't let threads fall silent without a handler.
Thread expiry. Unlike live chat with clear session boundaries, WhatsApp threads go quiet and resume hours later. After a period of agent inactivity, return the conversation to the AI or mark it resolved. An unclosed thread that sits in an agent's queue overnight is a ticket that's going to get dropped.
After hours: define behavior before launch
Handoff triggers don't check the clock. If your AI runs 24/7 and your human team works set hours, you need a defined after-hours behavior before launch - not as an afterthought.
Three options, in order of user experience quality:
Scheduled callback: Collect the user's issue and preferred contact time. Tell them exactly when they'll hear back. This only works if your agent team reliably follows up - if that's uncertain, don't promise it.
Queue with estimated wait: Place the user in a queue with a real estimated wait time. This works if agents come online within a reasonable window. It fails if the wait turns into two hours with no updates.
Acknowledge and close: Tell the user support is unavailable, summarize what was captured, and invite them to reopen. The least satisfying option - but the most honest if your after-hours coverage is genuinely thin.
On WhatsApp, there's a fourth option that doesn't exist in live chat: a proactive outbound message from the agent when they come online. WhatsApp is async by nature - users are more tolerant of delayed responses than in live chat. "I saw your message last night - here's what I can do" often lands better than the equivalent live-chat experience because the medium normalizes it.
Testing each trigger before you go live
Handoff flows break in ways that aren't visible until they're live. Run each trigger type manually before launch.
Explicit request: Type "I want to speak to a human" mid-conversation. Verify the handoff fires immediately, the correct queue receives it, and the context packet is complete.
Confidence threshold: Ask the AI something outside its knowledge base - something obscure, not in your documentation. Confirm the escalation fires at the configured threshold rather than generating a hallucinated answer.
Sentiment: Send two short, frustrated-sounding messages in a row. Confirm the trigger fires and the context packet flags the sentiment signal.
After-hours: Set your operating hours to a closed window and trigger a handoff. Confirm the after-hours message fires and the issue is captured for follow-up.
Agent view: Open the receiving agent's interface during a test handoff and read the context packet as if you're seeing it for the first time. If you'd need to ask the user to repeat anything, the packet is incomplete.
This last test is the one teams almost never run - and the most useful one. The agent's first message after a handoff sets the tone for the rest of the conversation. The context they receive either enables a good opening or forces a bad one.