vicigeeksimple guides
Browse
All guides

Carriers & SIP · Carrier quality · call outcomes

Dead air and fake answers: collect carrier evidence before changing AMD

VICIdial logs a call as picked up the instant a carrier signals Answer, before an agent is ever involved, and AMD listens against that same window. A carrier that signals Answer early starts the clock on nothing; separate that from list quality and genuine AMD misclassification before changing any AMD setting.

Reader setup

Before you diagnose

  1. The read-only account and option file from Create a read-only database account for safe VICIdial queries, needed before either query below will run.
  2. At least two comparable routes or carriers already carrying the same campaign's traffic, so outcomes can be compared across routes rather than only before-and-after one point in time.
  3. The exact date any carrier, route, or AMD setting last changed, since every comparison below is only honest when you know what else moved on the same day.
Expected result
You can compare recorded status counts and identify evidence needed to investigate carrier signaling, audio delivery and AMD classification before changing a setting.
Before making changes
Do not change AMD, dial ratio, or carrier routing from this guide; its evidence tells you which of this library's other guides to open next, and it deliberately stops short of making that change itself.

AMD and FAS are two different failures

AMD, or Answering Machine Detection, is Asterisk's automatic check, in the first second or two after a call connects, for whether a human or a machine answered. FAS, or false answer supervision, is a separate and carrier-side problem entirely: a carrier's switch reporting a call as answered before anyone, human or machine, has actually picked up.

These are two different failures, and the forum report that prompted this guide conflates them in its own title — worth separating here so you diagnose the right one instead of assuming AMD broke just because a carrier changed.

A VICIdial forum thread reports over 40 percent of connected calls coming back as dead air or an answering machine, with AMD already on, right after a carrier change — asking, in effect, whether the carrier is the problem or AMD is.

Trace path · read left to right
01Carrier Answer signal (PU)02ADAIR vs AA/AM/AL split03Carrier dispute or AMD tuning
Reference screenshots 3 images

Reference capture

Reference screens from the demo

Captured on an isolated VICIdial demo: Administration screens on September 24, 2026, and the idle Agent screen on August 11, 2026. Each caption states its own capture time, and every sanitized image helps you recognize a related screen; none proves that this article's call, command, or result occurred.
Step 1 · Locate Carriers

Find carrier administration

Open to enlarge
Sanitized VICIdial Administration menu showing phones, carriers, servers, system settings, and system statuses
Captured September 24, 2026 at 21:34:11 UTC on the authorized isolated demo.
Capture detailsThis menu is a navigation map only; it does not show that any system-wide setting was changed or verified.
Step 2 · Review the carrier list

Open Carrier Listings

Open to enlarge
Sanitized VICIdial Carrier Listings page showing only the stock example carriers
Captured September 24, 2026 at 21:53:32 UTC on the authorized isolated demo.
Capture detailsOnly stock example carrier rows are shown, with addresses replaced and registration values redacted; no real carrier is present. This does not prove registration, routing, audio quality, or a completed call.
Step 3 · Confirm system SIP context

Check the allowed SIP-stack setting

Open to enlarge
Sanitized VICIdial Modify System Settings page showing revision, schema, interface, SIP-stack, and API-related controls
Captured August 11, 2026 at 16:22:08 UTC on the authorized isolated demo.
Capture detailsThis is a read-only view of system-wide settings with no credentials or addresses; it does not prove that a setting was changed or that an API request succeeded.

Both failures share the same post-answer window

VICIdial marks a call PU, meaning "Call Picked Up," the instant the carrier sends the Answer signal — its own status reference is explicit that this happens "before the call is sent on to an agent." AMD then listens against that same post-answer window to decide whether a human or a machine picked up.

An early Answer signal can start answer-based timing before a person picks up. Billing depends on the carrier agreement and its records. AMD observes the available audio; a dead-air status alone cannot prove the carrier sent Answer early.

This is why the complaint reads as one thing and can be two: a rising dead-air or machine share costs you both ways, in agent time spent on calls that were never truly live and in per-minute charges for connections that only exist on the carrier's own meter. Telling which side actually caused a given call's outcome is the entire point of the split below.

Choose the next hypothesis from evidence

A carrier change is a time marker, not a likelihood ranking. Compare comparable leads and the same window across available routes. Work through signaling, media, list mix and AMD evidence separately.

  • Signaling hypothesis: an answer timestamp precedes known test-endpoint pickup; collect both sides before calling it FAS.
  • Media hypothesis: received audio is absent or one-way; compare SDP/RTP direction and timing with the network owner.
  • List hypothesis: routes carried leads of different age or prior-attempt history; match cohorts before comparing shares.
  • AMD hypothesis: authorized labeled greetings disagree with classifications under the same route/settings; use the separate AMD test procedure.

