Назад | Перейти на главную страницу

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 не знает, что такое тишина?

Или я неправильно понимаю, как ждать тишины, чтобы начать воспроизведение сообщения?

Спасибо за вашу помощь. Наконец, я где-то читал, что запись звонков может быть полезной, поэтому я начал использовать приложение 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 (). Вышеуказанные работы просто хорошо для автоответчиков тоже.

Дождитесь тишины, и оба они ждут периода, когда нет значительного звука

Так что на вашем канале всегда ЕСТЬ звук.

Скорее всего причина - некачественная линия.

Вы можете попробовать исправить это, изменив порог тишины.

Для AMD это последний параметр

AMD([|initialSilence][|greeting][|afterGreetingSilence][|totalAnalysisTime][|minimumWordLength][|betweenWordsSilence][|maximumNumberOfWords][|silenceThreshold])

В новых версиях вы также можете изменить порог в dsp.conf

Если вы установите это значение достаточно высоко, он будет думать, что тишина всегда. Так что вам нужно поэкспериментировать.