nomoVM
AI AMD for VICIdial, Asterisk and FreeSWITCH

AI answering machine detection for VICIdial

nomoVM is AI answering machine detection that listens to how a call is answered, not just how long the silence is. Live people reach your agents, voicemail and carrier recordings are dropped, and the decision takes about 2 seconds.

No card, no setup feeAny SIP carrierFalls back to AMD() on its own
How nomoVM decides in the first seconds of a call Three answered calls on a timeline from 0 to 3.2 seconds. A live hello is sent to an agent as HUMAN at 2 seconds, a voicemail greeting is dropped as MACHINE at 2 seconds, and an unclear call is decided at 3.2 seconds. answer2.0 s3.2 s "Hello?"VoicemailUnclear HUMAN → agent MACHINE → drop decided at 3.2 s

Stock AMD hangs up on the people you paid to reach

Asterisk's AMD(), which VICIdial and GoAutoDial use out of the box, decides by counting silences and word lengths. That works on a quiet line with a polite caller. Real answers are messier.

Live people dropped

Someone says "Hello?", waits, says "Hello?" again. Long silence plus short words looks like a machine, so the call is dropped and a lead is burned.

Voicemail sent to agents

A short greeting ("Hi, it's Sam, leave a message") ends before AMD is sure. The agent hears a beep instead of a customer, again and again.

Dead air and ghost calls

While AMD waits to be sure, the person who answered hears nothing and hangs up. Too many of those and your numbers get flagged as spam. Why dead air happens

Measured, not promised

Results on 400 hand-labelled calls the model never saw in training, from a real outbound day. We publish where it fails too.

94.9%

of live people sent to agents

88%

of the calls sent to agents were people

~2.0 s

answer to verdict for most calls; unclear ones get up to 3.2 s

1,489

known carrier recordings recognised from the very first call

How we measured it, and the errors that remain →

How it works

One script on your dialer, one change to your dialplan. Your agents, carriers and campaigns stay as they are.

  1. The call is answered

    Your VICIdial or Asterisk server runs nomovm.agi.py in the AMD extension. It streams the first seconds of audio to nomoVM over an encrypted WebSocket.

  2. The model listens

    An acoustic model hears the difference between a person's hello and a recorded greeting. Tone detectors catch busy, SIT, fax and ringback; a fingerprint check catches the same "Hello?" recording played to thousands of numbers.

  3. Your dialplan gets a verdict

    AMDSTATUS is set to HUMAN or MACHINE, the same variable VICIdial's VD_amd.agi already reads. If anything goes wrong, it is FALLBACK and Asterisk's own AMD() takes the call.

Step-by-step VICIdial AMD setup

Built for outbound call centers

Acoustic AI model

Trained on real answered calls at 8 kHz telephone quality. It hears breath, room noise and the rhythm of a real hello. How the AI decides

Call screening detection

Google Call Screen and iPhone screening answer like a person but are machines. nomoVM reports them as SCREENING so you choose what happens. More on screening

Tones and carrier recordings

Busy, reorder, SIT, fax and ringback are recognised by their frequencies, and repeated carrier recordings by their fingerprint, before the model is even asked.

Never loses a call

Wrong key, plan limit reached, service unreachable: the call falls back to Asterisk AMD() before any audio is used. Fallback calls are never billed.

Call logs and recordings

Every verdict with its cause, confidence and timing. Listen to the audio the model heard, export CSV, delete recordings any time, keep them 1 to 90 days.

White-label ready

Run the WebSocket and dashboard on your own domain with your logo, for your own customers. White-label AMD

Works with the dialer you already run

nomoVM hears the audio your Asterisk or FreeSWITCH server already has, so it works with any carrier and any SIP trunk. Nothing about your call routing changes.

The whole dialplan change

exten => 8370,n,EAGI(nomovm.agi.py,wss://amd.nomovm.com/,KEY,4500)
exten => 8370,n,GotoIf($["${AMDSTATUS}" = "FALLBACK"]?native)
exten => 8370,n(vdamd),AGI(VD_amd.agi,${EXTEN})

Copy your existing 8369 AMD extension, add these lines, and point the campaign at 8370.

Simple pricing

Pay for calls judged. Unlimited servers on every paid plan. Fallback calls and health checks are never billed.

Free

$0 / month

30,000 calls a month

Start free

Starter

$99 / month

1,000,000 calls a month

Choose Starter

Scale

$499 / month

10,000,000 calls a month

Choose Scale

More than 10 million calls a month? Talk to us about Enterprise. Full pricing details

Common questions

What is answering machine detection (AMD)?

Answering machine detection is the step where an outbound dialer decides, in the first seconds after a call is answered, whether a live person or a machine picked up. Live people are connected to an agent; voicemail, carrier messages and fax tones are dropped or get a recorded message.

How accurate is nomoVM?

On 400 hand-labelled calls the model had never seen, nomoVM sent 94.9% of live people to agents, and 88% of the calls it sent to agents were people. The full numbers, including where it fails, are on the measured accuracy page.

How long does a verdict take?

About 2 seconds after answer for most calls. When the first 2 seconds are unclear (5 to 9% of calls), it listens up to 3.2 seconds before deciding.

What do AMDSTATUS and AMDCAUSE mean?

AMDSTATUS is HUMAN or MACHINE, the same variable VICIdial's VD_amd.agi already reads. AMDCAUSE says why: HUMAN, MACHINE, SCREENING, SILENCE, TONE, BUSY or UNKNOWN. AMDSTATUS is HUMAN only when AMDCAUSE is HUMAN.

What happens if the service is down or my key is wrong?

The client sets AMDSTATUS to FALLBACK before any audio is used, so your dialplan runs Asterisk's own AMD() for that call. No call is lost and fallback calls are never billed.

All answering machine detection questions →

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.