【问题标题】:Asterisk, Ignore DTMF special characters in GET DATA星号,忽略 GET DATA 中的 DTMF 特殊字符
【发布时间】:2019-05-19 09:03:52
【问题描述】:

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

【问题讨论】:

    标签: asterisk voip dtmf agi phpagi


    【解决方案1】:

    phpagi getdata 做这个调用

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

    所以你可以通过添加允许的数字参数来扩展它。 PhpAGI 库是开源的,有源代码。

    其实你可以直接使用 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 (string $filename, [string $escape_digits = ''], 整数 $offset)

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

    【讨论】:

    • 谢谢,但不幸的是它仅限于一位数,对吧?
    • 流文件为一位数。如果您需要更多控制,请使用 exec('Read'),包括播放不止一次。或者使用background/waittexten,它不会停止播放。
    【解决方案2】:

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

    星号-vvvvv

    您可以检查输入的值,例如在 php 代码中:

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

    然后检查这个文件:/tmp/output

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-11
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多