There is no universally safe setting. Twilio ships MachineDetectionSpeechThreshold at 2,400 ms and LiveKit ships human_speech_threshold at 2.5 seconds, and both numbers cut humans and machines with the same blade. Work out your false-machine cost ratio first: in the worked example below, a 60% machine-answer rate makes tightening a losing trade.
How do I stop my agent leaving a voicemail on a call a real person answered
Answering machine detection (AMD) is expensive in both directions, and the two errors are cured by opposite changes. Push the detector towards machine and a receptionist’s greeting is read as a recording, so a live prospect gets a voicemail script. Push it towards human and your agent talks to a mailbox and leaves nothing.
Every vendor knob is a position on that one axis. Vapi’s troubleshooting page proves it: to cure false positives, raise startAtSeconds to 3–4 seconds; to cure missed voicemails, lower the same field to 1–2 seconds. Same control, opposite advice, because the right answer depends on what each error costs you. If detection is already misfiring and you need the cause, start with diagnosing AI voice agent voicemail detection failures, then come back to choose the setting.
Day one: five steps to a setting you can defend
- Pull 200 answered calls with recordings and label them by hand as human, mailbox, IVR or screening prompt. Roughly three hours of listening, and nothing downstream is valid without it.
- Count your machine base rate — machines divided by total answered. This number moves the answer more than any threshold.
- Price both errors using the cost ratio below.
- Pick a detection mode from the table, not a millisecond value.
- Re-run the labelled set and record both error rates.
Finish state: you can say in one sentence how many mailboxes your setting catches per live human it cuts off, and whether that trade pays. Until then you are guessing. Keep the labelled set with your pre-go-live testing for an AI voice agent, because upgrades move defaults underneath you.
The false-machine cost ratio, worked end to end
Call it the 1-in-N rule: tighten detection only if the change catches at least N mailboxes for every live human it cuts off, where N is the value of one connected human conversation divided by the cost of one mailbox you failed to catch.
Substitute your own figures for the four inputs. Those below are illustrative, not measured by us.
- V, value of one connected human conversation — A$140 (gross margin per deal multiplied by your conversation-to-deal rate).
- Cost of a false machine — a human read as a mailbox. You lose the conversation and usually the contact, so treat it as V.
- Cost of a false human — a mailbox read as a person. Roughly 40 seconds of wasted talk time and no message left. Say A$2.
- Machine base rate — 60% of answered calls, from step 2.
So N = 140 / 2 = 70. Now measure what one notch of extra aggression buys, per 1,000 dials at a 35% connect rate: 350 answered, 210 machines, 140 humans. The four error rates below are illustrative too, not measured by us; replace them with your own from step 5. Setting A, the shipped default, misreads 2% of humans (2.8 lost) and misses 25% of mailboxes (52.5). Setting B, tightened, misreads 9% of humans (12.6 lost) and misses 6% of mailboxes (12.6).
Moving A to B costs 9.8 extra humans and catches 39.9 extra mailboxes: 4.07 mailboxes per human lost, against a required N of 70. Do not tighten. For B to pay here, a missed mailbox would have to be worth A$34.39 rather than A$2. That break-even is the number to argue about.
The base rate is what flips it, not the thresholds:
| Machine base rate | Machines / humans per 1,000 dials | Mailboxes caught per human lost | Verdict against N = 70 |
|---|---|---|---|
| 60% | 210 / 140 | 4.07 | Stay on the default; tightening burns live prospects |
| 90% | 315 / 35 | 24.43 | Still no, and a long way short |
| 98% | 343 / 7 | 133.00 | Tighten: this is a message-drop list |
The general result is the useful one: aggressive AMD is correct only on lists that are almost entirely mailboxes. That is the list profile predictive diallers were tuned for in the 2010s, which is why inherited dialler advice reads as aggressive and is wrong for a conversational agent, as set out in AI phone agents compared with predictive diallers.
Detection modes compared, and what each one costs you
| Mode and published default | What it optimises for | Who should use it | What it costs |
|---|---|---|---|
| Off. Vapi documents voicemail detection as disabled by default | Never cutting off a human | Warm lists, callbacks, low machine rate | Your agent talks to mailboxes and leaves nothing |
Twilio MachineDetection=Enable, MachineDetectionTimeout 30 s |
A fast human or machine branch | Mixed lists | Returns unknown at timeout; short greetings read as human |
Twilio MachineDetection=DetectMessageEnd, timeout 3–59 s |
A clean message after the greeting ends | Message-drop campaigns | Twilio warns low timeouts return unknown even when a machine answered |
Telnyx detect_words, 30 s beep detection after a machine is detected |
Catching the actual beep | Drops where beep placement matters | Telnyx notes the greeting may still be playing while the 30 s counts down |
Telnyx premium_ios_call_screening_detection, prompt_end_timeout_millis default 30,000 ms, range 1,000–120,000 |
Surviving Apple Call Screening | Consumer mobile lists | Up to 30 s before the post-screening verdict |
LiveKit AMD defaults: human_speech_threshold 2.5 s, timeout 20 s, wait_until_finished True |
Not talking over a greeting | In-process classification | LiveKit documents an effective ceiling of roughly twice timeout |
The two ways AMD decides, and what each is blind to
Telephony-signal detection reads the SIP layer: 183 Session Progress or 180 Ringing carrying an SDP body, plus carrier cause codes. Fast, free, and blind to everything after the 200 OK. It also depends on your stack relaying pre-answer audio, and not every stack does: livekit/sip issue 813, opened 26 August 2026 and still open with no maintainer reply as at 14 September 2026, traces LiveKit SIP discarding audio that arrives before the final 200 OK on outbound calls, so a greeting played during ringing never reaches the room. That is a reporter reading of the source, not a vendor statement.
Audio and model detection transcribes the greeting and classifies it. Twilio’s tuning parameters are pure audio timing; LiveKit runs speech-to-text plus an LLM classifier. It is blind to anything that never becomes audio it hears, and to its own plumbing: livekit/agents issue 6996, opened 26 August 2026 and closed as completed on 1 September 2026, documented a transcript and speech-boundary desync that left quick human greetings with no fast verdict.
Neither approach sees the whole call, which is why the honest configuration is a mode choice plus a fallback, not a perfect threshold.
Why a screened call looks like neither a human nor a mailbox
The classic AMD assumption was a long human-recorded greeting ending in a beep, and machine-generated screening breaks it. Apple’s iPhone User Guide states that Call Screening “automatically answers calls from unknown numbers without interrupting you”, and rings only once the caller has given a name and a reason. As a telephony event that is an answered call with a synthesised voice that speaks, then waits: not a human, not a mailbox, no beep. Telnyx ships a mode for it, emitting call.machine.premium.call_screening.detected with result=screening before restarting detection on the screened call.
Two older erosions change the diagnosis rather than the setting, and are worked through on the diagnosis page: carrier early media, still an open request at livekit/agents issue 6895 on 14 September 2026, and short greetings that a silence-based end-of-speech test reads as a human who has finished.
The beep problem, and why waiting for the beep costs you the human
Waiting for the beep is the only way to be certain a mailbox is recording, and the most expensive thing you can ask a detector to do. Telnyx’s detect_words mode begins a 30-second beep detection after a machine is detected, returning not_sure if the 30 seconds expire first. Twilio’s DetectMessageEnd mode allows MachineDetectionTimeout up to 59 seconds. Vapi defaults beepMaxAwaitSeconds to 30, range 0 to 60.
Now apply the ratio. That patience pays only on calls that really are mailboxes. On every human answer it is dead air, and dead air is the fastest way to lose a live prospect — the latency argument in why sub-second responses matter for voice AI. Beep waiting belongs on message-drop campaigns at the 98% base rate above, and almost nowhere else.
Say nothing for the first two seconds and see what happens
The cheapest technique here is not a detector. Vapi publishes firstMessageMode, default assistant-speaks-first, and a documented assistant-waits-for-user alternative that holds the agent silent until the called party speaks. LiveKit does the equivalent inside AMD: its documentation states that while AMD runs, agent speech is paused so it does not talk over a voicemail greeting.
A human who answers says something short and stops; a mailbox keeps going. Listening for two seconds before speaking separates those cases on most calls with no classifier at all, and it never cuts anyone off, because saying nothing cannot be a false machine.
The cost is not small. Two seconds of silence reads as a dead line to some people and they hang up before your agent speaks: a hard failure on a few calls traded for a soft failure on all of them. Measure the hang-up rate in the first three seconds before and after, and if it moves more than a point or two the trade is not paying.
When not to run AMD at all
For a real class of lists the correct setting is off. Turn it off when the machine base rate is under roughly 30%, when you are calling people who requested the call, when you never intended to leave a message, or when you have no labelled set and so cannot know which error you are buying. Vapi starts there: its API reference states that voicemail detection is disabled by default, and voicemailDetection can be set to off to keep it that way.
The labelled-set method is what people underestimate: three hours per 200 calls, repeated per country and per list type because carrier behaviour differs, plus a regression run at every upgrade — all three framework issues cited here were filed within the past month, and one was closed within a week of filing. At a few thousand dials that is not worth the hours; it pays where a one-point error rate is hundreds of conversations. Zian AI’s learning engine tracks around 420,000 data points across more than 10,000 leads a day, the scale at which labelling is cheap against what a misclassification costs. Below that, pick a mode and spend the time on the list. If your calls hit phone menus rather than mailboxes, that is a separate layer with its own switch — see what happens when an AI agent navigates an IVR mid-call.
Zian AI runs live phone, SMS, email and WhatsApp outreach in 30+ languages through its Outbound Appointment Setter and Appointment Show-Specialist agents, with private model deployment on customer infrastructure. More platform questions are answered on the Zian AI FAQ. Zian AI is currently in partnership-application beta. Apply For Partnership.
Frequently asked questions
What is the safest answering machine detection setting to start with
Start with the shipped defaults and change nothing until you have a labelled call set. Twilio defaults MachineDetectionSpeechThreshold to 2,400 ms and MachineDetectionTimeout to 30 seconds, and LiveKit defaults human_speech_threshold to 2.5 seconds. On a mixed list those values are usually closer to correct than any change made from anecdotes.
Does turning answering machine detection off cost me anything
It costs you the mailboxes. Your agent holds part of a conversation with a recording and leaves no message, wasting roughly 40 seconds per mailbox reached. It cannot cost you a live prospect, because with detection off nothing can read a human as a machine. Vapi documents that voicemail detection is disabled by default.
How many labelled calls do I need before I change a threshold
Two hundred answered calls per list type is a workable floor and about three hours of listening. Fewer than that and your error rates carry so much noise that two settings are indistinguishable. Label per country too, because carrier behaviour and greeting conventions differ by market.
Can detection tell a mailbox apart from Apple Call Screening
Only on platforms that have shipped a category for it. The Telnyx answering machine detection documentation describes a premium iOS call screening mode that emits a call screening detected webhook with result screening, then restarts premium detection on the screened call. Platforms without such a category return a human or unknown verdict, which is why screening shows up as an unexplained pocket of short greetings followed by silence.
Should I wait for the beep before my agent speaks
Only on lists that are almost entirely mailboxes. The Vapi voicemail detection documentation sets beepMaxAwaitSeconds to a default of 30 seconds within a range of 0 to 60, and notes that most voicemail systems play 10 to 20 seconds of greeting before the beep. Where most answers are people, that patience is spent as dead air on live humans.