Asterisk. Команда AMD.

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