Call park and the lobby: the slot aliasing model
A call is parked when it is put into one of the tenant’s nine shared slots and left for any operator to claim. This page defines that model — what parked, held, and transferred mean, why slot numbers are the lobby’s public aliases, which consoles render the lobby, and how park interacts with conferences and hand-offs — so the Parked Calls lobby guide stays a thin procedure surface. Read this before you brief a new floor on park-versus-queue-versus-transfer, or wire a client against/api/v1/voice/park. The full step-by-step flows
live in the guide; the PARK_… error codes live in the
voice call park troubleshooting catalog.
Park is a softswitch control-plane operation on an already-answered call
leg — no outbound origination. Over the product’s termination paths,
origination defaults to the Devotel softswitch and a tenant-configured
trunk is allowed; none of that matters here, because park never originates
at all.
1. Parked vs held vs transferred
Operators use three verbs loosely; the platform treats them as three distinct models.
Choose the model deliberately:
- Hold keeps the waiting private to the holder. Two colliding retrievals on the same numbered alias become a race; every later attempt is rejected rather than race-resolved.
- Park publishes the waiting caller to the floor and trades control for reachability — anyone can claim the slot, audit-logged per claim.
- Transfer addresses exactly one destination. When the destination is not “next free person,” a transfer is the right primitive; when it is, a directed transfer stops retries at the wrong desk.
2. Park-slot aliasing — deterministic names for the lobby
The tenant’s lobby is nine shared slots, numbered 1 through 9 — the same digits a desk phone dials with*N to retrieve. The (slot, occupant)
pair is the coordination contract: “Billing is on 4” is a well-defined
alias the whole floor resolves identically.
The alias is deterministic because anyone can map “slot N” to exactly one
occupant at a time, and a park that omits the slot auto-picks the lowest
free number in one transaction. Deliberately named slots and auto-picked
slots mix freely; 409 PARK_SLOT_OCCUPIED fires only on a named-slot
collision and names the occupant, the parked-at time, and the caller, so
the operator re-parks elsewhere instead of blind-retrying. Auto-pick is
collision-free by construction — it claims a free slot atomically.
Three rules keep the aliases honest:
- Auto-pick is the default. Leave the slot blank and share “lowest free” muscle memory — the digits mean “next free slot,” not “my slot.”
- Named slots are for deliberate placement. When a receptionist says “Santos on 4,” the number is the message — pick the slot explicitly.
- Release frees the same alias. The slot is reusable immediately;
an occupant’s
park_…id is never the public handle — the number is.
owner / admin / developer / agent) sees the
final authority as the tenant’s audit trail; PII-bearing rows make the
guard server-side, not cosmetic.
3. Which consoles surface parked calls
Two first-party surfaces render the lobby; both read the same/api/v1/voice/park surface and poll it every ten seconds.
- Voice → Parked Calls — the dedicated lobby page. Its shell
(
apps/web/src/app/[locale]/(dashboard)/voice/park/page.tsxmounts the clientparked-calls-content.tsx) carries the four park endpoints (list, park, retrieve, release) under one role guard, because parked rows show caller PII. This is the operator-grade surface: rows show the slot alias, the caller’s E.164 number and name, and a live “parked for” counter. - Attendant Console — the four-panel operator workspace with the shared lobby as one panel (attendant console guide). Parked rows land here alongside extensions and ring groups, so a receptionist never leaves the workspace to claim a slot.
*N on any
registered device) — the lobby’s numeric aliases work outside the
browser too. Viewer and observer roles see nothing — the lobby list is
gated server-side, not hidden by the UI.
4. How park works with conferences and hand-off
Park is single-leg holding; a conference is multi-leg bridging, and a warm transfer is an announcement step. Each maps to one leg of the floor’s hand-off lifecycle.- Into a conference: a warm conference bridge announces the caller to the specialist before joining. A parked call can supply that leg — the retriever hears the party piece before the slot frees. Pure park has no announcement step; warm-transfer tooling composes the two.
- Out of a conference: a conference leg parked frees the conference to shrink; the lobby keeps the held leg visible while the conference runs. A blind flip out of conference is the call-flip console path for directed hand-offs.
- Park or transfer? If the next handler is “anyone free,” park; if it is a named person or extension, transfer. The queue alternative is for inbound volume never parked at all (see the guide’s “When NOT to use park” section).
5. Failure modes — recall, expiry, and supervised takeover
The lobby’s failure modes live on the queue’s two tenant limits (mirrored by the expiry update) — plus the supervisor path for bell calls:- Recall (recall ringback): after the queue’s recall window (30s default) the parking operator’s softphone rings back via SSE — “your parked call still waits.” Recall is a prompt, not an expire; the slot remains claimed until action or expiry.
- Expiry (hard cap): after the queue’s max park limit (300s default)
the slot auto-releases with
releaseReason='timeout'. A hangup webhook against the parked leg clears the slot in milliseconds; the sweeper is the backstop for silent disconnects. - Supervised takeover: the supervisor’s live-monitoring console (guide) offers listen/whisper/barge/takeover on live calls; a parked call belongs to the parking claim, not the supervisor — handle lobby reclaim with retrieve/release, and treat barge or takeover as supervision. Audit the claim either way.
PARK_… code to a fix.
See also
- Parked calls lobby guide — the step-by-step flow, worked envelopes, and the role guard
- Voice call park troubleshooting — the
PARK_…error catalog and slot-state diagnosis - The ACD queue model — dispatch and overflow for the queue alternative
- Inbound voice routing — where a call lands before an operator parks it
- Attendant console guide — the four-panel lobby surface