← All articles

Release readiness

Testing AI-to-human handoffs: escalation, context, and recovery

Test voice-agent handoffs end to end across trigger accuracy, caller explanation, routing, context transfer, hold, connection, fallback, and human resolution.

A voice agent handing a caller and approved context to a human through warm, cold, failed, and recovery transfer paths

Take it with you

MarkdownFree and ungated

Test the handoff as a state machine

Check triggers, explanation, consent, routes, context, media, AI exit, closed and failed paths, plus the verified human or fallback state.

ai-human-handoff-test-checklist.md

Download Markdown

A voice agent says, “I’ll connect you to a specialist,” and emits a successful transfer event. The dashboard turns green. The caller hears silence, lands in the wrong queue, repeats the whole story, and eventually hangs up.

That was not a successful handoff.

This guide is for voice-AI and contact-center teams that need to test the whole path from escalation decision to human resolution. You will get a practical matrix for trigger accuracy, caller explanation, routing, context transfer, hold behavior, connection, failure recovery, and final state.

The short answer

Test a handoff as a stateful workflow with three participants: caller, AI agent, and human destination. A pass requires the right escalation trigger, an accurate explanation, the correct route, permitted and useful context, a working connection, and an approved fallback when the human is unavailable.

Do not stop the test at transfer_started. Verify what the caller heard and where the call ended. A transfer event proves that one system attempted something. It does not prove a person answered, received context, or resolved the task.

The release rule should reward a well-timed human escalation. Containment is not the goal for every call.

Cold and warm transfers solve different problems

A cold transfer forwards the caller directly to another phone number or SIP endpoint. The AI session typically ends once the transfer completes. It is simple and can be fast, but the agent cannot brief the human or recover after leaving the call unless the telephony design adds another mechanism.

A warm transfer keeps the agent involved while it reaches the human, shares a summary or collected information, and connects the parties. It can return to the caller when the destination does not answer. That richer experience creates more states to operate and test.

LiveKit’s current transfer docs describe cold transfer through SIP REFER and an agent-assisted warm-transfer workflow with a private consultation room, context briefing, merge, and recovery. The prebuilt warm-transfer task is marked beta for Python as of July 14, 2026. Retell’s docs expose cold and warm transfer options and a conversation-flow transfer node with a failure transition. These are product capabilities, not proof that your queue, SIP trunk, and policies work correctly.

Choose the transfer type per workflow.

Scroll diagram horizontally on smaller screens.

An AI-to-human handoff state machine moves from escalation trigger to caller explanation, routing, context briefing, connection, human resolution, or a tested recovery path

Define what a successful handoff means

Consider a fictional airline rebooking agent. A passenger asks to move a ticket after a cancellation. The agent can handle standard changes, but a fare waiver requires a human.

A successful handoff means:

  1. The agent recognizes that the waiver needs a human.
  2. It explains why and asks any required permission.
  3. It routes to the waiver-skilled queue during operating hours.
  4. It passes the booking reference, verified identity state, requested change, and reason for escalation, but not unrelated customer data.
  5. The human receives the context accurately.
  6. The caller reaches the human or an approved fallback.
  7. The final case state records what happened.

This is an invented example, not a Voxeval customer story.

Notice what is missing from the definition: “the AI kept the call.” A correct transfer is a product success when the workflow needs human authority.

Test 1: escalation trigger accuracy

Create cases that should and should not escalate.

Should escalate: caller requests a human, required authority is unavailable to the agent, identity cannot be completed, policy calls for review, the agent reaches its approved retry limit, or the caller is distressed in a workflow with a human path.

Should not escalate: the agent can complete a normal supported request, the caller merely asks a difficult but permitted question, or a transient tool delay has an approved recovery.

Measure both sides:

  • Escalation recall: how many required handoffs were triggered?
  • Escalation precision: how many triggered handoffs were actually needed?
  • Time from trigger to explanation and transfer action
  • Unsupported or risky calls that the agent tried to contain

One high containment percentage can hide missed safety escalations. One high handoff percentage can hide a bot that gives up too quickly.

The caller should know what is happening.

Test whether the agent:

  • Gives a truthful reason without blaming a system or making up wait times
  • Names the destination at the right level of detail
  • Asks permission when policy or experience requires it
  • Explains whether the caller will be placed on hold
  • States what information will be shared when that matters
  • Avoids promising that a person has answered before they have
  • Handles refusal or a request for another option

Review the audio. A transcript may look polite while the agent speaks over the caller’s question or starts hold music too early.

Test 3: route and availability

A correct escalation to the wrong destination is still wrong.

Build a routing matrix with:

  • Intent and required skill
  • Region and language
  • Product or account tier where permitted
  • Queue hours and holiday schedule
  • Phone number or SIP URI
  • Transfer type
  • Overflow destination
  • Callback or message fallback

Use controlled destinations in testing. Do not repeatedly ring a live support queue.

Simulate open, closed, busy, rejected, unreachable, voicemail, and misconfigured routes. Confirm that runtime values cannot turn a caller-supplied string into an arbitrary transfer destination.

For SIP-based cold transfers, verify trunk support and caller-ID behavior on the exact provider route. LiveKit’s cold-transfer docs note that the provider trunk must allow transfers and that the session ends after the transfer. Retell notes that custom telephony can shift transfer responsibility back to the application. Architecture changes the test.

Test 4: context content and correctness

The best context packet is not the longest transcript. It is the smallest accurate set the human needs to continue.

For the fictional waiver case:

{
  "reason": "cancellation waiver required",
  "booking_fixture": "BOOKING_104",
  "identity_state": "verified_for_rebooking",
  "requested_change": "July 18 morning",
  "actions_completed": ["availability_checked"],
  "actions_not_completed": ["ticket_changed"],
  "caller_language": "English"
}

