9. IVR-Система

Модуль карточек поддерживает следующие функции IVR: озвучивание информации о балансе пользователя и пополнение счета картой. При проверке баланса у пользователя запрашивается пароль доступа к Web-статистике, который должен быть цифровым. Система построена на VXML.

Набор тестовых IVR-скриптов вы можете загрузить с сервера. Архив ivr.zip содержит:

Архив необходимо распаковать и разместить на HTTP сервере, доступным с CISCO.

Общий алгоритм работы скрипта следующий:

  1. с помощью голосового меню пользователь выбирает тип требуемого договора (при этом происходит определение адреса сервера биллинга и кода типа договора);

  2. запрашивается номер договора без тире, при этом клиент вводит слитно и номер и две последних цифры года, происходит запрос на сервер для определения существования договора;

  3. пользователь выбирает вид операции: активация карты, либо произнесение остатка на счёте;

  4. если выбрано произнесение остатка, то запрашивается пароль и происходит обращение на сервер биллинга, который либо возвращает ошибку, если пароль не верен, либо генерирует VXML скрипт, произносящий баланс;

  5. если выбрана активация карты, то запрашиваются слитно логин и пароль карты, которые отправляются в запросе на сервер. Карта либо успешно активируется, либо сервер возвращает код ошибки.

Для настройки скриптов в файле bgivr.vxml необходимо настроить адреса серверов биллинга и коды карточных модулей. Также необходимо установить параметр prompt_url - путь к папке с фразами на вашем HTTP сервере.

<var name="module" expr="'card'"/>
<var name="contentType" expr="'stream'"/>
<var name="prompt_url" expr="'http://bgbilling.bitel.ru/patch/vxml/prompts'"/>

<var name="billing_ds" expr="'http://stat1.ufanet.ru/bgbilling/pubexecuter'"/>
<var name="mid_ds" expr="'8'"/>

<var name="billing_bis" expr="'http://stat2.ufanet.ru/bgbilling/pubexecuter'"/>
<var name="mid_bis" expr="'1'"/>

<var name="billing_tks" expr="'http://stat3.ufanet.ru/bgbilling/pubexecuter'"/>
<var name="mid_tks" expr="'1'"/>

Также необходимо установить адреса серверов и коды карточных модулей. В приведённом примере скрипт обслуживает 3 сервера биллинга: Кабельное ТВ, Скоростной интернет и DialUP+VOIP. Далее клиент выбирает нужный тип договора.

На сервере биллинга в модуле карт должны быть настроены:

1) правила разделения логинов+паролей карт различной длины на, собственно, логин и пароль, например, данная строка означает, что если длина логина с паролем составляет 11 символов, то 6 из них - логин

#универсальная карта
ivr.card.size.11.login.length=6

2) правила преобразования номера договора, введённого слитно (в данном примере - числовая часть и две цифры года на конце договора) в зависимости от кода типа договора (приходит в запросе)

#phone - введённая клиентом последовательность цифр, для типа договора 1 она дополняется префиксом ГТФ, далее берутся все исключая 
#2 последние цифры phone, затем - и 2 последние цифры phone
#например 444406 -> ГТФ4444-06
#
ivr.contract.type.1.pref=ГТФ
ivr.contract.type.1.prepare=phone.substring( 0, phone.length() - 2 ) + "-" + phone.substring( phone.length() - 2, phone.length() );
#
ivr.contract.type.2.pref=NK
ivr.contract.type.2.prepare=phone.substring( 0, phone.length() - 2 ) + "-" + phone.substring( phone.length() - 2, phone.length() );
ivr.contract.type.3.pref=N
ivr.contract.type.3.prepare=phone.substring( 0, phone.length() - 2 ) + "-" + phone.substring( phone.length() - 2, phone.length() );
ivr.contract.type.4.pref=NA
ivr.contract.type.4.prepare=phone.substring( 0, phone.length() - 2 ) + "-" + phone.substring( phone.length() - 2, phone.length() );
ivr.contract.type.5.pref=R
ivr.contract.type.5.prepare=phone.substring( 0, phone.length() - 2 ) + "-" + phone.substring( phone.length() - 2, phone.length() );
ivr.contract.type.6.pref=RK
ivr.contract.type.6.prepare=phone.substring( 0, phone.length() - 2 ) + "-" + phone.substring( phone.length() - 2, phone.length() );
ivr.contract.type.7.pref=ГТЮ
ivr.contract.type.7.prepare=phone.substring( 0, phone.length() - 2 ) + "-" + phone.substring( phone.length() - 2, phone.length() );

В общем случае преобразование может быть и более сложным, язык макроса - BeanShell. Запросы на IVR-сервер и ответы сервера доступны в логе server.log, для этого необходимо установить его уровень логиновария в DEBUG в файле data/log4j_server.properties.