如何在Asterisk中缓冲DTMF?

时间:2019-11-05 08:56:22

标签: asterisk agi

请考虑以下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吗?还是可能有更高的通道层,而不是绑定到特定模块?我应该去哪里看?任何提示...

1 个答案:

答案 0 :(得分:1)

AGI脚本已经具有STDIN,可以为您进行缓冲。

如果您不阅读它,它将在缓冲区中。

您的DTMF问题与AGI或缓冲无关。检查“ DTMF无线电放松”或仅检查中继上的DTMF设置是否正确。