我尝试使用我的拨号方案播放录音,并使用 WaitForSilence 确保它等到对方说完话或留言留在语音信箱中。但是,它似乎不会等待 5 秒钟的沉默。即使我正在说话,它仍然会检测到沉默。
我的 AEL 拨号方案如下:
100 => {
Answer();
WaitForSilence(5000,2,60);
AGI(agi://127.0.0.1/playmessage,${CALLID});
AGI(agi://127.0.0.1/saytext,"Goodbye.");
Hangup();
}
输出
== Using SIP RTP CoS mark 5
> Channel SIP/twilio-0000006e was answered
-- Executing [100@makeCall:1] Answer("SIP/twilio-0000006e", "") in new stack
-- Executing [100@makeCall:2] WaitForSilence("SIP/twilio-0000006e", "5000,2,60") in new stack
-- Waiting 2 time(s) for 5000 ms silence with 60 timeout
-- Exiting with 5000ms silence >= 5000ms required
-- Exiting with 5000ms silence >= 5000ms required
-- Executing [100@makeCall:3] AGI("SIP/twilio-0000006e", "agi://127.0.0.1/playmessage,45") in new stack
-- Playing '/var/nam/data/outgoing/60' (escape_digits=#) (sample_offset 0)
> 0x7f2179cf7990 -- Probation passed - setting RTP source address to 54.172.61.251:18920
-- Playing '/var/nam/data/tts/9eccb3f2ed77972157becdfbbac7232c' (escape_digits=1#) (sample_offset 0)
-- <SIP/twilio-0000006e>AGI Script agi://127.0.0.1/playmessage completed, returning 4
== Spawn extension (makeCall, 100, 3) exited non-zero on 'SIP/twilio-0000006e'
即使我添加了 AMD(),它仍然会将所有东西检测为机器,并且仍然不会真正监听静音。我的配置是否有问题,导致 Asterisk 不知道静音是什么?
或者我误解了如何等待静音后才开始播放消息?
答案1
非常感谢你们的帮助。最后,我读到一些文章说记录通话可能会有帮助,所以我开始使用 Monitor() 应用程序。最后,我发现 Asterisk 并不聆听保持沉默,直到后它播放了录音第一的我发现这一点是因为 Monitor() 直到 Asterisk 第一次播放某些内容时才开始录音,而不是在对方开始讲话时。
为了解决这个问题,我在等待之前只是播放了一会儿的静默:
100 => {
Answer();
// Monitor(wav,"playback-${CALLID}",m);
Playback(silence/1);
WaitForSilence(1000,1,60);
AGI(agi://127.0.0.1/playmessage,${CALLID});
AGI(agi://127.0.0.1/saytext,"Goodbye.");
Hangup();
}
您可以看到上面的简单代码,其中 Monitor() 被注释掉了。上面的代码有效正好也可用于应答机。
答案2
等待静音,并等待没有明显声音的时间段
所以您的频道总是有声音。
最可能的原因——线路质量差。
您可以尝试通过改变静音阈值来解决这个问题。
对于 AMD,这是最后一个参数
AMD([|initialSilence][|greeting][|afterGreetingSilence][|totalAnalysisTime][|minimumWordLength][|betweenWordsSilence][|maximumNumberOfWords][|silenceThreshold])
在新版本中,您还可以更改阈值dsp.conf
如果将该值设置得足够高,它会认为始终保持静音。因此,您需要对此进行实验。