[英]Asterisk AGI in PHPAgi process
我为我的星号11.3.0在php中创建了一个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
所有过程0:00 /usr/bin/php -q /var/lib/asterisk/agi-bin/php/myagi.php 954332 190053
如果来自未知号码的电话,我需要知道如何调试我的agi。
#!/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();
?>
要调试agi,您需要从ssh执行以下操作
1)停止星号守护进程
asterisk -rx "core stop now"
2)在控制台中启动星号(不分离)并启动agi调试-将显示所有错误
asterisk -vvvvgc
agi set debug on
core set verbose 5
3)现在检查。 您已经看到了星号和AGI脚本之间的所有对话以及该脚本生成的所有错误。
如果仍然没有帮助,也可以尝试“ core set debug 5”,但是输出将很难理解。
通道挂起时,您可以忽略SIGHUP信号( 呼叫断开 )。
在表盘上添加g
:
g: Proceed with dialplan execution at the next priority in the current extension if the destination channel hangs up.
$agi->exec('DIAL', $dialstring.",30,g");
AGI调试
您可以在脚本中打印一些调试消息:
// debug infos
$agi->verbose("before dial",3);
// ...
$agi->verbose("Number: ".$argv[2]);
连接到星号(Verbosity 3): asterisk -rvvv
使用CLI命令agi show命令可以列出可用的agi命令。
*CLI> agi show
在Asterisk CLI上观看AGI和您的调试消息。
*CLI> agi set debug on
当给出“未知”时,您可以将您的AGI脚本设置为冗长并登录到文件:
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.