Skip to content
Routingdequeue

Remove 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: enqueueplayAudio (loop) → wait 600dequeuevoicemail. The wait fires its fallback after ten minutes, dequeue pulls 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 to dequeuevoicemail.
  • 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

  • dequeue does not end the call. It only removes the queue entry and advances. Wire its output to the next node (voicemail, a goodbye say + hangup, or a different queue). A dequeue with 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 queueEntryId on the run (the caller never hit an enqueue, 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 dequeue on the answered branch. dequeue is only for the give-up / abandon path.