Использование AEL в диалплане
Asterisk начиная с версии 1.4 поддерживает также и диалплан, написанный на Asterisk Extension Language (AEL), который прописывается в файле extensions.ael. Возможно одновременное использование как традиционного диалплана, прописанного в extensions.conf, так и extensions.ael. Если присутствуют оба файла extensions.conf будет переписывать идентичные части. В Asterisk присутствует утилита для преобразования ael в формат extensions.conf, которая называется aelparse. Утилита […]
Asterisk начиная с версии 1.4 поддерживает также и диалплан, написанный на Asterisk Extension Language (AEL), который прописывается в файле extensions.ael. Возможно одновременное использование как традиционного диалплана, прописанного в extensions.conf, так и extensions.ael. Если присутствуют оба файла extensions.conf будет переписывать идентичные части. В Asterisk присутствует утилита для преобразования ael в формат extensions.conf, которая называется aelparse. Утилита aelparse также используется для поиска синтаксических ошибок в extensions.ael.
Команды для ael в CLI
Для применения изменений в extensions.ael в консоли Asterisk необходимо выполнить команду
ael reload
Введенная в консоли Asterisk команда
dialplan show
выведет совокупный диалплан, загруженный Asterisk из extensions.conf и extensions.ael.
Источник каждого правила отображается в квадратных скобках, предшествующих правилу.
Сравнение extensions.conf и extensions.ael
Конец строки – команды в AEL должны заканчиваться символом “;” так как в одной строке может быть несколько команд.
Контекст, экстеншены, приоритеты.
В AEL используются фигурные скобки. Указание приоритетов (1…n) больше не требуется.
extensions.conf:
[from-internal]
exten => _1XX,1,Dial(SIP/${EXTEN})
exten => _2XX,1,Dial(SIP/${EXTEN})
extensions.ael
context from-internal {
_1XX => {
Dial(SIP/${EXTEN});
}
_2XX => {
Dial(SIP/${EXTEN});
}
}
Если для экстеншена выполняется только одна команда, то фигурные скобки можно опустить:
context default {
222 => Playback(hello);
}
Комментарии
Комментарии инициируются в AEL через „//“ (две косые черты). Для многострочных комментариев, введите каждую строку отдельно с помощью „//“ .
extensions.conf
; комментарий
exten => _2XX,1,Dial(SIP/${EXTEN}) ; Dial
extensions.ael
// комментарий
_2XX => {
Dial(SIP/${EXTEN}); // Dial
}
Включение других контекстов (include).
extensions.conf
[office1]
exten => _1XX,1,Dial(SIP/${EXTEN})
exten => 0101,1,Dial(SIP/89990001122)
[office2]
exten => 3001,1,Dial(SIP/${EXTEN})
[from-internal]
include => office1
include => office2
extensions.ael
context office1 {
_1XX => {
Dial(SIP/${EXTEN});
}
0101 => {
Dial(SIP/89990001122);
}
}
context office2 {
_2XX => {
Dial(SIP/${EXTEN});
}
}
context from-internal {
includes {
office1;
office2;
}
}
extensions.conf
[globals]
PREFIX=2
FORMAT=wav
extensions.ael
globals {
PREFIX=2;
FORMAT=wav;
}
Выражения и назначения
AEL не является полноценным языком программирования, но поддерживает конструкции if(), while(), for(). Для получения предсказуемых результатов при назначении переменных лучше использовать Set:
extensions.conf
exten => 77,1,Set(action=saypin)
exten => 77,n,ExecIf($["${action}" = "saypin"],SayDigits,56558)
extensions.ael
77 => {
Set(action=saypin);
if ("${action}" = "saypin") {
SayDigits(56558);
}
}
}
Метки (именованные приоритеты) и переходы к ним — goto и jump
Как и в extensions.conf в ael является необязательным указание контекста (в goto, jump), экстеншена(в goto). Т.е. для того, чтобы перейти к какой либо метке в пределах текущего контекста, экстеншена в ael необходимо ввести goto label.
Следующие примеры переходов эквивалентны:
extensions.conf
Goto(from-internal,200,1)
ael(goto)
goto from-internal|200|1
ael(jump)
jump 200@from-internal
Циклы
В extensions.conf можно было использовать только
В AEL присутствуют циклы for и while. В extensions.conf можно использовать приложения While() и EndWhile(), с помощью которых также можно описать логику цикла for.
В AEL также есть команды break и continue, которые можно использовать в циклах. break переходит к концу цикла, continue - переходит к началу.
extensions.conf
exten => 555,1,Set(x=0)
exten => 555,n,While($[${x} <= 5])
exten => 555,n,NoOp(x ist ${x})
exten => 555,n,Playback(beep)
exten => 555,n,Set(x=$[${x} + 1])
exten => 555,n,EndWhile()
exten => 555,n,NoOp(End)
extensions.ael (for)
555 => {
for (x=0; ${x}<=5; x=${x}+1) {
NoOp(x is ${x});
Playback(beep);
}
NoOp(End);
}
extensions.ael (while)
555 => {
x=0;
while (${x} <= 5) {
NoOp(x is ${x});
// также в цикле в extensions.ael поддерживаются
// конструкции выполняющие проверку и выход из цикла
// if (${x} > 4) {
// break;
// }
//
Playback(beep);
x=${x} + 1;
}
NoOp(End);
}
Фильтрация по CallerID
В extensions.conf диалплан, предназначенный для определенного CallerID прописывался так:
;нежелательный звонок
exten => 110/89990001122,1,NoOp(Blacklist)
exten => 110/89990001122,n,Busy()
;остальные звонки
exten => 110,1,Dial(SIP/${EXTEN})
;нежелательный звонок
exten => 110/89990001122,1,NoOp(Blacklist)
exten => 110/89990001122,n,Busy()
;остальные звонки
exten => 110,1,Dial(SIP/${EXTEN})
extensions.ael
//нежелательный звонок
110/89990001122 => {
NoOp(Blacklist);
Busy();
}
//остальные звонки
110 => {
Dial(SIP/${EXTEN});
}
Также вместо конкретного CallerID можно указывать шаблоны вида _23X.
Остались вопросы?
Я - Виталий Шелест, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
VoIP оборудование
ближайшие курсы
Новые статьи
10 доводов в пользу Asterisk
Распространяется бесплатно.
Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.
Безопасен в использовании.
Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.
Надежен в эксплуатации.
Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.
Гибкий в настройке.
Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.
Имеет огромный функционал.
Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.
Интегрируется с любыми системами.
То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.
Позволяет телефонизировать офис за считанные часы.
В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.
Отличная масштабируемость.
Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.
Повышает управляемость бизнеса.
Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.
Снижает расходы на связь.
Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.