每个人的EHLO
我使用C语言进入AGI,过了一段时间我遇到了问题。当我使用GET DATA
(和其他AGI命令)将文件播放到频道时,我需要应用睡眠功能,这样就可以播放,用户有时间听到它。
我的部分代码是这样的:
char line[80];
int digit;
setlinebuf(stdout);
setlinebuf(stderr);
printf("ANSWER\n");
printf("GET DATA en/pbx-transfer 5000 4 \n");
sleep(3);
printf("CHANNEL STATUS\n");
printf("HANGUP");
Asterisk向我显示了关于我使用sleep()
的警告:
The FD we were waiting for has something waiting. Waitfordigit returning numeric 1
为什么会这样?
答案 0 :(得分:-1)
首先 - 不需要重新发明轮子。 c / c ++有多个AGI接口实现
你在agi脚本中没有使用睡眠,线程,等待等。
AGI架构是STD输入阻塞的示例。只需等待输入(从STD读取),它就会在准备就绪时返回信息。
如果您使用它,此类消息是正常的并且是预期的。您可以使用非阻塞版本的sleep。
如果您不需要DATA,还没有使用GET DATA。你可以使用STREAM