Переменные диалплана и шаблоны в Asterisk

Конфигурация плана набора содержится в файле конфигурации Asterisk - extensions.conf. Это один из самых важных конфигурационных файлов. В нем определяется обработка и маршрутизация входящих и исходящих вызовов. Этот файл управляет поведением всех соединений проходящих через Вашу АТС.

Содержание файла "extensions.conf" разбито на секции, в которых могут быть или определены статические настройки и определения или выполняемые команды плана набора, в этом случае они называются контекстами. Секции, предназначенные для статических настроек, называются general и globals, а имена контекстов определяются системным администратором системы. Специальный тип контекстов – это макрос, помеченный пользовательско определенным именем с префиксом macro-. Это многократно исполняемые шаблоны, подобные процедурам в языке программирования. Каждая секция в файле extensions.conf начинается со строки с именем секции, заключенного в квадратные скобки. Это делает файл extensions.conf, по формату, похожим по на традиционные .ini файлы в системе Windows.

Совет: с помощью vim syntax highlighting вы можете значительно облегчить работу Dialplan’а и, что более важно, сделать ее менее ошибочно фоновой (to typos).

Планирование плана набора - Главная дискуссия о проектировании плана набора в Asterisk.

В диалплане бывает три типа переменных: глобальные переменные, переменные канала и переменные среды.

Глобальные переменные.

Обьявляются в секции [globals], либо специальной функцией диалплана GLOBAL() непосредственно в самом диалплане

Пример:
[globals]
INT1=SIP/zadarom

Подобным образом удобно назначать внешние каналы которые периодически могут меняться, при этом не придется переписывать весь диалплан.

Переменные канала.
Это переменные связанные непосредственно с вызовом и доступны только каналам участвующим в вызове. Задаются с помощь приложения Set()

Пример:
exten =>1001,1,Set(MAGIC=18)

Переменные среды.
Это переменные для доступа из asterisk к linux. Задаются функцией ENV().

Пример:
${ENV(var)}

Для вызова ранее объявленных переменных в диалплане их заключают в фигурные скобки и перед ними ставят символ $.

Пример:
[globals]
SEKRETAR=SIP/1001
[office]
exten => 1001,1,Dial(${SEKRETAR})

Учтите, что переменные в asterisk чувствительны к регистру.

Шаблоны набора в asterisk.

Шаблоны всегда начинаются с символа нижнее подчеркивание (_). Этот символ дает знать asterisk что идет сопоставление с шаблоном, а не с явно заданным номером.

В шаблоне могут быть использоваться следующие символы:
X – означает любое одиночное числу от 0-9
Z – означает любое одиночное число от 1-9
N – означает любое одиночное число 0т 2-9
[13-5]- означает любое одиночное число из заданного диапазона. В данном примере это одно из чисел 1,3,4,5
. – точка, может означать любое количество произвольных символов, больше нуля
! – восклицательный знак, может означать любое количество произвольных символов, в том числе и ноль.

Пример:
exten => _XXX,1,Background(/var/lib/asterisk/sounds/ru/company-welcome)
Абонент набравший любой номер от 000 до 999, услышит голосовой файл company-welcome.

Если набраный номер соответствует нескольким шаблонам в диалплане, то будет использован самый точный.

Пример:
exten => _XXX,1,Background(/var/lib/asterisk/sounds/ru/company-welcome)
exten => _1XX,1,Dial(SIP/100)


При наборе абонентом номеров от 100 до 199, asterisk будет использовать команду Dial(SIP/100), поскольку шаблон для этой команды определен более точно.

Переменная канала ${EXTEN}

Переменная канала ${EXTEN} сохраняет в себе ранее набранный добавочный номер.

Пример:
exten => _XXXX,1,Dial(SIP/${EXTEN})

Подобным образом мы разрешаем звонки на все номера в диапазоне 0000 – 9999. к примеру, при наборе номера 1001, звонок пойдет на номер 1001.
Полный синтаксис ${EXTEN:x:y} где:
x – количество символов после которых нужно начать выборку, может быть отрицательным, тогда отсчет начинаем с конца
y – количество символов которые должны быть использованы

Пример:
exten => _9.,1,Dial(SIP/7${EXTEN:1:7})

Шаблон _9. позволяет ввести любой номер начинающийся с 9, при этом ${EXTEN:1:7} отбросит первый символ (9), и оставит только 7 символов. А 7 перед символом $ добавит префикс 7 вначале номера. Но в данном примере 7 отрежется :) . К примеру вместо номера 9555555551, будет использован номер 5555555.

ignorepat => 9 ; позволяет asterisk после нажатия 9-ки продолжать выдавать тональный сигнал, не всегда работает с VoIP линиями.
Congestion() приложение выдающее короткие гудки (перегрузка)

include => <имя контекста> позволяет включать в один контекст диалплана, другие контексты.

Обязательно нужно убедиться что контекст куда приходят входящие вызовы не допускает звонков на исходящие линии, в противном случае возможны звонки за счет вашей АТС.

Выражения и работа с переменными в Asterisk.

$[выражение] – так обьявляется выражение в диалплане Asterisk. Оно может быть как математическим, так и логическим.

GotoIf(выражение?местоназначения1:местоназначения2)

${CALLERID(num)}- функция определяющая номер звонившего

GotoIfTime(время, день недели, день месяца, месяц? label) Переход в зависимости от времени дня, дня недели, дня месяца или месяца
Диапазон время задается в формате 9:00-17:00
День недели обозначается mon, tue, wed, thu, fri, sat, sun. Если необходимо указать диапазон для 5 дней то делают это так mon-fri, или thu&fri для двух дней.
Дни месяца задают числами от 1 до 31. Диапазон дней задают так 1-14, или 3&4, или 1-5&10-15
Месяц задается как: jan, или jan-apr, или jun&oct, или jan-apr&jun&oct&dec
Если нужно указать весь временной диапазон для любого из аргументов, то используют символ *
label – метка для перехода.

Получите бесплатную консультацию

Мы очень любим общаться и не жалеем на это времени.
Напишите нам - задайте интересующий Вас вопрос, поделитесь идеей.
Мы постараемся ответить Вам как можно быстрее.
Каждое сообщение директор читает лично.