Voice Agent Dead Air Detection: Root Causes and Fixes

Sumanyu Sharma
Sumanyu Sharma
Founder & CEO
, Voice AI QA Pioneer

Has stress-tested 4M+ voice agent calls to find where they break.

June 27, 2026Updated June 27, 202611 min read
Voice Agent Dead Air Detection: Root Causes and Fixes

Most teams notice dead air only after a caller complains or a reviewer listens to the recording. The call felt broken in the moment, but the dashboard still looked green, and the transcript only shows a blank stretch where the failure happened.

The trap is treating "silence" as one metric. In production, the same dead-air symptom can come from a missing RTP stream, endpointing that waits too long, an STT provider that has not finalized speech, a slow tool call, delayed TTS, or audio that was generated but never played to the caller.

If you run fewer than 100 calls a week, manual review may be enough. Once the agent is handling production volume across support, sales, healthcare, financial services, QSR, or booking workflows, "there was silence" is not actionable. The event has to tell an engineer which layer should be checked first.

TL;DR: Detect voice agent dead air as a turn-level event:

  • Measure the caller-visible gap: silence start, silence end, phase of call, preceding speaker, expected next action, and duration.
  • Join component timings: telephony, VAD, STT finalization, LLM first token, tool execution, TTS first audio, and playback.
  • Route by owner: telephony owns missing media, VAD/STT owns endpointing, backend owns slow tools, speech owns TTS/playback, product owns confusing flows.
  • Save evidence: audio pointer, transcript pointer, trace ID, provider call IDs, event JSON, review outcome, and regression-test link.

A useful dead-air alert should answer four questions before anyone opens a log: what went silent, who heard it, how long it lasted, and which component is the best first place to look.

Methodology Note: This dead-air detection workflow is based on Hamming's analysis of 4M+ production voice agent calls and QA review workflows across 10K+ voice agents (2025-2026). We've tested agents built on LiveKit, Pipecat, ElevenLabs, Retell, Vapi, and custom-built solutions.

The thresholds below are starter thresholds, not universal SLA promises. Tune them by workflow, language, channel, and caller population.

Last Updated: June 2026

Related Guides:

What Counts as Dead Air in a Voice Agent Call?

Dead air is a caller-visible pause where the caller reasonably expects the voice agent to speak, listen, or advance the workflow, but no useful audio or progress happens.

Dead-air event: a timestamped voice-agent event where the call enters an unexpected no-progress state for longer than the allowed threshold. The event should include phase, duration, preceding speaker, expected next action, component timing, and evidence pointers.

Do not reduce dead air to "audio level equals zero." Twilio Voice Insights can flag silence when there is a missing RTP stream or total silence from one party; Twilio also notes that silent calls may be reported as dead air or dropped calls. That signal is useful, but by itself it cannot tell you whether the agent was stuck in VAD, waiting on a tool, generating speech, or failing to play audio.

Use this scope table before alerting:

EventCount as dead air?Why
Caller pauses mid-thought for 1.2 secondsNoNatural hesitation; the agent should not interrupt too early
Agent waits 3.8 seconds after caller stops speakingYesCaller expects a response; route to VAD/STT/LLM/tool/TTS timing
RTP stream is missing from one sideYesTelephony or media-path issue, even if the agent pipeline is healthy
Tool call takes 4 seconds before the agent says anythingYesCaller experiences silence; backend/tool owner must see the event
Agent speaks but caller cannot hear playbackYesAudio output or media delivery failure
Caller hears hold music or an explicit wait messageUsually noThe call has audio and expectation-setting; track separately as hold time

How to Measure Dead-Air Rate and Duration

Measure dead air at the turn level. Call-level averages hide the exact exchange that broke.

Use these definitions:

Dead-Air Event = unexpected no-progress interval above thresholdDead-Air Rate = calls with at least one dead-air event / total connected callsDead-Air Density = dead-air events / 100 connected callsDead-Air Duration P95 = p95 duration of dead-air events in milliseconds

Start with separate thresholds by phase:

PhaseStarter thresholdAlert whenFirst owner
Before greetinggreater than 2s after connectspike by carrier, region, or agent versionTelephony / runtime
After caller stops speakinggreater than 2srepeated across turns or workflowsVAD / STT / LLM
During tool executiongreater than 3s with no filler or progress cuecritical workflow affectedBackend / tools
Before TTS playbackgreater than 1.5s after final text is readyprovider or voice-specific spikeTTS / playback
After interruptiongreater than 2s after agent stopsoccurs after barge-in or correctionTurn handling
Before disconnectgreater than 3s before hang-upabandonment risesProduct / QA

One global silence threshold sounds tidy, but it creates bad alerts. A 2-second pause before a greeting feels broken. The same pause while a caller searches for an account number may be exactly right. The threshold needs both phase and expectation.

Dead-Air Root-Cause Matrix

The fastest way to waste a dead-air incident is to send every example to the LLM owner. Some will be model latency. Many will not. The silence is often hiding a pipeline problem.

