2

最初のコマンドがビジーであるか失敗した場合に、php-agi スクリプトに次のコマンドをダイヤルさせようとしています。私が今設定した方法はうまくいかず、ビジー状態に戻って停止するか、うまくいくと 2 つのダイヤル コマンドを送信します。これが私が得たものです:

$agi->exec('DIAL',"SIP/".$target."@".$ip.",30,g");
$agi->exec('DIAL',"SIP/".$target."@".$ip2.",30,g");

これに関するどんな種類の助けも大歓迎です、事前に感謝します!

4

2 に答える 2

6

アスタリスクを呼び出すDial()と、DIALSTATUS というチャネル変数が設定されます。AGI から読み取ることができます。

CLI からの「core show application Dial」からの出力:

${DIALSTATUS}: This is the status of the call
CHANUNAVAIL
CONGESTION
NOANSWER
BUSY
ANSWER
CANCEL
DONTCALL: For the Privacy and Screening Modes. Will be set if the
called party chooses to send the calling party to the 'Go Away' script.
TORTURE: For the Privacy and Screening Modes. Will be set if the
called party chooses to send the calling party to the 'torture' script.
INVALIDARGS

元。

    $agi->exec('DIAL',"SIP/".$target."@".$ip.",30,g");
    $dialstatus = $agi->get_variable('DIALSTATUS');
    if ( $dialstatus != 'ANSWERED' ) {
      $agi->exec('DIAL',"SIP/".$target."@".$ip2.",30,g");
    }

したがって、ロジックは、最初の呼び出しが応答されなかった場合にのみ、呼び出しを行うことです。

于 2012-11-23T05:10:08.077 に答える
0

gフラグは次のDialとおりです (使用しているアスタリスクのバージョンによって若干異なる場合があります)。

g:宛先チャネルがハングアップした場合、現在の内線番号の次の優先順位でダイヤルプランの実行を続行します。

あなたが直面している問題はDial、ダイヤルプランから実行されていないことです。AGI によって実行されているため、Dial終了すると話は終わりです。

この仕事をするために、私はこのようなことをします...

まず、開いてextensions.conf、最後に次の行に沿って何かを追加します (これはテストされていません)。

【フェイルオーバー】
exten => doit,1,Dial(SIP/${TARGET}@${IP1},30,g)
exten => doit,n,Dial(SIP/${TARGET}@${IP2},30,g)

次に、AGI で:

// These set the necessary variables
$agi->set_variable('TARGET', $target);
$agi->set_variable('IP1', $ip);
$agi->set_variable('IP2', $ip2);

// And tell Asterisk where to go after the AGI exits
$agi->set_context('failover');
$agi->set_extension('doit');
$agi->set_priority(1);

exit(0);

次に、Asterisk CLI を起動し、ダイヤルプランをリロードします。

user@host:~$ アスタリスク -r
*CLI> ダイヤルプランのリロード

AGI が終了すると、failoverコンテキストにドロップされて実行され、何らかの理由で最初のエラーが発生した場合はDial2 番目のエラーが発生します。Dial

両方の 試行後にさらに処理を行う必要がある場合はDial、dialplan で行うか、事後に別の AGI を起動する必要があります。

于 2012-09-06T21:01:02.957 に答える