Live monitoring for voice calls
Post-call scorecards tell you how an agent handled a call after it ended. Live monitoring gives the supervisor control while the caller is still on the line. On voice there are five actions, each with a distinct audit action so compliance can tell them apart:- Listen — the supervisor hears agent and caller; nobody hears the supervisor. This is silent monitoring.
- Whisper — the supervisor speaks to the handling agent only. The caller never hears the coaching.
- Barge — the supervisor speaks to both parties. Use it for a short, transient escalation.
- Conference join — a three-way call. The supervisor stays as an audible third participant for the rest of the call (the “consult and conference” pattern), typically after a barge that needs a longer presence.
- Unlisten — end the supervisor’s session on the call.
Prerequisites
- The caller is owner, admin, or supervisor in the workspace. Any other role gets
403. - The supervisor has an open softphone session — the monitoring actions redirect the supervisor’s existing call leg into the call’s bridge. Post the supervisor’s softphone call id as
supervisorCallControlId. - The target call is live. Monitoring a finished call returns an error rather than a stale bridge.
Listen (silent monitoring)
POST /api/v1/voice/supervisor/team-monitor selects one active call from the team’s agents and opens a listen session on it.
Whisper (coach the agent only)
422 INVALID_STATE instead of silently degrading to an audible join.
Barge (speak to both parties)
disclosure.enabled: true, an announcement plays on the supervisor’s leg before the join and on the agent’s leg after the join, so the caller hears the disclosure through the call audio. Pass disclosure.text to use your own wording (bounded to 240 characters); omit it and a neutral default is used: “Please note: a supervisor has joined this call for quality and support purposes.” Listening never triggers a disclosure; whisper and barge only play one when you set disclosure.enabled, so existing integrations that post just the supervisor call id keep their current behaviour.
Conference join (three-way, persistent)
Stop monitoring
Read back who is monitoring
The read side of the ledger is a single endpoint:
Each row carries the pre-computed
open boolean (true while ended_at is empty) so dashboards never re-derive the live state. A page that returns next_cursor has more rows; pass the cursor back as ?cursor= to continue. An empty result is 200 with items: [] — a workspace with no monitoring is a valid answer, not an error.
Access is limited to owner, admin, and supervisor roles, and every query is scoped to your own workspace — a supervisor can never read across tenants.