Asterisk™: будущее телефонии Второе издание - Меггелен Джим Ван
Более подробную информацию об использовании Festival с Asterisk можно найти в главе 14 и в файле README.festival, находящемся в подпапке contrib/ папки исходного кода Asterisk. Сервер Festival должен быть запущен до запуска Asterisk, и, прежде чем вызывать Festival(), необходимо ответить каналу, используя приложение Answer().
exten => 123,1,Answer()
exten => 123,2,Festival('This is sample speech from Festival',#)
Flash()
Посылает мгновенное событие сброса в магистральный канал Zap
Flash()
Посылает мгновенное событие сброса в Zap-канал. Это инструмент для тех, кто хочет перадресовывать вызовы и выполнять другие действия, которые требуют мгновенного сброса, через AGI-сценарий. В целом это довольно бесполезное приложение.
В случае успешного выполнения возвращает 0 или -1, если это не магистральный канал Zap.
exten => 123,1,Flash()
FollowMe()
Функциональность «найди меня/следуй за мной»
FollowMe(followmeid[, опции])
Это приложение пытается определить местоположение вызываемого абонента, набирая множество разных номеров последовательно или одновременно, как определено в файле followme.conf. Параметр followmeid идентифицирует раздел файла followme.conf, в котором определено, как должен быть найден этот вызываемый абонент. Параметр опции может содержать нуль или более следующих значений: s
Перед выполнением шагов функции «следуй за мной» воспроизводится сообщение о состоянии на входе.
a
Записывается имя вызывающего абонента, чтобы оно могло быть объявлено вызываемому абоненту на каждом шаге.
n
Воспроизводится сообщение о состоянии «недоступен», если все шаги для установления связи с вызываемым абонентом исчерпаны или вызываемый абонент желает быть недоступным:
exten => 123,1,Answer() exten => 123,2,FollowMe(123,san) exten => 123,3,VoiceMail(123,u)
ForkCDR()
Создает дополнительную запись CDR из текущего вызова
ForkCDR([опции])
Создает дополнительную запись параметров вызова для оставшейся части текущего вызова.
Это приложение часто используется в приложениях телефонных карточек, чтобы отличить входящий вызов (исходная CDR) от оплачиваемого разговора (вторая CDR).
Если задана опция v, все переменные CDR из текущей записи будут унаследованы новой записью CDR.
exten => 123,1,Answer()
exten => 123,2,ForkCDR(v)
exten => 123,3,Playback(tt-monkeys)
exten => 123,4,Hangup()
Смотрите также
Функция CDR, NoCDR(), ResetCDR()
GetCPEID()
Получает CPE ID от телефона, поддерживающего ADSI
GetCPEID()
Получает CPE ID и другую информацию и отображает ее в консоли Asterisk. Эта информация часто нужна, чтобы правильно настроить в файле zapata.conf операции при неподнятой трубке для телефонов, поддерживающих ADSI.
Возвращает -1 только в случае разрыва связи.
; используем этот добавочный номер, чтобы получить ; необходимую информацию для настройки ADSI-телефонов exten => 123,1,GetCPEID()
Смотрите также
ADSIProg(), adsi.conf, zapata.conf
Gosub()
Переходит в новую точку, сохраняя адрес возврата
Gosub( контекст, добввочныйномер, приоритет) Gosub(добввочныйномер, приоритет) Gosub(приоритет)
Переходит в заданную точку, аналогично Goto(), за исключением того что Gosub() сохраняет адрес возврата, чтобы вернуться в него позже посредством вызова Return().
Смотрите также
GosubIf(), Macro(), Goto(), Return(), StackPop()
GosubIf()
Переходит в новую точку по условию, сохраняя адрес возврата
GosubIf(условие?меткаеслиистинно:меткаеслиложно)
На основании вычисленного условия Gosub будет передавать выполнение или в меткаеслиистинно, или в меткаеслиложно. Вернуться в эту точку диалплана можно, вызвав позднее Return.
Слово метка (label) часто используется, чтобы обозначить возможность задать приоритет; добавочный номер и приоритет или контекст, добавочный номер и приоритет. Мы используем слово метка, чтобы не повторять каждый раз все возможные варианты.
; Задаем исходящий Caller*ID по умолчанию, ; если он не задан конкретным каналом.
exten => _NXXXXXX,1,GosubIf($["${CALLERID(num)}" = ""]?setcallerid,1) exten => _NXXXXXX,n,Dial(Zap/g1/${EXTEN})
exten => _1NXXNXXXXXX,1,GosubIf($[„${CALLERID(num)}" = „"]?setcallerid,1)
exten => _1NXXNXXXXXX,n,Dial(Zap/g1/${EXTEN})
exten => setcallerid,1,Set(CALLERID(num)=6152345678)
exten => setcallerid,n,Return
Смотрите также
Gosub(), Return(), MacroIf(), IF, GotoIf(),
Goto()
Направляет вызов в заданный приоритет, добавочный номер и контекст
Goto([[к.онтек.ст)]добaвочныйномер)]приоритет) Goto( именованный_приоритет)
Передает управление текущим каналом в заданный приоритет, при этом могут быть заданы (необязательно) вызываемый добавочныйномер и контекст.
Можно (необязательно) использовать приложение для перехода в именованный приоритет, заданный аргументом именованный_приоритет. Применение именованных приоритетов возможно только в рамках текущего добавочного номера.
exten => 123,1,Answer()
exten => 123,2,Set(COUNT=1)
exten => 123,3,SayNumber(${COUNT})
exten => 123,4,Set(COUNT=$[ ${COUNT} + 1 ])
exten => 123,5,Goto(3)
; то же самое, но с использованием именованного приоритета
exten => 124,1,Answer()
exten => 124,2,Set(COUNT=1)
exten => 124,3(repeat),SayNumber(${COUNT})
exten => 124,4,Set(COUNT=$[ ${COUNT} + 1 ])
exten => 124,5,Goto(repeat)
Смотрите также
GotoIf(), GotoIfTime(), Gosub(), Macro()
GotoIf()
Выполняет переход по условию в заданный приоритет
GotoIf(условие? метка1:метка2)
Направляет вызов в метка1, если условие истинно, или в метка2, если условие ложно. Параметры метка1 и метка2 могут быть опущены (в этом случае просто не выполняется переход при том или ином условии), но не оба одновременно.
В качестве метки может использоваться одно из нижеперечисленного:
• Приоритет, например 10.
• Добавочный номер и приоритет, например 123,10.
• Контекст, добавочный номер и приоритет, например incoming,
123,10.
• Именованный приоритет в рамках того же добавочного номера, например passed.
Все типы меток описаны в данном примере:
[globals]
; присвоим TEST какое-то значение, кроме 101, чтобы ; увидеть, что делает GotoIf(), когда условие ложно TEST=101
[incoming] ; задаем переменную
; переходим в приоритет 10, если ${TEST} равна 101, ; в противном случае переходим в приоритет 20 exten => 123,1,GotoIf($[ ${TEST} = 101 ]?10:20) exten => 123,10,Playback(the-monkeys-twice) exten => 123,20,Playback(tt-somethingwrong)
; то же самое, что было сделано выше, но на этот раз ; зададим добавочный номер и приоритет для каждой метки exten => 124,1,GotoIf($[ ${TEST} = 101 ]?123,10:123,20)
; то же самое, что было сделано выше, но эти метки имеют ; контекст, добавочный номер и приоритет
exten => 125,1,GotoIf($[ ${TEST} = 101 ]?incoming,123,10:incoming,123,20)
; то же самое, что было сделано выше, но на этот раз ; будем переходить в именованные приоритеты exten => 126,1,GotoIf($[ ${TEST} = 101 ]?passed:failed) exten => 126,15(passed),Playback(the-monkeys-twice) exten => 126,25(failed),Playback(the-monkeys-twice)