@karibskii_koks

Asterisk, как сделать многоуровневый IVR?

Здравствуйте, создал простейшую схему в Астериске, IVR используется как голосовое приветствие.
Хочу реализовать такое:
"Здравствуйте вы позвонили в "Кафешантан", если вы хотите соедениться с Кафетерием нажмите 1, если вы хотите соедениться с Пекарней нажмите 2, если вы хотите соедениться с Рестораном нажмите 3."
Если звонящий нажимает 1 то он попадает на следующее голосовое меню
"Если вы хотите соедениться с администратором нажмите 1, если вы хотите соедениться с продавцом нажмите 2, если вы хотите прослушать информацию о часах работы нажмите 3"
Если я правильно понимаю, то для подобной реализации нужен будет дополнительный контекст на каждую новую ветку IVR ?
Как в диалплане реализуется нажатие цифровых клавиш ?
Конфиг диалплана:
[globals]
[general]
autofallthrough=yes

[zadarma-out]
exten => _XXX,1,Dial(SIP/${EXTEN})
exten => _XXX.,1,Dial(SIP/${EXTEN}@468174)

[ivr-main]
exten => s,1,Answer()
exten => s,2,Background(/etc/asterisk/ivr/8)
exten => s,3,Queue(ringing)

[zadarma-in]
exten => 468174,1,Goto(ivr-main,s,1)
; Queue(ringing)
[office]
include => zadarma-out
exten => 5212,1,Answer
exten => 5212,n,Playback(demo-echotest)
exten => 5212,n,Echo
exten => 5212,n,Playback(demo-echodone)

exten => 666,1, Dial(SIP/666,40)
exten => 666,2, Hangup

exten => 667,1, Dial(SIP/667,40)
exten => 667,2, Hangup

exten => 668,1, Dial(SIP/668,40)
exten => 668,2, Hangup
  • Вопрос задан
  • 1221 просмотр
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Каждую подветку IVR оформляете отдельным контекстом, далее в каждом контексте примерно так:
[ivr-main]
exten => s,1,Answer()
same => n,Background(ivr-menu-main)
same => n,WaitExten(5)

exten => i,1,Playback(key-invalid)
same => n,Goto(somewhere)

exten => t,1,Playback(go-to-operator)
same => n,Goto(somewhere)

exten => 1,1,Goto(ivr-menu-1,s,1)
...


Второй вариант - через Read, тогда можно всё в одном контексте
[ivr]
exten => s,1,Answer()
same => n,Read(KEY,ivr-menu-main,1,,1,3)
same => n,GotoIf($["${KEY}"=""]?error,1:ivr${KEY},1)

exten => ivr1,1,Read(KEY,ivr-menu-1,1,,1,3)
...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы