首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHPAgi进程中的Asterisk AGI

PHPAgi进程中的Asterisk AGI
EN

Stack Overflow用户
提问于 2013-04-02 15:35:45
回答 2查看 18.7K关注 0票数 1

我已经在php中为我的asterisk 11.3.0创建了一个agi,当我在我的服务器中使用ps ux时,我有一些agi调用滞留在队列中。

6:42 /usr/bin/php -q /var/lib/asterisk/agi-bin/php/myagi.php Unknown 190090

许多像这样的进程都会被困在队列中。

所有进程都带有数字,如0:00 /usr/bin/php -q /var/lib/asterisk/agi-bin/php/myagi.php 954332 190053

我需要知道如何调试我的agi,如果来自未知号码的呼叫。

我的AGI脚本

代码语言:javascript
复制
#!/usr/bin/php -q
<?php
pcntl_signal(SIGHUP, SIG_IGN);
require('phpagi/phpagi.php');

$agi                = new AGI();

$calleridnum    = $agi->request['agi_callerid'];
$callerid       = $agi->request['agi_callerid'];
$callidname     = $agi->request['agi_calleridname'];
$phoneno        = $agi->request['agi_dnid'];
$channel        = $agi->request['agi_channel'];
$uniqueid       = $agi->request['agi_uniqueid'];

if(substr($phoneno,0,3)==011)
{
    $phoneno = substr($phoneno, 3);
}

$URL = '12121@mysip.abc.com';

$dialstr = "SIP/" . $URL;

$res = $agi->exec("DIAL $dialstr");

$dialstatus = $agi->get_variable("DIALSTATUS");
$answeredtime = $agi->get_variable("ANSWEREDTIME");


if($dialstatus['data'] != "ANSWER")
{
    //No answer
}
if($dialstatus['data'] == "ANSWER") 
{
    $agi->verbose("I am in Cutting Balance!!");
}
savecdr($URL,"$callerid", $phoneno, $trunk, $dialstatus['data'], $answeredtime['data'], $PerMinuteCharges,$callstart,$TriggerCharge,$OID,$callidname,$IP,$NodeID,$MinutesUsed,$TalkTime,$TTCut,$pTTRemain,$pHash[Expiry],$pMinTotal,$VOID);


$agi->hangup();

?>
EN

回答 2

Stack Overflow用户

发布于 2013-04-03 10:02:57

要调试agi,您需要从ssh执行以下操作:

1)停止星号守护进程

代码语言:javascript
复制
  asterisk -rx "core stop now"

2)在控制台中启动asterisk (不分离)并启动agi debug -将显示所有错误

代码语言:javascript
复制
  asterisk -vvvvgc
  agi set debug on
  core set verbose 5

3)立即检查。您已经看到asterisk和您的AGI脚本之间的所有对话,以及脚本生成的所有错误。

如果仍然没有帮助,也可以尝试"core set debug 5",但是输出将很难理解。

票数 1
EN

Stack Overflow用户

发布于 2013-04-02 15:48:36

当通道挂起(Call Disconnect)时,忽略SIGHUP信号。

g添加到拨号:

g: Proceed with dialplan execution at the next priority in the current extension if the destination channel hangs up.

代码语言:javascript
复制
$agi->exec('DIAL', $dialstring.",30,g");

AGI调试

您可以在脚本中打印一些调试消息:

代码语言:javascript
复制
// debug infos
$agi->verbose("before dial",3); 
// ...
$agi->verbose("Number: ".$argv[2]); 

连接到星号(冗长为3):asterisk -rvvv

使用CLI命令agi show命令列出可用的agi命令。

*CLI> agi show

在Asterisk CLI上查看AGI和调试消息。

*CLI> agi set debug on

您可以设置您的AGI脚本详细,当“未知”是给定的,并记录到一个文件:

代码语言:javascript
复制
if ($argv[1] == "Unknown") {
  define ('VERBOSE', true);
} else {
  define ('VERBOSE', false);
}

if (VERBOSE) file_put_contents("/tmp/unknown.log", time().": ".$msg, FILE_APPEND | LOCK_EX);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15758611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档