Inbound queue SLA forecast + virtual callback gate
When a caller reaches an ACD queue, Orbit can forecast whether the wait they are about to accrue crosses the queue’s own service-level target — before the caller actually joins the line. A queue that opts this gate into suggest or block stops handing fresh hold to an already-breaching queue: supervisors get a cue, and callers get a callback offer right at the gate.
This page walks what the caller hears, what the supervisor sees, and how you turn it on. The sibling forecasted pre-suggestion page covers the advisory forecast for callers already waiting; this page covers the entry gate that decides whether a new caller joins at all.
The SLA target the forecast projects against
Every queue can carry a per-queue answer-within target, exposed as targetServiceLevelSeconds on the queue config (5–300, default 20). It is the same target the wallboard’s service-level metric and the voice-queues SLA-aging engine read — set it once and every surface uses the same bound.
The forecast uses the queue’s live inputs to estimate what a new entry would wait:
- Projected wait —
waiting callers × recent average handle time ÷ available agents. When no agents are staffed, projected wait is unbounded (worst posture).
- Head-of-line check — if the oldest waiter has already crossed the target, the queue is treated as already breached even if the position math looks fine, and a 0-waiting queue can still trip on the head’s unserved wait.
A queue with no targetServiceLevelSeconds set never forecasts — there is nothing to project against, and the gate stays completely out of the way.
Opt a queue in: suggest vs block
The queue picks its posture through the slaCallbackPolicy field on the queue config:
- Omitted (default) — fail-open. Entry always succeeds; nothing changes from today’s behavior.
suggest — the forecast still computes a suggest verdict, the caller joins the queue normally, and the supervisor surface flags “press 1 for a callback advised” for this queue tick. Useful when you want the supervisor cue without touching the caller path.
block — when the forecast says the queue is breaching, the entry is denied and the call is taken out of the queue and into the press-1 virtual-callback consent flow instead of accruing real hold.
The supervisor read-model and the live entry check run the same decision engine, so what the wallboard shows and what the caller hits cannot drift.
What the caller hears and the supervisor sees
For a queue on block:
- A new inbound call reaches the queue.
- The entry check computes the forecast from the live queue stats.
- If the forecast says the projected wait (or the head-of-line) breaches the SLA target, the check does not place the caller in the queue — it routes the call into the virtual-callback consent prompt (“press 1 to keep your place and get a callback”), the same press-1 flow a waiting caller triggers from inside the queue.
- The caller’s position is saved: when the callback fires, the platform’s callback dispatcher dials them back as if they had kept their spot — no fresh queue wait, no lost priority.
- Meanwhile the API response tells your call-control layer exactly why it was diverted (see the next section), and the supervisor surface shows the queue in
block posture with the same verdict.
On suggest, steps 3–4 don’t engage — the caller joins as normal and the supervisor’s advisory flag is the only visible difference.
The entry decision response
When a queue on block refuses an entry, the queue-entry endpoint answers 503 with a decision body you can branch on (this is the operator-readable contract — the upstream SBC/verb-builder can distinguish “SLA forecast block” from a plain depth-cap overflow):
slaCallbackBlocked — always true on this shape; marks the entry as diverted by the SLA gate, not the queue-depth cap.
slaThresholdSecs — the queue’s configured targetServiceLevelSeconds the forecast projected against.
projectedWaitSecs — the projected wait the caller was spared (position-based; unbounded when no agents are staffed).
overflowAction — callback, the path the gate drove.
queueId / callControlId — the queue and call identifiers for the diverted entry.
Dispatch safety guards
The blocked entry lands in the same virtual-callback dispatch path the in-queue press-1 escape uses, so every built-in guard that protects callbacks on Orbit applies to SLA-gated callbacks too:
- Emergency-dial guard — the dispatcher blocks callback targets that resolve to emergency short codes (911/112/…), so a saved callback number can never dial an emergency service.
- TCPA federal window — for +1 NANP numbers, callback dispatch honors the tenant-owned federal calling window configured in the compliance center; a callback that would place outside the window is held, not dialed.
These guard path lives on the platform’s own callback dispatcher — the same dispatcher that honors every press-1 opt-in — so SLA-gated callers get the same compliance posture as any other callback.
Turn it on: PATCH the queue config
Setting the gate is a partial queue update — only the fields you send change.
Before — the queue has no SLA forecast gate:
After — opt the queue into block so breaching queues stop compounding hold:
From this point, every new inbound call checks the forecast first; a breaching forecast diverts it to virtual callback with position saved, and your call-control surface sees the 503 + slaCallbackBlocked: true contract above.
block is a hard gate — a caller in the block posture never joins the queue line; they exit straight to the callback consent. If you only want the supervisor cue, prefer suggest, and take block only after the queue has its callback dispatch wired.
- Forecasted pre-suggestion + callback — the advisory sibling that pre-flags waiting queue heads with the press-1 offer before they breach (works alongside this gate).
- Voice queues guide — set up queues, membership, and the SLA-breach policy surface the forecast’s diagnostics ride on.
- Wallboard — the supervisor surface where the service-level metric, the queue forecast posture, and the “press 1” hint render.
- Wallboard alarm rules — route SLAbased alerts to webhooks while the forecast handles the entry path.