Latency and dead air

How per-turn agent latency is measured, which statistics are reported, and how the rubric's thresholds turn slow turns into faults.

Response latency is the most direct signal of an AI voice agent's quality and one of the least visible ones in a human team. VoiceLens measures it for every agent turn and summarises it per call, per channel and per agent.

What is measured

For every agent turn, VoiceLens records the gap between the end of the previous turn and the start of the agent's speech. The same gaps are measured for customer turns, so the scorecard can also show how long callers took to respond.

customer turn  ────────────┤
                            gap = agent latency
agent turn                  ├──────────────────

Gaps are derived from the transcript's word timestamps, so they include any silence the agent produced before its first word. Overlapping speech produces a gap of zero.

Statistics per call

The latency panel and the API report, over all agent-response gaps in a call:

StatisticMeaning
MeanAverage response time. Shown as agentLatencyMean on the call summary.
Median (P50)The typical turn.
P95The slow tail: 19 of 20 turns were faster than this.
MaximumThe single longest wait.

Channel and agent analytics aggregate P95 across calls, which makes regressions between agent versions easy to spot: a new model that adds half a second to the tail shows up as a step in the channel's P95 trend even when the mean barely moves.

Faults derived from gaps

Two faults are produced from the same measurements. Both thresholds are set on the rubric template, so different call types can have different expectations.

FaultConditionDefaultSeverity
AGENT_LATENCYThe agent's gap is at or above the latency threshold but below the dead-air threshold.8 sWarning
DEAD_AIRAny gap, agent or customer, is at or above the dead-air threshold.12 sWarning
DEAD_AIR (danger)The gap is at or above the dead-air danger threshold.25 sDanger

A single gap produces one fault, never both: a 10-second pause is AGENT_LATENCY, a 15-second pause is DEAD_AIR.

Announced holds

A pause the other side was told to expect is not a stall. Before classifying a gap, VoiceLens reads the end of the turn that precedes it. If that turn announced the pause, the gap is an announced hold:

Who announcedExampleEffect on the gap
Agent"One moment while I pull up your account."No AGENT_LATENCY; DEAD_AIR becomes info
Agent"Please hold while I transfer you."Same
Customer"Hold on, let me find my card."Same (the agent is not charged for the customer's pause)

Info faults never change the health score, so an agent that warns the caller and then takes 20 seconds loses nothing, while the gap stays visible on the timeline and in the fault list with the announcing turn attached as evidence.

Two limits apply:

  • Only the last 30 words of the turn can announce the gap that follows it. A "one moment" at the start of a long turn was about an earlier pause, not this one.
  • An announced hold at or beyond the rubric's announced hold limit (60 seconds by default) is scored as ordinary dead air, with the description noting that it was announced but overran.

The built-in phrase lists cover every supported language ("einen Moment", "un momento", "un attimo", "bir saniye", "لحظة", and the "let me check" / "I'm transferring you" family in each). A rubric adds its agents' own scripted lines, and moves the limit, under the template's Detection settings.

Silence ratio

The call summary also reports silenceRatio, the share of the call's duration where nobody was speaking. It is a coarse companion to the per-turn view: a call with a normal median latency but a high silence ratio usually has one very long hold in it.

Alerts on latency

Alert rules watch health, danger-call rate, failure rate and call volume rather than latency directly; latency reaches them through the AGENT_LATENCY and DEAD_AIR faults' effect on the health score. To be paged on a latency regression, create an alert on AverageHealthScore scoped to the bot's channel, and keep the latency threshold on that channel's rubric tight enough that slow turns cost points.

Where to find it

  • Call view: latency panel with the per-turn chart and the four statistics.
  • Channel and agent pages: P95 over time and per agent.
  • API: latency.agentResponse, latency.customerResponse and latency.perAgentTurn on the conversation detail, plus the /api/analytics/latency histogram.