войти
зарегистрироваться
поиск по сайту
Посты
Q&A
Блоги
Люди
Компании
IP-телефония
индекс
102,70
Захабренные
Новые
+1
Отхабренные
Голосовое дерево на Asterisk своими
руками
из
песочницы
Доброго времени суток
хабражители.
Хотелось бы поделиться опытом развертывания голосовых
деревьев (IVR), с помощью Asterisk.
Для этого нам понадобится:
Машина с установленным Asterisk`ом
Телефонный номер, заведенный в Asterisk посредством SIP/H.323 от
провайдера ip-телефонии, либо посредством аналоговой линии/цифрового потока Е1
через платы Digium
Ниже я опишу как создать
простое голосовое дерево. Главное от чего необходимо отталкиваться — это
структура дерева.
Типичное дерево выглядит примерно так:
Здравствуйте вы позвонили в %companyname%
Для того, чтобы соединится с отделом 1 нажмите 1
Для того, чтобы соединится с отделом 2 нажмите 2
Чтобы отправить факс нажмите 9
Если вы знаете внутренний номер абонента, наберите его в тональном режиме
или дождитесь ответа секретаря
Так же мы можем предложить
позвонившему соединится необходимым специалистом из отдела, который он выбрал
выше. Так, например, если он выбрал первый отдел, то мы можем воспроизвести ему
следующую информацию:
Вы находитесь в пункте меню отдел 1
Чтобы соединится со специалистом по %X% нажмите 5
Чтобы соединится со специалистом по %Y% нажмите 6
Для возврата в предыдущее меню нажмите 0
Приступим к
реализации! Допустим что у нас имеется номер 8-495-1234567 на котором мы будем
«растить» наше дерево. Вся входящая и исходящая маршрутизация в Asterisk, как
правило, расположена в файле
extensions.conf
, который находится в
корневой папке астериска — /etc/asterisk. Я считаю, что Ivr-деревья удобнее
создавать отдельными файлами поэтому создадим в корневой папке Asterisk файл
company.tree
и впишем в него пока одну лишь
строчку:
[company_tree]
На этом оставим редактирование файла
company.tree
и перейдем к файлу
extensions.conf
— в начале данного
файла добавим следующее:
#include "company.tree"
Чтобы подгрузить недавно созданный файл в общий план
маршрутизации Asterisk. Теперь перейдем основной контекст для входящих звонков
(у всех он может называться по разному — general, from_pstn, from_e1 или как
кому больше нравиться) и в него добавим следующую строчку:
exten
=> 84951234567,1,Goto(company_tree,s,1)
При входящем звонке на
номер 84951234567 Asterisk переведет нас в контекст company_tree на первую
строку «s», который находится в файле company.tree, который мы благополучно
подгрузили в общий план маршрутизации выше. Звучит немного запутанно, однако
подобная вложенность поможет нам избежать случаев некорректной маршрутизации
из-за пересечения нескольких контекстов в файле
extensions.conf
На данном этапе перейдем в файл company.tree и
собственно начнем «строить» Ivr-дерево — добавим в него следующие
строки:
exten => s,1,Answer()
#Отвечаем на входящий
звонок
exten => s,2,Background(/home/ulaw/IVR-zapis)
#Проигрываем
запись текста нашего голосового дерева*
exten => s,3,WaitExten(7)
#Немного времени на осмысление дерева и выбор интересующего направления, в
данном случае 7 секунд
exten => 1,1,Goto(otdel1,s,1)
#Делаем
переход в контекст первого отдела по нажатию клавиши 1
exten =>
2,1,Goto(otdel2,s,1)
#Аналогично
exten =>
9,1,Set(FAXFILE=/tmp/fax/${STRFTIME(${EPOCH},,%Y%m%d_%H_%M_%S)}-from-${CALLERID(num)})
#Тут мы принимаем факсы, первым делом устанавливаем факсимильному файлу - время
во сколько пришел факс и с какого номера он пришел
exten =>
9,2,ReceiveFax(${FAXFILE}.tif)
# Функция приема факса с именем который мы
указали выше
exten => 9,3,System(sendEmail -f fax@company.com -t
you@company.com -u "Входящий факс." -m "Вам пришел факс с номера
${CALLERID(num)} в ${STRFTIME(${EPOCH},,%H:%M:%S)}. Факс во вложении." -a
${FAXFILE}.tif -o message-charset=UTF-8)
#Пересылка пришедшего файла на
электропочту
exten => _XXX,1,Dial(SIP/${EXTEN}@YourAsterisk)
#Если тот
кто звонит знает внутренний номер сотрудника, то для эта строчка для него
:)
exten => t,1,Dial(SIP/внутренний номер секретаря@YourAsterisk)
#Этот звонок пойдет по таймауту на секретаря, если за 7 секунд в голосовом
дереве не было выбрано направление
exten =>
i,1,Dial(SIP/внутренний номер секретаря@YourAsterisk)
#Этот звонок пойдет на
Материал сокращён при переносе в новую базу знаний. Полная версия сохранена в архиве старого сайта.