从我从您的症状中听到的消息来看,听起来不像是一个特殊的星号问题,但可能是您的脚本存在问题。这里有一些关于如何在不知道AGI脚本本身背后发生的情况的情况下调试应用程序的技巧......
首先,AGI Script script.php completed, returning 4
表示您的脚本正在退出时没有干净的退出状态代码。 returning 0
是你想看到的。您可以通过运行脚本,然后使用$?
变量检查状态代码,在bash提示符处看到最后的退出状态代码。像这样:
[[email protected] ~]$ ./script.php
[[email protected] ~]$ echo $?
0
这就是Asterisk告诉你发生了什么事情脚本。任何非零的东西都是“这里出了问题”。一般来说,你可以根据自己的喜好自定义这些,所以特别是4,我不确定。你会想要做
一件事是打开AGI调试像这样:
host*CLI> agi set debug on
然后运行脚本,看看是否能找到你的PHP脚本被吐出任何错误。
我的另一个建议是确保你的php正在登录到你的系统日志,这样你就可以在/ var/log/messages中发现错误。可以通过在你的/etc/php.ini
这条线设置做到这一点:
error_log = syslog
最后,要尽量复制错误,我会建议使用开发中,并发起了一堆自己的话费,并建立一个脚本到create a bunch of "call files"。
这里有一个调用的文件,让你开始:
Channel: LOCAL/[email protected]
MaxRetries: 2
RetryTime: 60
WaitTime: 30
Application: Wait
Data: 30
当你创建一个文件,将其移动到/var/spool/asterisk/outgoing
(移动是很重要的,你要指针移动,因为星号可以拿起文件如果你首先在那个目录中写信给它,太早了)。
你也可以发起从CLI的分机的电话:
host*CLI> channel originate LOCAL/[email protected] application Wait 5
您可能还需要使用呼叫文件中的其他选项,如CallerID: John Doe <8005551212>
以有趣的数据提供给您的AGI应用程序,同时创建测试来复制问题。
感谢您的详细解答,但我不认为这个问题与脚本有关,因为它只发生在3%的调用中。我已经尝试直接运行脚本,启用agi调试,启用PHP错误日志到文件等。今天我发现了这个讨论:http://lists.digium.com/pipermail/asterisk-users/2011-September /266522.html,我认为我面临同样的问题。我将尝试使用System()而不是AGI()。我会让你知道结果。 – k4h
你正在运行什么版本? /你尝试过另一个版本吗? – dougBTV
另外,查看与版本1.8.7有关的错误报告/修复 - https://issues.asterisk.org/jira/browse/ASTERISK-18811 – dougBTV