Expand description
Warm handoff — transfer the conversation to a human with its context intact.
The single UX bar for an escalation is that the person picking up never asks the caller to repeat themselves. What the receiving desk needs is not the raw session but a compact, serializable packet: who is calling, what has been said, what the governed flow has established, and — when a summarizer is available — two sentences of “what they want and what was already tried”.
HandoffRecorder accumulates the final transcripts as the call runs
(redacted upstream when
redaction is installed, so a packet
can never leak what the router already scrubbed). HandoffPacket is
the snapshot the connector delivers however its platform wants —
a screen-pop payload, SIP headers, a CRM note. Assembly is transport-
agnostic by design; delivering it is the connector’s job.
let recorder = HandoffRecorder::attach(&handle, 40);
// … the call runs; escalation triggers …
let mut packet = recorder.packet(&handle, &["telephony:caller", "intent", "verified"]);
packet.summarize(&*flash_llm).await.ok(); // optional 2–3 sentence summary
let json = serde_json::to_string(&packet)?; // hand this to the agent desktopStructs§
- Handoff
Flow Status - The flow’s standing at the moment of handoff.
- Handoff
Packet - The context packet handed to the receiving human.
- Handoff
Recorder - Accumulates the conversation as it happens, so a packet can be assembled at any moment without asking the caller to wait.
- Handoff
Turn - One finalized turn of the conversation.