Back to Insights
Product

When the Transfer Fails: Handing a Call to a Human

Every voice agent demo transfers to a human on the first try. Production is not a demo. The failure modes of a warm transfer, why silent fallbacks are worse than a refusal, and what to build instead.

J

Jesper Rietbergen

CEO/CTO, VoiceDock

Published July 30, 2026
10 min read

In every voice-agent demo the transfer works. The agent says "let me put you through to a colleague", a phone rings, a human answers, everyone nods. In production that sentence is a promise your system makes on your behalf, roughly a dozen times a day, to people who are already frustrated enough to ask for a human. What happens when the colleague does not pick up is the part nobody builds, and it is where voice deployments earn their worst reviews.

The transfer is a promise, not a feature

Escalation is the highest-stakes moment in an automated call. The caller has already decided the machine cannot help them. Whatever goodwill your agent has built is spent, and the only thing that matters now is whether the handover works. A transfer that fails badly is worse than an agent that never offered one, because you have converted "this bot could not help me" into "this company hung up on me".

That framing changes what you build. A transfer is not a tool call that returns success or failure. It is a small workflow with at least four possible endings, and every one of them needs a defined behaviour before you ship the first one.

Two mechanisms, and why the choice is not cosmetic

Underneath every "transfer to human" button there are two fundamentally different telephony operations, and most platforms expose one without telling you which.

Cold / blind transfer

SIP REFER: hand the call away

  • Your platform asks the carrier to re-point the call and then steps out.
  • Cheap: you stop paying for the leg the moment you let go.
  • Fire and forget, so there is no callback if it fails.
  • Everything after the handoff is invisible to you.
Warm / monitored transfer

Bridge: stay in the middle

  • Your platform dials a second leg and joins the two calls together.
  • You hold two legs for the duration, so it costs more.
  • You can wait for a real answer before committing the caller.
  • Duration, end reasons, recording and analysis all stay yours.

The vocabulary is worth pinning down, because vendors use it inconsistently. Most platforms call the REFER version a cold or blind transfer and the bridged version a warm transfer. Some reserve "warm" specifically for the case where the agent speaks to the colleague first before merging the caller in. What matters is not the word but the mechanism: ask whether your platform lets go of the call or stays in the middle of it, because everything in this article follows from that one answer.

The cost difference is real and it is why blind transfer is the common default. The visibility difference is also real, and it is why we bridge. When the escalation path is the part of the product most likely to embarrass you, paying to stay in the middle of it is a straightforward trade.

What blind transfer costs you in visibility

It is worth being concrete about what "we stepped out" means for your data. Once a REFER is accepted, the conversation continues without you in it.

blind-transfer.log
>> REFER  target: +31570238201
<< 202 Accepted
   [orchestrator] call handed off · session closed
   ─────────────────────────────────────────────
   after this point we know nothing:
   · did anyone answer?          unknown
   · did it reach voicemail?     unknown
   · how long did they talk?     unknown
   · was the caller helped?      unknown

Notice what disappears. Not just the recording, which you might not want anyway, but the answer to the only question that matters operationally: did this caller get helped? Your reporting will show a call that ended with reason "transferred" and will present that as a success. It is not a success. It is an unknown wearing a success label, and a month of those makes an escalation dashboard that cannot tell you your handover is broken.

monitored-transfer.log
>> INVITE target: +31570238201        (second leg)
<< 180 Ringing                        caller: on hold with us
   [wait] wait_until_answered · 20s budget
<< 200 OK                             answered at 6.1s
   [check] human speech detected on leg B ✓
   [bridge] caller ↔ agent bridged · 6.4s
   ─────────────────────────────────────────────
   still ours: duration, both end reasons,
   recording, transcript, end-of-call report

The bridged version keeps the same call as one record. The second leg has its own ringing, its own answer, its own end reason, and the caller was never committed to it until somebody was actually there.

What 'answered' actually means

Here is the failure mode that produces the worst caller experiences, and it is subtle enough that it survives testing. A carrier reports a call as answered when the far end picks up. Voicemail picks up. An out-of-hours PBX greeting picks up. A mobile that has been forwarded to a network mailbox picks up, in under two seconds, more reliably than any human ever will.

If your transfer logic commits the caller the instant it sees an answer, then the scenario you have engineered is this: a frustrated caller is handed to a voicemail box, hears a beep, and is either recorded talking to nobody or left in silence. Your logs say transferred. Your caller says nobody picked up. Both are true.

The requirement

Wait for an answer you have reason to trust

Waiting until answered is necessary but not sufficient. The useful condition is: a leg was answered, within a budget you set, and what answered looks like a person rather than a machine. Treat voicemail as a failure branch, not as a successful handover. It is the single most common cause of "the transfer worked, the customer disagrees".

