アスタリスク:AMIを使用したコールバック

Asterisk Manager Interface(AMI)は、外部プログラムがAsteriskシステムを管理および制御できるようにするソフトウェアインターフェイスです。 AMIはTCPポートで接続をリッスンします。デフォルトでは5038です。クライアントプログラムはAMIに接続し、コマンドをAsteriskに送信し、コマンド実行のステータスに関する応答を受信できます。

この投稿では、特定の問題を解決する例としてAMIの使用を検討します。特定のURLで呼び出しを生成するようにアスタリスクを構成し、呼び出しパラメーターを設定する必要があります。



アスタリスクAMIの構成





最初に行うことは、AMIを有効にして、クライアントプログラムが認証するユーザーを取得することです。



/etc/asterisk/manager.conf

[general] enabled = yes port = 5038 bindaddr = 0.0.0.0
      
      







/etc/asterisk/manager.conf

 [c2call] secret=FrUyHn6FSaX deny=0.0.0.0/0.0.0.0 permit=192.168.0.0/255.255.0.0 read=system,call,log,verbose,command,agent,user,config,command,dtmf,reporting,cdr,dialplan,originate write=system,call,log,verbose,command,agent,user,config,command,dtmf,reporting,cdr,dialplan,originate
      
      







変更を適用するには、リロードします。



 asterisk -rx "module reload manager"
      
      







次に、実際に呼び出されるサブスクライバに接続される内線番号を作成する必要があります。



/etc/asterisk/sip.conf

 [3200] deny=0.0.0.0/0.0.0.0 permit=192.168.0.0/255.255.0.0 secret=3200 dtmfmode=rfc2833 canreinvite=no context=OUT_IN1 host=dynamic type=friend nat=yes port=5060 qualify=yes callcounter=yes faxdetect=no
      
      







拡張機能を作成した後、アスタリスク構成を再読み取りする必要があります。

 asterisk -rx "sip reload"
      
      







これで、アスタリスクのセットアップが完了しました。







コールバックスクリプト





次に、PHPでのスクリプトの作成に移りましょう。



callback.php

 <?php # --- define globals --- $strhost = "192.168.0.10"; $strport = "5038"; $timeout = "10"; $num=$_REQUEST['num']; $cid=$_REQUEST['cid']; $c=$_REQUEST['c']; $p=$_REQUEST['p']; $errno=0 ; $errstr=0 ; $sconn = fsockopen ($strhost, $strport, &$errno, &$errstr, $timeout) or die("Connection to $strhost:$strport failed"); if (!$sconn) { echo "$errstr ($errno)<br>\n"; } else { fputs ($sconn, "Action: login\r\n"); fputs ($sconn, "Username: c2call\r\n"); fputs ($sconn, "Secret: FrUyHn6FSaX\r\n"); fputs ($sconn, "Events: off\r\n\r\n"); usleep(500); fputs ($sconn, "Action: Originate\r\n"); fputs ($sconn, "Channel: SIP/$cid\r\n"); fputs ($sconn, "Callerid: $cid\r\n"); fputs ($sconn, "Timeout: 15000\r\n"); fputs ($sconn, "Context: $c\r\n"); fputs ($sconn, "Exten: $num\r\n"); fputs ($sconn, "Priority: $p\r\n\r\n"); fputs ($sconn, "Async: yes\r\n\r\n" ); fputs ($sconn, "Action: Logoff\r\n\r\n"); usleep (500); fclose ($sconn); } ?>
      
      







これで、次のURLを使用して呼び出しの生成を確認できます。

 http://domain.com/callback.php?p=1&c=OUT_EXT2&cid=3200&num=84951234567
      
      







コンソールに結果が表示されます。



 *CLI> == Manager 'c2call' logged on from 192.168.0.11 == Using SIP RTP CoS mark 5 -- Executing [84951234567@OUT_EXT2:1] Dial("SIP/3200-0000000a", "SIP/84951234567@TRK1") in new stack == Manager 'c2call' logged off from 192.168.0.11 == Using SIP RTP CoS mark 5 -- Called SIP/84951234567@TRK1 -- SIP/TRK1-0000000b is ringing == Spawn extension (OUT_EXT2, 84951234567, 1) exited non-zero on 'SIP/3200-0000000a'
      
      







開業医に役立つ可能性のあるコメントは次のとおりです。



\ r \ n-改行付きキャリッジリターン(キャリッジリターン+ラインフィード(CR + LF))。 通常、Enterキーを押して送信され、コマンドの送信が完了したことを示します。



イベント:オフ

この場合、このAMI接続へのイベントの送信を無効にします。 基本的にその値は常にオフです



チャネル:SIP / $ cid

通話の宛先となるチャネルの名前。 この場合、コールは最初にSIP / 3200サブスクライバーに送信され、ユーザーがコールをピックアップするとすぐに、コールは番号84951234567にリダイレクトされます。



発信者:$ cid

発信チャネルに設定される発信者ID。



タイムアウト:15000

コールの待機時間を指定します-15秒



非同期:はい

非同期呼び出しの生成により、即時の応答を待たずに1つ以上の呼び出しを作成できます。



All Articles