Agent Hand-Raise (Request Assistance)
When a caller escalates, an AI handoff stalls, or a decision needs a manager’s sign-off, the agent’s fastest option used to be a message in a separate chat tool, outside the call’s context. Hand-raise replaces that detour with one control on the call itself: the agent raises a hand, every connected supervisor wallboard shows the request in under 100 milliseconds, and the supervisor can join as a whisper coach without hunting for the call. Hand-raise is Orbit’s parity surface for Genesys Cloud’s “Request Assistance” button and Five9’s “Help” button: a real-time wallboard alert plus a pre-armed whisper control for the supervisor who answers it.How it differs from a supervisor-initiated whisper
A whisper can start from either side of the call:- Supervisor-initiated — the supervisor watches the live monitoring wallboard and opens a whisper on their own judgement, covered in whisper coaching.
- Agent-initiated (hand-raise) — the agent asks for help, and the request lands on the supervisor’s wallboard carrying the call, the agent, and an optional reason, with a pre-armed “Join whisper” action.
The two surfaces
Agent: raise a hand — POST /api/v1/voice/calls/:id/raise-hand
The agent-side surface. The dashboard softphone’s “Request Assistance”
control calls it on the active call, and any integration holding a voice
write scope for the agent can call it too. :id is the call identifier
the softphone reports for the live call; both outbound call ids and
inbound leg identifiers resolve. The agent identity is taken from the
authenticated session, so a client can raise a hand only for itself,
never for a colleague.
The body is optional:
The response is the hand-raise row:
id, call_id,
agent_user_id, reason, status ("pending" on create),
and raised_at.
Raising a hand is idempotent. A second press on the same call by the same
agent does not create a second alert: the request returns the existing
open row, and if the new press carries a clearer reason, that reason
replaces the old one on the supervisor tile. Expect this when an agent
double-clicks under stress; the wallboard simply keeps one tile.
If the call is not found in your tenant, the request returns 404.
Supervisor: read the open-hand list — GET /api/v1/voice/supervisor/hand-raises
The supervisor-side surface, available to supervisor roles and above.
It returns the open-hand list, newest first, capped at 200 rows, plus a
counter object for a wallboard badge:
rows— every hand-raise whose status ispendingoracknowledged, each withid,call_id,agent_user_id,reason,status, andraised_at.counts—{ pending, acknowledged, total }for the pillar overview badge.generated_at— when the snapshot was taken.
Supervisor: close a request — POST /api/v1/voice/supervisor/hand-raises/:id/resolve
Closing the loop. The body records what the supervisor actually did:
The row moves to
resolved and stays in your tenant’s records for
coaching and adherence analytics; hand-raises are never hard-deleted.
Resolving an already-resolved row is a no-op that returns the existing
row, so a double-click on “Join whisper” cannot produce duplicate audit
entries.
Lifecycle of a hand-raise
Every hand-raise row moves through three statuses:- pending — created by
raise-hand, visible on every supervisor wallboard, counted incounts.pending. - acknowledged — a supervisor has picked the request up. The row
stays on the open list (and in
counts.acknowledged) until it is resolved, so the acknowledging supervisor can return to it and join the call. - resolved — closed by
resolvewith the chosensupervisor_action, recorded withresolved_atandresolved_by_user_idfor later review.
The wallboard alert path
On create, the API publishes avoice.hand_raise.requested event on the
capacity event stream (GET /api/v1/voice/capacity/events), the same
server-sent-events channel your wallboard already consumes for live
state changes. Connected supervisors see the alert in under 100ms with
no polling. The event payload carries everything a wallboard tile needs:
hand_raise_id,call_id,agent_user_id,raised_atreason, when the agent sent onesuggested_supervisor_action: "whisper", so the tile can render a single pre-armed “Join whisper” button bound to the call, with no extra round trip
voice.hand_raise.resolved is published so
every other connected wallboard decrements its pending counter at the
same moment. Polling GET /api/v1/voice/supervisor/hand-raises on a
fixed cadence remains the fallback for wallboards that are not
connected to the stream.
From acknowledge to whisper join
The intended supervisor flow, in pseudocode:Examples
Agent raises a hand with a reason
Supervisor poll loop (SSE fallback)
Node.js
Acknowledge, join, resolve
cURL
Limits
reasonis free text only, capped at 240 characters. There are no structured reason categories yet.- The open-hand list returns at most 200 rows per tenant. A floor with more simultaneous raised hands needs staffing attention before it needs pagination.
- One pending hand-raise per call and agent; re-pressing refreshes the existing request instead of queueing another.
- There is no escalation policy for an unanswered hand-raise today. An unacknowledged request stays pending until a supervisor resolves it or the call ends; automatic re-alerting after a silence threshold is a follow-up area. If you need a timer-based safety net now, pair hand-raise with queue SLA escalation policies.
- Hand-raise creates no outbound call. Whisper, listen, and barge joins reuse your tenant’s existing voice path, so this feature adds nothing to your telephony routing.
Related
- Voice supervisor plane model — how the wallboard, live monitoring, and supervisor scopes fit together.
- Whisper coaching — the supervisor-side whisper flow the pre-armed button hands off to.
- Supervisor coaching — the broader coaching workflow hand-raise feeds into.