Джим Меггелен - Asterisk™: будущее телефонии Второе издание
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()
Answer()
Устанавливает соединение, если по каналу поступает вызов
Answer([задержка])
Обусловливает установление соединения Asterisk с каналом, если по нему в настоящий момент поступает вызов. Если по текущему каналу вызов не производится, это приложение ничего не делает. Если задана задержка, Asterisk ответит на вызов и перейдет к следующему приоритету диалплана только по прошествии заданного количества миллисекунд.
Если нет веских оснований не делать этого, Answer() рекомендуется использовать для канала перед вызовом всех остальных приложений. Существует несколько ключевых приложений, которые требуют, чтобы перед их выполнением было выполнено приложение Answer(). В противном случае они могут работать некорректно: exten => 123,1,Answer(750) exten => 123,n,Playback(tt-weasels)
Смотрите также
Hangup()
AppendCDRUserField()
Добавляет значение в поле пользователя записи Call Detail Record
AppendCDRUserField( .значение)
Добавляет значение в поле пользователя записи Call Detail Record (CDR). Поле пользователя часто используется для хранения произвольных данных о вызове, которые не подходят для всех остальных полей:
; задаем в поле пользователя значение 'abcde' exten => 123,1,SetCDRUserField(abcde) ; теперь добавлям в конец 'xyz' exten => 123,1,AppendCDRUserField(xyz)
Это приложение было признано устаревшим и заменено CDR- функцией.
exten => 123,1,Set(CDR(userfield)=${CDR(userfield)}12345)
Смотрите также
SetCDRUserField(), ForkCDR(), NoCDR(), ResetCDR(), CDR
Authenticate()
Требует от вызывающего абонента введения правильного пароля для продолжения выполнения
Authenticate(пaроль[,опции[, максимумсимволов]])
Требует от вызывающего абонента ввести заданный пароль, чтобы продолжать выполнение следующего приоритета диалплана. Authenticate() дает вызывающему абоненту три попытки для правильного введения пароля. Если за эти три попытки вызывающий абонент так и не смог ввести правильный пароль, выполняется разрыв соединения.
Если пароль начинается с символа /, он трактуется как файл, содержащий список действительных паролей (по одному в строке). Пароли также могут храниться в базе данных Asterisk (AstDB); см. опцию d ниже. Параметр максимумсимволов задает максимальное число символов, которое может ввести вызывающий абонент. Если этот параметр не задан, приложение будет принимать неограниченное число символов и станет ожидать от вызывающего абонента нажатия кнопки # после введения кода аутентификации.
Может быть задана одна или несколько опций из следующего списка:
a
Присваивает CDR-полю accountcode, а переменной канала ACCOUNTCODE - значение введенного пароля.
d
Трактует путь не как файл, а как ключ базы данных Asterisk, в которой следует искать пароль. При использовании ключа базы данных значением, ассоциированным с ключом, может быть все что угодно.
j
Поддерживает переход к приоритету n + 101 в случае неудачной аутентификации.
m
Трактует заданный путь как файл, содержащий список кодов учетных записей и хешей паролей, разделенных символом : (двоеточие), по одному в строке. При совпадении одного из паролей для канала будет задан код учетной записи, соответствующий коду, указанному в файле.
r
Удаляет ключ базы данных после успешного входа (действительна только с опцией d).
; вынуждаем вызывающего абонента ввести пароль,
; прежде чем выполнять остальные действия,
; и сохраняем введенный пароль в CDR-поле 'accountcode'
exten => 123,1,Answer()
exten => 123,n,Authenticate(1234,a)
exten => 123,n,Playback(pin-number-accepted)
exten => 123,n,SayDigits(${ACCOUNTCODE})
Смотрите также
VMAuthenticate(), DISA(), главу 6
Background()
Воспроизводит файл, принимая при этом сигналы тонального набора (DTMF)
Background(имяфайла1[&имяфайла2...][,опции[, язык]])
Воспроизводит заданные аудиофайлы в процессе ожидания введения пользователем DTMF-кодов. Как только пользователь начинает вводить DTMF-коды, воспроизведение прекращается. Asterisk пытается найти соответствующий добавочный номер в целевом контексте (или текущем контексте, если целевой контекст не задан), и, как только будет найдено однозначное соответствие, выполнение диалплана продолжится в соответствующем добавочном номере.
имяфайла должно быть задано без расширения файла, поскольку Asterisk автоматически выбирает формат файла с минимальными затратами на преобразование.
Допустимыми опциями являются следующие:
s
Сообщение воспроизводиться не будет, если канал находится не в состоянии «соединен» (то есть еще не получен ответ на вызов). Если s задана, приложение будет возвращаться сразу же, как только канал окажется не в состоянии «соединен».
n
Не отвечать на вызов до воспроизведения заданного файла. Без этой опции ответ на вызов будет произведен автоматически перед воспроизведением звука. Не все каналы поддерживают воспроизведение сообщений до ответа на вызов.
m
Прерывать воспроизведение, только если введенный код соответствует одноразрядному добавочному номеру в целевом контексте.
Аргумент язык может использоваться для задания языка воспроизводимого приглашения, если он отличается от используемого языка канала.
exten => 123,1,Answer()
exten => 123,2,Background('exter-ext-of-person');
Смотрите также
ControlPlayback(), WaitExten(), BackgroundDetect(), TIMEOUT
BackgroundDetect()
Воспроизводит файл в фоновом режиме и выявляет разговор
BackgroundDetect(имяфайла[, sil[,min[, max]]])
Аналогично Background(), но пытается выявить разговор.
Во время воспроизведения файла выполняется отслеживание аудиосигналов во входящем потоке. Если период отсутствия тишины длится больше min миллисекунд, но еще меньше max миллисекунд и за ним следует пауза продолжительностью как минимум sil миллисекунд, воспроизведение звука прерывается и выполнение переходит в добавочный номер talk (разговор), если таковой доступен.
Если не заданы, параметры sil, min и max по умолчанию принимают значения 1000 мс, 100 мс и бесконечное количество соответственно.
exten => 123,1,BackgroundDetect(tt-monkeys) exten => 123,2,Playback(im-sorry) exten => talk,1,Playback(yes-dear)
Смотрите также
Playback(), Background()
Busy()
Обозначает состояние занятости канала
Busy([времяожидaния])
Указывает каналу обозначить состояние «занято», а затем ожидает, когда пользователь повесит трубку или разрыва соединения по истечении времени ожидания (заданного необязательным параметром вре- мяожидания в секундах).
Это приложение сигнализирует о состоянии занятости только для соединенных каналов. У каждого типа каналов имеется собственный
способ оповещения вызывающего абонента о состоянии занятости. Можно использовать Playtones(busy) для воспроизведения сигнала «занято».
exten => 123,1,Playback(im-sorry) exten => 123,2,Playtones(busy) exten => 123,3,Busy()