【问题标题】:Asterisk Server Pass Variable from Dialplan to AGI ScriptAsterisk 服务器将变量从拨号计划传递到 AGI 脚本
【发布时间】:2012-07-12 09:01:58
【问题描述】:

我的拨号方案是这样的

[dial-plan]
exten => s,1,Answer()
exten => s,n,Noop(exten = ${EXTEN}
exten => s,n,Macro(dumpvars)
exten => s,n,Macro(record-enable)
exten => s,n,AGI(success.php)
exten => i,1,Noop(REASON = ${REASON})
exten => i,n,Macro(dumpvars)
exten => i,n,AGI(faile.php)
exten => failed,1,Noop(REASON = ${REASON})
exten => failed,n,Macro(dumpvars)
exten => failed,n,AGI(faile.php)

我想从 faile.php 调用的地方捕获,它可能是从 failedi 调用的。我该如何检查这个

我需要做这样的faile.php

if($some_var == 1){
     //Invalid
}
elsif($some_var == 2){
    //Failed
}

【问题讨论】:

    标签: php asterisk asteriskami agi


    【解决方案1】:

    将使用一些标准参数调用 agi,包括被调用的扩展名(在您的情况下,这将是 ifailed)。确保您正在解析传递给脚本的参数(通过标准输入)!

    【讨论】:

      【解决方案2】:

      在您的脚本中使用 phpagi.php,它提供了 AGI 所需的所有解析。

      或在http://www.voip-info.org/wiki/view/Asterisk+AGI+php查看示例

      【讨论】:

        【解决方案3】:

        如果我正确理解了您的问题,您需要将一个变量传递给您的 PHP AGI 脚本。 操作方法如下:

        exten => i,n,AGI(faile.php,invalid)
        
        exten => failed,n,AGI(faile.php,failed)
        

        然后,您的 PHP AGI 脚本应如下所示:

        #!/usr/bin/php -q
        <?php
        set_time_limit(30);
        //load PHP AGI
        require('phpagi/phpagi.php');
        error_reporting(E_ALL);
        $agi = new AGI();
        
        $status = $argv[1];
        
        if($status == "invalid")
        {
          // invalid
        } else
        { 
          // failed
        }
        ?>
        

        【讨论】:

          【解决方案4】:

          这是我用php-agi.php实现相同的方法

          failed.php(调用失败会执行)

          <?php
              require_once "phpagi.php";
              require_once "phpagi-asmanager.php";
          
              $astman = new AGI();
              $astman->set_variable('CallState','failed');
          
          ?>
          

          success.php(调用成功后执行)

          <?php
              require_once "phpagi.php";
              require_once "phpagi-asmanager.php";
          
              $astman = new AGI();
              $astman->set_variable('CallState','success');
          
          ?>
          

          hangup.php(将在调用结束时执行,如果调用失败或成功)

          <?php
              require_once "phpagi.php";
              require_once "phpagi-asmanager.php";
          
              $astman = new AGI();
              $call_state = agi_get_var('CallState');
              if($call_state == "success"){
                  //call was success
              }
              elseif($call_state == "failed"){
                  //call was failed
              }
          ?>
          

          【讨论】:

            【解决方案5】:

            在拨号方案中

            exten => _*999*.,1,Answer()
            exten => _*999*.,n,Set(var1=1) 
            exten => _*999*.,n,AGI(test.php,${var1})
            

            在php中

            <?php
                require('phpagi.php');
            
                $agi = new AGI();
            
                $agi->say_digit($argv[1]);
            
                $agi->hangup();
            ?>
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-04-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-07-22
              相关资源
              最近更新 更多