nomoVM
Asterisk integration

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 decidesTiming rules: initial silence, greeting length, word length and countAcoustic model, tone detectors and recording fingerprints
TuningNine numbers in amd.conf or the dialplan, one set for all callsNone needed
"Hello? ... Hello?"Often MACHINE (long silence after short words)HUMAN
Short personal voicemail greetingOften HUMANMACHINE
Call screening assistantsUsually HUMANReported as SCREENING
Busy, SIT, fax, ringbackNot recognised as suchBUSY or TONE
Result variablesAMDSTATUS: HUMAN, MACHINE, NOTSURE, HANGUPAMDSTATUS: HUMAN, MACHINE, or FALLBACK (then run AMD())
CostFree, runs on your serverFree 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.