The question behind Asterisk AMD vs AI AMD
Every outbound dialer with answering machine detection makes the same bet on every answered call: send it to an agent, or don't. Get it wrong one way and an agent hears a voicemail greeting. Get it wrong the other way and a live person hears silence, then a hangup, and you never find out.
Asterisk's built-in AMD() application has been the default way to make that bet for years. VICIdial, GoAutoDial and most custom Asterisk dialers use it. AI answering machine detection, such as nomoVM, makes the same decision a different way. This post puts the two next to each other on the things that matter in production: how they decide, how they handle real answers, how fast they are, how much tuning they need, what they cost and what happens when they fail.
How each one decides
Asterisk AMD(): timing rules
AMD() measures sound energy on the line and turns it into a pattern of silences and "words". It then applies rules set in amd.conf or in the AMD() arguments: how long the line may stay silent after answer (initial_silence, 2500 ms by default), how long a greeting may last (greeting, 1500 ms), how much silence after a greeting means a person is waiting (after_greeting_silence, 800 ms), how many words are allowed (2 or 3, depending on version) and how long it may listen in total (total_analysis_time, 5000 ms). Short speech followed by silence means HUMAN. Long speech, many words or a long initial silence means MACHINE. Running out of time means NOTSURE. Each setting is covered in amd.conf settings explained.
The key point: AMD() never considers what the sound is. A recorded "Hello?" and a live "Hello?" with the same timing get the same answer.
AI AMD: listening to the answer
nomoVM's dialer script streams the first seconds of the answered call over an encrypted WebSocket to a hosted AI model, which listens to the audio and returns one verdict. It recognizes live people, voicemail greetings, call screening assistants, silence, busy and reorder tones, SIT, fax, ringback, beeps and recorded "Hello?" robots. The result comes back in the same variables Asterisk uses: AMDSTATUS is HUMAN, MACHINE or FALLBACK, and AMDCAUSE says why (HUMAN, MACHINE, SCREENING, SILENCE, TONE, BUSY or UNKNOWN). AMDSTATUS is HUMAN only when the cause is HUMAN. More on the approach is on the AI answering machine detection page.
Real answer scenarios, side by side
Here is how the two approaches tend to handle answers every outbound center sees daily. The Asterisk column describes what the timing rules do with each pattern; the exact outcome depends on your settings.
| What answers | Asterisk AMD() | AI AMD (nomoVM) |
|---|---|---|
| A person says "Hello?" and waits | HUMAN, after the after-greeting silence | HUMAN |
| A person says "Hello? ... Hello?" with a pause | Often MACHINE: extra words, or a long silence before speaking | HUMAN |
| A person answers with a full sentence | Often MACHINE: LONGGREETING or MAXWORDS | HUMAN |
| A short personal greeting ("Hi, it's Sam") | Often HUMAN: short speech, then silence | MACHINE |
| A long voicemail greeting | MACHINE | MACHINE |
| A call screening assistant | Usually HUMAN | MACHINE, cause SCREENING |
| A recorded "Hello?" robot | HUMAN: it is timed to look like a person | MACHINE |
| Busy, reorder, SIT, fax, ringback | Not recognized as such; ends as MACHINE, HUMAN or NOTSURE depending on its timing | BUSY or TONE |
| Nobody speaks | MACHINE, INITIALSILENCE | MACHINE, cause SILENCE |
The pattern is consistent. Timing rules do fine on the textbook cases: a crisp "Hello?" and a long, formal greeting. They struggle on everything in between, because people and recordings overlap in timing. A person driving with a headset and a three-word voicemail greeting can produce almost the same pattern of sound and silence.
AI AMD is not perfect either. nomoVM publishes both of its error numbers: on 400 real outbound calls checked by a person, none of them used to build nomoVM, 94.9% of live people were sent to agents and 88% of calls sent to agents were live people. The errors that remain are very quiet answers, people talking to someone else, noisy lines, short personal greetings and brand-new recordings built to sound human. See the accuracy page for how those numbers were measured.
Speed and dead air
Speed matters because AMD time is silence for the person who answered. In the US, a call counts as abandoned if it is not connected to a live agent within 2 seconds of the person's completed greeting, and abandoned calls are limited to 3% of answered calls per campaign per 30 days; UK Ofcom has similar rules. This is not legal advice; check with counsel.
- Asterisk AMD() decides a human when the greeting is followed by the after-greeting silence, so a person who says a short "Hello?" waits for that silence (800 ms by default, 1000 ms in the common VICIdial line) after they stop talking. Unclear calls can run to
total_analysis_time, 5 seconds by default, and then end as NOTSURE anyway. - nomoVM decides most calls about 2 seconds after answer. Only unclear calls listen longer, up to 3.2 seconds. The client timeout is 4,500 ms.
In practice the two land in a similar range for a clean "Hello?". The difference is on the awkward calls: AI AMD listens a little longer only when the call is unclear, while timing rules apply the same thresholds to every call. If dead air is a problem for you, the dead air calls page goes deeper.
Tuning, cost and failure handling
Tuning effort
AMD() has nine numbers and one set of values applies to every call on that extension. Changing them helps one type of answer and hurts another, and you can only see the effect by labelling calls by hand. Many centers end up living with whatever the install shipped. AI AMD has nothing to tune: you add it to the dialplan and route on the result.
Cost
| Asterisk AMD() | nomoVM | |
|---|---|---|
| Per-call fee | None | Free up to 30,000 calls a month; then plans |
| Monthly plans | None | $99 for 1,000,000 calls, $199 for 3,000,000, $499 for 10,000,000 |
| Overage | None | $0.0002 per extra call on paid plans |
| Infrastructure | Your Asterisk server | The same server, plus one script; no per-server or per-agent fees |
AMD() is free per call, but its errors are not. A live person dropped is a paid dial and a lost conversation; a machine sent to an agent is agent time. Use the ROI calculator to put your own numbers on that.
Failure handling
AMD() runs inside Asterisk, so it fails when Asterisk fails. Its "I don't know" answer is NOTSURE, and your dialplan has to decide what to do with it. (VICIdial admins often meet this one; see VICIdial AMD NOTSURE.)
nomoVM is a hosted service, so it is designed around the case where the service can't help. If the key is wrong, the plan limit is reached or the service can't be reached, it returns FALLBACK (with cause AUTH, SUSPENDED, QUOTA or NOSERVER) before any audio is used. The dialplan then runs Asterisk's own AMD() for that call, exactly as before. Fallback calls are never billed. If something fails after audio has started streaming, such as a timeout, the call is treated as MACHINE with cause UNKNOWN, so only a confirmed person reaches an agent.
same => n,EAGI(nomovm.agi.py,wss://amd.nomovm.com/,YOUR_KEY,4500)
same => n,GotoIf($["${AMDSTATUS}" = "FALLBACK"]?native:decided)
same => n(native),AMD()
same => n(decided),NoOp(AMD says ${AMDSTATUS} / ${AMDCAUSE})
That means the realistic comparison isn't AI AMD instead of Asterisk AMD. It is AI AMD in front, with your existing AMD() kept as the safety net.
When stock AMD() is enough
AI AMD is not the right choice for every dialer. Stock AMD() is a sensible choice when:
- Your measured numbers are acceptable. If you have labelled a sample and you're happy with both the live people kept and the share of agent calls that are people, there's nothing to fix.
- Volume is low. If you dial at low ratios and agents can handle the machines that get through, a few extra greetings may cost less than any change.
- Audio can't leave your network. AI AMD here is a hosted service that hears the first seconds of each answered call. If a policy or contract rules that out, keep AMD() and tune it with care.
- AMD isn't routing anything. If every call goes to an agent anyway, detection only adds delay.
If none of these apply, and especially if your agents complain about voicemail while your connect rate seems low, the timing rules are probably costing you on both sides.
Trying AI AMD next to Asterisk AMD
You don't have to choose blind. nomoVM installs as one script on the Asterisk server you already run: no new servers, no hardware and no carrier change, and it works with any SIP carrier because it only listens to audio the dialer already has. Setup takes about 10 minutes. Run it on one campaign and keep your current AMD() on a similar one, then compare the two using the method in how to test AMD accuracy.
The free plan covers 30,000 calls a month with no card, which is enough for a fair test. Read the Asterisk AMD integration page or, on VICIdial, the VICIdial AMD setup guide, then sign up free and put the two side by side on your own calls.
Frequently asked questions
Is AI AMD always more accurate than Asterisk AMD()?
Not on every call, and no AMD is perfect. The difference shows on the answers timing rules can't tell apart, such as short personal greetings, a hesitant Hello with a pause, call screening assistants and recorded hellos. Measure both on your own traffic before deciding.
Is AI AMD slower than Asterisk AMD()?
Not usually. nomoVM decides most calls about 2 seconds after answer and listens up to 3.2 seconds only on unclear calls. Asterisk AMD() decides when its timing rules fire, which for a person is the greeting plus the after-greeting silence, and it can listen up to its total analysis time, 5 seconds by default.
Does nomoVM return NOTSURE like Asterisk AMD()?
No. nomoVM returns HUMAN, MACHINE or FALLBACK. An unclear call gets more listening time instead of a NOTSURE, and only a confirmed person is returned as HUMAN. FALLBACK means the service could not judge the call, so the dialplan runs AMD() instead.
What happens to my calls if the AI service is down?
If nomoVM cannot be reached or cannot accept the call, it returns FALLBACK before any audio is used and the dialplan runs Asterisk's own AMD() for that call. Fallback calls are never billed. If a failure happens after streaming has started, the call is treated as MACHINE with cause UNKNOWN.
How much does AI AMD cost compared with Asterisk AMD()?
Asterisk AMD() is free and runs on your server. nomoVM is free up to 30,000 calls a month, then $99 a month for 1,000,000 calls, $199 for 3,000,000 and $499 for 10,000,000, with no per-server or per-agent fees.
When should I keep using Asterisk AMD()?
Keep it if your measured results are already acceptable for your campaigns, if your volume is low enough that agents can handle the machines that get through, or if a policy stops you sending call audio to a hosted service. It also stays useful as the fallback behind an AI service.