Asterisk™: будущее телефонии Второе издание - Меггелен Джим Ван
NOTICE (извещение)
Информационное сообщение. WARNING (предупреждение)
Обстоятельство, которое может быть серьезным, но не является ошибкой.
ERROR (ошибка)
Что-то пошло совсем не так.
Смотрите также
NoOp(), Verbose()
LookupBlacklist()
Осуществляет поиск имени/номера Caller ID в черном списке
LookupBlacklist([опции])
Это приложение признано устаревшим и заменено приложением GotoIf(${BLACKLIST()}?контекст| добавочныйномер|приоритет)
Выполняет поиск номера Caller ID для активного канала в базе данных Asterisk (в семействе blacklist). Если номер Caller ID обнаружен в черном списке, Asterisk задает для переменной канала LOOKUPBL STATUS значение FOUND (найден). В противном случае для переменной задается значение NOTFOUND (не найден).
Если в параметре опции используется опция j и номер найден и если существует приоритет n + 101 (где n - текущий приоритет), канал должен будет продолжить выполнение с этого приоритета.
Чтобы пополнить черный список из CLI Asterisk, введите команду database put blacklist имя / номер.
; направляем номера черного списка в бесконечный цикл, ; в противном случае набираем номер, заданный переменной ; ${JOHN} exten => 123,1,Answer() exten => s,2,LookupBlacklist()
; если номер Caller ID обнаружен в черном списке, переходим к метке goaway exten => 123,n,GotoIf($["${LOOKUPBLSTATUS}" = "FOUND"]?goaway) ; в противном случае продолжаем и звоним Джону exten => 123,n,Dial(${JOHN}) exten => 123,n(goaway),Busy(5) exten => 123,n,Hangup()
Смотрите также
BLACKLIST
LookupCIDName()
Выполняет поиск имени Caller ID в AstDB
LookupCIDName()
Это приложение было признано устаревшим и заменено приложением Set(CALLERID(имя)=${DB(cidname/${CALLERID(номер)})}).
Использует номер Caller ID активного канала для извлечения имени Caller ID из AstDB (семейство cidname). Это приложение не делает ничего, если по каналу не получен Caller ID. Это полезно, если вы не подписаны на доставку имени Caller ID или хотите менять имена Caller ID для некоторых входящих вызовов.
; ищем информацию Caller ID в AstDB и передаем ее ; на телефон Джейн exten => 123,1,Answer()
exten => 123,2,LookupCIDName() exten => 123,3,Dial(SIP/Jane)
Смотрите также
DB
Macro()
Вызывает заранее определенный макрос диалплана
Macro( имямакроса, arg1, arg2...)
Выполняет макрос, определенный в контексте macro- имямакроса, переходя в добавочный номер s этого контекста и выполняя каждый шаг. Возвращается после того, как все шаги были выполнены. Вызывающий добавочный номер, контекст и приоритет хранятся в переменных ${MACRO_EXTEN}, ${MACRO_CONTEXT} и ${MACRO_PRIORITY} соответственно. Аргументы arg1, arg2 и т. д. становятся в контексте макроса переменными ${ARG1}, ${ARG2} и т. д.
Macro() завершается аварийно, если на любом из шагов макроса возник сбой или выявлен разрыв соединения. Если по завершении работы макроса задана переменная ${MACRO_OFFSET}, это приложение попытается продолжить выполнение с приоритета MACRO_OFFSET + n + 1, если таковой существует, или с n + 1 в противном случае. (В обоих случаях n означает текущий приоритет.)
Если внутри макроса вызывается приложение Goto() для перехода в контекст вне выполняющегося в настоящий момент макроса, макрос будет завершен, а управление передано в точку, указанную в параметрах Goto().
; определяем макрос для обратного счета
; от заданного значения
[macro-countdown]
exten => s,1,Set(COUNT=${ARG1})
exten => s,2,While($[ ${COUNT} > 0])
exten => s,3,SayNumber(${COUNT})
exten => s,4,Set(COUNT=$[ ${COUNT} - 1 ])
exten => s,5,EndWhile()
; вызываем наш макрос с двумя разными значениями [example]
exten => 123,1,Macro(countdown,10) exten => 124,1,Macro(countdown,5)
На время выполнения макрос становится текущим контекстом. Это означает, что в случае разрыва соединения, например, поиск добавочного номера h будет выполняться в макросе, а не в контексте, из которого этот макрос был вызван. Поэтому в макросе должны быть обязательно описаны все соответствующие добавочные номера (в AEL можно использовать catch).
Из-за способа реализации Macro() (оно выполняет содержащиеся в нем приоритеты через вспомогательный механизм) и выделения фиксированного стека памяти на каждый поток макрос ограничен семью уровнями вложенности (макрос, вызывающий макрос, вызывающий макрос и т. д.). Приложения, интенсивно использующие стек, в глубоко вложенном макросе могут привести к сбою в работе Asterisk раньше достижения этого предельного уровня вложенности.
Смотрите также
MacroExit(), Goto(), Gosub(), главу 6
MacroExclusive()
Выполняет макрос исключительно для одного канала
MacroExclusive(имямакроса[,аргументы])
Выполняет заданный макрос, гарантируя, что одновременно этот макрос выполняется только одним каналом. Если другой канал уже выполняет этот макрос, MacroExclusive() приостановит выполнение данного канала до тех пор, пока тот канал не выйдет из макроса.
Смотрите также
Macro()
MacroExit()
Явный выход из макроса
MacroExit()
Выполняет явный выход из макроса. Обычно Macro() автоматически завершается, выполнив все приоритеты. MacroExit() обеспечивает возможность завершить макрос раньше.
Смотрите также
Macro()
MacroIf()
Вызывает заранее определенный макрос по условию
MacroIf(условие?макросеслиистинно, аргументы:макросеслиложно, аргументы)
Вычисляет условие, а затем выполняет макросеслиистинно или макросеслиложно. Во всем остальном, кроме вычисления условия, MacroIf() ведет себя идентично Macro().
; определяем макрос для обратного счета ; от заданного значения [macro-countdown]
exten => s,1,Set(COUNT=${ARG1})
exten => s,2,While($[ ${COUNT} > 0])
exten => s,3,SayNumber(${COUNT})
exten => s,4,Set(COUNT=$[ ${COUNT} - 1])
exten => s,5,EndWhile()
; определяем макрос для прямого счета
; от заданного значения
[macro-countup]
exten => s,1,Set(COUNT=1)
exten => s,2,While($[ ${COUNT} < ${ARG1}])
exten => s,3,SayNumber(${COUNT})
exten => s,4,Set(COUNT=$[ ${COUNT} + 1])
exten => s,5,EndWhile()
; вызываем наш макрос с двумя разными значениями [example]
exten => 123,1,MacroIf($[ ${foo} < 5 ]?countup,${foo}:countdown,${foo})
Смотрите также
GotoIf(), GosubIf(), IF, глава 6
MailboxExists()
Выполняет переходы по условию,
если заданный ящик голосовой почты существует
MailboxExists(почтовыйящик[@контекст[, опции]])
Проверяет, существует ли в системе голосовой почты Asterisk почтовый ящик, определенный аргументом почтовыйящик. Если почтовый ящик находится не в контексте голосовой почты default, можно передать контекст для голосовой почты.
Это приложение задает переменную канала VMBOXEXISTSSTATUS. Если почтовый ящик существует, ей будет задано значение SUCCESS (успех). В противном случае она получит значение FAILED (неудача). Если в качестве параметра опции передается опция j, в случае существования почтового ящика, указанного аргументом почтовыйящик, приложение перейдет к приоритету n + 101 (где n - текущий приоритет).