Астериск из коробки может исползовать язык программирования LUA для написания диалплана. И это прекрасно! В диалплане можно подключить любую установленную lua-библиотеку и получить доступ к базе данных (SQLite, MySQL, PostgreSQL), работать с сетью, читать-записывать файлики. Причем, делается это все довольно просто.
Зная любой язык программирования и вооружившись справочником по синтаксису LUA, а так же прочитав пару абзацев ниже можно без проблем начать использовать всю мощь этой связки.
Диалплан находится (как не сложно догадаться) в файле extensions.lua и представляет собой таблицу extensions состоящую из таблиц-контекстов, которые в свою очередь состоят из экстеншенов-функций. Код выглядит не так страшно, как описание:
extensions = { ["context"] = { ["_1XX"] = function(context, exten) app.dial("SIP/" .. exten); end }; } |
Функция-экстеншен принимает два параметра — context и exten и само-собой не обязательно должна быть анонимной:
fuction office_dial(context, exten) app.dial("SIP/" .. exten); end; extensions = { ["office"] = { ["_1XX"] = office_dial; } } |
Доступ ко всем командам asterisk (dial, wait, answer, playback и т.д.) осуществляется через таблицу app:
app.verbose("Hello there!") app.wait(1) app.answer() app.playback("beep") app.noop() app.hangup() |
А доступ к канальным переменным (CALLERID, CDR, DEVICE_STATE и т.д.) через таблицу channel:
local cid_number = channel.CALLERID["number"]:get() channel.CALLERID["name"]:set("Test User") if channel.DEVICE_STATE("SIP/100"):get()) == "NOT_INUSE" then -- что-то делаем end |
не забывает про методы get() и set() у канальных переменных.