在Asterisk寻求有关IVR菜单的帮助

时间:2009-05-29 11:43:46

标签: asterisk telephony ivr

我正在写一个IVR菜单,我需要允许我的用户在通讯过程中随时按0退出。以下是我的工作方式:

exten => 0,1,Playback(good-bye)
exten => 0,2,Playback(beep)
exten => 0,3,Hangup

然而,通过这样做,当用户在播放某个文件或正在进行某些其他操作时按下0时,他/她不能退出,就好像他/她没有按下零。我希望我足够清楚,你可以帮我解决这个问题。 欢呼声

3 个答案:

答案 0 :(得分:2)

对于IVR,您希望使用Background()和/或WaitExten()而不是Playback()。这是IVR拨号方案示例:

[ivr_main]
; answer and play announcement
exten => s,1,Set(TIMEOUT(response)=2)
exten => s,2,Set(TIMEOUT(digit)=2)
exten => s,3,BackGround(/your/audio/file/announcement)
exten => s,4,WaitExten(2)
exten => s,5,GoTo(s|3) ; careful of this loop here! should GoTo() somewhere else!
; handle key presses
exten => 0,1,Playback(good-bye)
exten => 0,2,Playback(beep)
exten => 0,3,Hangup()
exten => 1,1,NoOp(do this if user presses 1)
exten => 2,1,NoOp(do this if user presses 2)
exten => 3,1,NoOp(do this if user presses 3)
exten => 4,1,NoOp(do this if user presses 4)
exten => 5,1,NoOp(do this if user presses 5)
; handle invalid key presses
exten => i,1,Playback(pbx-invalid)
exten => i,2,GoTo(s|3)
; handle time out (user did not make a selection)
exten => t,1,GoTo(0|1)   ; go to Hangup :-)

希望这有帮助。

在Asterisk CLI中,为这些应用程序的手册执行“show application Background”和“show application WaitExten”。

答案 1 :(得分:1)

AFAIK,当您调用Background或WaitExten时,Asterisk只能接受按键。因此,如果您正在运行某些AGI,则必须调用这两个命令之一。

答案 2 :(得分:0)

Asterisk并不总是在等待用户输入。仅在Background,WaitExten,Read命令期间。如果您正在使用Playback(),Asterisk会在播放音频文件时忽略任何DTMF。

您可以使用Read()替换Playback,但必须将读取超时设置为非常低的值,或者在使用Read()播放的每个音频文件后都会出现静音。如果您使用Read(),那么您必须检查用户输入的值以检查退出,如下所示......

而不是

exten => x,n,Playback(yourfile)
exten => x,n,somethingelse...

你需要

exten => x,n,Read(Exit,yourfile,1)
exten => x,n,GotoIf($["${Exit}" = "0"]?0,1)
exten => x,n,somethingelse...