Asterisk WaitForSilence 永远不会检测到静默

Asterisk WaitForSilence 永远不会检测到静默

我尝试使用我的拨号方案播放录音,并使用 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

如果将该值设置得足够高,它会认为始终保持静音。因此,您需要对此进行实验。

相关内容