2009-05-29 2 views
0

Я пишу меню IVR, и мне нужно разрешить моим пользователям нажимать 0 в любое время во время связи для выхода. Ниже показано, как я это делаю:Ищите справочную информацию по меню IVR в Asterisk

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

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

ответ

1

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

0

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

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

Может кто-то сделать, что источник читаемым, поставив в строке подведет ' Экстен => х, п, воспроизведение (yourfile) Экстен => х, п, somethingelse ... ' – fgwaller

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 «показать приложение« Фон »и« показать приложение WaitExten »для руководства по этим приложениям.

+0

Кроме того, убедитесь, в какой-то момент у вас есть ответ(). Обычно вызов отвечает, а затем направляется в IVR. –