Asterisk: создайте пример многоуровневого IVR

Я хочу создать пример многоуровневого IVR. Скажем, приветственное меню, где вас просят ввести ваш employeeid. После этого есть второе меню, и у вас есть возможность вернуться в предыдущее меню. Любая идея, как это сделать?

Вот пример псевдокода, который не работает, потому что я пока не знаю, как создать многоуровневый IVR.

[TestMenu]

exten => start,1,Answer()
     same => n,Log(NOTICE, call starts)
     same => n,Background(welcomeintro)  // welcome menu

     same => n,Background(welcomeoption)  // options that your have
     same => n,WaitExten(5)

exten => 0,1,Playback(digits/0) ; if enter 0, play back the welcome menu
 same => n,Goto(TestMenu,start,1)  // ??? is it ok ?  and suppose that I want to skip to Background(welcomeoption) part directly ?

// if 1 is enterred, lets ask for employeeid
exten => 1,1,Playback(digits/1) ; 
 same => n,Playback(askemployeeid)
 same => n,goto ????

exten => i,1,Playback(pbx-invalid)   ; invalid
    same => n,Goto(TestMenu,start,1)

exten => t,1,Playback(byebye) ; timeout
    same => n,Hangup()

[employeeid]
....

Предположим, что идентификатор сотрудника равен 1-8, а 9 соответствует возврату в предыдущее меню. При вводе 1-8 он будет воспроизводить аудиофайл и выходить.


person Sebastien Dionne    schedule 21.07.2011    source источник
comment
Это вопрос по программированию?   -  person Gabe    schedule 21.07.2011
comment
не вижу вопроса. если вы хотите проверить, работает ли это, лучше всего проверить это на телефонной линии.   -  person Sriram    schedule 21.07.2011
comment
Да, это вопрос, и нет, я не могу его протестировать, потому что я понятия не имею, как создать то, что я спросил :) Я могу создать базовый диалплан, но только с одним уровнем. Мой вопрос: как создать многоуровневый диалплан?   -  person Sebastien Dionne    schedule 21.07.2011
comment
Я попытался ответить на вопрос. посмотри   -  person Sriram    schedule 21.07.2011


Ответы (1)


[TestMenu]

exten => 0,n,Verbose(1, "Inside test-menu")
exten => 0,n(TestMenu-start),NoOp()

exten => 0,n(welcomeIntro-skip-press5),Background(welcomeintro)   ;If user presses 5, he skips this.

exten => 0,n(welcomeIntro-skipped),NoOp()

exten => 0,n,Background(welcomeoption)
exten => 0,n,Set(USERCHOICE1=0)  ;This is the first choice that the user will enter.
exten => 0,n,Read(USERCHOICE1,,1,,1,10)    ;Read the documentation on Read function to know what this does.

exten => 0,n,Playback(enteredChoice)
exten => 0,n,SayDigits(${USERCHOICE1})
exten => 0,n,ExecIf($[${USERCHOICE1} = 1]?Goto(askEmpID,0,askEmpID-start))

exten => 5,1,Goto(TestMenu,0,welcomeIntro-skipped)
exten => i,1,Playback(pbx-invalid)   ; invalid
exten => t,1,Playback(byebye) ; timeout

[askEmpID]
....

suppose that the employeeid is 1-8
and 9 is for going back to the previous menu.

and when 1-8 is entered, it will play a audio file and quit.

Это всего лишь небольшой пример того, как может выглядеть код. Вы можете работать над этим и адаптировать его в соответствии с вашими требованиями. Обратите внимание, что я не проверял это.

ХТН.

person Sriram    schedule 21.07.2011
comment
спасибо, я попробую это сегодня вечером. Просто небольшой вопрос. в [askEmpID] я могу сделать что-то вроде этого: [askEmpID] exten => 1,1,Playback(byebye) ; // 1 для выхода exten => 9,1,Goto(TestMenu,0,welcomeIntro-skiped) // 9 для возврата в меню - person Sebastien Dionne; 21.07.2011
comment
// - это не способ комментировать звездочку. ; есть. Кроме того, вы можете делать, как вы говорите. Также, мне кажется, вам рекомендуется пройти небольшой туториал по asterisk. Возможно, вы захотите подумать об этом. - person Sriram; 21.07.2011
comment
Я знаю, что // это не комментарий. Я разработчик Java, и это привычка. - person Sebastien Dionne; 21.07.2011