Skip to main content

Run the Attendant Console front desk

The Attendant Console is the receptionist and switchboard workspace in the Orbit dashboard. Where a voice queue is an automated ACD that dispatches callers to a pool of agents, the console puts a human operator in charge: one screen shows every waiting inbound caller, the live presence of every extension, the shared park lobby, and the calls ringing unanswered on colleagues’ phones — and every action is one click. Find it under Voice → Attendant Console. Because the console lists caller numbers and names, it is restricted to the workspace’s owner, admin, and developer roles. Unlike the agent-facing browser softphone, the console never originates an outbound call. Every action re-targets an inbound call that is already in progress — answer, transfer, park, retrieve, pick up.

When to use the console vs. queues

Use the console when a front desk — a receptionist, office administrator, or dispatch desk — personally decides where each inbound call goes. Use queues when inbound callers should distribute to an agent pool automatically, with FIFO order, skills matching, and SLA reporting. The split in practice: route a number’s inbound traffic to a queue (see voice queues) and let operators run their desk from the console; whatever the queue cannot dispatch becomes visible on the console’s Waiting calls panel for a human to handle.

Open the console and read the layout

Open Voice → Attendant Console. Four panels load, and a header badge counts how many extensions are currently free:
  • Waiting calls — inbound callers still ringing or queued, sorted longest-waiting first. Each row shows the caller’s number (or a resolved name), a live elapsed-time counter, and the number or extension the caller reached.
  • Extensions — the lamp field: a grid of every extension and its live presence state. This tells the operator who can take a call right now.
  • Parked — the shared park lobby: callers placed into numbered slots, each with a running timer and a retrieve action.
  • Calls you can pick up — calls ringing on colleagues’ extensions that the operator can grab before they roll to voicemail.
Panels refresh automatically every few seconds; the Refresh button reloads all of them on demand.

Presence states

Each extension lamp shows one of six states: Only Idle and Away extensions are selectable transfer targets. The full state-by-transfer-mode matrix, including what happens when a target changes state mid-transfer, is covered under Presence-gated transfer targets.
Colleagues and their extensions appear in the lamp field the moment each one has an enabled SIP credential — the same credentials the extensions and colleagues reference pages describe. A colleague with no enabled credential never lights up and cannot receive a console transfer.

Handle an inbound call

A caller lands in Waiting calls and rings the operator’s own answering device (browser softphone or desk phone). The operator answers there, then uses the console to move the call.

Transfer to a colleague — blind

  1. On the caller’s row, click Transfer. A banner opens naming the caller, and the Extensions grid enters pick-target mode.
  2. Click a free extension (Idle or Away). The caller moves straight to that extension’s ringing device and the operator’s leg closes.
  3. To back out before picking a target, click Cancel in the banner — the caller stays with the operator.
That is a blind transfer: the destination rings and, on answer, hears the caller with no announcement. The console click maps to POST /api/v1/voice/calls/{id}/transfer in the Voice API reference. When the destination should hear who is on the line first, use a warm transfer instead — the full click-path, whisper prompt, and failure modes are covered in Transfer workflows in depth below.

Transfer workflows in depth

A front desk transfers dozens of calls a day, and each transfer has a shape with its own click-path, API endpoint, and failure mode. This section covers the four shapes the console supports, how presence gates the target picker, the warm-transfer consult flow end to end, and what to do when every queue is full.

The four transfer shapes

Every shape re-targets an inbound call already in progress; none of them originates an outbound call. A blind transfer is the fastest hand when the operator already knows the caller’s need; a warm transfer is the right one when the colleague needs context before the caller arrives; park is the right one when nobody is free right now but will be shortly; voicemail is the right one when the desk is closing or the caller prefers to leave a message.

Presence-gated transfer targets

In pick-target mode the console enables only Idle and Away lamps. The same gate applies to both transfer shapes, because the consult leg of a warm transfer is a real inbound call to the target device: if the device cannot be offered a call, neither shape can use it. When a target flips state mid-transfer. Presence is live, and a desk in a rush will click a lamp that was Idle a second ago. The two shapes fail differently:
  • Blind, target flipped to busy after the click — the call has already been offered to the device. The device rings (or rejects); if it never answers, the destination’s own no-answer routing, typically its voicemail box, takes the caller. The console does not recall the call, so retrieve it from voicemail or have the box’s owner return it.
  • Warm, target flipped to busy while the consult leg rings — the consult leg meets busy or rings out. The warm transfer ends without completing: the caller comes back to the operator, nothing is parked, and no leg is left stranded on the floor. Click Cancel to clear the session, then pick a different lamp or park the caller.
  • The only agent with the right skill went busy — do not hold the caller on your leg while you wait for the lamp to free up. Park the caller on a slot (the whole team sees it), and retrieve it when the agent’s lamp returns to Idle.

Warm transfer click-path

