当 test.php 脚本从星号拨号计划运行时,一切正常,直到执行完成
$agi->get_data('xxx', 1000, 1); statement.
asterisk cli 显示此日志:
AGI脚本test.php完成,返回0
并且脚本完成其执行,而不播放请求的声音或获取任何 DTMF 数字。
我用类似的声音文件测试了stream_file函数,它工作得很好。所以文件存在并且声音播放模块没问题
#!/usr/bin/php -q
<?
require('phpagi.php');
$agi = new AGI();
$ch = $agi->request["agi_channel"];
$callerid = $agi->request["agi_callerid"];
$agi->answer();
$agi->verbose($callerid);
$menu = $agi->get_data('welcome', 1000, 1);
$menu = $agi->get_data('MainMenu', 5000, 1);
您可能有错误。
不幸的是,无法说出它是什么。
人们只是忘记提及(在书中也是如此),星号不会向 CLI 发送 agi 错误。
要获得错误,您应该检查主控制台(需要知道是哪一个,在大多数情况下是 tty9),或者只是在当前会话中使用控制台启动星号。
asterisk -rx "core stop now"
asterisk -vvvgc
agi set debug on
之后您将看到脚本错误。
phpagi.php 库“get_data”方法有一些问题,我下载了该库,用新文件替换了当前文件,一切正常。
问题是phpagi.php,get_data函数被人操纵了!我下载了该库并将其替换为旧库,一切正常
用Asterisk运行FreePBX,我发现$agi->get_data()不会等待。我还观察到,如果您不提供 $agi->answer(),则 $agi-get_date() 的响应立即且始终为值“1”。运行 $agi->answer() 可以解决问题。
我很高兴得到比我更了解的人的纠正。
示例功能:
function getLanguageSelection($agi)
{
$isCompleted = false; $count = 0;
while($count++ <= 4 && $isCompleted === false) {
$agi->answer();
$response = ($agi->get_data('custom/welcomePrompt', "5000", "1"))['result'];
if($response === '1' || $response === '2') $isCompleted = true;
}
if($isCompleted === false) {
$agi->exec('Playback', 'vm-goodbye');
$agi->exec('Hangup');
}
return $response;
}