Name

AMD() — Answering machine detection

Synopsis

AMD([initialSilence[,greeting[,afterGreetingSilence[,totalAnalysisTime
[,minimumWordLength[,betweenWordsSilence[,maximumNumberOfWords
[,silenceThreshold]]]]]]]])

This application attempts to detect an answering machine, based on the timing patterns. This application is usually used by outbound calls originated from either call files or from the Asterisk manager Interface. This application sets AMDSTATUS variable is set to one of the following, to show what type of call was detected:

MACHINE

The called party is believed to be an answering machine.

HUMAN

The called party is believed to be a human being, and not an answering machine.

NOTSURE

The application was unable to tell whether the called party was a human or an answering machine.

HANGUP

A hangup occurred during the detection.

The AMD() application also sets a channel variable named AMDCAUSE with the cause that lead to the conclusion stated in the AMDSTATUS variable. The AMDCAUSE variable will be set to one of the following values:

TOOLONG-total_time
INITIALSILENCE-silence_duration-initial_silence
HUMAN-silence_duration-after_greeting_silence
MAXWORDS-word_count-maximum_number_of_words
LONGGREETING-voice_duration-greeting

The parameters to this application all help tune it so that it can more effectively tell the difference between a human and an answering machine. If the parameters are not passed to this application, Asterisk will read the default values as configured in amd.conf. The parameters are:

initialSilence

The maximum silence duration before the greeting. If exceeded, then the AMDSTATUS variable will be set to MACHINE.

greeting

The maximum length of the greeting. If exceeded, then the AMDSTATUS variable will set to MACHINE.

afterGreetingSilence

The maximum silence after detecting a greeting. If exceeded, then the AMDSTATUS variable will be set to MACHINE.

totalAnalysisTime

The maximum time allowed for the algorithm to decide whether the called party is a human or an answering machine.

minimumWordLength

If the duration of the voice activity is shorter than minimumWordLength, it will not be considered to be human speech.

betweenWordsSilence

The minimum duration of silence after a word to consider the audio that follows as a new word.

maximumNumberOfWords

The maximum number of words detected in the greeting. If exceeded, then the AMDSTATUS variable will set to MACHINE.

silenceThreshold

How sensitive the algorithm should be when detecting silence

; Use answering machine detection.  If the called party
; is human, connect them to Bob.  Otherwise, play a 
; message and hang up
exten => 123,1,Answer()
exten => 123,n,AMD()
exten => 123,n,GotoIf($["${AMDSTATUS}" = "HUMAN"]?human:machine)
exten => 123,n(machine),WaitForSilence(2000)
exten => 123,n,Playback(asterisk-friend)
exten => 123,n,Hangup()
exten => 123,n(human),Verbose(3, We've got a human on the line!)
exten => 123,n,Playback(transfer)
exten => 123,n,Dial(SIP/bob)
exten => 123,n,Playback(im-sorry)
exten => 123,n,Hangup()

See Also

WaitForSilence()