How-to

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

config-transfer.json
json
{
  "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:

template-global-functions.json
json
{
  "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

ProviderMechanismAudio gap
TwilioConference API — customer placed in conference, agent dialed in, AI disconnectsMinimal
Plivocalls.transfer() redirects customer to /dial-up webhook, which dials the agentBrief hold tone
ExotelApplet flow — AI disconnects, Applet calls /dial-up, Exotel bridgesBrief 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.

Next steps

Was this helpful?