Transfer to a human
Hand a live call to a person, and the destination rules Skysay enforces before it will.
transfer_to_human is a built-in tool your AI agent can invoke mid-call to
hand the caller to a person. You enable it on the agent and give it one
destination number; the agent proposes when to use it. The caller must approve
the read-back before the destination is dialed. See
Confirming business actions.
Eleven Realtime cannot use Transfer to human yet. Choose another
conversation engine for live human transfer. An AI agent configured with
transfer_to_human or cancel_transfer cannot be switched to Eleven Realtime,
published on it or started on it. An explicitly configured callback
request remains available; it does not connect a live transfer.
With Eleven Realtime, while an action runs, the agent cannot hear or answer the caller. Speech during that wait is absent from the transcript; the caller must repeat it after the action finishes. Speaking cannot stop an action that is already running. Interruptions work during normal speech.
Configure the destination
{
"type": "builtin",
"name": "transfer_to_human",
"phone_number": "+12025550100"
}phone_number is required whenever the tool is enabled, and must be full
E.164 — a leading +, then the country code. A blank, partial, or
non-dialable number is rejected when you create or update the agent, so a
misconfigured transfer surfaces at save time instead of failing in front of a
caller.
Note that a bare national number is not accepted even when it looks
unambiguous: 2025550100 is not the same request as +12025550100, and
guessing a country code on your behalf is how a call ends up dialing a real
number in a different country.
When the agent decides to transfer
There is no fixed rule, hour, or condition that triggers a transfer. The agent calls the tool from its instructions and the conversation so far. By default Skysay tells it to ask first:
- It transfers when the caller asks for a person ("Can I speak to someone?"), straight away, without asking them to confirm.
- Otherwise it may offer a transfer ("Would you like me to connect you to a colleague?") and transfers only once the caller says yes. If something is beyond what the agent can do, it says so and offers the transfer instead of guessing.
- If the caller declines, the agent keeps helping, or offers to save a callback.
That default is a starting point, not a lock. The way you steer transfers is the agent's own prompt: if you want a transfer at once for emergencies, only for billing disputes, or only after the caller asks twice, say so in the instructions.
The caller's request is the confirmation. When the caller asks to speak to someone, or says yes after the agent offers to connect them, the agent transfers straight away. It does not read the destination back or ask a second yes-or-no question.
The tool takes an optional reason, which the agent supplies to describe why
it handed the call over.
If the caller changes their mind
The agent stays on the line while the person's phone rings, and the caller can
still stop the transfer. Enabling transfer_to_human also gives the agent a
second built-in, cancel_transfer (shown as Cancel a transfer in progress,
added with the transfer). When the caller says "no, don't transfer me" during
the ring, the agent calls it: the ringing phone stops before anyone answers,
nobody is connected, and the agent tells the caller the transfer is off only
after it has really stopped. The conversation then carries on with the agent.
Only the caller can call it off: Skysay stops a transfer only when the caller has started speaking since it began. If the agent tries to cancel with the caller silent, or because the caller repeated their request, the phone keeps ringing and the agent tells the caller it is still trying.
Once the person has answered and the two of them are connected, a transfer can no longer be cancelled.
Each call tries to reach a person once. After a transfer that was called off, the agent cannot transfer again on that call; it offers to save a callback instead.
Transfers are policy-gated
Every transfer passes your workspace's outbound policy gate, with the destination's country resolved from the number itself. A blocked destination is refused even when the agent asks for it. See Policy & outbound.
In a workflow
An AI agent with a workflow does not decide on its
own: an Action using transfer_to_human reads back this same destination,
waits for an explicit yes, and then permits one dial attempt per call through
the same policy gate. See
Transfer steps.
What the tool reports back
A connecting result means the dial was requested; it does not mean a person
answered. Treat it as "the handoff was started". In a workflow, the Action
first returns the pending action and its read-back, and after the caller's yes
the workflow waits for the actual dial outcome. Read
call evidence for what actually happened on the
call.
Skysay records how each call's transfer ended:
| Outcome | Meaning |
|---|---|
answered | The person picked up and the caller was connected to them. |
no_answer, busy, rejected | The person did not pick up, the line was busy, or the call was declined. The caller stays with the agent. |
failed | The transfer could not be placed. The caller stays with the agent. |
caller_cancelled | The caller changed their mind while it rang, and the agent stopped it. Nobody was connected. |
caller_hangup | The caller hung up before anyone was connected. |
outcome_unknown | The call ended before the outcome was reported. |
Only failed, rejected, busy, no_answer and outcome_unknown count as a
transfer that went wrong in why calls fail; a caller
who withdrew the transfer or hung up first is not a failed handoff.