Карточная IVR система на базе Cisco

Материал из BiTel WiKi

Перейти к: навигация, поиск

Содержание

Карточки

У пользователя есть карточка на карточке напечатан номер карточки и пинкод. есть 3 основных сервиса

  1. dialup
  2. голос
  3. пополнение баланса (через веб интерфейс)

Dialup

с диалапом все тривиально и довольно подробно описано в инструкции, ни какх сложностей возникнуть не должно.

В качестве логина пользователь использует номер карточки и в качестве пароля пин-код.

Голос

С голосом все много сложнее, так как обычно карточные платформу авторизуют пользователя только по пинкоду а не по паре логин-пароль. Стандартный сиськовский IVR скрипт http://www.cisco.com/cgi-bin/Software/Tablebuild/doftp.pl?ftpfile=/cisco/access/tclware/app-debitcard-nlp.2.0.1.7.zip разбивает введеный код на 2 части первую отправляет в радиус атрибуте User-Name а вторую в Password. Для работы в БГ это совсем не подходит. Мы вышли из положения поправив скрипт так, что бы он отправлял в поле Password весь набраный пинкод, затем в скрипте предобработки для НАС мы ищем соответствующию карточку и добавляем атрибут User-Name в радиус запрос с номером этой карточки.

import java.sql.*;
import java.util.*;
 
if( "".equals(request.getStringAttribute(1)) || request.getStringAttribute(1)==null) {
 try {
     PreparedStatement ps = con.prepareStatement("select card_code from card_data_"+setup.getIntValue("card.module.id", 0)+
        " where card_pin_code = ? and status > 0 order by date1 desc");
     ps.setString(1, request.getStringAttribute(2));
     ResultSet rs = ps.executeQuery();
     if(rs.next()) {
      request.setStringAttribute(1, String.valueOf(rs.getInt(1)));
     }
 } catch(Exception e) {
     throw new RuntimeException(e);
 }
}

если поле User-Name (код радиус атрибута = 1) пустое или если атрибута User-Name нет в запросе, то мы ищем все карточки которые в продаже или активированы (status>0) и пинкод совпадает с переданым в поле Password (код радиус атрибута = 2). Если карточек несколько то мы берем карточку с наиболее поздней датой начала действия (order by date1 desc). Так как в продаже и активированых карточек довольно мало то вероятность пересечения пинкодов крайне мала и ее можно полностью устранить при генерации карточек если использовать для нее не BGCardGen.

Конфигурация IVR на Cisco

создаем радиус группу для сервера БГ и говорим использовать ее для bg-card

aaa group server radius BG-VOIP
 server xx.xx.xx.xx auth-port 1912 acct-port 1913

aaa authorization exec bg-card group BG-VOIP 
aaa accounting connection bg-card start-stop group BG-VOIP

задаем параметры для h323 (запрещаем nte и типы используемых кодеков)

voice service voip 
 fax protocol t38 ls-redundancy 0 hs-redundancy 0 fallback none
 h323
  h225 timeout tcp call-idle value 5
  h225 timeout setup 30
  session transport tcp calls-per-connection 1
  h245 caps suppress nte

voice class codec 3
 codec preference 1 g729r8
 codec preference 2 g729br8

класс авторизации которым будет пользоватся наши карточки, все идет через bg-card определенный выше

voice class aaa 2
 authentication method bg-card
 authorization method bg-card
 accounting method bg-card

использовать адрес на интерфейсе Loopback1 для всех радиус запросов, отправлять заданные атрибуты, ключ для радиус сервера, и отправлять VSA атрибуты (Vendor Specific Attributes).

ip radius source-interface Loopback1 

radius-server attribute 44 include-in-access-req
radius-server attribute 8 include-in-access-req
radius-server attribute 55 include-in-acct-req
radius-server attribute nas-port format e UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
radius-server host xx.xx.xx.xx auth-port 1912 acct-port 1913 non-standard key XXXX
radius-server unique-ident 19
radius-server vsa send accounting
radius-server vsa send authentication

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

call application voice bg-card2 tftp://xx.xx.xx.xx/ivr/bg-card2.tcl
call application voice bg-card2 call-setup-retry-count 3
call application voice bg-card2 local-prefix 73952
call application voice bg-card2 uid-len 6
call application voice bg-card2 pin-len 10
call application voice bg-card2 redirect-number 73952555001
call application voice bg-card2 language 1 ru
call application voice bg-card2 set-location ru 0 tftp://xx.xx.xx.xx/ivr/prompts/
call application cache reload time 600

конфигурируем PRI E1

controller E1 1/0
 pri-group timeslots 1-31
