Transfer a live call: blind, warm, and queue handoffs
Use a live-call transfer when the current agent should hand the caller to a better destination without ending the conversation. Devotel Orbit supports three transfer modes from the live call surface:- Blind: send the caller directly to a number, extension, or SIP target.
- Warm (attended): call the destination first, brief the recipient, then bridge the caller only after the recipient is ready.
- Queue: return the caller to a tenant-owned ACD queue so its dispatcher can match the next available agent.
voice:write scope and a call id for an active
call.
1. Choose the transfer mode
Choose the least disruptive handoff that still gives the next person enough context.
The tenant’s Voice → Transfer restrictions policy is applied before the
call is redirected. It can limit destination kinds and specific extensions or
queues. A destination that is valid in format can still be rejected by policy;
see Troubleshooting: transfer target restricted.
2. Blind transfer
A blind transfer closes the current agent leg and sends the active call to the target. The target receives no private introduction from the current agent.API request
CallPOST /api/v1/voice/calls/{id}/transfer with type: "blind" and an
optional transfer_reason:
cURL
type is the API field for the blind mode. If omitted, the transfer body uses
the blind shape for backwards-compatible callers. to is validated by
transferTargetSchema and accepts:
- An E.164 telephone number such as
+14155557890. - An on-net extension such as
1001when the tenant has that extension. - An allowed
sip:orsips:target such assip:alice@example.net.
sip: or sips: scheme, a URL, or an arbitrary display string.
Handle 422 and policy failures
A422 means the request body or target did not satisfy the transfer contract.
Check these items before retrying:
- Use
type: "blind", a non-emptyto, and a validtransfer_reasonwhen you include one. - Use E.164 for a telephone number. Do not send a national-format number.
- For SIP, include the complete
sip:orsips:URI. A raw value such asalice@example.netis rejected. - Confirm that the extension, SIP destination, or queue is permitted by the tenant’s transfer-restrictions policy. A policy denial may be returned as a target-restricted error rather than a validation error.
- Confirm that the call is still active. A completed or already-transferred call cannot be redirected again.
3. Warm transfer lifecycle
A warm transfer creates a consultation leg while the original caller remains protected from the conversation with the recipient. The current agent can explain the caller’s need, complete the bridge, or cancel and return to the caller.Start the consultation
Call:destination, consultFirst, and optional context fields:
destination accepts the same E.164, extension, and permitted SIP target
shapes as a blind transfer. Set consultFirst to true for the normal
attended flow. contextWhisper: true enables the context whisper; provide
context for a custom message of up to 220 characters. If you omit the custom
text, Orbit can generate the whisper from the available call context.
While the consultation leg is being established, the original caller is held.
The hold treatment uses the tenant’s warm-transfer music-on-hold asset when one
is configured (warm-transfer-moh); otherwise the configured tenant fallback
is used. The hold asset is tenant-owned and does not change the destination’s
transfer policy.
Complete or cancel
When the recipient answers and is ready, bridge the caller with:Softphone click-through
- Open the active call and select Transfer.
- Choose Warm / attended rather than Blind.
- Select an extension or enter an allowed E.164 or SIP destination.
- Turn on Context whisper if the recipient should hear an introduction. Edit the message if the automatically generated context is not sufficient.
- Click Start consultation. The caller is held while the destination rings.
- Speak privately with the recipient. Click Complete transfer when they accept the call.
- Click Cancel transfer if they decline or do not answer. The caller returns to the original agent.
4. Transfer to a queue
Use a queue transfer when the next agent should be selected by skills, availability, priority, and the queue’s overflow policy rather than by one specific target. The queue must belong to the same tenant as the live call. Call the common transfer endpoint with the queue shape:cURL
transferCallToQueue validates the queue’s tenant ownership, re-enters the
call into that queue’s dispatcher, and applies the optional priority and skill
requirements. Queue SLA counters then measure the caller’s wait against the
target queue’s service-level settings. The queue’s normal maximum wait and
overflow action still apply, so configure voicemail, another queue, or hangup
before using queue transfer in production.
A queue transfer is not a park operation. It does not leave the caller in a
numbered park slot and the caller never hears park-lobby hold music in the
middle of the handoff. If the queue later puts the caller on hold, the queue’s
own tenant-configured announcements and hold treatment apply.
Worked example: IVR overflow
An IVR first sends billing callers toqueue_billing. When that queue reaches
its configured overflow threshold, the flow can transfer the active call to
queue_general:
queue_general. Keep the queue’s SLA and
overflow settings aligned with the IVR’s promise to the caller; transferring
to a queue does not reset the need to monitor wait time and abandonment.
5. Transfer to voicemail
Use voicemail when a live conversation is no longer needed and the caller should leave a message for a tenant-owned mailbox. In the dashboard, choose Transfer → Voicemail, select the mailbox, and confirm the handoff. The voicemail destination is terminal for that live call: the caller records a message and the agent’s leg is released. Set the mailbox greeting, notification recipients, retention, and transcription controls in the tenant’s Voice voicemail settings. If the caller needs an agent, use a queue or warm transfer instead; voicemail does not create a consultation leg or preserve a live bridge.6. Record the transfer reason
transfer_reason is optional on blind, warm, and queue transfers. When present,
it must be one of these values:
Orbit stores the latest value at
call_logs.metadata.transfer_reason and
appends each transfer event to call_logs.metadata.transfer_history[]. The
history is append-only, so a call that moves from an IVR overflow to a
specialist retains both events. Read the call detail or your tenant’s call-log
export after the call ends to reconcile the history.
A simple Transfers by Reason report groups completed transfer events by the
stored reason rather than inferring intent from the destination:
7. Webhooks and retries
Subscribe your tenant’s event destination to observe transfer outcomes. A successful attended handoff emitswarm-transfer-completed after the bridge
has completed. The event includes the call id, transfer type, original and
consultation call-control ids, transfer reason when supplied, and completion
timestamp. A consumer can use the call id plus event id as its idempotency key
and then fetch the call record for the authoritative transfer_history[].
A representative payload is:
8. TCPA and FCC consent on transferred calls
A transfer does not erase consent or create a new permission to contact the caller. Keep the following controls tenant-owned:- Preserve the consent record and its purpose when a call moves between agents, queues, or a voicemail box.
- Keep automated outreach, recording announcements, quiet hours, and do-not-call handling enabled for the tenant’s configured policy.
- For a warm transfer, tell the recipient what the caller consented to and avoid adding an automated or recorded message that the original consent does not cover.
- Do not infer consent from a successful transfer, an answered consult leg, or a caller’s presence in a queue.
Troubleshooting checklist
- 422 on
to: use E.164, a completesip:/sips:URI, or an existing extension. Remove URL syntax and national-format numbers. - Target restricted: review the tenant’s transfer-restrictions policy and choose a permitted destination.
- Warm transfer has no consult leg: wait for the start response before enabling Complete or Cancel; retain the returned call-control ids.
- Caller returns to the agent unexpectedly: inspect the consultation result and cancel/timeout state before retrying.
- Queue transfer is rejected: verify the queue id belongs to the same tenant, then check queue membership, skills, SLA, and overflow settings.
- Analytics count is low: read
metadata.transfer_history[]as events and do not count only the latestmetadata.transfer_reasonvalue.