Why add AI AMD to VICIdial
VICIdial's built-in AMD is Asterisk's AMD() application. It decides from silence and word timing: how long before the first word, how many words, how long the pause after. That works on long, chatty greetings. It fails on the calls that matter most: a person who says "Hello?" and waits, a short personal greeting, a call screening assistant or a recorded "Hello?" robot. Tuning amd.conf moves those errors around but does not remove them. If that sounds familiar, VICIdial AMD not working covers the usual causes.
The usual workaround is to turn AMD off and let agents listen to voicemail all day. That keeps the live people but burns agent time on greetings, carrier messages and fax tones. Neither choice is good, and neither is necessary.
AI answering machine detection listens to the sound of the answer instead. nomoVM plugs into the same place in VICIdial where AMD() sits today, and sets the same AMDSTATUS variable that VICIdial already reads. Everything after the decision stays the same: VD_amd.agi, AA statuses, your voicemail drop settings, your agents and your carrier.
Before you start
Check these on each dialer server. None of them should need new software on a current ViciBox install:
- Root shell access to the dialer server
- Asterisk 13 or newer:
asterisk -rx "core show version" - Python 3.6 or newer:
python3 --version(ViciBox 11 and 12 already have it) - Outbound HTTPS on port 443 from the dialer to
amd.nomovm.com - A campaign with AMD already on, using Routing Extension
8369
There is no additional infrastructure required. You do not add servers, buy hardware or change carriers. nomoVM listens to the audio your dialer already has and streams the first seconds of each answered call over an encrypted WebSocket.
The same steps work on GoAutoDial, scratch VICIdial installs and multi-server clusters, as long as Asterisk is version 13 or newer. You do not need to upgrade VICIdial first.
Here is roughly how the 10 minutes break down:
| Step | What you do | Rough time |
|---|---|---|
| 1 | Create a key in the dashboard | 1 minute |
| 2 | Copy nomovm.agi.py to the server | 2 minutes |
| 3 | Run the built-in test | 1 minute |
| 4 | Add extension 8370 and reload | 3 minutes |
| 5 | Change one campaign's Routing Extension | 1 minute |
| 6 | Watch the first calls in the dashboard | 2 minutes |
Step-by-step: add AI AMD to VICIdial
-
Create a key
Sign up for nomoVM. The Free plan covers 30,000 calls a month and needs no card. Open WS keys and create one key per dialer server, named after the server, so the dashboard shows each server's calls separately. Copy the key when it is shown. It starts with
amd_live_. -
Install the script
Download
nomovm.agi.pyfrom the WS keys page of your dashboard and copy it to the Asterisk AGI folder on the dialer:scp nomovm.agi.py root@dialer1:/var/lib/asterisk/agi-bin/ ssh root@dialer1 cd /var/lib/asterisk/agi-bin chmod 755 nomovm.agi.py python3 --versionThe script uses only Python's standard library, so there is nothing to
pip install. -
Test the connection
Before any live call touches it, run the test mode with your key:
python3 /var/lib/asterisk/agi-bin/nomovm.agi.py --test wss://amd.nomovm.com/ YOUR_KEYIt streams a few seconds of silence, like a real call where nobody speaks, and should print
AMDSTATUS=MACHINE AMDCAUSE=SILENCEin about 2 seconds. If it prints FALLBACK instead, jump to troubleshooting. -
Add extension 8370
VICIdial sends answered AMD calls to extension
8369. Leave it alone and add a copy,8370, in/etc/asterisk/extensions.conf, in the same context as your8369(usually[default]):exten => 8370,1,AGI(agi://127.0.0.1:4577/call_log) exten => 8370,n,EAGI(nomovm.agi.py,wss://amd.nomovm.com/,YOUR_KEY,4500) exten => 8370,n,GotoIf($["${AMDSTATUS}" = "FALLBACK"]?native) exten => 8370,n(vdamd),AGI(VD_amd.agi,${EXTEN}) exten => 8370,n,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB-----${CONNECTEDLINE(name)}) exten => 8370,n,Hangup() exten => 8370,n(native),AMD(2000,2000,1000,5000,120,50,4,256) exten => 8370,n,Goto(vdamd)Copy theVD_amd.agiandagi-VDAD_ALL_outbound.agilines from your own8369rather than from this page. Some installs pass extra options, and those should stay exactly as they are.What each line does: the first logs the call for VICIdial. The
EAGIline runs nomoVM with a 4500 ms client timeout and setsAMDSTATUSandAMDCAUSE. If the result is FALLBACK, the call jumps to thenativelabel and runs Asterisk'sAMD()instead. Either way it ends up atVD_amd.agi, which routes the call just as it does today. Reload and check:asterisk -rx "dialplan reload" asterisk -rx "dialplan show 8370@default" -
Switch one campaign
In the VICIdial admin, open Campaigns and pick one campaign to start with. Change Routing Extension from
8369to8370. Leave AMD send to VM exten and your voicemail message settings as they are. Submit. -
Watch the first calls
Open the nomoVM dashboard. Calls appear within seconds, each with its verdict, its cause and the time from answer to verdict. Most calls are decided about 2 seconds after answer; only unclear calls listen up to 3.2 seconds.
Verify it is working
Give the campaign an hour or a day of normal traffic, then check three things:
- Dashboard: verdicts and causes look sensible. Listen to a few recordings on the Call logs page to hear what nomoVM heard. Recording is optional; you can turn it off or keep recordings from 1 to 90 days.
- VICIdial: compare the campaign's AA count and agent-connected count with the days before. You should see more "Hello?" calls reaching agents and fewer greetings.
- Agents: ask them. They notice quickly when fewer people are dropped and fewer voicemails come through. Calls screened by Google or iPhone assistants show up in the dashboard with the cause SCREENING.
For context, on 400 real outbound calls checked by a person, none of them used to build nomoVM, it sent 94.9% of live people to agents, and 88% of calls sent to agents were live people. The accuracy page explains how that was measured. When you are happy with the results, switch the remaining campaigns.
Roll back in one step
Set the campaign's Routing Extension back to 8369 and submit. That is the whole rollback. Extension 8370 can stay in the dialplan doing nothing until you want it again. Nothing about your carrier, your agents, your lists or VD_amd.agi was changed.
AMD(). Fallback calls are never billed.Troubleshooting
The test prints FALLBACK AUTH
The key is wrong or was copied with a missing character. Create a new key in the dashboard and run the test again. Check the same key is in the EAGI line of extension 8370.
The test prints FALLBACK NOSERVER
The dialer cannot reach amd.nomovm.com. Check DNS on the server and that outbound connections on port 443 are allowed by the server firewall and any network firewall in front of it.
FALLBACK QUOTA or SUSPENDED in the Asterisk log
Check your plan and account status in the dashboard. Calls keep working through Asterisk's AMD() while you sort it out.
No calls appear in the dashboard
The campaign is still on 8369, the dialplan reload did not take, or the extension is in a different context from 8369. Run dialplan show 8370@default and check the campaign's Routing Extension.
"python3: not found"
Install Python 3 from your distribution's packages. On openSUSE-based ViciBox: zypper install python3.
Agents notice a delay before the customer speaks
Verdicts take about 2 seconds after answer, similar to a typical AMD setting. If calls in the dashboard show longer times, check the network path from the dialer. For more on silence after answer, see dead air calls.
Multi-server clusters
Repeat steps 2 to 4 on every dialer server, each with its own key. A campaign can place calls on any dialer, so 8370 must exist everywhere before you switch the campaign.
What it costs and where to go next
nomoVM bills one call per verdict on an answered call. There are no per-server or per-agent fees, and servers are unlimited. The Free plan covers 30,000 calls a month as a hard limit and is never billed. Starter is $99 a month for 1,000,000 calls, Growth $199 for 3,000,000 and Scale $499 for 10,000,000. See pricing for details, and VICIdial AMD for how the integration works.
Ready? Create your free account and keep the VICIdial AMD setup guide open while you work.
Frequently asked questions
How long does it take to add AI AMD to VICIdial?
About 10 minutes per dialer server for most admins: create a key, copy one script, run a test, add one extension and change one campaign's Routing Extension. Multi-server clusters repeat the script and extension steps on each dialer.
Do I need new servers or a new carrier for VICIdial AI AMD?
No. nomoVM is hosted, and the script runs on the VICIdial servers you already have. It listens to the audio your server already receives, so your carrier, routes and agents stay the same.
What do I need installed on the VICIdial server?
Python 3.6 or newer and Asterisk 13 or newer. The script uses only Python's standard library, and ViciBox 11 and 12 already include Python 3. The server also needs outbound HTTPS on port 443 to amd.nomovm.com.
What happens if nomoVM is unreachable during a call?
If the key is wrong, the plan limit is reached or the service cannot be reached, the script returns FALLBACK before any audio is used. The dialplan then runs Asterisk's own AMD() for that call, so the call is still handled. Fallback calls are never billed.
How do I roll back to VICIdial's original AMD?
Set the campaign's Routing Extension back to 8369 and submit. Nothing else in VICIdial was changed, so the campaign is immediately back on Asterisk AMD.
Does this work on GoAutoDial?
Yes. GoAutoDial runs VICIdial on Asterisk, so the same script, the same 8370 extension and the same Routing Extension change apply, as long as Asterisk is version 13 or newer.