Every call a voice agent makes or answers becomes a record: transcript, AI summary, outcome, the tools it called, the knowledge it cited, and — where recording applies — the audio. This is where you find out what the agent actually did, rather than what you configured it to do.
agents:voice:read permission.Per agent — Agents → Agent Types → Voice Agents, then either:
Both land on the agent's Calls page (/voice/<agent id>/calls), headed
Calls with "Voice agent ·
Per contact — open the contact and read their Activity Timeline; calls appear alongside their chats, texts and emails.
Recent activity per agent — click an agent's row on the Agents page to expand a peek of its five most recent calls in the selected date range, with Open all N → to the full list.
The page is built for triage, in three layers.
The KPI row across the top summarises the current range and doubles as a filter — click a card to apply it:
| Card | Meaning |
|---|---|
| Total | Calls in range |
| Active now | Calls in progress right now |
| Resolved | Share of analysed calls that resolved, with the counts in the tooltip. A dash means nothing has been analysed yet — never a fake 0% |
| Escalated | Calls that went to a human |
| Needs review | Calls flagged for a person to look at |
The filter bar holds a search box — "Search by number, status, summary, or call ID" — a date range, a sort control, and a status filter with Live · Open · Completed · Ended · Failed · No answer · Voicemail. The result line tells you how many calls match and says (filtered) when a filter is on.
The list shows one row per call, with pagination underneath. Select rows with their checkboxes for bulk actions.
Start from Needs review and Escalated, not from Total. Those two are where the agent's behaviour is worth your attention.
Click a row to open the call (/calls/<call id>).
The header carries the AI-generated call title, a status or outcome badge, and underneath it the call id, the number of turns and the date. To its right:
On wide screens a rail on the left lists the agent's other calls so you can work through them without going back; on narrower screens that becomes previous/next buttons in the header.
The centre column is the transcript, turn by turn, with the resolved contact's name on their side of the conversation.
| Card | What it tells you |
|---|---|
| Contact | Who the call was with, with task / note / deal actions. Unlinked? Associate it with a contact from here, or accept the identity suggestion shown |
| AI Summary | What happened, generated after the call |
| Recording | Audio playback, where a recording exists |
| Outcome | The classified result of the call |
| Call info | From, To, Direction, Company, Placed by (for a human-dialled call), Duration, Started, Ended, why it disconnected — and, for a call raised by a helpdesk journey, links to the originating ticket and orchestration |
| Signals | Signals detected in the conversation |
| Tools used | Every tool the agent called, with arguments and results |
| Knowledge used | Which Tenant Brain concepts the answer drew on, and the queries it ran |
| Token usage | Model usage for the call |
Tools used and Knowledge used are the two that answer "why did it say that?". A wrong answer with no knowledge lookup behind it is a different problem from a wrong answer that cited the wrong published concept — the first is your instructions, the second is your Brain.
Which calls carry audio depends on how the call happened:
| Call type | Recording |
|---|---|
| Outbound telephony | Recorded by the platform |
| Inbound telephony | Recorded by the carrier |
| Browser (web delivery) | Always recorded |
| Agent test runs | Recorded |
Where a recording exists, the Recording card plays it. Where one was removed under your retention policy, the card says so rather than appearing empty.
Recording carries legal obligations that vary by jurisdiction, and often require telling the caller. If your agents record, say so in the greeting or early in the instructions.
Transcripts are kept until your retention policy removes them. There are two places to set that:
Workspace-wide — Settings (the gear icon) → Access & security → Transcript Retention. Unconfigured means kept indefinitely. See Transcript Retention.
Per agent — the Transcript Retention section on the voice agent's Telephony tab. Choose Inherit, a Custom window, or Keep forever. The banner there names the workspace's current mode so you can see what you are overriding.
A removed transcript is a distinct state, not an empty one. The call record survives; the transcript view shows a notice naming the policy and the date it was removed, the recording card says the recording was removed, and Copy and Export are hidden. A call showing that notice is your retention policy working, not a fault.
Retention removes the transcript, the tool call detail and — depending on your policy — summaries and quotes, and optionally the recording.
Summaries, outcomes and analytics come from a post-call analysis pass. If it had not run yet when you looked, wait and refresh. Calls from before an analysis change can be re-analysed so old calls are scored on the same basis as new ones.
For patterns rather than incidents, use ⋯ → Performance & insights on the agent's row: scores for accuracy, tone and efficiency, goal attainment against the Goals you set, and voice runtime tiles — Interruptions / call, Response latency, LLM / TTS first byte and Tool success. That is the right surface for "is this agent getting better?", and for tuning turn-taking; see Turn-Taking, Interruptions and Dead Air.