Снова всех приветствую. После написания прошлой статьи про использование 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 шлюзов. Для выхода на сотовые использовались два сотовых оператора с интересными тарифами. Эконимия должна быть экономной:).
Всё. До свиданья!