Обратитесь за помощью по поводу меню IVR в Asterisk - PullRequest
0 голосов
/ 29 мая 2009

Я пишу меню IVR, и мне нужно разрешить пользователям нажимать 0 в любое время во время сеанса связи, чтобы выйти. Вот как я это делаю:

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

Однако, делая это, когда пользователь нажимает ноль во время воспроизведения какого-либо файла или выполнения какой-либо другой операции, он / она не может выйти, это как если бы он / она не нажал ноль. Я надеюсь, что я достаточно ясен, и что вы можете помочь мне с этим. веселит

Ответы [ 3 ]

2 голосов
/ 11 декабря 2009

Для 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 голос
/ 29 мая 2009

AFAIK, Asterisk сможет реагировать только на нажатие клавиши, когда вы вызываете Background или WaitExten. Поэтому, если вы используете AGI, он должен был вызвать одну из этих двух команд.

0 голосов
/ 05 июня 2009

Звездочка не всегда ждет ввода пользователя. Только во время команд Background, WaitExten, Read. Если вы используете Playback (), Asterisk игнорирует все DTMF во время воспроизведения аудиофайла.

Вы можете заменить «Воспроизведение» на «Чтение» (), но для тайм-аута чтения необходимо установить очень низкое значение, иначе после каждого аудиофайла, который вы воспроизводите с помощью «Чтение» («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...
...