Яндекс.Метрика

Asterisk Эксперт

Asterisk Эксперт с 29 марта по 30 марта

Количество
свободных мест

6 Записаться

Курс по Asterisk

Интенсив-курс по Asterisk с 21 апреля по 25 апреля

Количество
свободных мест

6 Записаться

Курсы по Mikrotik MTCWE

Курсы по Mikrotik MTCWE с 20 октября по 23 октября

Количество
свободных мест

7 Записаться
DialPlan на LUA для Asterisk
235
Доклад
Павел Соколов
DialPlan на LUA для Asterisk
скачать презентацию

Использование Lua в Asterisk: преимущества, возможности и нюансы

Введение

Asterisk – мощная программная платформа для организации IP-телефонии, но работа с диалпланом через стандартный extensions.conf часто вызывает сложности. Одним из альтернативных решений является использование скриптового языка Lua, который был внедрен в Asterisk в 2008 году. Lua позволяет упростить работу с диалпланами, обеспечивая более удобный и гибкий синтаксис.

Автор статьи имеет опыт работы с Asterisk с 2011 года и использует Lua в Asterisk с 2016 года, применяя его также в OpenRESTy (сборке Nginx с поддержкой Lua). В данном материале рассмотрены особенности работы Lua в Asterisk, его преимущества и основные принципы написания диалпланов.


Проблемы стандартного подхода

Работа с extensions.conf

Многие пользователи Asterisk начинают знакомство с платформой через web-интерфейсы, такие как FreePBX или Elastix. Однако в конечном итоге работа сводится к редактированию файла extensions.conf, который обладает рядом недостатков:

  • Запутанный синтаксис с большим количеством скобок, кавычек и знаков доллара.
  • Ограниченные возможности, отсутствие функций, типов данных и структур.
  • Высокая нагрузка на диск из-за логирования практически всех команд.

Альтернативные решения

В 2005 году была предложена альтернатива — AEL (Asterisk Extension Language). Он улучшил читаемость кода, но не решил проблему гибкости. В 2008 году был представлен модуль PBX Lua, который открыл новые возможности для работы с диалпланами.


Lua в Asterisk: основные возможности

Lua – это легковесный скриптовый язык, созданный для обработки данных в различных средах. В контексте Asterisk его применение позволяет:

  • Упростить создание диалпланов и повторно использовать код.
  • Интегрироваться с базами данных и веб-сервисами.
  • Использовать функции, структуры данных и переменные.

Документация по Lua для Asterisk представлена на WikiAsterisk, а сам PBX Lua разрабатывался для более удобного конфигурирования PBX и автоматизации процессов обработки вызовов.


Как работает Lua в Asterisk

При запуске Asterisk загружает модуль Lua и проверяет наличие глобальной таблицы Extensions. В случае ошибки она регистрируется в логе, но работа PBX продолжается с предыдущим сценарием.

Принципы работы:

  1. Файлы Lua загружаются из памяти при каждом звонке.
  2. Поддержка подключения внешних файлов через require.
  3. Логирование ошибок в реальном времени и автоматическое закрытие канала при синтаксических ошибках.
  4. Гибкость в описании контекстов – логика работы описывается в функциях без использования приоритетов.

Работа с переменными и приложениями

Lua поддерживает два типа переменных:

  • Переменные Lua, используемые внутри скриптов.
  • Переменные канала, доступные через channel().

Приложения диалплана доступны через таблицу app(), что позволяет гибко управлять вызовами.


Сравнение синтаксиса: extensions.conf vs extensions.lua

Ветвление

В extensions.conf используется GotoIf(), что делает код сложночитаемым. В Lua аналогичное условие записывается в стандартном формате if-then-else, что значительно упрощает восприятие.

Циклы

В extensions.conf доступен только While, из-за чего код становится перегруженным. В Lua можно использовать:

  • While – аналогично Asterisk.
  • For – удобен для итерации с четко определенным числом шагов.
  • For (ключ-значение) – используется для перебора таблиц.

Типы данных

В extensions.conf практически отсутствуют типы данных, а в Lua их восемь, что расширяет возможности работы с переменными.


Оптимизация производительности

Применение Lua позволяет оптимизировать Asterisk за счет:

  1. Компиляции Lua-файлов – снижает нагрузку на процессор при запуске.
  2. Использования LuaJIT – ускоряет выполнение кода благодаря Just-In-Time компиляции.
  3. Совместного использования extensions.lua и extensions.conf – позволяет переходить между ними через Gosub.

Подключение дополнительных возможностей

LuaRocks

LuaRocks – пакетный менеджер, аналог NPM и PIP. Позволяет легко подключать сторонние библиотеки, например:

  • JSON-парсер – для обработки API-запросов.
  • Redis – для хранения данных.
  • HTTP-запросы – для взаимодействия с внешними сервисами.

Работа с базами данных

Подключение к базе через Lua не оптимизировано и выполняется при каждом создании канала, что подходит только для низкой нагрузки. Для масштабируемости рекомендуется использовать:

  • Бэкенд-приложения.
  • func_odbc – поддерживает постоянные соединения и управляется ядром Asterisk.

Взаимодействие с системными командами

Lua позволяет выполнять команды операционной системы через io.popen(), что может использоваться для:

  • Получения информации о сервере (hostname).
  • Записи и чтения файлов.

В отличие от Shell-скриптов, Lua надежнее в условиях высокой нагрузки.


IVR и обработка ввода от пользователя

Lua позволяет обрабатывать ввод пользователя через:

  • Read() – запрос ввода (например, PIN-кода).
  • Background() + WaitExten() – проигрывание звукового файла с возможностью прерывания.

Для изменения контекста используется DialPlan(), что делает IVR-меню более гибким.

Важно: при использовании Read() необходимо проверять статус вызова (checkHangup), чтобы избежать зацикливания при разрыве соединения.


Отладка Lua в Asterisk

Так как встроенные инструменты отладки отсутствуют, используются два метода:

  1. Тестирование на dev-сервере – создание автоматизированной тестовой среды.
  2. Локальная разработка – настройка Lua на Linux/Windows с имитацией виртуального канала через заглушки для таблиц App и Channel.

Полезные ресурсы для изучения

  • Исходные коды extensions.lua – примеры реальных диалпланов.
  • Доклад Мэтью Николсона (2008) – ключевые идеи PBX Lua.
  • Статьи на Хабре – материалы от Сергея Дмитриева и Саймона NSK.
  • Мастер-классы на YouTube – видеоуроки по Lua в Asterisk.
  • Статьи Юрия Горличенко – описания сложных реализаций на Lua.

Заключение

Использование Lua в Asterisk значительно упрощает работу с диалпланами, делая их более гибкими, читаемыми и функциональными. Поддержка функций, циклов, переменных и интеграция с внешними сервисами позволяют создавать сложные сценарии обработки вызовов с высокой производительностью.

Для начинающих рекомендуется ознакомиться с основами Lua, а затем переходить к построению диалпланов. Lua в Asterisk – это мощный инструмент, позволяющий расширить возможности IP-телефонии и автоматизировать многие процессы.

Таймкоды
Показать еще..
Свернуть..
Ежегодная конференция по Asterisk 2025!

Билеты уже в продаже!

Остались вопросы?

Я - Компаниец Никита, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

Наши
клиенты

Посмотреть все
Спасибо !
Мы свяжемся с Вами в ближайшее время
Проверка номера

Проверка номера

Быстро узнать мобильного или городского оператора. Впишите номер

Мы проверили номер

+7 846 254 51 02

МТС (с 2016)

Повторить