我在Ubuntu上使用Asterisk 1.8。问题是我改变了amd.conf配置AMD()调用将AMDSTATUS检测为MACHINE。如果一个人拿起电话并且说“嗨,这是那么多”,请指导我选择正确的AMD检测设置,然后用10-19分钟的信息然后发出哔哔声。如果有人可以为我解决这个问题,我愿意付钱。
这是我的amd.conf设置:
[general]
initial_silence = 2250 ; Maximum silence duration before the greeting.
; If exceeded then MACHINE.
greeting = 15000 ; Maximum length of a greeting. If exceeded then MACHINE.
after_greeting_silence = 2250 ; Silence after detecting a greeting.
; If exceeded then HUMAN
total_analysis_time = 25000 ; Maximum time allowed for the algorithm to decide
; on a HUMAN or MACHINE
min_word_length = 300 ; Minimum duration of Voice to considered as a word
between_words_silence = 250 ; Minimum duration of silence after a word to consider
; the audio what follows as a new word
maximum_number_of_words = 8 ; Maximum number of words in the greeting.
; If exceeded then MACHINE
silence_threshold = 500
here is my extensions.conf setting for this extension:
[AMDTEST]
exten=> s,1,Answer()
exten=> s,n,AMD()
exten=> s,n,NoOp(${AMDSTATUS})
exten=> s,n,GotoIf($[${AMDSTATUS}=HUMAN]?humn:mach)
exten=> s,n(mach),WaitForSilence(3000,1,20)
exten=> s,n,Playback(${VOICEFILE})
exten=> s,n,Hangup()
exten=> s,n(humn),WaitForSilence(500)
exten=> s,n,Playback(${VOICEFILE})
exten=> s,n,Hangup()
Output in Asterisk debug when I picked up the call and said 'Hi its me here'
Starting SIP/Vitelity-00000f92 at AMDTEST,1400,1 failed so falling back to exten 's'
-- Executing [s@AMDTEST:1] Answer("SIP/Vitelity-00000f92", "") in new stack
-- Executing [s@AMDTEST:2] AMD("SIP/Vitelity-00000f92", "") in new stack
-- AMD: SIP/Vitelity-00000f92 7702002111 (N/A) (Fmt: slin)
-- AMD: initialSilence [2250] greeting [15000] afterGreetingSilence [2250] totalAnalysisTime [25000] minimumWordLength [300] betweenWordsSilence [250] maximumNumberOfWords [8] silenceThreshold [256] maximumWordLength [5000]
-- AMD: Channel [SIP/Vitelity-00000f92]. Changed state to STATE_IN_SILENCE
-- AMD: Channel [SIP/Vitelity-00000f92]. ANSWERING MACHINE: silenceDuration:2300 initialSilence:2250
-- Executing [s@AMDTEST:3] NoOp("SIP/Vitelity-00000f92", "MACHINE") in new stack
-- Executing [s@AMDTEST:4] GotoIf("SIP/Vitelity-00000f92", "0?humn:mach") in new stack
-- Goto (AMDTEST,s,5)
-- Executing [s@AMDTEST:5] WaitForSilence("SIP/Vitelity-00000f92", "3000,1,20") in new stack
-- Waiting 1 time(s) for 3000 ms silence with 20 timeout
-- Exiting with 3000ms silence >= 3000ms required
-- Executing [s@AMDTEST:6] Playback("SIP/Vitelity-00000f92", "KC_TNA") in new stack
-- <SIP/Vitelity-00000f92> Playing 'KC_TNA.gsm' (language 'en')
== Spawn extension (AMDTEST, s, 6) exited non-zero on 'SIP/Vitelity-00000f92'
答案 0 :(得分:3)
我知道它有点老了。根据我的经验,它与initial_silence值和total_analysis_time值有关。设置以下内容:
initial_silence=5100
total_analysis_time=5000
这允许您的算法以正确的方式检测答案机。
答案 1 :(得分:2)
你是对的,问题是我不熟悉Asterisk AMD。但经过大量的阅读和反复试验后,我的工作正常(至少80%)。最关键的是在调用AMD()之前添加后台命令。关键因素 : 1.确保初始静音设置至少3-4秒(人类响应速度比机器快) 2.确保你有足够的时间来问候(典型的人类问候语在2-3秒内结束) 3.根据经验检测机器后微调等静音
这是扩展配置:
[AMDTEST]
exten=> s,1,Answer()
exten=> s,2,Background(en_US/silence/1)
exten=> s,n,AMD()
exten=> s,n,NoOp(${AMDSTATUS})
exten=> s,n,GotoIf($[${AMDSTATUS}=HUMAN]?humn:mach)
exten=> s,n(mach),WaitForSilence(4500,2,16)
exten=> s,n,Playback(${VOICEFILE})
exten=> s,n,Hangup()
exten=> s,n(humn),Playback(${VOICEFILE})
exten=> s,n,Hangup()</code>
Amd.conf:
[general]
initial_silence = 4000 ; Maximum silence duration before the greeting.
; If exceeded then MACHINE.
greeting = 9000 ; Maximum length of a greeting. If exceeded then
MACHINE.
after_greeting_silence = 2250 ; Silence after detecting a greeting.
; If exceeded then HUMAN
total_analysis_time = 15000 ; Maximum time allowed for the algorithm to deci
de
; on a HUMAN or MACHINE
min_word_length = 100 ; Minimum duration of Voice to considered as a w
ord
between_words_silence = 50 ; Minimum duration of silence after a word to co
nsider
; the audio what follows as a new word
maximum_number_of_words = 5 ; Maximum number of words in the greeting.
; If exceeded then MACHINE
silence_threshold = 256
答案 2 :(得分:0)
您的检测原因由此行描述:
ANSWERING MACHINE: silenceDuration:2300 initialSilence:2250
所以你已经增加了最初的sielence param或者也许只是areshtresh。没有电话记录就得到正确答案几乎是不可能的。
答案 3 :(得分:0)
我想分享观察结果。如果你使用呼叫文件 - 你需要在你的&#34; IN LEG&#34;中接听背景,否则AMD将无法正常工作
[CALLFILES-IN]
exten=> s,1,Answer()
exten=> s,2,Background(en/silence/1)
exten=> s,n,AMD()