This is an illustrative payload, not a platform or Voxeval schema.

Test:

  • Every value comes from approved evidence.
  • Corrections replace stale values.
  • Completed and pending actions are distinct.
  • The summary does not claim a failed tool succeeded.
  • Sensitive fields are minimized and permitted.
  • The destination can parse or present the payload.
  • The human can trace key facts back to the call or system.

An AI-generated summary needs calibration. Structured state should fill structured fields. Let the model summarize the caller’s reason, not invent the booking status.

Test 5: hold and consultation behavior

Warm transfer introduces a temporary split: the caller waits while the agent contacts a human.

Test what the caller hears and what the human hears:

  • Hold starts only after the caller is told.
  • The caller cannot hear the private briefing unless intended.
  • The human cannot hear private caller audio before joining.
  • Hold audio level and loop are usable over the phone route.
  • Long waits trigger an approved update or fallback.
  • The agent does not abandon the caller in a muted room.
  • The context summary completes before the merge.

LiveKit’s manual warm-transfer guide models caller and manager sessions separately and describes states such as active, summarizing, merged, and failed. Even if you use another stack, explicit states make the test easier to reason about.

Test 6: connection and introduction

The human answering is not the final step.

Verify:

  • The correct human participant joined.
  • Media works in both directions.
  • The AI or human introduces the parties as designed.
  • The caller is no longer on hold.
  • The human received the promised context.
  • The AI exits at the right moment.
  • Recording and disclosure behavior follows policy across the boundary.
  • The original AI cannot keep issuing tools after it should be inactive.

Measure time to human audio, not only time to transfer request. Track dead air and caller abandonment during the handoff.

Test 7: failed transfer recovery

Design the fallback before the first live call.

Failure modes include:

  • Queue closed
  • No answer
  • Busy or rejected call
  • SIP error
  • Human answers but declines the escalation
  • Context service fails
  • Caller disconnects while on hold
  • Agent process restarts mid-transfer
  • The human connection drops after merge

For each, define the expected caller state and business state. Options may include another queue, a callback request, a message, a ticket, a return to the AI for a narrower task, or a safe ending.

The agent must not say “I’ve connected you” when the destination rejected the call. It should not keep the caller on hold forever. It should not create several callbacks because the transfer retried.

Build a transfer test harness

A useful harness controls the human endpoint instead of relying on a person to answer each run.

It should simulate:

  • Answer after a set delay
  • Busy, reject, no answer, and voicemail
  • A human who accepts or declines
  • Expected DTMF or extension behavior
  • Context receipt and schema validation
  • Audio in both directions
  • Connection drop at chosen states
  • Queue-hours response

Capture room, SIP, participant, tool, hold, summary, and business events on one clock. Record the audio each participant could hear.

Then run a smaller set with trained human reviewers. Automation can prove transport and state. It cannot fully prove that the handoff felt coherent or that the summary helped the human.

Use an end-to-end scorecard

Keep these metrics separate:

Dimension Example measure
Trigger Required escalation recall and unnecessary escalation rate
Explanation Accurate reason, caller understanding, consent state
Routing Correct destination and hours behavior
Context Field accuracy, missing fields, forbidden fields, stale values
Connection Human reached, time to human audio, media integrity
Caller effort Repeated facts, hold time, abandonment
Recovery Approved fallback completion and duplicate-effect rate
Outcome Human resolution or verified next state

Do not average a privacy breach in context sharing with a fast connection time. Critical context and routing rules should be hard gates.

Test the human side too

The contact-center desktop or phone endpoint is part of the product.

Check whether the human can:

  • See the summary before or at answer
  • Distinguish verified facts from caller claims and AI inference
  • Open the correct record
  • Correct wrong context
  • Return or re-route the call
  • Record the final resolution
  • Report a bad handoff for regression

Ask reviewers whether the summary reduced repetition. A summary that looks complete to an engineer may not answer the first question a human asks.

Release with explicit limits

A handoff release record should name:

  • Supported triggers and queues
  • Cold or warm transfer path per workflow
  • Tested carriers, trunks, regions, and hours
  • Context schema and data policy
  • Failure and fallback coverage
  • Human review results
  • Untested endpoints and residual risks
  • Rollback and manual-routing owner

Run the critical matrix after telephony, queue, routing, agent, or summary changes. A contact-center configuration change can break a handoff without changing the model.

The production regression guide shows how to preserve a failed transfer as a reusable case. The release-gate article explains how to block a rollout when the path fails.

Where Voxeval fits

Voxeval treats handoff as an outcome-bearing workflow, not a terminal tool event. Teams should be able to see the escalation reason, caller experience, route, context, connection, recovery, human outcome, and final state in one case.

That is the bar: the right human, with the right context, while the caller still knows what is happening.

Common questions

Is a warm transfer always better than a cold transfer?

No. Warm transfer can preserve context and recover from failure, but it adds latency, cost, state, and operational complexity. Use it when the workflow benefits justify that complexity.

What context should the AI send to a human?

Send the minimum approved information needed to continue: reason, verified state, critical caller request, completed actions, pending actions, and relevant language or accessibility needs. Prefer structured facts over a full transcript dump.

Does a successful SIP response prove the handoff worked?

No. Verify participant connection, two-way media, human receipt of context, caller experience, and the final workflow state.

How should containment be measured?

Measure it beside task success, escalation correctness, caller effort, and outcome. High containment is harmful when the agent should have escalated.

Reference list

Sources

  1. LiveKit: Transfers overview
  2. LiveKit: Agent-assisted warm transfer
  3. LiveKit: Call forwarding
  4. Retell AI: Transfer call tool
  5. Retell AI: Call transfer node