AMD() - Выявление автоответчика.
Asterisk с помощью приложения приложения AMD(), может отличать живого человека на линии от робота.
AMD([initialSilence[,greeting[,afterGreetingSilence[,totalAnalysisTime[,minimumWordLength[,betweenWordsSilence[,maximumNumberOfWords[,silenceThreshold]]]]]]]])
Это приложение пытается установить наличие автоответчика на основании шаблонов синхронизации. Обычно используется исходящими вызовами, берущими начало либо в файлах вызовов, либо в интерфейсе Asterisk Manager.
Приложение сообщает, какой тип вызова был выявлен, задавая переменной AMDSTATUS одно из следующих значений:
MACHINE (машина) - Считается, что вызываемая сторона является автоответчиком.
HUMAN (человек) - Считается, что вызываемая сторона является человеком, а не автоответчиком.
NOTSURE (не уверен) - Приложение не смогло определить, является ли вызываемая сторона человеком или автоответчиком.
HANGUP (разрыв) - В процессе определения произошел разрыв соединения.
AMD() также указывает в переменной канала AMDCAUSE причину, на основании которой делается заключение, обозначенное в переменной AMDSTATUS. Для переменной AMDCAUSE будет задано одно из следующих значений:
TOOLONG - общее_время
INITIALSILENCE - продолжительность_паузы-начальная_пауза
HUMAN - продолжительность_паузы-пауза_после_приветствия
MAXWORDS - количество_слов-максимальное_число_слов
LONGGREETING - продолжительность_разговора-приветствие
Все параметры данного приложения помогают настроить его так, чтобы оно могло более эффективно оценивать разницу между человеком и автоответчиком. Если параметры не переданы, Asterisk прочитает значения, описанные в amd.conf.
Параметры:
initialSilence (начальная пауза) - Максимальная продолжительность паузы перед приветствием. Если это значение превышено, для переменной AMDSTATUS будет задано
значение MACHINE.
greeting (приветствие) - Максимальная продолжительность приветствия. Если превышена, для переменной AMDSTATUS будет задано значение MACHINE.
afterGreetingSilence (пауза после приветствия)- Максимальная пауза после обнаружения приветствия. Если превышена, для переменной AMDSTATUS будет задано значение MACHINE.
totalAnalysisTime (общее время анализа) - Максимальное время, предоставляемое алгоритму для принятия решения о том, является ли вызываемая сторона человеком или автоответчиком.
minimumWordLength (минимальная длина слова) - Если продолжительность разговора короче, чем minimumWordLength, это не будет считаться речью человека.
betweenWordsSilence (пауза между словами) - Минимальная пауза после слова, чтобы считать следующий аудио сигнал новым словом.
maximumNumberOfWords (максимальное число слов) - Максимальное число слов в приветствии. Если это значение превышено, для переменной AMDSTATUS будет задано значение MACHINE.
silenceThreshold (пороговая продолжительность паузы) - Чувствительность алгоритма при выявлении паузы.
Пример:
; Используем алгоритм выявления автоответчика. Если вызываемая сторона является человеком, устанавливаем соединение. В противном случае воспроизводим сообщение и ; разрываем соединение
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()
См. также: WaitForSilence(), amd.conf