星号,忽略GET数据中的DTMF特殊字符

时间:2019-05-19 09:03:52

标签: asterisk voip dtmf agi phpagi

我正在使用phpagi $agi->get_data从用户读取数字。
在某些电话中,用户没有按下任何键,但是音频播放立即停止并获得"D"的结果!
我进行了很多搜索,看起来$agi-get_dat收到了包含0-9*#ABCD的DTMF数据。
第一个问题是,为什么我的用户没有按任何键就能获得"D"
第二个问题是,我如何忽略这些字符以防止中断ivr。

2 个答案:

答案 0 :(得分:0)

phpagi getdata进行此调用

https://wiki.asterisk.org/wiki/display/AST/AGICommand_stream+file

,因此您可以通过添加允许的数字参数来扩展它。 PhpAGI lib是开源的,并且具有源代码。

实际上,您只能使用stream_file调用

  

stream_file(第677行)

     

播放给定的音频文件,从而允许播放中断   DTMF数字。该命令类似于GET DATA命令,但是   在GET期间按下第一个DTMF​​数字后,命令返回   DATA可以在返回之前累积任意位数。

return: see evaluate for return information. ['result'] is -1 on hangup or error, 0 if playback completes with no digit received,
     

否则,DTMF音的十进制值。使用chr()转换为   ASCII码。       链接:http://www.voip-info.org/wiki-stream+file       示例:ping IP地址

     

array,stream_file(字符串$ filename,[string $ escape_digits =”],   整数$ offset)

string $filename: without extension, often in /var/lib/asterisk/sounds    
string $escape_digits 
integer $offset

答案 1 :(得分:0)

您可以通过以下命令查看日志:

星号-vvvvv

并且您可以检查输入值,例如php代码:

$ val = $ agi-> get_data exec(“ echo $ val >> / tmp / output”)

,然后检查此文件:/ tmp / output