从我从您的症状中听到的情况来看,这听起来不像是 Asterisk 问题,但可能是您的脚本的问题。这里有一些关于如何在不了解 AGI 脚本本身幕后发生的事情的情况下调试应用程序的技巧......
首先,AGI Script script.php completed, returning 4
意味着您的脚本正在退出而没有干净的退出状态代码。returning 0
是你想看到的。通过运行脚本然后使用$?
变量检查状态代码,您可以在 bash 提示符处查看最后的退出状态代码。像这样:
[user@host ~]$ ./script.php
[user@host ~]$ echo $?
0
这就是 Asterisk 告诉你的脚本发生了什么。任何非零都是“这里有问题”。通常,您可以根据自己的喜好自定义这些,因此具体来说是 4,我不确定。
您要做的一件事是像这样打开 agi 调试:
host*CLI> agi set debug on
然后运行你的脚本,看看你是否能发现你的 php 脚本正在吐出任何错误。
我的另一个建议是确保您的 php 正在记录到您的系统日志,以便您可以在 /var/log/messages 中找到错误。您可以通过在您的/etc/php.ini
这一行中设置来做到这一点:
error_log = syslog
最后,为了尝试复制错误,我建议使用开发框,并为自己发起一堆调用,并构建一个脚本来创建一堆“调用文件”。
这是一个可以帮助您入门的调用文件:
Channel: LOCAL/100@mycontext
MaxRetries: 2
RetryTime: 60
WaitTime: 30
Application: Wait
Data: 30
创建文件后,将其移动到/var/spool/asterisk/outgoing
(移动很重要,您希望指针移动,因为如果您先在该目录中写入文件,星号可能会过早拾取文件)。
您还可以从 CLI 对分机发起呼叫:
host*CLI> channel originate LOCAL/100@mycontext application Wait 5
您可能还想在调用文件中使用其他选项,例如CallerID: John Doe <8005551212>
在创建测试以复制问题时向 AGI 应用程序提供有趣的数据。