我开发了一个IVR,该IVR应该拨打一个电话并录音,直到静音(2sec),然后继续执行我的代码。我正在使用python发送AGI命令(基于此文档https://wiki.asterisk.org/wiki/display/AST/AGICommand_record+file):
RECORD FILE "/var/asterisk_sound/mobile/temp" wav "" 20000 0 s=2
因此,当我呼叫IVR时,我听到IVR正在播放音频并将DTMF发送给我,如果我随手机发送,它可以记录我的语音和DTMF。在我得到一个小文件 temp.wav 后,如50kB。日志:
09:57:31:-> RECORD FILE "/var/asterisk_sound/mobile/temp" wav "" 20000 0 s=2
09:57:46:<- 200 result=4852 (timeout) endpos=102880
09:57:46:{'code': '200', 'result': '4852', 'value': 'timeout', 'endpos': '102880'}
但是当IVR打电话给我时,我仍然听到IVR的DTMF和音频,但是虽然什么也没录制,但我正在通话并发送DTMF 20秒(直到超时),没有错误,请记录日志:
16:00:38:-> RECORD FILE "/var/asterisk_sound/mobile/temp" wav "" 20000 0 s=2
16:00:58:<- 200 result=0 (timeout) endpos=0
16:00:58:{'code': '200', 'result': '0', 'value': 'timeout', 'endpos': '0'}
最后我有一个小文件,我有一个小文件 temp.wav ,如0B。
我很困惑,也许我试图录制演讲者,但我不这么认为。我在下面总结了这个问题:
仅供参考:我在x86_64 CentOS 5.6上使用Asterisk 13.1-cert1
编辑: 我的算法在两种情况下都这样做:
call a number
on reply :
play welcome message (3 sec)
send DTMF
wait 10 sec
play BEEP
record file until silence
stream file
cancel
答案 0 :(得分:0)
在录制之前,您需要接听电话,而且好主意在录制之前先向另一端发送一些东西。
某些交换机(例如,广泛使用的Sonic_UA)在向主机发送rtp数据之前不会向主机发送rtp数据。
在大多数情况下,使用
Playback "beep"