dequeueRemove from queue
Pulls the caller out of the queue they're waiting in — the dispatcher stops offering the call to agents and the run's queue bookkeeping is cleared. The fl…
type: dequeue status: stable sinceVersion: 0.1.0 seeAlso: [enqueue, wait, requestAgent, voicemail] keywords: ["dequeue", "remove", "leave", "abandon", "call", "queue", "routing"]
What it does
Removes the caller from the queue they joined with an enqueue node. It
marks the call's queue_entries row ended so the dispatcher stops offering
the call to agents, clears the run's queueId / queueEntryId bookkeeping,
then auto-advances along its outgoing transition. It is a pure state change —
it does not touch the caller's audio, so the flow keeps running into
whatever you wire next (almost always voicemail).
This is the explicit "stop waiting" hand-off. The queue model is
fire-and-forget: enqueue parks a row and the flow itself owns everything
the caller hears while waiting, so the flow also owns the decision to give
up. dequeue is how the flow tells the dispatcher "this caller is done
waiting."
When to use it
- Build a max-wait-then-voicemail pattern:
enqueue→playAudio(loop) →wait 600→dequeue→voicemail. Thewaitfires its fallback after ten minutes,dequeuepulls the entry, and the caller rolls to voicemail. - Offer a caller an escape mid-wait: a
gatherDigits"press 1 to leave a message" branch that routes todequeue→voicemail. - Pull a caller out of one queue before re-routing them into another tier.
Configuration
Pulls the caller out of the queue they're waiting in — the dispatcher stops offering the call to agents and the run's queue bookkeeping is cleared. The flow then continues to the next node (typically voicemail). Pair it with a wait node for a max-wait-then-voicemail pattern: enqueue → playAudio (loop) → wait → dequeue → voicemail. No-op if the caller isn't currently in a queue.
This node has no configurable fields.
Outgoing events: __next
Examples
Max-wait, then leave the queue for voicemail
{
"id": "wait-10m",
"type": "wait",
"config": { "durationSecs": 600 },
"on": { "wait.elapsed": "leave-queue", "call.bridged": "end", "call.hangup": "end" }
}
{
"id": "leave-queue",
"type": "dequeue",
"config": {},
"on": { "__next": "voicemail" }
}
Gotchas
dequeuedoes not end the call. It only removes the queue entry and advances. Wire its output to the next node (voicemail, a goodbyesay+hangup, or a different queue). Adequeuewith nothing wired after it falls through to the end of the flow.- It's a no-op if the caller isn't queued. With no
queueEntryIdon the run (the caller never hit anenqueue, or was already dequeued/bridged) the node simply advances. Safe to leave in a shared fallback path. - Bridging already cleans up. When an agent answers, the bridge path
marks the entry taken — you do NOT need a
dequeueon the answered branch.dequeueis only for the give-up / abandon path.
