Sooner or later a caller needs a person. A voice agent can hand the call over in two ways, choose between several destinations based on what the call turned out to be about, and — if you use the duty roster — reach whoever is actually working right now instead of a number that was right when the agent was built.
agents:voice:manage permission.Both are tools you enable on the Tools tab. The agent decides which to use from your instructions, so enable the one you want it to use — or both, and tell it when each applies.
sequenceDiagram
participant C as Caller
participant A as Voice agent
participant H as Your team member
Note over C,A: Warm transfer
A->>C: "Let me get someone — one moment"
A->>C: Hold music
A->>H: Dials, then briefs: who is waiting and why
A->>C: Bridges caller and human
Note over C,A: Cold transfer
A->>C: "I'm putting you through now"
A->>H: Forwards immediately, agent leaves
Warm transfer (transfer_call) puts the caller on hold with music, calls
the human, tells them who is waiting and what the call is about, and only then
connects the two. The human walks into a conversation already in progress
instead of starting over. If the destination does not answer, or answers with
voicemail, the agent falls back to the next destination rather than dumping
the caller.
Use it for anything where context matters — support escalations, a qualified lead, a complaint, anything the caller has already explained once.
Cold transfer (cold_transfer) forwards immediately and leaves. Faster,
no hold music, no briefing.
Use it when the destination does not need context: a main switchboard, a department that will ask its own questions, a caller who explicitly asked for extension 204.
Both tools exist so the agent can pick. Say in your instructions which situations call for which — "warm transfer anything a customer has already described; cold transfer a caller who asks for a specific person by name" is a good default.
Telephony tab → Call Forwarding ("Specify forwarders for conditional call routing").
The Condition field is the part that decides whether this works. Write conditions that are mutually exclusive and phrased the way your instructions phrase the same situations:
| Forward Number | Condition |
|---|---|
| +1 555 0142 | Billing, invoices, refunds, payment problems |
| +1 555 0143 | Technical faults where the customer has already tried the basic steps |
| +1 555 0100 | Anything else, or the caller asks for a person without saying why |
Avoid conditions that overlap ("urgent issues" and "technical issues" will both match the same call) and avoid conditions that depend on information the agent has no way to know.
Always include a catch-all row. A caller who needs a human and matches none of your conditions is the worst outcome on this page.
Telephony tab → Call Forwarding → Use On-Duty Roster for Transfers (off by default).
When it is on, the people currently on duty — those whose duty record allows accepting transfers — are tried ahead of the forwarders below, and the agent is given the cascade rules for working down the list. Your forwarders stay as the fallback.
Turn it on when who answers depends on the day or the shift, and off when a destination is a department rather than a person.
It requires a configured duty schedule: Agents → Workflows → Duty Schedule. With nothing scheduled, the switch has nothing to route to and the agent falls through to the forwarders.
Two more tools on the Tools tab work with the same schedule and are worth enabling together:
duty-check — looks up who is on duty, so the agent can tell the
caller who will call them back, or decide whether escalating is even
possible right now.duty_notify / duty-notify-confirm — email and text the on-duty
person about this call, with a fallback to the configured default contact.
This is the answer to "nobody can take the call right now": the agent takes
the details and the right person is notified rather than the caller being
told to try later.Full reference: Duty Schedule — Voice Agent Tools.
The tools and the numbers are the easy half. What decides whether transfers feel good is the instructions:
duty_notify? Offer a callback? Both? The fallback should be your decision,
not an improvisation.If a destination is behind an IVR or an extension, enable send-dtmf on
the Tools tab — it lets the agent press keypad tones to navigate a menu or
dial an extension. Outbound calls can also dial an extension automatically
after the callee answers. See
Placing Outbound Calls.
transfer_call (or cold_transfer) is
ticked on the Tools tab, that at least one forwarder exists, and that
the instructions actually tell the agent to use it.transfer_call and say which situations warrant it.