Answering Machine Detection (AMD)
8 min
status beta please reach out to your exotel account manager to have amd enabled on your account overview answering machine detection (amd) tells you whether an outbound call was answered by a human or by a machine (such as voicemail or an ivr) this lets you take different actions depending on who picked up — for example, playing a message only when a human answers, or skipping voicemail drops amd results are delivered through exotel's call callbacks (apis) they are not shown in reports or the dashboard how amd works when amd is enabled, exotel analyzes the audio at the start of the call — the greeting and the silences around it — to classify who answered the classification is returned through two new parameters inside the legs object of your callback payload parameter description answeredby the amd result use this for your final classification amdcause the reason behind the result, including the values used for detection use this for debugging or understanding why a result was given possible answeredby values human — the call was answered by a person machine — the call was answered by a machine (voicemail, ivr, etc ) notsure — detection could not reach a definitive result na — amd was not applicable for this leg key behaviors 1\ amd applies only to leg 2 (the to leg) detection runs only on the number being dialled (leg 2 / the to leg) leg 1 (the from leg) will always return answeredby na when reading the payload, use the answeredby value on leg 2 for the human vs machine result 2\ amd detection is asynchronous detection does not block or delay call connection or routing — the call proceeds normally while analysis happens in the background because detection listens to the greeting and surrounding silence, the result takes roughly 3–5 seconds to finalize and is delivered once complete consume the result from the callback payload when it arrives, rather than expecting it the instant the call is answered where you receive the result a statuscallback terminal event to receive the amd status via statuscallback, you must subscribe to terminal events once subscribed, the amd result is included in the terminal statuscallback payload, inside the legs object sample terminal statuscallback payload { "callsid" "f3dec10279a310e2831754a4ec841a5f", "conversationduration" "13", "datecreated" "2026 05 15 16 46 13", "dateupdated" "2026 05 15 16 46 50", "detailedstatus" "na", "detailedstatussubbucket" "na", "direction" "outbound api", "disconnectedby" "callee", "endtime" "2026 05 15 16 46 50", "eventtime" "2026 05 15 16 46 50", "eventtype" "terminal", "from" "08203612779", "legs" \[ { "oncallduration" "26", "ringingduration" "5", "status" "completed", "answeredby" "na", "amdcause" "" }, { "oncallduration" "13", "ringingduration" "4", "status" "completed", "answeredby" "human", "amdcause" "human 080 880" } ], "phonenumbersid" "8224778996", "recordingurl" "https //recordings us3 qaexotel com/exotelrecordings/ree5e1us3/f3dec10279a310 ", "starttime" "2026 05 15 16 46 13", "status" "completed", "to" "08969916092" } in this example legs\[0] answeredby na → amd was not applicable for the from leg (leg 1) legs\[1] answeredby human → the to number (leg 2) was answered by a human b passthru payload when amd is enabled, the passthru payload also includes answeredby and amdcause inside the legs object sample passthru payload { "callsid" "afc75285632df2acd33b7ea1fecb1a4h", "callfrom" "06203612779", "callto" "02247789996", "direction" "outbound dial", "dialcallduration" 27, "dialcallstatus" "completed", "starttime" "2026 04 17 19 02 06", "currenttime" "2026 04 17 19 02 38", "legs" \[ { "number" "06355212721", "type" "single", "oncallduration" 18, "causecode" "normal clearing", "answeredby" "human", "amdcause" "human 800 800" } ] } in this example answeredby human → the call was detected as answered by a human amdcause human 800 800 → a short greeting was detected, followed by silence — typical human behavior, where the person says "hello?" and waits for a response amd cause reference use answeredby for your final classification, and amdcause to understand why that classification was made values shown in {curly braces} are the actual measured/threshold figures used during detection answeredby amdcause what it means machine initialsilence {detected} {threshold} long silence before any voice started machines often have a delay or beep before the greeting plays machine maxwords {wordsdetected} {maxallowed} too many words were spoken in the greeting machines usually have longer greetings machine longgreeting {voiceduration} {greetinglimit} the total voice duration of the greeting was too long machine maxwordlength {consecutivevoiceduration} a single continuous stretch of voice without a pause was too long human human {silenceduration} {aftergreetingthreshold} a short greeting was spoken, followed by silence notsure toolong {totaltime} the analysis window ended before a definitive result could be detected notsure noaudiodata {totaltime} no audio frames were received during the analysis window accuracy exotel detects voicemail using heuristic algorithms based on maximum words spoken, silence, and greeting length detection typically takes 3–5 seconds , with an accuracy of 60–75% , which is on par with industry standards there is no consistent signaling difference between a call picked up by a human and one picked up by a machine, so detection relies on audio cues such as tone of voice and speed of words spoken faq q a call went to voicemail will its status change to "no answer," or stay in the success bucket? it stays in the success bucket the call was successfully connected and answered (by a machine), and these are billable seconds, so the call is not moved to a non successful state use the answeredby parameter separately to determine whether the answer was a human or a machine q will the amd result appear in my reports or dashboard? no amd results are available only through the api callbacks (statuscallback terminal event and passthru payload), not in reports or the dashboard q which leg does amd apply to? only leg 2 (the to leg) leg 1 (the from leg) always returns answeredby na q is amd real time? will it delay my call? no delay amd is asynchronous — the call connects and proceeds normally while detection runs in the background the result is delivered through the callback once detection completes (roughly 3–5 seconds)
Have a question?
Our super-smart AI, knowledgeable support team and an awesome community will get you an answer in a flash.
To ask a question or participate in discussions, you'll need to authenticate first.
