В данной статье будет в общем виде рассмотрен диалплан и его содержимое - контексты и экстеншены в Asterisk.
Формат диалплана
Диалплан в файле extensions.conf структурирован в секции, называемые контекстами. Контекстом называется сущность внутри диалплана, которая позволяет функционировать его различным частям совершенно независимо. Контексты используются для разделения функций, улучшения безопасности между различными частями диалплана, настройкой классов обслуживания для разных пользователей и так далее.
Контексты в диалплане
Синтаксис для контекста точно такой же как и во всех конфигурационных файлах Asterisk (файлах с расширением .conf) Для создания контекста просто необходимо поместить его название в квадратные скобки:
[telephony-users]
Экстеншены в диалплане
Внутри каждого контекста необходимо обозначит один или более экстеншенов. Экстеншен по сути это определенный список действий с определенным названием. После набора номера экстеншена, Астериск последовательно выполняет каждое действие.
Синтаксис у экстешена следующий:
exten => number,priority,application([parameter[,parameter2...]])
К примеру:
exten => 101,1,Dial(PJSIP/celecom, 20)
В данном случае, номер экстеншена – 101, номер приоритета – 1, используемое приложение – Dial(), с параметрами PJSIP/celecom и 20.
Приоритеты
Внутри каждого экстеншена должен быть один или более номеров приоритетов. Приоритет это просто число, от 1 до N. Команда с первым приоритетом будет соответственно исполнена первой, после её завершения будет исполняться команда с приоритетом 2 и так далее.
Обязательно нужно использовать последовательные числа, иначе выполнение сценария будет прервано.
exten => 101,1,выполнить действие exten => 101,2,выполнить другое действие exten => 101,5,выполнить еще какое-то действие
В примере выше выполнение сценария прервется после строчки с приоритетом 2, по причине того, что отсутствует приоритет с номером 3.
Кроме того, вместо номера приоритета можно указывать литеру n (next). То есть возможен такой сценарий:
exten => 101,1,выполнить действие exten => 101,n,выполнить другое действие exten => 101,n,выполнить еще какое-то действие
Если не хочется постоянно писать номер экстеншена, можно использовать функцию same.
exten => 101,1,NoOp() same => n(repeat),Verbose("Нужно что-то сделать!") same => n,Verbose("Нужно сделать что-то другое!")
Порядок обработки диалплана
Порядок считывания экстеншенов внутри контекста идёт сверху вниз, причем вложенные контексты обрабатываются первыми. То есть к примеру у вас есть три контекста – X, Y и Z. Если вы хотите чтобы контекст Z обрабатывался первым, просто сделайте его вложенным контекстом для контекста X.
Порядок поиска таков:
- Экстеншены
- Экстеншены с масками
- Вложенные экстеншены
- Переключатели