Asterisk™: будущее телефонии Второе издание
Шрифт:
Добавочный номер s
В наших каналах мы применяем определенную технологию, и поэтому, прежде чем приступить к настройке диалплана, придется остановиться еще на одном вопросе. Необходимо рассмотреть добавочный номер s. Когда в контекст поступают вызовы, для которых не указан конкретный добавочный номер (например, вызов FXO-линии), они передаются на добавочный номер s. (s - сокращение от start (начало), поскольку именно здесь начнется обработка вызова, если с ним не передана информация о добавочном номере.)
Поскольку это именно то, что требуется для нашего диалплана, перейдем к делу. Для каждого вызова будет выполняться три действия (ответ
[incoming]
70
В имени контекста нет ничего особенного. Данный контекст мог бы называться [stuff_that_comes_in] (все_что_поступает), и, поскольку контекст назначается в описании канала в файлах sip.conf, iax.conf, zaptel.conf и других, канал перешел бы в этот контекст диалплана. При этом настоятельно рекомендуется присваивать контекстам имена, из которых можно понять их назначение. Хорошими именами контекстов были бы [incoming], [local_ calls], [long_distance], [sip_telephones], [user_services], [experimental], [remote_locations] и т. д. Нельзя забывать, что контекст определяет, как канал входит в диалплан, поэтому контекстам должны присваиваться соответствующие имена.
exten => s,1,приложение exten => s,n,приложение exten => s,n,приложение
Теперь осталось только вставить приложения - и наш первый диал- план готов.
Обратите внимание, что можно было бы пронумеровать каждый приоритет, как показано ниже, но теперь так делать не рекомендуется, поскольку это сильно усложняет внесение изменений в диалплан впоследствии:
[incoming]
exten => s,1,приложение exten => s,2,приложение exten => s,3,приложение
Приложения Answer, Playback и Hangup
Прежде чем мы будем отвечать на звонок, воспроизводить звуковой файл и затем выполнять разъединение вызова, нам нужно научиться это делать. Приложение Answer (Ответ) используется для ответа каналу, по которому выполняется звонок. Оно выполняет исходную настройку для канала, получающего входящий вызов. (Некоторые приложения не требуют обязательного ответа каналу, но соответствующий ответ на звонок перед тем, как выполнять какие-либо действия над каналом, является очень хорошей практикой.) Как упоминалось ранее, Answer не принимает аргументов.
Приложение Playback (Воспроизведение) воспроизводит в канале предварительно записанный звуковой файл. При использовании приложения Playback ввод, поступающий от пользователя, просто игнорируется.
С Asterisk поставляется множество профессионально записанных звуковых файлов, которые должны находиться в папке, используемой для хранения звуков по умолчанию (обычно это /var/lib/asterisk/sounds/). При компиляции Asterisk можно выбрать для установки различные наборы образцов звуков, записанных на разных языках и в разных форматах файлов. Во многих примерах данной книги будут использоваться эти файлы, а также несколько файлов из Extra Sound Package, поэтому, пожалуйста, потратьте немного времени и установите этот пакет (см. главу 3). Также, посетив сайтhttp://thevoice. digium.com/, можно создать собственные голосовые сообщения, записанные тем же голосом, что и предоставляемые стандартные сообщения.
Чтобы использовать Playback, задайте в качестве аргумента имя файла (без расширения). Например, Playback(filename) обеспечит воспроизведение звукового файла filename.gsm, предполагая, что он размещен в стандартной папке для звуковых файлов. Обратите внимание, что по желанию можно указать полный путь к файлу, как это сделано в данном примере:
Playback(/home/john/sounds/filename)
Этот пример обеспечит воспроизведение filename.gsm из подпапки custom/ стандартной папки для звуковых файлов (вероятно, это будет /var/lib/asterisk/sounds/custom/filename.gsm). Заметьте, что, если в указанной папке содержится несколько файлов под одним именем, но с разными расширениями файлов, Asterisk автоматически воспроизводит лучший из них [71] .
Приложение Hangup (Разъединить) выполняет именно то, что подразумевается под его именем: оно разъединяет активный канал. Это приложение должно применяться в конце контекста для завершения текущего вызова, что защитит от несанкционированного использования диалплана абонентами. Приложение Hangup не принимает аргументов.
71
Asterisk выбирает лучший файл исходя из затрат на преобразование, то есть тот файл, для которого преобразование в собственный аудиоформат обусловит наименьшую нагрузку на ЦП. При запуске Asterisk вычисляет затраты на преобразования между разными аудиоформатами (часто в разных системах они различны). Величины этих затрат можно увидеть, введя команду show translation в интерфейсе командной строки. Представленные числа соответствуют времени в миллисекундах, которое потребуется Asterisk для преобразования одной секунды звука. Подробнее разные аудиоформа- ты (известные как кодеки) будут рассмотрены в главе 8.
Наш первый диалплан
Теперь, когда добавочный номер готов, сведем все вместе и создадим наш первый диалплан. Как принято во многих технических книгах (особенно в книгах по программированию), первый пример будет называться «Hello World!» (Здравствуй, мир!).
В первом приоритете нашего добавочного номера мы будем отвечать на звонок, во втором - воспроизводить звуковой файл hello-world.gsm, а в третьем будет выполнен разрыв соединения. Вот как выглядит диал- план:
[incoming]
exten => s,1,Answer
exten => s,n,Playback(hello-world)
exten => s,n,Hangup
Если у вас уже имеется один или несколько сконфигурированных каналов - вперед [72] ! Просто создайте файл extensions.conf (например, в папке /etc/asterisk) и вставьте в него четыре строки кода диалплана, которые мы только что написали. Если ничего не получается, проверьте, нет ли в консоли Asterisk сообщений об ошибках, и убедитесь, что для ваших каналов задан контекст [incoming].
72
Кстати, если у вас еще нет сконфигурированных каналов, самое время заняться ими. Вы испытаете настоящее удовольствие, когда впервые сделаете звонок в систему Asterisk, которую построили с нуля. Когда люди понимают, что только что они создали телефонную систему, на их лицах появляется такая забавная улыбка. Это удовольствие может быть доступным и вам, поэтому, пожалуйста, не двигайтесь дальше, пока не испытаете этот маленький диалплан в действии.
Даже несмотря на то что этот пример очень мал и прост, он раскрывает основные принципы контекстов, добавочных номеров, приоритетов и приложений. Если все получилось и этот диалплан заработал, значит, вы разобрались с основами, на базе которых создаются все диалпланы. Теперь давайте дополнять наш пример. В конце концов, в телефонной системе, просто воспроизводящей звуковой файл и затем разъединяющей канал, очень немного пользы!
Создание интерактивного диалплана
Созданный в предыдущем разделе диалплан был статическим; он всегда выполняет одни и те же действия для всех вызовов. Теперь мы собираемся добавить некоторую логику в диалплан, чтобы он осуществлял разные действия на основании ввода пользователя. Для этого необходимо рассмотреть еще некоторые приложения.