Карточная IVR система на базе Cisco
Материал из BiTel WiKi
Blib (Обсуждение | вклад) (→Голос) |
Blib (Обсуждение | вклад) |
||
(4 промежуточные версии не показаны) | |||
Строка 1: | Строка 1: | ||
==Карточки== | ==Карточки== | ||
- | |||
- | |||
У пользователя есть карточка на карточке напечатан номер карточки и пинкод. | У пользователя есть карточка на карточке напечатан номер карточки и пинкод. | ||
есть 3 основных сервиса | есть 3 основных сервиса | ||
- | # dialup | + | # dialup |
# голос | # голос | ||
- | # пополнение баланса | + | # пополнение баланса (через веб интерфейс) |
==Dialup== | ==Dialup== | ||
Строка 28: | Строка 26: | ||
if(rs.next()) { | if(rs.next()) { | ||
request.setStringAttribute(1, String.valueOf(rs.getInt(1))); | request.setStringAttribute(1, String.valueOf(rs.getInt(1))); | ||
- | + | } | |
} catch(Exception e) { | } catch(Exception e) { | ||
throw new RuntimeException(e); | throw new RuntimeException(e); | ||
Строка 38: | Строка 36: | ||
===Конфигурация IVR на Cisco=== | ===Конфигурация IVR на Cisco=== | ||
+ | создаем радиус группу для сервера БГ и говорим использовать ее для bg-card | ||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | |||
+ | задаем параметры для h323 (запрещаем nte и типы используемых кодеков) | ||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | |||
+ | класс авторизации которым будет пользоватся наши карточки, все идет через bg-card определенный выше | ||
+ | <pre> | ||
+ | voice class aaa 2 | ||
+ | authentication method bg-card | ||
+ | authorization method bg-card | ||
+ | accounting method bg-card | ||
+ | </pre> | ||
+ | |||
+ | использовать адрес на интерфейсе Loopback1 для всех радиус запросов, отправлять заданные атрибуты, ключ для радиус сервера, и отправлять VSA атрибуты (Vendor Specific Attributes). | ||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | |||
+ | создаем наше IVR приложение и задаем ему параметры, длинну пин кода, номер оператора куда перенаправлять звонки, язык, откуда брать звуковые приглашения. | ||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | |||
+ | конфигурируем PRI E1 | ||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | |||
+ | проавила преобразования номеров из ТФОП в E.164. При входящих звонках нужно преобразовывать АОН при исходящих звонках подставлять АОН из диапазона разрешенных на этом E1 иначе ТФОП не примет вызов. Обычно в России приходит либо телефон без кода города либо 10 цифр (полный номер без 8ки), так как у нас номера 6-ти значные то при звонках из области бывает что приходит 7ми значный номер без кода зоны/города. | ||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | |||
+ | конфигурим голосовой порт с этими параметрами | ||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | |||
+ | диалпир для исходящих звонков | ||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | |||
+ | диалпир для карточной платформы (срабатывает при звонке на 555000), привязан к радиус класу bg-card | ||
+ | <pre> | ||
+ | dial-peer voice 2 pots | ||
+ | application bg-card2 | ||
+ | incoming called-number 555000 | ||
+ | voice-class aaa 2 | ||
+ | </pre> | ||
+ | |||
+ | диал пиры для исходящих voip звонков. У нас все звонки идут сначала на MVTS который делает трансляцию из Российского номерного плана в E.164 и скрипт делает звонки согласно Российскому номерному плану, если нужно звонить напрямую то лучше в скрипте преобразовать номер в E.164 и использовать его. | ||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | |||
===Дополнительные функции=== | ===Дополнительные функции=== | ||
+ | базовый TCL скрипт app_debitcard от Cisco умеет только спросить пинкод, номер по кторому хотелось бы позвонить и сделать звонок. Для современной карточной платформы этого не достаточно. Поэтому были реализованы различные дополнительные функции. Для всех для них нужна поддержка на стороне радиус сервера. В БГ это реализовано через скрипт события "RADIUS аутентификация" этот скрипт привязывается ко всем карточным договорам через шаблон договора. | ||
+ | |||
+ | данные передаются между БГ и IVR приложением через VSA аттрибуты h323-ivr-out и h323-ivr-in | ||
+ | ====информация по карточке==== | ||
+ | баланс, срок окончания действия, действующий тариф | ||
+ | ====повтор последнего набраного номера==== | ||
+ | ====авторизация по АОНу==== | ||
+ | позволяет пользователю входить в систему без ввода пинкода | ||
+ | ====пополнение баланса==== | ||
+ | позволяет пользователю пополнить баланс другой карточкой | ||
==Пополнение баланса== | ==Пополнение баланса== | ||
==Генерация карточек== | ==Генерация карточек== | ||
+ | |||
+ | |||
+ | продолжение следует | ||
+ | |||
+ | blib@dsi.ru Борис Близнюков |
Текущая версия на 15:40, 15 июня 2008
Содержание |
Карточки
У пользователя есть карточка на карточке напечатан номер карточки и пинкод. есть 3 основных сервиса
- dialup
- голос
- пополнение баланса (через веб интерфейс)
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 Борис Близнюков