Снова всех приветствую. После написания прошлой статьи про использование lua в астериске, пришла мысль про небольшое пояснение об использовании DEF-кодов совместно с lua. Ранее тут пролетала статья про генерацию кодов используя скрипт на php. Я этим скриптом успешно пользовался и пользуюсь, но с небольшими (совсем не большими) доработками.
Приводить листинг самого скрипта не буду, вы можете его прочитать по ссылке:
habrahabr.ru/post/150793
тут укажу только сами доработки.
Первое — нам надо генерировать код на lua и сохранять его по стандартному «библиотечному» пути (/usr/lib/lua/5.1 или для 64бит систем /usr/lib64/lua/5.1). Для этого в выше упомянутом скрипте в самом его начале делаем запись:
эту строчку я вставил сразу после
Далее, в конце оригинального скрипта, после цикла foreach я добавил следующую запись, которая генерирует код на lua:
call_mobile — это функция которая обрабатывает события выхода на сотовые.
Второе — нам нужно применить изменения в Астериске:
Третье — сам скрипт вешаем в crone и забываем про его существование :) У меня скрипт исполнялся раз в сутки.
На самом деле можно избежать громоздкой записи экстеншена и реализовать парсинг собития выхода на внешку чер��з функцию, но тут спорный вопрос — не факт что это будет оптимально. Описание событий всё ровно составляется не руками, а автоматом, поэтому можно после написания вообще забыть про эту проблему.
Про маршруты непосредственно самих звонков (какие направления через что или кого пропускать) тут вы уже сами решайте. У меня стояло около 8 gsm шлюзов. Для выхода на сотовые использовались два сотовых оператора с интересными тарифами. Эконимия должна быть экономной:).
Всё. До свиданья!
Приводить листинг самого скрипта не буду, вы можете его прочитать по ссылке:
habrahabr.ru/post/150793
тут укажу только сами доработки.
Первое — нам надо генерировать код на lua и сохранять его по стандартному «библиотечному» пути (/usr/lib/lua/5.1 или для 64бит систем /usr/lib64/lua/5.1). Для этого в выше упомянутом скрипте в самом его начале делаем запись:
$dp = fopen('/usr/lib/lua/5.1/mphonetable.lua','w'); //lua dialplan
эту строчку я вставил сразу после
$defs = array();
Далее, в конце оригинального скрипта, после цикла foreach я добавил следующую запись, которая генерирует код на lua:
# генерируем шаблоны для правила набора выхода через 9ку $linecode = '98'; fwrite($dp,"extensions.mobile_out={\n"); foreach($regs as $op => $reg) { foreach($reg as $r) { fwrite($dp,"\t[\"_"); echo "\t[\"_"; echo $linecode.$r.'"]=call_mobile;'."\n"; $line = $linecode.$r.'"]=call_mobile;'."\n"; fwrite($dp,$line); } } # генерируем шаблоны для правила набора выхода без 9ки $linecode = '8'; foreach($regs as $op => $reg) { foreach($reg as $r) { fwrite($dp,"\t[\"_"); echo "\t[\"_"; echo $linecode.$r.'"]=call_mobile;'."\n"; $line = $linecode.$r.'"]=call_mobile;'."\n"; fwrite($dp,$line); } } fwrite($dp,"\tinclude = {\"out_trunk\"};\n"); fwrite($dp,"}\n"); fclose($dp);
call_mobile — это функция которая обрабатывает события выхода на сотовые.
Второе — нам нужно применить изменения в Астериске:
#-------------------------------------------------------- ob_implicit_flush(true); set_time_limit(0); #Основные настройки $host="192.168.xxx.xxx"; # айпишник сами вставите $port="5038"; $user="login"; $pass="password"; $wrets=""; #открываем сокет $socket = fsockopen("$host","$port"); if (!$socket) exit("no connect to ats"); #авторизация fputs($socket, "Action: login\r\n"); fputs($socket, "Events: off\r\n"); fputs($socket, "UserName: $user\r\n"); fputs($socket, "Secret: $pass\r\n\r\n"); fputs($socket, "Action: command\r\n"); fputs($socket, "command: module reload pbx_lua\r\n\r\n"); fputs($socket, "Action: logoff\r\n\r\n"); #читаем ответ while (!feof($socket)) { $line = fread($socket,8192); echo $line; } fclose($socket); # там далее идут две функции оригинального скрипта...
Третье — сам скрипт вешаем в crone и забываем про его существование :) У меня скрипт исполнялся раз в сутки.
На самом деле можно избежать громоздкой записи экстеншена и реализовать парсинг собития выхода на внешку чер��з функцию, но тут спорный вопрос — не факт что это будет оптимально. Описание событий всё ровно составляется не руками, а автоматом, поэтому можно после написания вообще забыть про эту проблему.
Про маршруты непосредственно самих звонков (какие направления через что или кого пропускать) тут вы уже сами решайте. У меня стояло около 8 gsm шлюзов. Для выхода на сотовые использовались два сотовых оператора с интересными тарифами. Эконимия должна быть экономной:).
Всё. До свиданья!
