请考虑以下AGI脚本。它的拨号计划条目只是exten => *,1,AGI(test.agi)
。使用模拟卡TDM410P。
#!/bin/sh
read REPLY; while [ "$REPLY" ]; do
read REPLY
done
#sleep 5
echo ANSWER; read REPLY
#sleep 5
while [ 1 ]; do
echo WAIT FOR DIGIT -1; read REPLY
echo $REPLY >>/tmp/agi
done
问题是这样的:我摘机,然后非常快速地按*12345
。结果是前一个或两个数字有时会丢失(即未记录到/tmp/agi
)。
如何使星号缓冲DTMF数字直到被读取?
编辑
我想我需要在通道中创建伪终端(因为它可以缓冲数据),并在解码后立即将dtmf数字写入其中,并在通道变量中设置伪终端从设备的名称。然后,AGI脚本将从AGI初始化数据中获取pty slave的名称,而只是从pty slave中读取,而不是通过“ WAIT FOR DIGIT”读取。
那么,有人知道如何破解星号chan_dahdi
吗?还是可能有更高的通道层,而不是绑定到特定模块?我应该去哪里看?任何提示...
答案 0 :(得分:1)
AGI脚本已经具有STDIN,可以为您进行缓冲。
如果您不阅读它,它将在缓冲区中。
您的DTMF问题与AGI或缓冲无关。检查“ DTMF无线电放松”或仅检查中继上的DTMF设置是否正确。