SymptomFirst evidence to checkLikely causeOwnerFix
No greeting after call connectsprovider call summary, RTP/audio-in, room eventsmissing RTP, one-way audio, room dispatch delayTelephony / runtimeverify media path, dispatch, region, SIP/WebRTC path
Agent waits too long after caller finishesVAD events, STT finalization, endpointing configsilence duration too long, noisy audio blocking endpointingVAD / STTtune endpointing, add semantic turn detection, test noisy fixtures
Transcript appears lateSTT partial/final timestampsSTT provider delay or finalization gapSTTcompare partial vs final latency, add fallback or timeout
LLM starts late after transcript finalizesLLM first-token timestamp, prompt versionslow model, prompt bloat, provider issueLLM / orchestrationreduce prompt payload, stream earlier, add timeout/fallback
Silence during backend actiontool span, webhook latency, retry countslow CRM/POS/calendar/API callBackend / toolscache, timeout, async handoff, progress cue
Text is ready but caller hears nothingTTS first-audio, audio playout, output track eventsTTS delay, playback failure, muted outputTTS / mediapreconnect, stream TTS, validate output track
Silence after interruptioninterruption events, agent speech state, VADstate machine stuck after barge-inConversation runtimefix turn state, replay interruption cases
Dead air before hang-upevent sequence, abandonment stage, recordingcaller gave up after repeated latency or confusionProduct / QAroute to failure cluster and regression test

Deepgram's endpointing docs explain why noisy environments can keep an audio-based VAD from detecting silence, especially in places like a fast food drive-thru. OpenAI's Realtime VAD docs expose configurable fields such as threshold, prefix padding, and silence duration. LiveKit's turn-detection docs and adaptive interruption handling docs show the same principle at the runtime layer: turn-taking needs more context than volume alone.

Build a Component Timestamp Waterfall

A dead-air event should not depend on a reviewer adding a label after the fact. Review is still valuable, but the first event should come from timestamps your system already emits.

Minimum waterfall:

TimestampExample fieldQuestion answered
Call connectedcall.connected_atDid the caller reach the voice runtime?
User speech startedvad.speech_started_atDid the system hear the caller?
User speech stoppedvad.speech_stopped_atDid endpointing fire?
STT partial receivedstt.partial_atDid transcription start quickly?
STT final receivedstt.final_atDid finalization stall?
LLM request sentllm.request_atDid orchestration start?
LLM first tokenllm.first_token_atDid the model stall?
Tool request senttool.request_atDid a dependency block the turn?
Tool response receivedtool.response_atDid the backend recover?
TTS request senttts.request_atDid speech generation start?
TTS first audiotts.first_audio_atDid synthesis stall?
Audio playback startedaudio.playout_started_atDid generated audio reach the caller path?

Pair this with OpenTelemetry voice-agent tracing. The trace should let an engineer answer: did the silence come from input audio, endpointing, STT, reasoning, tools, TTS, playback, or evaluation?

Save Dead-Air Events as Evidence, Not Just Alerts

Alerting tells the team something happened. Evidence tells them what to fix.

Use a compact event schema:

{  "eventType": "voice_agent.dead_air",  "severity": "warning",  "callId": "call_2026_06_27_1842",  "turnIndex": 6,  "phase": "after_user_speech",  "startedAtMs": 42180,  "endedAtMs": 45940,  "durationMs": 3760,  "precedingSpeaker": "caller",  "expectedNextAction": "agent_response",  "suspectedOwner": "stt_endpointing",  "componentTimingMs": {    "vadStopToSttFinal": 2840,    "sttFinalToLlmFirstToken": 240,    "llmFirstTokenToTtsFirstAudio": 310,    "ttsFirstAudioToPlayout": 90  },  "evidence": {    "audioUri": "s3://review-packets/call_1842/audio.wav",    "transcriptUri": "s3://review-packets/call_1842/transcript.json",    "traceId": "4bf92f3577b34da6a3ce929d0e0e4736"  },  "reviewOutcome": "needs_regression_test"}

For reviewer workflows, attach the event to a call evidence export packet. A QA reviewer should be able to replay the gap, read the surrounding transcript, inspect the trace, and see the component timing without broad production access.

How Should Teams Alert on Dead Air?

Do not page on every pause. That turns the alert into background noise.

Use this starter policy:

ConditionActionChannelWhy
One active-turn gap greater than 3screate QA eventreview queueneeds inspection, not panic
More than 2 dead-air events in one callSlack warningvoice-alertscaller likely noticed
Dead-air rate doubles from 7-day baselineincident ticketvoice-oncallregression or provider drift
Any critical workflow has dead air before task completionurgent alertworkflow owner + on-callbooking, payment, healthcare, account access
Dead air followed by hang-uppromote to reviewQA + productlikely abandonment
Dead air cluster after deployblock rolloutrelease ownerregression risk

The Slack alerts guide includes a broader alerting table. For dead air, the alert payload should include the timestamp, preceding context, suspected owner, call link, trace link, and the first 2 nearby calls with the same signature.