!
interface Serial1/0:15
 no ip address
 encapsulation hdlc
 isdn switch-type primary-net5
 isdn not-end-to-end 64
 isdn incoming-voice modem 64
 isdn calling-party-num network-provided
 isdn T303 6000
 isdn T306 40000
 isdn T310 55000
 isdn send-alerting
 isdn negotiate-bchan resend-setup cause-code 34 44 47 102
 isdn bchan-number-order ascending 
 isdn sending-complete
 isdn reject data
 isdn reject v120
 isdn reject v110
 isdn reject piafs
 no isdn gtd
 no keepalive
 no fair-queue
 no cdp enable

проавила преобразования номеров из ТФОП в E.164. При входящих звонках нужно преобразовывать АОН при исходящих звонках подставлять АОН из диапазона разрешенных на этом E1 иначе ТФОП не примет вызов. Обычно в России приходит либо телефон без кода города либо 10 цифр (полный номер без 8ки), так как у нас номера 6-ти значные то при звонках из области бывает что приходит 7ми значный номер без кода зоны/города.

voice translation-rule 2
 rule 1 /^395\(.*\)/ /7\0/ type any unknown plan any unknown
 rule 2 /^2....../ /7395\0/ type any unknown plan any unknown
 rule 3 /^$/ /73952/ type any unknown plan any unknown
 rule 4 /^..........$/ /7\0/
!
voice translation-rule 3
 rule 1 /^.*/ /2555000/
!
voice translation-profile from_pstn
 translate calling 2

voice translation-profile to_pstn
 translate calling 3

конфигурим голосовой порт с этими параметрами

voice-port 1/0:D
 translation-profile incoming from_pstn
 translation-profile outgoing to_pstn
 output attenuation 1
 voicecap configure echo4
 echo-cancel coverage 64
 cptone RU
 timeouts interdigit 7
 timeouts call-disconnect 3
 timeouts ringing 60
 timeouts wait-release 4
 music-threshold -49
 bearer-cap Speech

диалпир для исходящих звонков

dial-peer voice 1 pots
 tone ringback alert-no-PI
 huntstop
 destination-pattern 73952[2-7,9].....$
 progress_ind setup enable 3
 progress_ind alert enable 8
 progress_ind progress enable 8
 progress_ind disconnect enable 8
 forward-digits 6
 port 1/0:D

диалпир для карточной платформы (срабатывает при звонке на 555000), привязан к радиус класу bg-card

dial-peer voice 2 pots
 application bg-card2
 incoming called-number 555000
 voice-class aaa 2

диал пиры для исходящих voip звонков. У нас все звонки идут сначала на MVTS который делает трансляцию из Российского номерного плана в E.164 и скрипт делает звонки согласно Российскому номерному плану, если нужно звонить напрямую то лучше в скрипте преобразовать номер в E.164 и использовать его.

dial-peer voice 8 voip
 tone ringback alert-no-PI
 translation-profile outgoing non-local
 huntstop
 destination-pattern 8[0,3-9].........
 progress_ind setup enable 3
 progress_ind alert enable 8
 voice-class codec 3
 session target dns:voip.provider.net
 dtmf-relay h245-signal h245-alphanumeric
 fax-relay ecm disable
 fax rate 14400
 fax nsf 000000
 no vad
!
dial-peer voice 810 voip
 tone ringback alert-no-PI
 translation-profile outgoing non-local
 huntstop
 destination-pattern 810T
 progress_ind setup enable 3
 progress_ind alert enable 8
 voice-class codec 3
 session target dns:voip.provider.net
 dtmf-relay h245-signal h245-alphanumeric
 fax-relay ecm disable
 fax rate 14400
 fax nsf 000000
 no vad
!
dial-peer no-match disconnect-cause 1

Дополнительные функции

базовый TCL скрипт app_debitcard от Cisco умеет только спросить пинкод, номер по кторому хотелось бы позвонить и сделать звонок. Для современной карточной платформы этого не достаточно. Поэтому были реализованы различные дополнительные функции. Для всех для них нужна поддержка на стороне радиус сервера. В БГ это реализовано через скрипт события "RADIUS аутентификация" этот скрипт привязывается ко всем карточным договорам через шаблон договора.

данные передаются между БГ и IVR приложением через VSA аттрибуты h323-ivr-out и h323-ivr-in

информация по карточке

баланс, срок окончания действия, действующий тариф

повтор последнего набраного номера

авторизация по АОНу

позволяет пользователю входить в систему без ввода пинкода

пополнение баланса

позволяет пользователю пополнить баланс другой карточкой

Пополнение баланса

Генерация карточек

продолжение следует

blib@dsi.ru Борис Близнюков

Личные инструменты