Настройка IVR в Asterisk

Доброго времени суток дорогие читатели. Тема нашей сегодняшней статьи IVR (Interactive Voice Response) – голосовое меню. Сегодня уже почти в каждой организации есть голосовое меню. Меню можно сделать совсем простым либо сложным с большим количеством переходов. Большие меню делать не советую, людям это не нравится. Давайте разбираться как происходит настройка IVR в Asterisk.

Подготовка аудиозаписей

Перед настройкой IVR необходимо подготовить аудиозапись приветствия. Записать приветствие можно самим либо купить профессиональную озвучку. Формат записи должен соответствовать: 8кГц, 16 Бит, Моно

Для конвертации записи в нужный формат я использую программу Audacity она бесплатная и проста в использовании.

Audacity

Аудиозаписи будем хранить в папке /opt/music

Создание папки music

sudo mkdir /opt/music

Скопируйте удобным для вас способом аудиозаписи в созданную папку. Перейдем непосредственно к написанию IVR для Asterisk.

Создание IVR в Asterisk

Необходимо создать автосекретарь на Asterisk с переключением на внутренние номера. IVR меню будет состоять из 4 пунктов:

IVR меню Asterisk

Переключение на отделы будем использовать в рабочее время. В нерабочее время будет приветствие и предложение перезвонить в рабочие часы. При желании конечно можно усложнить, и повесить голосовую почту. Но как показывает практика клиенты не пользуются данной фишкой.

В основном меню и в каждом из отделов сделаем переключение на оператора по истечению времени. Когда клиент наберет цифру не соответствующую какому-либо из меню он также попадет на оператора. Вы также можете добавить в каждом меню возврат на предыдущий уровень.

Для записи тестового IVR приветствия я воспользовался бесплатным сервисом озвучивания текста. В интернет таких довольно много. У меня получилось 5 аудио записей:

Аудио записьНазначение
privetПриветствие в рабочее время
pokaПриветствие в нерабочее время и выходные дни
komm_otdПеречисление сотрудников коммерческого отдела
otd_dostПереключение на сотрудников отдела доставки
otd_yuristovСотрудники юридического отдела
Глобальные переменные

Данные о рабочих днях я заношу в глобальные переменные, секция [globals]. Использование глобальных переменных позволяет менять их только в одном месте без поиска по всему диалплану. Переменные всего две:

[globals]
MSK_week=mon-fri
MSK_time=08:00-18:00

Где MSK_week – это период работы в днях недели. Возможные варианты: mon – понедельник, tues – вторник, wed – среда, thues – четверг, fri – пятница, sat– суббота, sun – воскресенье. Записывать можно как целый период через дефис, так и через запятую перечисляя каждый день недели. MSK_time – время работы.

IVR меню

Рассмотрим команды Asterisk используемые в нашем IVR меню. Начнем с воспроизведения аудио записи приветствия.

  • Background – используется для проигрывания аудио файла. Основное отличие от команды Playback это возможность выполнения других команд в процессе воспроизведения. Данная команда очень полезна именно для создания IVR. Нетерпеливые клиенты могут не дожидаться окончания воспроизведения записи и сразу переходить в нужное меню.
  • Goto – позволяет перейти в любой context или extension диалплана, а также на любой priority уровень.
  • GotoIfTime – то же что и команда Goto, только перед переходом по указанной метке проверяет соответствие времени. Команда крайне удобна при разделении рабочего и не рабочего времени.
  • WaitExten – указывает какое количество секунд ждать от пользователя ввода команды.

Рассмотрим меню подробнее

[from-sipnet]
exten = s,1,Answer()
 same = n,Wait(5)
 same = n,GotoIfTime(${MSK_time}|${MSK_week}|*|*?dialwork)
 same = n,Playback(/opt/music/poka)
 same = n,Hangup
 same = n(dialwork),Background(/opt/music/privet)
 same = n(dialwork),WaitExten(10)
exten = 1,1,Goto(kom_otdel,s,1)
exten = 2,1,Goto(otdel_dost,s,1)
exten = 3,1,Goto(ur_otdel,s,1)
exten = 0,1,Dial(PJSIP/2000)

exten = t,1,Dial(PJSIP/2000)
exten = i,1,Dial(PJSIP/2000)
exten = _XXXX,1,Dial(PJSIP/${EXTEN})

[kom_otdel]
exten = s,1,Background(/opt/music/komm_otd)
exten = s,2,Waitexten(10)
exten = 1,1,Dial(PJSIP/1010)
exten = 2,1,Dial(PJSIP/1011)
exten = 3,1,Dial(PJSIP/1012)
exten = t,1,Dial(PJSIP/2000)
exten = i,1,Dial(PJSIP/2000)

[otdel_dost]
exten = s,1,Background(/opt/music/otd_dost)
exten = s,2,Waitexten(10)
exten = 1,1,Dial(PJSIP/1020)
exten = 2,1,Dial(PJSIP/1021)
exten = t,1,Dial(PJSIP/2000)
exten = i,1,Dial(PJSIP/2000)

[ur_otdel]
exten = s,1,Background(/opt/music/otd_yuristov)
exten = s,2,Waitexten(10)
exten = 1,1,Dial(PJSIP/1020)
exten = 2,1,Dial(PJSIP/1021)
exten = t,1,Dial(PJSIP/2000)
exten = i,1,Dial(PJSIP/2000)

Контекст [from-sipnet] это основное меню. После поднятия трубки и 5 секундного ожидания включается GotoIfTime. Сравнивая текущие параметры с заданными происходит переключение. Если параметры верны, происходит переход на метку dialwork. Далее проигрывается приветствие privet, затем следует 10 секундное ожидание ввода команды. Если входящий звонок произошел в нерабочее время (проверка GotoIfTime) выполняется команда Playback(/opt/music/poka).

С помощью метода перехода по меткам Goto мы указываем при нажатии какой цифры будет переход в нужный отдел. При нажатии 0 мы отправим звонок на номер 2000, это наш оператор.

Внизу контекста основного меню прописаны три дополнительных экстеншена, разберем подробнее:

  • t – данный параметр означает, что когда закончится время ожидания Waitexten звонок происходит на указанный номер
  • i – переход на этот добавочный происходит в случае попытки переключиться на не существующее меню
  • _XXXX – шаблон для переключения на короткие номера. Наши внутренние номера состоят из 4 цифр.

В контекстах kom_otdel, otdel_dost, ur_otdel описано что делать в случае выбора данных меню в IVR. Описывать их особого смысла не вижу, они очень похожи.

Данный IVR очень удобно использовать как основу и позже добавлять расширенный функционал. Спасибо за внимание и до новых встреч.

Предлагаю посмотреть видео с настройкой и тестированием работы IVR на Asterisk

Хотите отблагодарить автора статьи? Это даст ему дополнительный стимул к написанию новых статей.
Поделиться:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *