Шрифт:
[incoming]
exten => s,1,Answer
exten => s,n,Playback(hello-world)
exten => s,n,Hangup
Если у вас уже имеется один или несколько сконфигурированных каналов - вперед [72] ! Просто создайте файл extensions.conf (например, в папке /etc/asterisk) и вставьте в него четыре строки кода диалплана, которые мы только что написали. Если ничего не получается, проверьте, нет ли в консоли Asterisk сообщений об ошибках, и убедитесь, что для ваших каналов задан контекст [incoming].
72
Кстати, если у вас еще нет сконфигурированных каналов, самое время заняться ими. Вы испытаете настоящее удовольствие, когда впервые сделаете звонок в систему Asterisk, которую построили с нуля. Когда люди понимают, что только что они создали телефонную систему, на их лицах появляется такая забавная улыбка. Это удовольствие может быть доступным и вам, поэтому, пожалуйста, не двигайтесь дальше, пока не испытаете этот маленький диалплан в действии.
Даже несмотря на то что этот пример очень мал и прост, он раскрывает основные принципы контекстов, добавочных номеров, приоритетов и приложений. Если все получилось и этот диалплан заработал, значит, вы разобрались с основами, на базе которых создаются все диалпланы. Теперь давайте дополнять наш пример. В конце концов, в телефонной системе, просто воспроизводящей звуковой файл и затем разъединяющей канал, очень немного пользы!
Создание интерактивного диалплана
Созданный в предыдущем разделе диалплан был статическим; он всегда выполняет одни и те же действия для всех вызовов. Теперь мы собираемся добавить некоторую логику в диалплан, чтобы он осуществлял разные действия на основании ввода пользователя. Для этого необходимо рассмотреть еще некоторые приложения.
Приложения Background, WaitExten и Goto
Один из самых важных ключей к построению интерактивных диал- планов Asterisk - приложение BackgroundQ [73] (Фон). Как и Playback, это приложение воспроизводит записанный звуковой файл. Однако, в отличие от Playback, если пользователь нажимает кнопку (или последовательность кнопок) на клавиатуре телефона, оно прерывает воспроизведение и переходит к добавочному номеру соответственно нажатым цифрам. Например, если абонент нажмет кнопку 5, Asterisk прекратит воспроизводить звуковое сообщение и передаст управление вызовом первому приоритету добавочного номера 5.
73
Нужно заметить следующее: некоторые люди ожидают, исходя из имени этого приложения, что Background будет выполняться в диалплане до тех пор, пока воспроизводится звук, но это имя указывает на то, что данное приложение воспроизводит звук в фоновом режиме в процессе ожидания двухтонального многочастотного набора телефонного номера (Dual-Tone Multi-Frequency, DTMF).
Чаще всего приложение Background используется для создания голосовых меню (которые часто называют автоответчиками или интерактивными секретарями). Многие компании используют голосовые меню для направления абонентов на соответствующий добавочный номер, таким образом освобождая своих секретарей от необходимости отвечать на все звонки.
Синтаксис Background аналогичен синтаксису Playback:
exten => 123,1,Answer
exten => 123,n,Background(main-menu)
В более ранних версиях Asterisk, если приложение Background завершало воспроизведение звукового сообщения и в текущем добавочном номере больше не было приоритетов, Asterisk ничего не делала и ожидала ввода абонента. Такое поведение больше не является для Asterisk принятым по умолчанию. Если требуется, чтобы Asterisk ожидала ввода абонента после завершения воспроизведения звукового сообщения, можно вызвать приложение WaitExten (Ожидание добавочного номера). Приложение WaitExten ожидает от абонента набора телефонного номера и часто вызывается сразу после приложения Background, как в данном фрагменте диалплана:
exten => 123,1,Answer
exten => 123,n,Background(main-menu)
exten => 123,n,WaitExten
Если требуется, чтобы приложение WaitExten ожидало ответа в течение определенного времени (вместо использования времени ожидания по умолчанию), просто укажите число, соответствующее необходимому количеству секунд, в качестве первого аргумента в WaitExten:
exten => 123,n,WaitExten(5)
И Background, и WaitExten позволяют абоненту производить набор номера. После этого Asterisk пытается найти в текущем контексте добавочный номер, соответствующий введенным абонентом цифрам. Если Asterisk находит однозначное соответствие, она направляет вызов на этот добавочный номер. Продемонстрируем это, добавив несколько строк в наш пример:
exten => 123,1,Answer
exten => 123,n,Background(main-menu)
exten => 123,n,WaitExten
exten => 2,1,Playback(digits/2)
exten => 3,1,Playback(digits/3)
exten => 4,1,Playback(digits/4) Если вызвать добавочный номер 123 из примера выше, он воспроизведет звуковое сообщение с фразой «main menu» (главное меню) и после этого будет ожидать ввода цифр 2, 3 или 4. Если нажать одну из этих цифр, Asterisk воспроизведет ее для вас. Также вы обнаружите, что, если ввести другую цифру (например, 5), Asterisk не обеспечит ожидаемого результата.
Также возможна ситуация, когда Asterisk обнаружит неоднозначное соответствие. Это можно легко продемонстрировать, введя в предыдущий пример добавочный номер под именем 1:
exten => 123,1,Answer
exten => 123,n,Background(main-menu)
exten => 123,n,WaitExten
exten => 1,1,Playback(digits/1)
exten => 2,1,Playback(digits/2)
exten => 3,1,Playback(digits/3)
exten => 4,1,Playback(digits/4) Наберите добавочный номер 123 и затем по подсказке главного меню введите 1. Почему Asterisk сразу же не воспроизводит этот номер? Потому, что цифра 1 неоднозначна; Asterisk не понимает, какой добавочный номер вызывается, 1 или 123. Он ожидает несколько секунд ввода другой цифры (например, 2 для вызова добавочного номера 123). Если набора никаких других цифр не последовало, по завершении времени ожидания Asterisk направляет вызов на добавочный номер 1. (Задавать собственные значения времени ожидания мы научимся в главе 6.) Прежде чем двигаться дальше, посмотрим, что было сделано на данный момент. Вызвав наш диалплан, абоненты услышат приветствие. Если они нажмут 1, то услышат номер 1, если 2 - то номер 2 и т. д. Для начала это неплохо, но давайте это все немного усовершенствуем. С помощью приложения Goto (Перейти к) заставим диалплан повторять приветствие после воспроизведения номера.