Two more details matter while the caller waits. They need to hear something, because eight seconds of silence reads as a dropped call and they will hang up. And the wait needs a hard ceiling, because a caller listening to hold music with no end is strictly worse off than one who is told nobody is available and offered a callback.

Building a fallback chain that ends somewhere

Once you accept that a transfer attempt can fail for four distinct reasons, escalation stops being a destination and becomes an ordered list with a defined bottom. The bottom is the part that matters most, and it is the part usually left undefined.

escalation.conf
escalate:
  1  +31570238201   sales desk        wait 20s
     ├─ answered ....................... bridge, done
     ├─ busy / rejected ................ next
     ├─ no answer after 20s ............ next
     └─ answered by voicemail .......... next  ← the one everyone forgets

  2  +31612345678   duty phone        wait 15s
     └─ any failure .................... next

  3  fall back to the agent
     "I can't reach a colleague right now.
      Shall I have them call you back today?"
     → take the callback, confirm it out loud, write it to CRM

Three design rules make the difference between a chain and a maze. Keep it short: two targets and a graceful exit beats five targets, because every additional hop is more waiting for someone who is already unhappy. Budget the total, not each hop, so the whole escalation has a worst case you would be willing to explain to the caller. And make the final branch an actual outcome (a callback taken, confirmed out loud and written somewhere a human will see it) rather than an apology.

BranchWhat the caller should experienceWhat must be recorded
Answered by a personA short hand-off sentence, then the human. No repeated hold music.Which target answered, and after how long.
Busy or rejectedNo audible failure. Move to the next target within a second.The attempt and its cause code, so you can see a target that is always busy.
No answer within budgetReassurance once, then the next target or the exit.The elapsed wait, so you can tune the budget with evidence.
Answered by voicemailNever bridged. Treated exactly like no answer.That voicemail was detected. This is the number that tells you a target is broken.
Chain exhaustedA clear statement, an offered callback, and a confirmation of the details.The callback request itself, in a system a human checks.

There is one more branch worth naming, because it is invisible until it happens: the caller hangs up while waiting. That is not a transfer failure in the technical sense and it will not appear in an error count, but it is a lost customer and it should be measured as one.

Why a silent fallback is worse than a refusal

A fair amount of the voice-AI market sells automatic fallback as a quality feature: if a provider fails, the platform silently switches to another one and the call continues. It demos beautifully. We deliberately do not do it, and the transfer case is the clearest illustration of why.

A silent substitution keeps a call alive at the cost of making the system dishonest. If a transfer target cannot be reached and the platform quietly routes the caller somewhere else, or a voice provider fails mid-sentence and a different voice finishes it, you now have a call that behaved in a way nobody designed and no log explains. The next time you investigate a complaint, your own system is an unreliable narrator. In a regulated setting, or anywhere a call has consequences, that is not a saved call. It is an unfalsifiable one.

Failing closed means the opposite: when something required is not available, the system says so, in a sentence a caller can act on, and records the reason. That produces a slightly worse demo and a substantially more trustworthy product. The caller who is told "I cannot reach a colleague right now, shall I arrange a callback" has been served. The caller who was quietly connected to the wrong department has not, and neither have you.

Every fallback should be a decision you can point at afterwards. A fallback nobody can see is not resilience, it is a story your logs cannot tell.

The four numbers to put on a dashboard

Most teams measure whether transfers happened. That is the least informative of the available numbers. These four, per target, will tell you within a week whether your escalation path works.

  1. 01

    Answer rate per target, human answers only

    With voicemail excluded. A target sitting at forty percent has a staffing or routing problem that no prompt change will fix, and you will not see it if voicemail counts as answered.
  2. 02

    Time to human, measured from the agent's offer

    Not from the dial. The caller's experience starts when you promised them a colleague, and that is the number they would recognise.
  3. 03

    Exhaustion rate

    How often the whole chain runs out and the agent has to offer a callback. This is your true escalation failure rate, and it belongs in a weekly review rather than in a log.
  4. 04

    Abandonment during hold

    Callers who hang up while waiting to be connected. Technically not an error, practically the most expensive outcome on the list.

None of this requires a different model or a cleverer prompt. It requires treating the handover as a first-class part of the system, with branches, budgets and evidence, and a platform that will still be holding the call when you need to know what happened.

Sources Transfer mechanisms as defined in the SIP specifications: REFER in RFC 3515 and the call-control behaviour built on RFC 3261. The failure modes, the voicemail branch and the dashboard numbers come from running monitored transfers on production phone traffic.