Asterisk™: будущее телефонии Второе издание - Меггелен Джим Ван
Синтаксис диалплана
Диалплан Asterisk определен в конфигурационном файле extensions. conf.
Файл extensions.conf обычно находится в папке /etc/asterisk/, но его местоположение может меняться в зависимости от того, как установлена Asterisk. Этот файл часто размещается в папках /usr/local/asterisk/etc/ и /opt/asterisk/etc/.
Диалплан состоит из четырех основных элементов: контекстов, добавочных номеров, приоритетов и приложений. В следующих нескольких разделах будут рассмотрены все эти части и то, как они работают вместе. После объяснения роли каждого из этих элементов в диалпла- не перейдем к процессу поэтапного создания базового функционального диалплана.
Образцы конфигурационных файлов
Если при установке Asterisk были установлены и образцы конфигурационных файлов, скорее всего, у вас имеется файл extensions.conf. Но мы предлагаем начинать не с файла-образца, а создать собственный файл extensions.conf с нуля. Это будет крайне полезно, поскольку обеспечит лучшее понимание основных элементов и принципов диалплана.
Но надо сказать, что образец файла extensions.conf остается фантастическим ресурсом, полным примеров и идей, которые можно использовать после изучения базовых элементов. Мы предлагаем переименовать его и назвать, например, extensions.conf. sample. Таким образом оригинальный файл будет сохранен, и к нему можно будет обратиться в будущем. Образцы конфигурационных файлов также можно найти в подпапке /configs/ папки исходного кода Asterisk.
Контексты
Диалпланы разбиты на разделы, называемые контекстами. Контексты - это именованные группы добавочных номеров, которые выполняют несколько функций.
Контексты изолируют разные части диалплана, предотвращая возможность их взаимодействия. Добавочный номер, определенный в одном контексте, полностью изолирован от добавочных номеров другого контекста, если только взаимодействие не разрешено специально. (То, как разрешить взаимодействие контекстов, будет рассмотрено ближе к концу данной главы.)
В качестве простого примера возьмем две компании, совместно использующие один сервер Asterisk. Если разместить голосовое меню каждой компании в собственном контексте, они будут эффективно отделены друг от друга. Это позволяет независимо определять действия, выполняемые, скажем, при наборе номера 0: при нажатии кнопки 0 в голосовом меню компании А вы попадете к секретарю компании А, а при нажатии кнопки 0 в голосовом меню компании В - к секретарю компании В. (Эти примеры предполагают, конечно же, что мы задали для Asterisk перенаправление вызовов на секретарей при нажатии кнопки 0 вызывающими абонентами.)
Контексты различаются по именам. Имена контекстов заключаются в квадратные скобки ([ ]). Допустимыми символами для образования имени являются буквы от A до Z (верхнего и нижнего регистра), цифры от 0 до 9, дефис и символ подчеркивания1. Например, контекст для входящих вызовов выглядит так: [incoming]
Максимальная длина имени контекста - 79 символов (80 символов - 1 завершающий нуль).
Все инструкции, размещаемые после описания контекста и до описания следующего контекста, являются частью данного контекста. В начале диалплана находятся два специальных контекста, [general] и [globals]. Раздел [general] содержит список общих настроек диалплана (о которых, вероятно, вам никогда не придется беспокоиться), а контекст [globals] мы будем обсуждать в разделе «Глобальные переменные». Пока что достаточно знать, что эти два контекста являются специальными. Созданные вами контексты можно называть как угодно, только не используйте имена [general] и [globals].
При описании канала (а именно так выполняется подключение элементов к системе) одним из параметров этого описания является контекст. Иначе говоря, контекст - это точка диалплана, с которой будет начинаться обработка соединений, выполняемых через этот канал.
Другое важное применение контекстов (возможно, самое важное) - обеспечение безопасности. Правильно применяя контексты, определенным абонентам можно предоставить доступ к функциям (таким, как междугородная связь), которые недоступны для других. Если ди- алплан разработан неаккуратно, пользователи по вашей оплошности могут получить возможность мошенничать в вашей системе. Пожалуйста, помните об этом при построении системы Asterisk.
В подпапке doc/ папки исходного кода Asterisk находится очень важный файл, security.txt, в котором определено несколько шагов для обеспечения безопасности системы Asterisk. Вам чрезвычайно важно прочитать и понять этот файл. Если проигнорировать меры предосторожности, описанные там, все может закончиться тем, что кто угодно сможет делать междугородные и платные звонки за ваш счет!
Если не отнестись к безопасности своей системы Asterisk серьезно, может дойти до того, что вам придется за это дорого расплатиться в буквальном смысле этого слова! Пожалуйста, выделите время и силы на то, чтобы защитить свою систему от мошенничества с оплатой.
Добавочные номера
в мире телекоммуникаций термин «оооавочныи номер» (extension) обычно обозначает числовой идентификатор, который присвоен линии, идущей к конкретному телефону. Однако в Asterisk это намного более широкое понятие, поскольку оно определяет уникальные последовательности шагов (каждый шаг включает приложение), которые Asterisk будет применять к вызову по этой линии. В каждом контексте может быть задано столько добавочных номеров, сколько требуется. При вызове конкретного добавочного номера (входящим или внутренним звонком) Asterisk будет выполнять шаги, определенные для этого добавочного номера. Поэтому именно добавочные номера определяют, что происходит со звонками при их обработке соответственно диалпла- ну. Хотя, конечно, добавочные номера могут использоваться в их традиционном значении (то есть вызов добавочного номера 153 заставит зазвонить SIP-телефон на столе Джона), но в диалплане Asterisk они могут означать намного большее.
Синтаксис добавочного номера - это слово exten, за которым следует стрелка, образованная знаками равенства и «больше чем»:
exten =>
Далее указывается имя (или номер). В традиционных системах телефонной связи под добавочными номерами мы понимаем цифры, которые надо набрать, чтобы другой телефон зазвонил. В Asterisk это понятие намного шире; например, в качестве имени добавочного номера может использоваться любая комбинация цифр и букв. В данной главе и далее будут использоваться как цифровые, так и буквенно-цифровые добавочные номера.
Присвоение имен добавочным номерам может показаться революционной идеей, но если вспомнить, что многие транспортные протоколы VoIP поддерживают (или даже активно поощряют) вызовы по имени или адресу электронной почты, а не просто по номеру, это действительно имеет смысл. Это одно из свойств, делающих Asterisk такой гибкой и мощной системой.
Полный добавочный номер состоит из трех компонентов:
• Имени (или номера).
• Приоритета (каждый добавочный номер может включать множество шагов; порядковый номер шага называется его приоритетом).
• Приложения (или команды), которое выполняет некоторое действие
над вызовом. Эти три компонента разделяются запятыми:
exten => имя,приоритет,приложение() Вот пример того, как может выглядеть настоящий добавочный номер:
exten => 123,1,Answer() В этом примере имя добавочного номера - 123, приоритет - 1, а приложение - Answer(). Теперь пойдем дальше и рассмотрим, что такое приоритеты и приложения.
Приоритеты
Каждый добавочный номер может включать множество шагов, называемых приоритетами. Каждый приоритет пронумерован последовательно, начиная с 1, и выполняет одно определенное приложение. Например, следующий добавочный номер отвечает на звонок (в приоритете под номером 1) и затем выполняет разъединение (в приоритете под номером 2):