Многоуровневое меню для Asterisk
Это просто заметка как сделать многоуровневое вложенное меню для астериска - сервера voip телефонии. Отнеситесь к ней с юмором. Самое главное не путать названия, а то все все время говорят "астерикс" =)
Имеем elastix 1.6-12 (сборка asterisk и CentOS), freepbx - веб-интерфейс для настройки asterisk.
Рисуем где-нить, хоть на бумажке само меню. Думаем... Выбрасываем бумажку... Рисуем новое
Набиваем текст в любом редакторе... Читаем вслух в присутствии еще кого-нить... Желательно занудной сволочи! Исправляем текст.
Еще раз читаем и т.д. пока он не вылизан... Ах... Эта рекурсия должна когда-либо закончиться.
Берем девушку с приятным голосом, уговариваем ее сделать начитку в микрофон. Записываем ее труды. Делаем из них в звуковом редакторе приличное содержимое для прослушивания.
Разрезаем это на файлики так, чтобы не перепутать
Заливаем все материалы на сервант
Как сделать голосовое меню - настройка Asterisk
Надо дописать в /etc/asterisk/extensions_custom.conf (Это и есть часть dialplan, он весь находится в /etc/asterisk/)
exten => 731,1,Goto(my-menu,s,1)
[my-menu]
exten => s,1,Set(home="/var/lib/asterisk/sounds/custom")
exten => s,2,Wait(1)
exten => s,3,Playback(${home}../welcome)
exten => s,4,Playback(${home}/i-menu-0)
exten => s,5,WaitExten()
exten => 1,1,Playback(${home}/i-menu-1)
exten => 1,2,Goto(s,1)
exten => 2,1,Dial(SIP/202)
exten => 3,1,Playback(${home}/otebe)
exten => 3,2,Goto(s,1)
exten => t,1,Playback(make_choice)
exten => t,2,Goto(s,1)
exten => i,1,Playback(wrong_choice)
exten => i,2,Goto(s,1)
Собственно о меню:
дозваниваться в него будем по номеру 731
строка
exten => s,1,Set(home="/var/lib/asterisk/sounds/custom")
устанавливает переменную home как папку для ваших звуков
попав в меню человек слушает welcome, а потом i-menu-0, далее система ждет донабора.
короче говоря t - таймаут (время ожидания истекло), i - неверный номер, [хреновинаВскобочках] это контекст, а содержимое этого файла и кучи других называется dialplan - диалплан или набор правил дозвона.
Если захотите сделать несколько уровней в меню, то делайте Goto к нужному пункту.
Проблема с многоуровневыми IVR заключется в том, что вызывающий должен ввести одну цифру несколько раз (часто одни и те же цифры), но получить различную реакцию в зависимости от меню. Так как номер может быть использован только один раз в данном контексте, вызывающий застрянет на первом уровне меню. Если нам потребуется несколько уровней меню, которые обеспечиват различные ответы для тех же цифр, мы должны поместить подменю в различных контекстах (в нашем примере это [кафе] ). Чтобы перемещаться между этими контекстами, нам следует использовать вызов Goto ().
Предположим, у нас есть следующие звуковые файлы, хранящиеся в /var/lib/asterisk/sounds/:
"Нажмите 1 для отдела продаж, 2 для сервиса, или 3 для кафе." "Нажмите 1 чтобы узнать меню на этой неделе или 2 для прослушивания меню на следующей неделе." "Понедельник: Макароны по-флотски. Вторник: Свиные отбивные..." "Понедельник: Гуляш, пюре, и т.д...." Если номер отдела продаж 100 и отдела обслуживания 150, диалплан для такого вложенного меню IVR может выглядеть следующим образом: Технически, глубина вложенности меню неограничена, однако практика показывает, что абонент обычно вешает трубку на третьем уровне меню. После правок файлов перезапускайте демон астериска из командной строки. Через веб-интерефейс он плохо себя ведет. Регулярно бекапьте и не бойтесь экспериментов.
Скачать Asterisk можно на официальном сайте http://www.asterisk.org/ Итак, из этой статьи вы узнали, как сделать голосовое меню в Asterisk. Вы можете почитать другие мои статьи или порекомендовать эту друзьям. Надеюсь, моя статья оказалась вам полезной. Реклама:
Пример многоуровневого IVR-меню
mainmenu.gsm
cafeteria.gsm
cafeteria-menu-this-week.gsm
cafeteria-menu-next-week.gsm
[example-ivr]
; Это меню будет повторяться до тех пор, пока абонент не повесит трубку
;
exten => 30,1,Answer()
exten => 30,2,Background(mainmenu)
exten => 30,3,Background(silence/3)
exten => 30,4,Goto(2)
exten => 1,1,Dial(SIP/100)
exten => 2,1,Dial(SIP/150)
; Goto() перепрыгиваем в контекст кафе ([cafeteria])
;
exten => 3,1,Goto(cafeteria,100,1)
exten => i,1,Goto(30,2)
[cafeteria]
exten => 100,1,Background(cafeteria)
exten => 100,2,Background(silence/3)
exten => 100,3,Goto(1)
exten => 1,1,Playback(cafeteria-menu-this-week)
exten => 1,2,Wait(2)
exten => 1,3,Goto(1)
exten => 2,1,Playback(cafeteria-menu-next-week)
exten => 2,2,Wait(2)
exten => 2,3,Goto(1)
; Ошибочный набор отправляет нас в главное меню
exten => i,1,Goto(example-ivr,30,2)
Комментарии:
e-mail (не публикуется):
комментарий: