Skip to main content

Work the Parked Calls lobby

Call park is the classic operator hand-off: put a live caller into a numbered slot, tell a teammate which slot to pick up, and they retrieve the call from their own phone. The Parked Calls page under Voice is the shared lobby where every operator sees the live parked calls, with a retrieve and a release action on each row. Park is one of four control-plane endpoints over the tenant’s voice API. Use it when a call must move between people or devices without a conference bridge — the caller hears hold music, the first retrieval at any phone wins, and the slot frees for the next hand-off.

1. Park slots and the four endpoints

Your organization gets nine shared slots, numbered 1 through 9. A park puts one live call on one slot; the caller hears hold music until someone retrieves the slot or the call hangs up. Retrieve and release are one-stroke claims — the first succeeds and every later attempt returns a clear error instead of a race. Two operators parking into the same slot within milliseconds resolve through a single occupancy check — the first succeeds, the second receives a 409 PARK_SLOT_OCCUPIED with the occupant’s slot, caller, and elapsed time. The PARK_… error codes are mapped to fixes in Troubleshooting: voice call park orbit.

2. Who can act on a parked call

Parked rows carry the caller’s number and display name — a PII-bearing surface. The lobby and every control-plane action are restricted to owner, admin, developer, and agent roles (the dashboard page mounts a role guard showing the role you need; the API routes enforce the same guard server-side). Viewer and observer roles see nothing on the lobby. If you only expect to supervise, take the read path: the GET list is a read guard, so a role with read-only permission on parked calls still cannot park, retrieve, or release.
Every park, retrieve, and release writes an audit event with the operator, the slot, and the caller’s E.164 number. The audit log is the record of who claimed a held caller.

3. Park from the active call, retrieve from the lobby

Parking starts on the active-call surface; the lobby is where the row lands.
  1. Answer the caller from the browser softphone or your registered device. The active-call surface shows a Park action.
  2. Click Park. The softphone sends POST /api/v1/voice/park with the call SID and auto-picks the lowest free slot — the toast naming the slot number (for example “Call parked — slot 3”) is the confirmation. To place a specific slot, the same call carries a slot field when you pick one explicitly.
  3. Open Voice → Parked Calls. The new row appears within one poll cycle (the list refreshes every ten seconds) with the slot number, the caller’s number and name, and a live “parked for” counter.
  4. Any teammate retrieves the caller by clicking Retrieve on the row — or by dialing *N for the slot number on any registered device. The first retrieval wins; the row drops off every operator’s lobby on the next poll.
Releasing a stray parked call. When a caller should never have been parked, or a row will not be picked up, click the release (circle-x) action and confirm. Release is destructive and cannot be undone — it frees the slot and drops the held caller.

4. Slot naming and collision conventions

Agree on the naming discipline with the team before parking:
  • Auto-pick is the default. Leave the slot field blank and park slots claim the lowest free number (the same digits a desk phone dials with *N). Team muscle memory stays consistent — the numbers mean “next free slot,” not “my slot.”
  • Named slots are for deliberate placement. When a receptionist says “Mr Santos is on 2,” the number is the message. Pick the slot explicitly and the occupant’s 409 response carries the info needed to re-park elsewhere.
  • Never let auto-pick hide a collision. A 409 on a named slot means another operator claimed it first — the response also carries on the occupant view the parked-at time and the caller info, so name the free slot and re-issue rather than retrying the same slot.

5. Hold and abandon discipline

The nine slots are a shared, finite lobby. Every row carries a running elapsed counter the whole floor sees, so a parked call that goes unanswered for minutes is visible to everyone — that is the abandon signal to act on before the caller hangs up. Decide the team’s longest-hold window (for example, two minutes). When a row crosses it, one of three things should happen:
  • Retrieve the row — the slot frees normally.
  • Release the row — when retrieval would mean an abandoned call is dropped anyway; confirm the destructive action.
  • Route inbound into a queue instead — if the same caller would have waited in a queue, the queue’s SLA and abandon metrics own the recording; park is the wrong surface for that flow.
A row that ages past the retention horizon clears server-side, so a forgotten park does not hold a slot forever — the running timer is for the team to act, not for the platform to babysit. (For a bounded pool model, see the troubleshooting page’s “Do you legitimately need more slots?” section; inbound volume belongs on queues.)

6. Worked example — the receptionist’s hand-off

Acme’s receptionist covers the main number from a browser softphone.
  1. A caller asking for Billing lands on the desk. The receptionist answers, speaks to the caller, and clicks Park — auto-pick claims slot 4.
  2. The toast reads “Call parked — slot 4”; the receptionist tells the billing specialist “Billing on 4.”
  3. The specialist opens Voice → Parked Calls, clicks Retrieve on the row for slot 4 (or dials *4 from a desk phone); the first attempt bridges the caller and frees the slot.
  4. While the specialist talks, the ticket the team keeps for this caller updates as the parked row’s parkedForSeconds shows the elapsed hold time — the lobby is the ground truth for “how long has this caller been on hold?”
If two operators had clicked Retrieve at the same moment, the second would see 410 PARK_ALREADY_RETRIEVED naming the retriever — safe to treat the claim as taken (see Troubleshooting).

7. When NOT to use park

Park is a per-slot, team-visible lobby — not a queue, and not a warm transfer.
  • Inbound volume belongs on a queue. A queue holds hundreds of callers in FIFO order with SLA metrics; park holds nine total live calls against the team. Route inbound numbers to a voice queue and park only for hand-offs the queue cannot dispatch.
  • A known teammate belongs on a transfer. Blind-transfer targets a named extension with a single click through the attendant console — park is for the “anyone can grab this caller” pattern, not a directed hand.
  • Warm hand-off belongs on a conference. When the specialist must hear who is on the line first, use a warm transfer or the conference bridge — never park, since there is no announcement step before the retrieve claim.

See also