Настройка голосового меню (IVR) на Asterisk

Обновлено и опубликовано Опубликовано:

Тематические термины: IVRAsterisk.

Интерактивное голосовое меню, или голосовое дерево, IVR меню или просто, IVR используется для возможности позвонившему подключиться к конкретному сотруднику компании или соединиться с линией поддержки определенной категории. Также, с помощью IVR можно получить необходимую информацию без ответа со стороны оператора, выбрав интересующую информацию. Другими словами, это система, взаимодействующая с абонентом и реагирующая на его команды.

Принцип настройки

IVR настраивается в плане набора Aterisk (dialplan) — в конфигурационном файле extensions.conf.

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

Записать голосовое приветствие с просьбой ввода номера можно с помощью различных программ звукозаписи. Asterisk работает с форматами .waw, .gsm. В случае наличия другого формата, можно воспользоваться пакетом для конвертации — sox. Также можно загрузить и установить готовый список голосов на русском, который частично, можно использовать.

Базовая настройка

Открываем конфигурационный файл:

vi /etc/asterisk/extensions.conf

Вводим:

[outcaling]
...
exten => 222,1,Answer()
 same => n,Background(basic-pbx-ivr-main)
exten => _XXX,1,Dial(SIP/${EXTEN},,m)

* в данном примере, при звонке на номер 222 нам проигрывается голосовая запись basic-pbx-ivr-main (из каталога /var/lib/asterisk/sounds/<язык>). Когда мы вводим трехзначный добавочный номер, нас соединяет Asterisk с этим номером. Предполагается, что наш основной диалплан называется outcaling.

Перезапускаем настройки диалплана:

asterisk -x "dialplan reload"

Голосовое дерево

Теперь настроим возможность выбора отдела, с которым абонент захочет соединиться.

Приводим наш диалплан к следующему виду:

vi /etc/asterisk/extensions.conf

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. Добавим их в наш конфиг:

vi /etc/asterisk/extensions.conf

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)
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:

vi /etc/asterisk/sip.conf

dtmfmode=rfc2833

* настройка может быть задана на глобальном уровне, уровне шаблона или для конкретного пира. 

# Серверы # Телефония
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет