Настройка голосового меню (IVR) на Asterisk
Интерактивное голосовое меню, или голосовое дерево, IVR меню или просто, IVR используется для возможности позвонившему подключиться к конкретному сотруднику компании или соединиться с линией поддержки определенной категории. Также, с помощью IVR можно получить необходимую информацию без ответа со стороны оператора, выбрав интересующую информацию. Другими словами, это система, взаимодействующая с абонентом и реагирующая на его команды.
Принцип настройки
IVR настраивается в плане набора Aterisk (dialplan) — в конфигурационном файле extensions.conf.
Сначала мы проигрываем запись с голосовым приветствием и предложением ввести номер в тональном режиме. В том же файле мы обрабатываем вводимую информацию, перекидывая абонента на другие диалплан, очередь или конкретного сотрудника.
Записать голосовое приветствие с просьбой ввода номера можно с помощью различных программ звукозаписи. Asterisk работает с форматами .waw, .gsm. В случае наличия другого формата, можно воспользоваться пакетом для конвертации — sox. Также можно загрузить и установить готовый список голосов на русском, который частично, можно использовать.
Базовая настройка
Открываем конфигурационный файл:
[outcaling]
.
exten => 222,1,Answer()
same => n,Background(basic-pbx-ivr-main)
exten => _XXX,1,Dial(SIP/$
* в данном примере, при звонке на номер 222 нам проигрывается голосовая запись basic-pbx-ivr-main (из каталога /var/lib/asterisk/sounds/ ). Когда мы вводим трехзначный добавочный номер, нас соединяет Asterisk с этим номером. Предполагается, что наш основной диалплан называется outcaling.
Перезапускаем настройки диалплана:
asterisk -x «dialplan reload»
Голосовое дерево
Теперь настроим возможность выбора отдела, с которым абонент захочет соединиться.
Приводим наш диалплан к следующему виду:
exten => 333,1,Answer()
exten => 333,2,Background(basic-pbx-ivr-main)
exten => 333,3,WaitExten(5)
exten => 1,1,Goto(managers,s,1)
exten => 2,1,Goto(support,s,1)
[managers]
exten => s,1,Ringing
same => n,Wait(1)
same => n,Background(/var/lib/asterisk/sounds/wav/managers)
same => n,Waitexten(5)
exten => 1,1,Dial(SIP/201)
exten => 2,1,Dial(SIP/202)
exten => 0,1,Goto(outcaling,333,1)
[support]
exten => s,1,Ringing
same => n,Wait(1)
same => n,Background(/var/lib/asterisk/sounds/wav/support)
same => n,Waitexten(5)
exten => 1,1,Dial(SIP/101)
exten => 2,1,Dial(SIP/102)
exten => 0,1,Goto(outcaling,333,1)
- 333 — внутренний номер, позвонив на который мы услышим голосовое меню.
- WaitExten(5) — система ожидает ввода номера в течение 5 секунд.
- 1,1,Goto(managers,s,1) — если абонент ввел 1, переходим к диалплану managers, пункту s,1.
- 2,1,Goto(support,s,1) — если абонент ввел 2, переходим к диалплану support, пункту s,1.
- Background(/var/lib/asterisk/sounds/wav/managers) — запись голосового меню для managers.
- Background(/var/lib/asterisk/sounds/wav/support) — запись голосового меню для support.
Перечитываем настройки диалплана:
asterisk -x «dialplan reload»
Таймаут по времени ожидания и неправильные действия
Добавим обработку неправильно введенной цифры и превышение времени ожидания. В вышеуказанном примере просто происходит отбой звонка.
Данное поведения указывается в диалплане с помощью ключей t и i. Добавим их в наш конфиг:
exten => 333,1,Answer()
same => n,Background(basic-pbx-ivr-main)
same => n,WaitExten(5)
exten => 1,1,Goto(managers,s,1)
exten => 2,1,Goto(support,s,1)
exten => t,1,Dial(SIP/101)
exten => i,1,Background(invalid)
same => n,Goto(outcaling,333,3)
* где t,1,Dial(SIP/101) — позвонить по номеру 101, если будет превышен таймаут ожидания; i,1,Background(invalid) — сообщить о том, что введен неправильный номер.
Если не работает донабор
Если во время тестирования возникнут проблемы при донаборе внутреннего номера, необходимо проверить режим DTMF. В двух словах, это аналоговый сигнал для набора телефонного номера. Он может отправляться разными способами: inband, rfc2833 / rfc4733, info. При возникновении проблем, попробуйте в настройках клиента выставить rfc2833 или inband.
На стороне Asterisk также можно настроить sip-пир на определенный способ передачи DTMF:
* настройка может быть задана на глобальном уровне, уровне шаблона или для конкретного пира.
Примеры настроек
Рассмотрим некоторые дополнительные примеры настроек диалплана, которые будут полезны при конфигурировании автоинформатора.
1. Расписание
а) Мы можем вызывать различные контексты диалплана в зависимости от времени суток. Для этого вызываем приложение GotoIfTime:
exten => ,1,NoOp(Задаем расписание колл-центра)
same => n,GotoIfTime(08:00-19:59,mon-fri,*,*?working_hours,s,1)
same => n,Goto(not_working_hours,s,1)
[working_hours]
exten => s,1,NoOp(Рабочие часы)
same => .
[not_working_hours]
exten => s,1,NoOp(Нерабочие часы)
same => .
* в данном примере при звонке с 08 до 20:00 в будние дни нас перекинет в контекст working_hours, иначе — в not_working_hours.
б) Чтобы во время нашей работы в рабочие часы мы могли проверить работу автоинформатора в нерабочее время, можно задать исключение для определенного номера:
exten => ,1,NoOp(Задаем расписание колл-центра)
same => n,GotoIf($[«$
same => n,GotoIfTime(08:00-19:59,mon-fri,*,*?working_hours,s,1)
same => n,Goto(not_working_hours,s,1)
* в данном примере мы добавили строку с проверкой исходящего номера. Если мы звоним с телефона 9062504869, то звонок всегда перекидывать в контекст not_working_hours.
в) Также мы можем менять направление диалплана в зависимости от времени:
exten => s,1,NoOp(Разные пути в зависимости от времени и дня)
same => n,GotoIfTime(10:00-13:59,mon-fri,*,*?true:false)
same => n(true),NoOp(TRUE)
same => n,Background(wav/true)
same => n,Hangup()
same => n(false),NoOp(FALSE)
same => n,Background(wav/false)
same => n,Hangup()
* в данном примере мы проиграем файл wav/true, если звонок будет совершен в будние дни с 10 до 14, и wav/false — в любое другое время.
Источник
Не передаются нажатия клавиш в IVR в asterisk
Столкнулся с неожиданной проблемой при подключении нового транка от MANGO. При входящем звонке абонент попадает в голосовое меню, где ему проигрывается приветствие. В это время можно набрать внутренний номер сотрудника и сразу позвонить ему, не дожидаясь ответа секретаря. Так вот набор внутреннего номера как раз и не работал, хотя с другими транками все было в порядке.
Вообще, Манго достаточно странная система. Если у других sip операторов ты покупаешь номер, и тебе присылают учетки и пример конфигурации под asterisk, то тут не все так просто. По факту ты покупаешь услугу виртуальной АТС и тебе дают к ней доступ. А дальше ты уже сам все настраиваешь в ней. По идее, это даже удобно и круто, но не совсем. Например, по-умолчанию, после покупки нового номера и создания первого пользователя, если вы захотите позвонить на него, то попадете на факс. Да, по-умолчанию у них так устроено. Если руками не указать принимать звонок новому пользователю, то примет его факс. Сам бы я не догадался, позвонил в техподдержку, там объяснили.
Рассказать я хотел не об этом. При входящих звонках от манго у меня не работал тональный набор. Причем я не сразу понял, что проблема именно в нем. В логе астера было странное предупреждение:
Я грешил на него и долго пытался понять, что это такое и с чем связано. Но реально не смог понять до конца, о чем тут идет речь и в чем проблема. Полный лог больше ничего подозрительного не показывал и это навело на мысль, что причина все же не в этом сообщении. Смущало то, что в астериске вообще не было никакой реакции на тоновый набор, как-будто сигнал просто не доходил. Как только я это понял, сразу стало очевидно, куда копать.
По факту у меня просто не передавался через транк тональный сигнал, или dtfm. Стал смотреть, какие настройки пира за это отвечают. Сразу же нашел — dtmfmode. В манговской wiki написано:
Метод передачи DTMF — INBAND, RFC_2833 (не рекомендуется)
Я человек не глупый, фразу не рекомендуется понимаю буквально и не использую. В итоге у меня стояло dtmfmode=inband. После того, как поменял на rfc2833 все заработало. В конечном счете у меня работает Манго (Mango office) с asterisk с такими настройками пира:
Они не соответствуют полностью тому, что рекомендуется у них в примерах конфигурации астериск — http://wiki.mangotele.com/index.php/Asterisk. Но тем не менее, все работает нормально.
Для отладки и тестирования работы voip я рекомендую сервис Zadarma. Плюс его в том, что после регистрации вы получите настройки пира для внутренней сети оператора. И внутри этой сети вы можете бесплатно звонить. Например, я одного пира регистрирую на sip клиенте смартфона и с него звоню на второй аккаунт, пир от которого настроен в астериске. Таким образом эмулирую внешний звонок. Удобно отлаживать различные конфигурации звонков, не требуя платного подключения.
Источник
Настройка IVR в Asterisk
Доброго времени суток дорогие читатели. Тема нашей сегодняшней статьи IVR (Interactive Voice Response) — голосовое меню. Сегодня уже почти в каждой организации есть голосовое меню. Меню можно сделать совсем простым либо сложным с большим количеством переходов. Большие меню делать не советую, людям это не нравится. Давайте разбираться как происходит настройка IVR в Asterisk.
Подготовка аудиозаписей
Перед настройкой IVR необходимо подготовить аудиозапись приветствия. Записать приветствие можно самим либо купить профессиональную озвучку. Формат записи должен соответствовать: 8кГц, 16 Бит, Моно
Для конвертации записи в нужный формат я использую программу Audacity она бесплатная и проста в использовании.
Аудиозаписи будем хранить в папке /opt/music
Создание папки music
Скопируйте удобным для вас способом аудиозаписи в созданную папку. Перейдем непосредственно к написанию IVR для Asterisk.
Создание IVR в Asterisk
Необходимо создать автосекретарь на Asterisk с переключением на внутренние номера. IVR меню будет состоять из 4 пунктов:
Переключение на отделы будем использовать в рабочее время. В нерабочее время будет приветствие и предложение перезвонить в рабочие часы. При желании конечно можно усложнить, и повесить голосовую почту. Но как показывает практика клиенты не пользуются данной фишкой.
В основном меню и в каждом из отделов сделаем переключение на оператора по истечению времени. Когда клиент наберет цифру не соответствующую какому-либо из меню он также попадет на оператора. Вы также можете добавить в каждом меню возврат на предыдущий уровень.
Для записи тестового IVR приветствия я воспользовался бесплатным сервисом озвучивания текста. В интернет таких довольно много. У меня получилось 5 аудио записей:
| Аудио запись | Назначение |
|---|---|
| privet | Приветствие в рабочее время |
| poka | Приветствие в нерабочее время и выходные дни |
| komm_otd | Перечисление сотрудников коммерческого отдела |
| otd_dost | Переключение на сотрудников отдела доставки |
| otd_yuristov | Сотрудники юридического отдела |
Глобальные переменные
Данные о рабочих днях я заношу в глобальные переменные, секция [globals]. Использование глобальных переменных позволяет менять их только в одном месте без поиска по всему диалплану. Переменные всего две:
Где 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] это основное меню. После поднятия трубки и 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
Источник