Documentation / Guides / Blind transfer
Perform a blind transfer¶
The consumer decides when and where to transfer. VAANI coordinates one bounded provider-neutral handoff and records the strongest disposition it can prove.
Configure named routes¶
transfer_policy = TransferPolicy(
enabled=True,
allowed_route_ids=("support-en", "support-hi"),
adapter_id="deployment-transfer",
)
Route IDs are safe, provider-neutral tokens. Do not use a phone number, SIP URI, credential, or vendor payload as a route ID. The deployment-owned transfer adapter maps the token to its protected destination.
Request from a tool¶
async def transfer_handler(context, arguments):
record = await context.request_transfer(
TransferRequest(
route_id=arguments["route"],
reason="caller requested a specialist",
)
)
return {"disposition": record.disposition.value}
The tool's arguments schema should enumerate or otherwise validate approved route tokens. Authorization remains consumer-owned.
Understand dispositions¶
| Disposition | Proven fact |
|---|---|
FAILED |
handoff failed |
TIMED_OUT |
no permitted terminal evidence arrived by the deadline |
ACCEPTED |
provider accepted the handoff; completion is not proven |
COMPLETED |
distinct typed completion evidence exists |
Do not display ACCEPTED as a completed transfer. An accepted/completed
transfer closes the VAANI conversation without an independent participant
hangup.
VAANI 1.0 models blind transfer only—not warm transfer, consultation, conference, or return-path behavior.
Next: production security or error taxonomy.