Страница 1 из 1

Голосовое меню (IVR)

Добавлено: 09 фев 2016, 09:34
RomA
Введение:
В целях оптимизации расходов на телефонию была предпринята попытка перейти на один многоканальный телефон для офиса. Задумка такая - пользователь звонит на номер телефона, там ему говорят на какие отделы можно переключиться, пользователь переключается - звонят все телефоны в отделе разом - кто первый взял - тот и говорит с пользователем.

Задача:
Сделать голосовое меню на номере компании.
Алгоритм меню следующий:
Главное меню:
1) поднимаю трубку
2) проигрывается сообщение меню
3) жду 7 сек
4) проигрывается еще раз тот же текст
5) жду 7 сек
6) увожу звонок на секретаря
Во всё это время - почти 2 минуты - можно набрать цифру от 0 до 9 и переключиться на меню отдела
или же можно нажать * что бы прослушать заново или нажать # для выхода из всего этого безобразия.

Меню отдела:
1) проигрывается сообщение меню отдела
2) жду 7 секунд
3) увожу звонок на главное голосовое меню
Во всё это время можно нажать * что бы прослушать заново или нажать # для выхода в главное меню

Прямой звонок:
Осуществляется как обычный звонок по общим правилам АТС

Групповой звонок:
Все телефоны группы звонят 600 сек, после чего звонок уходит в главное меню. Во время звонка группы нажатие клавиш игнорируются. Пользователь слышит не гудок, а мелодию.
Дано:
1) Некий номер 88001112233
2) IP PBX Asterisk 13

Реализация:
Что бы не путаться в конфигах сделаем для меню свой отдельный файлик

Код: Выделить всё

touch menu.conf
Сразу подключаем этот файлик к основному конфигу - для этого в файл extensions.conf прописываем

Код: Выделить всё

#include "menu.conf"
Ну и хорошо. Возмемся за редактирование нашего нового файла. Описываем первый уровень меню

Код: Выделить всё

[menu8800]

exten => s,1,Answer()
exten => s,n,Background(/usr/local/etc/asterisk/audio/8800/menu); 
exten => s,n,WaitExten(7)
exten => s,n,Background(/usr/local/etc/asterisk/audio/8800/menu); 
exten => s,n,WaitExten(7)
exten => t,1,Macro(stdexten,1755,SIP/1755)

exten => 1,1,Goto(menu8800td,s,1)
exten => 2,1,Goto(menu8800sb,s,1)
exten => 3,1,Goto(menu8800you,s,1)
exten => 4,1,Goto(menu8800tech,s,1)
exten => 5,1,Goto(menu8800zakup,s,1)
exten => 6,1,Goto(menu8800kfc,s,1)
exten => 7,1,Goto(menu8800priem,s,1)
exten => 8,1,Goto(menu8800ved,s,1)
exten => 9,1,Goto(menu8800audit,s,1)
exten => 0,1,Goto(menu8800ekonom,s,1)

exten => *,1,Goto(,s,2)
exten => #,1,Hangup()


Что происходит при звонке:
1) поднимается трубка
2) начинает фоном проигрываться файл menu в котором нам рассказывают какая цифра в какой отдел переключит.
3) в это время можно нажать цифру и вас перекинут в другое меню - меню отдела.

Меню отдела находится тут же ниже - давайте посмотрим на него

Код: Выделить всё

[menu8800tech]
exten => s,1,Background(/usr/local/etc/asterisk/audio/8800/tech); 
exten => s,n,WaitExten(7)
exten => t,1,Goto(menu8800,s,1)

exten => 1,1,Queue(techkap,,,,600)
exten => 2,1,Queue(techen,,,,600)
exten => 3,1,Queue(techek,,,,600)
exten => 4,1,Macro(stdexten,1766,SIP/1766)

exten => *,1,Goto(,s,1)
exten => #,1,Goto(menu8800,s,1)
Тут:
1) опять же проигрываем файл с меню отдела
2) при нажатии на 1-3 - звонок уходит на группу телефонов отдела
3) при нажатии 4 звонок уходит на один конкретный телефон
4) # - вернет вас в главное меню
5) если ничего не нажать - вас опять же выкинут в главное меню

Теперь надо создать группу телефонов - для этого правим файл queues.conf

Код: Выделить всё

[techek]
strategy = ringall
timeout = 10
retry = 1
member => SIP/1761
member => SIP/1762
member => SIP/1763
Тут:
ringall - звонят все телефоны группы