Страница 43 из 157
exten => 123)n)Goto(к.онтек.ст,добавочныйномер,приоритет)
Теперь давайте применим приложение Goto() в нашем диалплане:
[incoming]
exten => 123,1,Answer()
exten => 123,n,Background(main-menu)
exten => 1,1,Playback(digits/1) exten => 1,n,Goto(incoming,123,1)
exten => 2,1,Playback(digits/2) exten => 2,n,Goto(incoming,123,1)
Две новые строки (выделенные курсивом) обеспечат возвращение управления над вызовом добавочному номеру 123 после воспроизведения выбранного номера.
Если вы внимательно посмотрите на приложение Goto(), то поймете, что в него на самом деле можно передавать один, два или три аргумента. Если передается только один аргумент, Asterisk предположит, что это основной приоритет текущего добавочного номера. Если передано два аргумента, Asterisk будет трактовать их как добавочный номер и приоритет, к которым надо перейти в текущем контексте. В данном примере были переданы все три аргумента для наглядности, но, если бы мы задали только добавочный номер и приоритет, результат был бы аналогичным.
Обработка ошибочных вводов и времени ожидания
Теперь, когда создание нашего первого голосового меню уже близится к завершению, введем специальные добавочные номера. Во-первых, нам необходим добавочный номер для недействительных вводов; когда абонент нажимает не ту кнопку (например, 9 для предыдущего примера), вызов направляется на добавочный номер i. Во-вторых, необходим добавочный номер для обработки ситуаций, когда абонент не производит ввод вовремя (время ожидания по умолчанию - 10 с). Если абонент слишком долго не нажимает кнопку после запуска приложения WaitExten(), вызовы направляются на добавочный номер t. Вот как будет выглядеть диалплан после введения этих двух добавочных номеров: [incoming]
exten => 123,1,Answer()
exten => 123,n,Background(enter-ext-of-person) exten => 123,n,WaitExten()