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

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

(Различия между версиями)
Перейти к: навигация, поиск
(dialup)
(Голос)
Строка 14: Строка 14:
==Голос==
==Голос==
 +
С голосом все много сложнее, так как обычно карточные платформу авторизуют пользователя только по пинкоду а не по паре логин-пароль. Стандартный сиськовский 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 в радиус запрос с номером этой карточки.
 +
 +
<source lang="java">
 +
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);
 +
}
 +
}
 +
</source>
 +
если поле User-Name (код радиус атрибута = 1) пустое или если атрибута User-Name нет в запросе, то мы ищем все карточки которые в продаже или активированы (status>0) и пинкод совпадает с переданым в поле Password (код радиус атрибута = 2). Если карточек несколько то мы берем карточку с наиболее поздней датой начала действия (order by date1 desc).
 +
Так как в продаже и активированых карточек довольно мало то вероятность пересечения пинкодов крайне мала и ее можно полностью устранить при генерации карточек если использовать для нее не BGCardGen.
===Конфигурация IVR на Cisco===
===Конфигурация IVR на Cisco===
-
===Скрипт поддержки===
+
===Дополнительные функции===
==Пополнение баланса==
==Пополнение баланса==
==Генерация карточек==
==Генерация карточек==

Версия 14:05, 15 июня 2008

Содержание

Карточки

как это все работает...

У пользователя есть карточка на карточке напечатан номер карточки и пинкод. есть 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

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

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

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

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