スクリプト自体はリストしません。ここで読むことができます。
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は、携帯電話の終了イベントを処理する関数です。
2番目-アスタリスクの変更を適用する必要があります。
#-------------------------------------------------------- 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); # ...
第三に、私たちはスクリプトを無作法にぶら下げ、その存在を忘れます:)私のスクリプトは1日に1回実行されました。
実際、拡張機能の面倒な記録を回避し、関数を介して外部への出口の解析を実装できますが、ここで議論のある質問は、これが最適であるという事実ではありません。 イベントの説明は、手ではなく機械によって均等に構成されているため、書き込み後は一般にこの問題を忘れることができます。
コール自体のルート(どの方向をどの方向または誰に渡すか)については、自分で決定します。 約8個のgsmゲートウェイがありました。 モバイルにアクセスするために、興味深いレートの2つのモバイルオペレーターが使用されました。 Ekonymyは経済的でなければなりません:)。
それだけです さようなら!