Query the official status split this triage depends on

VICIdial maps ADAIR to AMD’s NOAUDIODATA cause. That is not the same observation as receiving audio frames containing initial silence. AMD can return MACHINE when initial silence exceeds initialSilence, so AA/AM/AL do not prove that a recorded machine greeting was heard. They record classification/handling stages; identify AMDCAUSE and the media direction before assigning cause.

Count these statuses over the same campaign/window, then compare validated carrier groups. A split is an investigation clue; it does not establish false answer supervision, a human greeting or the absence of received RTP.

Before you use it
Run this over the full suspect window first, so you know the overall size of the dead-air share versus the machine-classified share before breaking either one down further.
Count ADAIR against the AA/AM/AL family
SELECT status, COUNT(*) AS calls FROM vicidial_log WHERE campaign_id = '<CAMPAIGN_ID>' AND call_date BETWEEN '<START_DATETIME>' AND '<END_DATETIME>' AND status IN ('ADAIR','AA','AM','AL') GROUP BY status;
Evidence · ViciBox 12 demo capture · demo values substituted

Captured demo response · 2026-09-23 21:35 UTC. Any filtering, hidden values or test-only data are identified in the capture label. Select Replay transcript to read the recorded output.

Command output line: SELECT status, COUNT(*) AS calls FROM vicidial_log WHERE campaign_id = 'KPISYN1' AND call_date BETWEEN '2026-09-16 00:00:00' AND '2026-09-23 00:00:00' AND status IN ('ADAIR','AA','AM','AL') GROUP BY status;
(no output)
Success looks like
The two families are roughly proportioned the way they were before your suspected change, or you already have a sourced explanation for why they should now differ.
Stop if
If ADAIR rises, investigate audio and answer signaling as well as AMD configuration. Compare the same interval and call population; these counts alone do not identify the cause.
Interpret the evidence before tuningScroll sideways to compare columns
ObservationEstablishesNext evidence
ADAIR / NOAUDIODATAThe configured AMD no-audio-data outcomeAMDCAUSE, received-media timing and the customer/agent direction.
AA / AM / ALAn automated machine classification or message-handling stageLabeled authorized audio and actual AMD cause; initial silence can classify MACHINE.
Early carrier answer suspectedA hypothesis about signaling before actual pickupCorrelate provider signaling and a controlled endpoint’s answer time.

Break the same split down by carrier

The example below derives a label from the channel name. Naming conventions vary and hyphens can occur in endpoint names, so confirm the derived label against your routing configuration before treating it as a carrier ID. Also check whether the join produces more than one carrier-log row per call; duplicates inflate counts.

Before you use it
Validate the channel-name parsing and the number of carrier-log rows per call on your build before using these counts. Hyphenated endpoint names and multiple rows per call can make the grouping or totals wrong.
Compare dead-air and AMD share across carriers
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(vcl.channel, '-', 1), '/', -1) AS carrier_id, SUM(vl.status = 'ADAIR') AS dead_air, SUM(vl.status IN ('AA','AM','AL')) AS amd_classified, COUNT(*) AS total_calls FROM vicidial_carrier_log vcl JOIN vicidial_log vl ON vl.uniqueid = vcl.uniqueid WHERE vl.campaign_id = '<CAMPAIGN_ID>' AND vl.call_date BETWEEN '<START_DATETIME>' AND '<END_DATETIME>' GROUP BY carrier_id;
Evidence · ViciBox 12 demo capture · demo values substituted

Captured demo response · 2026-09-23 21:35 UTC. Any filtering, hidden values or test-only data are identified in the capture label. Select Replay transcript to read the recorded output.

Command output line: SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(vcl.channel, '-', 1), '/', -1) AS carrier_id, SUM(vl.status = 'ADAIR') AS dead_air, SUM(vl.status IN ('AA','AM','AL')) AS amd_classified, COUNT(*) AS total_calls FROM vicidial_carrier_log vcl JOIN vicidial_log vl ON vl.uniqueid = vcl.uniqueid WHERE vl.campaign_id = 'KPISYN1' AND vl.call_date BETWEEN '2026-09-16 00:00:00' AND '2026-09-23 00:00:00' GROUP BY carrier_id;
(no output)
Success looks like
After validating grouping and denominator, compare routes carrying similar traffic. A difference is a lead for investigation, not proof of carrier-side fault.
Stop if
A similar share across routes does not identify the cause. Compare audio-path, list and AMD evidence for the same time window.

Hold the list constant while you compare routes