Fixes by Owner

Once the event has an owner, the fix is usually obvious.

OwnerChecksCommon fix
Telephonymissing RTP, one-way audio, carrier/SIP region, WebRTC ICE statefix routing, TURN/SIP config, media region, provider incident
VAD / endpointingspeech_started, speech_stopped, silence duration, background noisetune threshold, use semantic endpointing, add noisy fixtures
STTpartial vs final timing, confidence, provider fallbackadd timeout/fallback, use interim transcripts, adjust endpointing
LLM orchestrationtime to first token, prompt size, model latency, rate limitsreduce context, stream earlier, timeout slow providers
Tools/backendwebhook latency, retries, circuit breakers, cache missescache pre-call data, add progress cue, shorten timeout
TTSsynthesis time, first-audio time, voice/provider, preconnect statestream TTS, preconnect, fallback voice/provider
Playback/mediaoutput track, playout timestamp, mute state, egress recordingvalidate output path, room participant state, audio device
Product / QAflow step, caller intent, abandonment stage, repeat attemptssimplify prompt, add recovery line, create regression tests

For calls that end in abandonment, pair this with drop-off analysis. Dead air explains one mechanism; the drop-off page explains where abandonment concentrates across the flow.

What Dead-Air Detection Cannot Prove

Dead-air detection is a symptom detector. It does not prove the agent gave the right answer, followed policy, completed the task, or satisfied the caller.

Three limitations matter:

  • Silence is not always bad. Callers pause to think, find information, or wait for a human transfer. Use phase and expected action before labeling it as failure.
  • Audio silence is not human-speech detection. Twilio's Voice Insights FAQ notes that background noise can prevent a silent call from being marked silent, and that silence detection is not equivalent to speech detection.
  • A detected gap still needs root cause. A 4-second gap could be endpointing, STT, LLM, tool, TTS, or playback. Without component timing, you only know the caller waited.

The useful standard is simple: every dead-air event should be reviewable and reproducible. If the team cannot replay the call, inspect the waterfall, and write the smallest regression test from the failure, the event is still only a complaint with a timestamp.

Frequently Asked Questions

Dead air is a period where the caller expects the voice agent to speak or listen, but the call has no useful audio or no visible conversational progress. Hamming treats dead air as a turn-level event with a timestamp, phase, duration, and owner because a missing RTP stream, late endpointing, slow tool call, and delayed TTS stream all require different fixes.

Detect dead air by combining audio-level silence, turn timestamps, transcript events, component latency, and caller outcome signals. Hamming's recommended event requires at least the call ID, turn index, silence window, preceding speaker, next expected action, component timings, and evidence links so the event can be routed to telephony, VAD, STT, LLM, tools, TTS, or playback.

Use different thresholds by phase instead of one global number: more than 2 seconds after a caller finishes speaking should be investigated, more than 3 seconds during an active exchange should create a QA event, and repeated 3-second gaps should alert the owning team. Hamming recommends tuning those thresholds by workflow because authentication, payments, and regulated disclosures may tolerate different pauses than simple FAQ calls.

Common causes include missing RTP or one-way audio, VAD endpointing that waits too long, STT finalization delays, slow LLM inference, tool-call timeouts, TTS synthesis delays, playback failures, and interruption state bugs. The caller hears the same symptom, but the fix changes by layer, so each dead-air event needs a component timestamp waterfall.

No. Silence detection usually describes an audio condition, while dead air describes a caller-visible failure in the conversation. Twilio's Voice Insights docs note that silence detection is not the same as human speech detection, and Hamming's dead-air workflow adds turn context, expected agent action, component timings, and outcome evidence.

Alert on repeated or high-impact dead-air events, not every short pause. A practical starter policy is to create a QA event for any active-turn silence above 3 seconds, warn when more than 2 such events happen in one call, and page only when the rate doubles from baseline or affects critical workflows such as payments, booking, healthcare triage, or account access.

A dead-air event should include call ID, turn index, silence start and end time, preceding speaker, expected next action, audio pointer, transcript pointer, VAD/STT/LLM/tool/TTS timings, playback status, provider call IDs, and final outcome. Hamming also recommends saving a redacted evidence packet so reviewers can replay the silence without broad production access.

Start by classifying the root cause, then recreate the smallest safe version of the failed turn with the same audio condition, prompt version, tool latency, or playback behavior. Hamming recommends promoting only diagnosed dead-air events into regression tests; otherwise teams preserve a symptom without the component evidence needed to prevent it from returning.

Sumanyu Sharma

Sumanyu Sharma

Founder & CEO

Previously Head of Data at Citizen, where he helped quadruple the user base. As Senior Staff Data Scientist at Tesla, grew AI-powered sales program to 100s of millions in revenue per year.

Researched AI-powered medical image search at the University of Waterloo, where he graduated with Engineering honors on dean's list.

“At Hamming, we're taking all of our learnings from Tesla and Citizento build the future of trustworthy, safe and reliable voice AI agents.”