PHPでアスタリスクを拡張する

アスタリスクという名前の新世代PBXについては誰もが聞いたことがあるでしょう。 たまたまこのシステムに興味を持ち、なんとかいくつかの商業プロジェクトを作ることさえできました。



この記事では、アスタリスクとphpプログラミング言語の統合について少しお話したいと思います。 その際、 phpagiクラスを使用します。



猫の下で、私が助けてくれたこのクラスのいくつかのメソッドの使用例を紹介します。





まず、phpagiの最新バージョンをダウンロードしてプロジェクトに接続し、/ etc / asterisk / manager.confファイルを編集します



; ; Asterisk Call Management support ; [general] enabled = yes ;  asterisk manager interface (AMI) port = 5038 bindaddr = 127.0.0.1 ;       webenabled = no ; Each user has a section labeled with the username ; so this is the section for the user named "mark" [user] ;     secret = qwerty ;  deny=0.0.0.0/0.0.0.0 ;     permit=127.0.0.1/255.255.255.0 read = system,call,log,verbose,command,agent,user,originate ;      write = system,call,log,verbose,command,agent,user,originate
      
      







phpagiのアーカイブにはphpagi.confファイルがあります。これを/ etc /アスタリスクにコピーし、ログインとパスワードを自然に修正する必要があります。

これで、次のようなphpスクリプトからAMIに安全に接続できます。



 include('phpagi.php'); $manager = new AGI_AsteriskManager(); $manager->connect(); //    phpagi.conf     , , .
      
      







まず、PHPで簡単なアスタリスクイベントモニターを作成することについてお話ししたいと思います。

これはphpagiクラスの最も便利な機能のようです。



これが私のイベントモニターです。

 function dump_events($ecode,$data,$server,$port) { $date_now = date('Ym-d'); $time_now = date('H:i:s'); echo "$time_now : received event '$ecode' from $server:$port\n"; print_r($data); } include('phpagi.php'); $manager = new AGI_AsteriskManager(); $manager->connect(); $manager->add_event_handler('*', 'dump_events'); //       //   AMI    //    $manager->wait_response(); //   ,      //         sleep() $manager->disconnect();
      
      







このハンドラーを使用すると、受信したイベントに応じていくつかのアクションを実行できます。たとえば、huawei社のモデムに挿入され、chan_dongle経由で接続されたSIMカードの残高を確認します。

Commandメソッドを使用した実装の例を示します。

最初のスクリプトはnewussdイベントをキャッチします

 function donglenewussd($ecode, $data) { if($model = Trunk::model()->find('value = :value', array( ':value' => $data['Device']))){ if(!empty($data['MessageLine0'])){ $balance = explode(' ', $data['MessageLine0']); switch($model->carrier){ case '0': break; case '1': $model->balance = $balance[0]; $model->save(); echo $balance[0]."\n"; break; case '2': $model->balance = $balance[2]; $model->save(); echo $balance[2]."\n"; break; case '3': preg_match('/[+-]?\d+\.?\d*/', $balance[1], $match); $model->balance = $match[0]; $model->save(); echo $match[0]."\n"; break; } } } } $manager = new AGI_AsteriskManager(); $manager->connect(); $manager->add_event_handler('donglenewussd', 'donglenewussd'); $manager->wait_response(); $manager->disconnect();
      
      







このスクリプトはdonglenewussdイベントを受け取ります。このイベントでは、データベースにバランス状態に関する情報を入力することに基づいて、オペレーターから応答を受け取ります。

次のスクリプトは、クラウンに対して1時間に1回言って、USDに残高を確認する要求を送信します。



  $manager = new AGI_AsteriskManager(); $manager->connect(); $trunks =Trunk::model()->findAll(); foreach($trunks as $trunk){ switch($trunk->carrier){ case '1': $manager->Command('dongle ussd '.$trunk->value.' *101#'); break; case '2': $manager->Command('dongle ussd '.$trunk->value.' *111#'); break; case '3': $manager->Command('dongle ussd '.$trunk->value.' *111#'); break; } } $manager->disconnect();
      
      







ご覧のとおり、プロジェクトにはyiiフレームワークを使用します。モデム設定が保存されているモデルがあります(システム名、オペレーター、バランス、状態など)。



この例は、ウクライナのオペレーター(MTS、KyivstarおよびLife)で動作します



デザートについては、 Originateメソッドについてお話ししたいと思います。 まだ通話ファイルを使用していますか? それから私たちはあなたに行きます。



/ var / spool / asterisk / outgoingディレクトリに呼び出しファイルをコピーすることにより、古い祖父の方法ではなく、AMIを使用して呼び出しを開始する非常に便利な機能



関数に渡されるすべてのパラメーターは、呼び出しファイルのパラメーターとほぼ同じです。

 $manager->Originate( '  ,  SIP/1001', '  ', ' ', '  ', '    ,  playback', ' ,    ', '', '       ', '  ', 'account -  ,   ', '    (       )', 'actionid -    ' );
      
      







さて、この関数をどうするか、自分で考え出すと思います。イベントマネージャーと組み合わせれば、発信呼び出しの実行に関するレポートも取得できます。



ハブでphpagiの言及が見つからなかったため、私の記事が誰かに役立つことを願っています。一般に、ライブラリのアーカイブにあるユースケース以外のユースケースはほとんど見つかりませんでした。



このライブラリを操作する他の方法がある場合は、コメントでそれらを読むことができます。



All Articles