Per-digital-queue inbox SLA escalation policies
A digital queue’s SLA is a promise with a consequence attached. The promise lives on the queue: wait no longer than N seconds for an open conversation. The consequence: the moment the queue falls behind that promise, Orbit logs the breach, bells the supervisors you named, and posts the queue escalation webhook your paging tool subscribes to. This page is the map of that system for digital queues — WhatsApp, chat, email, social — the inbox-sided counterpart of the per-queue voice SLA pipeline. Two levels of inbox SLA exist and they answer different questions:- Workspace SLA policies (Inbox SLA timers) hang first-response, next-response, and resolution clocks on individual conversations and fire breach tiers as each clock crosses a percentage of its target. They answer: this conversation waited too long.
- Per-digital-queue escalation policies (this page) watch the queue as a whole: how many open conversations in it already breached, and how old the oldest still-open conversation is. They answer: this queue is stalling — page someone now.
The per-queue policy shape
The policy is stored per queue and resolves against the queue’s own SLA target — the same target the supervisor wallboard and queue stats render. Four gates and two routes:
The route is chosen between the single-shot action and the escalation ladder:
breachAction— the one-shot response when no ladder is configured:notify_supervisors(org admins see a bell/email notification),page_supervisor(the outbound tenant webhook your paging tool subscribes to),both, ornone(record-only — the breach event is still logged).escalationSteps[]— the ladder, up to 20 rungs. Once any rung exists the ladder wins and the single-shot action is ignored — the same supersession rule the voice ladder and the workspace SLA tiers use. Rungs atdelayMinutesAfterBreach: 0fire the instant the scan records a breach; delayed rungs are fired afterward by the scheduled executor while the queue still hasn’t recovered. Step actions reuse the workspace breach-action vocabulary —notify,reassign,slack_alert,slack_webhook,teams_webhook,webhook,none— so a supervisor who already runs conversation-level SLA tiers is composing the same building blocks against a queue clock.
Scan and events API
Digital messaging has no per-call aggregation to server-side, so the queue-scan model runs on a caller-measured snapshot: your monitoring loop reads the queue’s live counters and posts them atPOST /api/v1/inbox/digital-queues/{queueId}/sla-escalation/scan; the server resolves the stored policy for that queue and evaluates the snapshot against it. An unknown queue or a queue with no policy returns a no-op verdict rather than an error.
conversation.queue_sla_escalation tenant webhook. The response says what actually happened — breached, event_logged, cooldown_active, and the alert_fired list — so a caller driving the scan can distinguish “breached and paged” from “breached but inside cooldown” without re-reading the log.
The event log is the audit half:
GET .../sla-escalation/events returns the newest-first log (up to 200 entries retained per queue, 100 per request): the queue’s SLA seconds in force, the breached-conversation count and oldest wait at the time, the effective route (escalation_ladder or the single action verb), and the surfaces that actually fired. That last field records what the ladder did, not what it was configured to do — the same audit discipline as the voice breach log. Subscribe to the same breach stream outbound through the conversation.queue_sla_escalation tenant webhook described in the webhook event reference.
Configure the policy from the dashboard
The same endpoints back the policy editor under Inbox → Settings → Digital queues → ‹queue› → SLA escalation policy. The dialog exposes exactly what the API stores:- Enable the policy and set the gates. The master switch, the breached-conversation severity floor, the oldest-wait buffer in seconds, and the cooldown. The wait gate is always “the queue’s own SLA seconds plus this buffer,” so edit the queue’s SLA target in the queue form and use the buffer here only to raise the gate — never to lower it.
- Pick the single action, or add rungs to the ladder. The breach-action dropdown carries the four one-shot verbs; Add step opens a ladder rung with its action, optional config (webhook URL, supervisor user ids), and delay in minutes. The dialog states the supersession rule inline: when any rung exists, the ladder takes over from the single-shot action.
- Read the breach history in place. The same dialog’s events table renders the newest-first log — timestamp, live counters, effective action, surfaces fired — so a policy change and its evidence sit on one screen.
DELETE, or disabling and saving) returns the queue to record-only silence.
End to end: a WhatsApp support queue
The WhatsApp support queue, doing the work: a 120-second queue SLA, a severity floor of two breached conversations, a 5-minute cooldown, and a two-rung ladder — notify the shift lead immediately, then page the senior team if nothing recovers.- Steady state. The queue answers inside 120s. Your monitoring tick posts
breachedConversations: 0, oldestWaitSeconds: 45— no breach, a no-op, nothing logged. - The surge starts. A campaign lands and four conversations stack up; the oldest is 260 seconds old. The next scan posts
breachedConversations: 4, oldestWaitSeconds: 260— the wait gate (120 + 60 = 180s) trips and the severity floor (2) is met. The cooldown is clear, so the scan appends the breach, bells the shift lead (rung 1, delay 0), and posts theconversation.queue_sla_escalationwebhook with the snapshot numbers. The event log recordsescalation_ladderas the route and["bell", "webhook"]as the surfaces fired. - The repeat tick does nothing. Your loop scans again a minute later — same breach, but
cooldown_active: truecomes back and no second page goes out. One breach pages once. - Nobody fixes it for 15 minutes. The backlog is still deep, so the scheduled executor fires rung 2: the senior team’s paging endpoint receives the escalation webhook, and a supervisor reassigns two agents onto the queue.
- Recovery. The wait collapses back under the gate; the scans turn to no-ops again. The breach log holds the full record for the QA review — observed counters, the route, and exactly which surfaces fired.
See also
- Inbox SLA timers — the workspace SLA engine: conversation-level first-response and resolution clocks, breach tiers, and acknowledgement.
- Per-queue SLA breach alerting and escalation policies (voice) — the voice sibling; the two pages share the action vocabulary and the ladder-wins rule, and differ in windows (voice evaluates percentage-over-window call aggregates; digital queues evaluate single-sample backlog gates).
- List digital ACD queues — queue CRUD and live queue stats the scan snapshot draws from.
- Webhook events — the
conversation.queue_sla_escalationoutbound webhook payload your paging tool consumes.