An Asterisk AMD alternative that listens
Asterisk AMD (the AMD() dialplan application) guesses from silence and word counts. nomoVM is a drop-in alternative that listens to how the answer sounds, and sets the same AMDSTATUS and AMDCAUSE variables so the rest of your dialplan does not change.
Asterisk AMD() vs nomoVM
| Asterisk AMD() | nomoVM | |
|---|---|---|
| How it decides | Timing rules: initial silence, greeting length, word length and count | Acoustic model, tone detectors and recording fingerprints |
| Tuning | Nine numbers in amd.conf or the dialplan, one set for all calls | None needed |
| "Hello? ... Hello?" | Often MACHINE (long silence after short words) | HUMAN |
| Short personal voicemail greeting | Often HUMAN | MACHINE |
| Call screening assistants | Usually HUMAN | Reported as SCREENING |
| Busy, SIT, fax, ringback | Not recognised as such | BUSY or TONE |
| Result variables | AMDSTATUS: HUMAN, MACHINE, NOTSURE, HANGUP | AMDSTATUS: HUMAN, MACHINE, or FALLBACK (then run AMD()) |
| Cost | Free, runs on your server | Free up to 30,000 calls a month, then from $99 |
There is no NOTSURE from nomoVM: an unclear call gets more listening time instead, and only a confident human is passed as HUMAN. See amd.conf settings explained if you want to understand what each AMD() number does.
Add it to any Asterisk dialplan
Asterisk 13 or newer, with EAGI (it's built in). Copy nomovm.agi.py to /var/lib/asterisk/agi-bin/, then replace your AMD() line:
; before
same => n,AMD()
; after
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})
Everything after that line reads AMDSTATUS as before. EAGI gives the script the call's audio on file descriptor 3; the script streams it in 100 ms frames to nomoVM and waits for one verdict.
Who uses it this way
- Custom Asterisk predictive dialers and power dialers
- FreePBX and Issabel systems that place outbound campaigns through Asterisk
- VICIdial and GoAutoDial, which run Asterisk underneath
On FreeSWITCH? See FreeSWITCH answering machine detection. Anything else that can stream 8 kHz, 16-bit audio can use the WebSocket API directly.
Stop sending voicemail to your agents
30,000 calls a month free. No card, no setup fee. Your dialer falls back to Asterisk AMD() on its own if anything goes wrong.