A warm transfer keeps three parties straight: the caller (on hold), the operator, and the consult leg (the colleague). The flow:
  1. With the caller connected, open the warm-transfer control on the operator’s connected call. The caller is placed on hold and the consult leg dials out to the colleague you pick. [Screenshot: connected-call controls with the warm-transfer action and the caller on hold.]
  2. When the colleague answers, they hear a short whisper prompt — a context sentence such as the caller’s name and the reason for the handoff — before your audio bridges in. The caller never hears this window; it exists so the colleague lands with context. At the API level this is the contextWhisper flag plus an optional custom text of up to 220 characters on POST .../warm-transfer.
  3. You and the colleague now talk privately while the caller holds. This is the consult window.
  4. Click Complete to bridge the caller into the colleague and close your leg (POST .../warm-transfer/complete), or Cancel to hang up the consult leg and bring the caller back to you (POST .../warm-transfer/cancel).
Failure path: the consult target rings out. If the colleague does not answer — stepped away with the lamp still Away, phone off the desk, or flipped to busy — the consult leg ends in no-answer or busy. The platform returns the caller to the operator instead of leaving them in limbo: your hold leg resumes, the consult leg is released, and no park slot is consumed. Clear the session with Cancel, then either retry another lamp or park the caller and message the colleague the slot number. There is no double-park and no orphaned consult leg to clean up. Two settings change the shape of the consult:
  • A custom whisper text replaces the generated context sentence when your desk standardizes handoffs (“billing dispute, account on record, wants a refund decision”).
  • Disabling the private consult window bridges the caller in the moment the colleague answers — use it when the colleague already knows the caller and the whisper is all they need.

Queue overflow during a transfer

Sometimes the transfer you want is into a queue, and every queue the caller qualifies for is at cap. Three playbooks, in the order a desk usually reaches for them:
  1. Park with a label. Park the caller from the call controls and note the slot. The Parked panel row carries the caller’s name and number plus the running timer — that row is the label the rest of the team reads. Message the destination agent the slot number; they retrieve it from their own console or by dialling the slot short code. Console clicks: park from the call controls, then Retrieve on the row when the agent frees up.
  2. Offer a callback. If your queues have callback rescue enabled (a queue setting, configured once by an admin), route the caller back into the queue: when the wait breaches the queue’s limits, the caller is offered a callback instead of holding forever. The operator’s move is to hand the caller to the queue rather than hold them on the desk; the offer itself is the queue’s, not a console button. See voice queues for the callback settings.
  3. Transfer to a failover DID. For a desk-level outage — every queue saturated or the floor offline — the queue’s emergency override arms with an E.164 destination (a failover DID, an after-hours line, a sister site) and sends new and overflow callers straight there. Arming is a supervisor action with an API and a dashboard control, not a per-call console click; the operator’s per-call tool while it is unarmed is still park. The override and its destination are covered in voice queues.
The rule of thumb: park is the operator-owned tool, callback and failover are tenant-owned queue configuration the operator benefits from. All three keep the caller out of the operator’s ear while the floor recovers, and all three are visible to the whole team rather than hidden on one desk.

Park and retrieve

Park moves a caller into a numbered slot in the shared lobby, visible to every teammate with the console open.
  1. Park the caller from the call controls. The caller lands on a free slot and appears in the Parked panel with the slot number and a running timer.
  2. Any teammate clicks Retrieve on the row, or dials the slot’s short code from their own device — the first retrieval wins.
  3. If the caller should never have been parked, click the release (circle-x) action and confirm. Release clears the slot and disconnects the held caller — it cannot be undone.
Agree on a longest-hold window team-wide (for example two minutes); the elapsed counter on each parked row makes it visible to everyone. The lobby holds nine numbered slots — a tenth parking attempt fails, so retrieve or release before parking more.

Pick up a colleague’s ringing call

When a colleague’s phone rings unanswered, the call appears in the Calls you can pick up panel, with the extension it is ringing on and how long it has been ringing.
  1. Choose the operator’s answering device in the Answer on… selector (it lists the organization’s enabled SIP credentials).
  2. Click Pick up on the specific row, or Pick up oldest to grab the longest-ringing call without choosing a row.
  3. The call connects to the selected device and disappears from every operator’s panel.
This is directed and group call pickup from the dashboard — the same operation a desk phone performs with directed (*97-style) or group (*8-style) feature codes.

The auditor’s view of a transfer

Every transfer the console or the API performs is written to the call’s record: call_logs.metadata.transfer_history[] is an append-only, ordered array with one entry per transfer event, each carrying the destination (to), the transfer type (type: blind, attended/warm, warm completed, or queue), an optional reason, and a timestamp (at). Reading a multi-hop transfer. A call that the receptionist warm-transferred to sales, and sales then blind-transferred to billing, shows two entries in order — the auditor reads the path the caller took hop by hop, not just the final destination. The latest hop also lands in the record’s top-level transferred_to and transfer_type fields for tools that only read the summary. Reasons. Both transfer endpoints accept an optional reason from a fixed list — wrong queue, escalation, language mismatch, expertise, or other. Submitted reasons roll up into per-reason transfer reporting (the “transfers by reason” view) and ride along in each transfer_history[] entry. The field is optional, so desks that do not tag reasons lose nothing. Tie-in to QA scoring. Automated scoring and the weekly human QA sample draw from completed conversations that had a human agent on record; a transferred call is sampled and scored like any other completed conversation, per leg. There is no rule that drops a transferred leg from scoring — which is exactly why the audit array matters to reviewers: it tells a scorer which leg of a multi-hop call their scorecard covers, and it lets a QA lead split scores by hop when coaching. Sampling quotas and lookback windows are set under Settings → QA Sample Assignment; the scorecard surface is covered in call QA scorecards and QA sampling.