Before treating a carrier-level difference as proof, confirm the two routes were actually carrying the same list, or at least comparable ones, during the window you queried. A route that happened to carry an older, more-worked list will show a higher machine and dead-air share for reasons that have nothing to do with the carrier, which is exactly the confusion the second ranked cause above describes.

Compare an existing period where both routes handled comparable leads. A new split would change live routing and needs a separate, authorized test plan; this guide does not direct that change.

Confirm what your installed AMD actually supports

One read-only check confirms what your installed Asterisk actually supports for AMD, rather than assuming its arguments from a version used somewhere else.

Before you use it
Run this on the Asterisk host itself; AMD is a dialplan application, not a campaign setting, so this shows what your installed version actually accepts.
Read the installed AMD application's own help text
asterisk -rx 'core show application AMD'
Evidence · ViciBox 12 demo capture · output shortened

Captured demo response · 2026-09-23 21:35 UTC. Any filtering, hidden values or test-only data are identified in the capture label. Select Replay transcript to read the recorded output.

Command output line: asterisk -rx 'core show application AMD'
-= Info about application 'AMD' =-
[Synopsis]
Attempt to detect answering machines.
[Description]
This application attempts to detect answering machines at the beginning of
outbound calls. Simply call this application after the call has been answered
(outbound only, of course).
When loaded, AMD reads amd.conf and uses the parameters specified as default
values. Those default values get overwritten when the calling AMD with
parameters.
This application sets the following channel variables:
${AMDSTATUS}: This is the status of the answering machine detection
MACHINE
HUMAN
NOTSURE
HANGUP
${AMDCAUSE}: Indicates the cause that led to the conclusion
TOOLONG: Total Time.
INITIALSILENCE: Silence Duration - Initial Silence.
HUMAN: Silence Duration - afterGreetingSilence.
LONGGREETING: Voice Duration - Greeting.
MAXWORDLENGTH: Word Length - max length of a single word.
MAXWORDS: Word Count - maximum number of words.
[Syntax]
AMD([initialSilence][,greeting[,afterGreetingSilence[,totalAnalysis Time[,miniumWordLength[,betweenWordSilence[,maximumNumberOfWords[,silenceThreshold[,maximumWordLength[,audioFile]]]]]]]]])
[Arguments]
initialSilence
Is maximum initial silence duration before greeting.
If this is exceeded, the result is detection as a MACHINE
greeting
is the maximum length of a greeting.
... (29 more lines not shown)
Success looks like
The help text returns for your installed version, confirming which arguments and return values are actually available before comparing them to anything a carrier or a forum post claims.
Stop if
AMD is absent, or the help text is for a version you were not expecting — stop and confirm your actual Asterisk version before trusting any AMD-related comparison.

Route the evidence, do not reach for a setting

Share a validated route comparison and relevant timestamps with the carrier and your telephony administrator. Investigate signaling and media on both sides; ADAIR counts alone do not prove a carrier fault.

Route AMD-classified evidence instead to Tune AMD without burning good leads, this library's dedicated AMD-tuning guide, which covers building a labelled corpus and testing a candidate setting safely; this guide does not repeat that method here. If dial pacing itself turns out to be a contributing factor, Optimize VICIdial dial ratios and AMD for better connection rates covers measuring and adjusting that separately.

Repeat the same comparison after the dispute or the tuning change

Repeat the same grouped query, by status and by carrier, over a comparable later window once the carrier dispute or the AMD-tuning guide's own change has actually taken effect.

  • The ADAIR share for the previously affected carrier has moved back toward its earlier baseline.
  • Record the AA/AM/AL share and other changes in the same period; a change in the share alone does not establish which change caused it.
  • Record the dates of relevant changes and avoid assigning causation from timing alone.

When to stop and hand this to someone else

Escalate rather than re-running the same query hoping for a different answer when the carrier disputes your evidence outright, when an AMD change already made through a proper canary test itself raises the false-machine rate, or when the same pattern reproduces across multiple carriers at once — that last one in particular points back at your own configuration, not at any one carrier.

Checks and sources

What was checked

  • VICIDIAL_statuses.txt defines PU as the status set "as soon as the carrier has sent the Answer signal and before the call is sent on to an agent," which this guide's mechanism section relies on directly.
  • The same reference defines ADAIR as "Dead Air Auto, for AMD NOAUDIODATA calls," distinct from the AA/AM/AL family this guide compares it against.

Primary references

Sources

  1. Is my carrier scamming me (FAS)? Over 40% of connected calls are dead air or answering machines with AMD onVICIdial forum · accessed September 23, 2026
  2. VICIdial StatusesVICIdial · accessed September 23, 2026

Follow without guesswork

Get the next article

RSS is live now. Email delivery below is an explicit local preview and sends nothing.Open the RSS feed
Email preview only. The address stays in this browser and is never transmitted.