Enable warm transfer
Configure your template so the LLM can hand an active call off to a human agent — works across Twilio, Plivo, and Exotel.
Warm transfer bridges the customer from the AI agent to a live human without dropping the call. The LLM triggers it by calling a built-in function; provider mechanics differ but the template-side config is identical.
Prerequisites
- A working telephony integration — see Twilio, Plivo, or Exotel.
- A phone number for the human agent (E.164 format).
- A node in your template where transfer is sensible (e.g., “escalate” or “speak to an agent”).
- Familiarity with global functions.
Steps
1. Add the transfer number to the template config
{
"configurations": {
"transfer_number": "+14155551234"
}
}Without transfer_number, the built-in transfer function returns an error and the AI keeps talking.
2. Expose the built-in function to the LLM
The connect_to_live_agent function is a built-in global function. Add it to your template’s global_functions so every node can call it:
{
"flow": {
"global_functions": [
{
"name": "connect_to_live_agent",
"type": "builtin",
"description": "Transfer the caller to a human agent. Call this when the user asks for a human or when you cannot help."
}
]
}
}Description matters — the LLM uses it to decide when to call. Be specific.
3. Test
Push a lead, get on the call, and ask “can I speak to a human?“. The bot should call the function; the provider bridges the agent in.
Provider differences
| Provider | Mechanism | Audio gap |
|---|---|---|
| Twilio | Conference API — customer placed in conference, agent dialed in, AI disconnects | Minimal |
| Plivo | calls.transfer() redirects customer to /dial-up webhook, which dials the agent | Brief hold tone |
| Exotel | Applet flow — AI disconnects, Applet calls /dial-up, Exotel bridges | Brief silence |
The template config is the same across providers. Switch providers by changing calling_provider in the call execution config; no template changes needed.
What happens on failure
If the provider call to bridge the agent fails (busy, no answer, network error):
- The AI is notified via a function error.
- The conversation continues — the AI resumes.
- The AI can offer a callback, try again, or continue helping.
Failed transfers never end the call silently.
Missing transfer_number
If the LLM calls connect_to_live_agent but transfer_number is missing from the config, the function returns an error immediately and the AI keeps the conversation going. Monitor for this in traces — it usually means a partially-migrated template.