Supervisor override during a consult leg

A warm transfer’s consult window is a live two-party call, and supervisors hold the same real-time controls over it as over any active call: listen silently, whisper to the operator without the caller hearing, or barge in as an audible third participant when the dispute needs a decision-maker now.
  • Listen joins the supervisor muted; neither party is notified.
  • Whisper reaches only the operator’s ear — the classic move is a supervisor feeding the operator authority (“offer the one-month credit”) mid-consult while the caller stays on hold.
  • Barge makes the supervisor audible to everyone on the leg; use it when the consult has turned into an escalation that needs a third voice in the room.
Every start and stop is written to the monitoring audit ledger with the supervisor, the agent, the call, and timestamps, so “who listened to call X and when” is always answerable. The endpoints, the read-back API, and the per-supervisor monitoring limits are documented in supervisor live monitoring for voice.

Worked example: a front-desk transfer

Acme’s receptionist covers inbound calls on the main number.
  1. A caller asking for sales lands in Waiting calls. The receptionist answers on the browser softphone, speaks to the caller, and clicks Transfer.
  2. The banner reads “Transferring +14155550123 — pick a free extension below.” The lamp field shows the sales manager Idle, so the receptionist clicks that lamp. The sales manager’s phone rings; the receptionist’s leg closes.
  3. During a rush, both sales extensions are On call. The receptionist parks the next caller on slot 2 and tells the sales manager “client parked on 2.” The sales manager retrieves slot 2 from the Parked panel when free — no front-desk step needed.
  4. Meanwhile a colleague’s phone rings unanswered. The call shows in Calls you can pick up; the receptionist clicks Pick up, answers on the selected SIP device, and runs the same transfer flow again.

Worked example: warm transfer to an Away agent

The same receptionist fields a billing dispute the first-line script cannot resolve. The only billing agent’s lamp reads Away — selectable, but no guarantee the agent hears the ring.
  1. The receptionist answers, confirms the dispute needs a billing decision, and opens the warm-transfer control on the connected call. The caller goes on hold. [Screenshot: transfer banner naming the caller, caller on hold, lamp field in pick-target mode.]
  2. The receptionist picks the billing agent’s lamp. The agent’s device rings; on answer, the agent hears the whisper prompt — “caller +14155550123, billing dispute, needs a credit decision” — then the receptionist’s voice bridges in for the private consult. [Screenshot: consult window active; caller row shows on-hold timer.]
  3. The agent agrees to take it. The receptionist clicks Complete; the caller bridges to the agent and the receptionist’s leg closes. The call record now carries one transfer_history[] entry: type warm completed, destination the agent’s extension, timestamped.
  4. Failure branch: on a busier morning the agent’s lamp flips to On call while the consult leg is ringing. The consult leg meets busy, the warm transfer does not complete, and the caller returns to the receptionist’s hold leg. The receptionist clicks Cancel, parks the caller on slot 3, and messages the agent “billing dispute parked on 3.” When the agent’s lamp returns to Idle, they retrieve slot 3 and the caller never hears the failed consult. [Screenshot: Parked panel row for slot 3 with caller name and elapsed timer.]

Troubleshooting

  • Nothing appears in Waiting calls — confirm the signed-in role is owner, admin, or developer; confirm the inbound number’s routing lands callers on a queue the desk monitors; then hit Refresh once before assuming the lane is empty.
  • The Extensions grid is empty or missing people — those colleagues have no enabled SIP credential. Issue or re-enable the credential under Voice → SIP credentials and the lamp appears on the next poll.
  • Pickup actions are greyed out — the tenant has no enabled SIP credential to answer on. Add one under Voice → SIP credentials, then select it in the Answer on… selector.
  • Retrieve fails on a parked call — another teammate already retrieved it (first retrieval wins), or the caller hung up. The row disappears on the next poll.
  • A transfer target stays unselectable — the extension is ringing, on call, do-not-disturb, or disabled. Only Idle and Away extensions accept a transfer.
  • The warm consult rings out — the colleague’s device rang unanswered (an Away lamp does not guarantee an ear). The caller returns to your hold leg automatically; click Cancel to clear the session, then retry another lamp or park the caller.
  • A blind transfer landed in the wrong voicemail — the target extension flipped busy or silent after the click and its no-answer routing took the caller. Retrieve from the voicemail box or have the box’s owner hand the call back; next time, park instead of blind-transferring into a rush.
  • The caller hears hold music forever after a failed transfer — the operator leg was never resumed because the session was not cancelled. Clear the stale session with Cancel; if the caller was parked, retrieve the slot from the Parked panel.

See also