forum.bitel.ru
http://forum.bitel.ru/

Автоматическое создание договора по карте.
http://forum.bitel.ru/viewtopic.php?f=8&t=9039
Страница 1 из 1

Автор:  firstishe [ 12 мар 2014, 22:46 ]
Заголовок сообщения:  Автоматическое создание договора по карте.

Проблема следующая, клиенты, которые будут покупать карты оплаты услуг модуля VoiceIP не имеют возможности выходить в интернет, есть задача сделать активацию карт автоматом, либо через ivr.

варианта 2.
1. астериском отправлять запрос эмулирующий отправку формы регистрации, но есть проблема с капчей и есть параметр GUID какой-то.
Код:
 /bgbilling/pubexecuter?action=CreateContract&module=card&mid=8 HTTP/1.1" module=card&accept=1&activate=1&GUID2912225174153344_submit=&tariff=12&action=CreateContract&param_0=123&captcha=km8abn&pswd=92492&login=2&mid=8&pswd2=92492&activateType=1&

Наскриптовать можно подстановку сюда пароля и логина из карты, но как отключить капчу вообще?

2. Активировать через IVR, звонили в Бител, нам сказали что можно, при пополнении договора картой первый раз типо он создается, но в самих скриптах обнаружили, что алгоритм таков: идет поиск договора если его нет то ошибка и цикл опять. И опять же в документации про IVR говориться только про пополнение и просмотр баланса.
Код:
<assign name="contract_id" expr="find_contract.contract_id"/>
<if cond="contract_id &gt; '0'">
<goto next="#contractActionDo"/>
<else/>
<prompt bargein="true"><audio src="prompts/contract_not_found.au"/></prompt>
<goto next="#contractProcess"/>
</if>

Соотвественно вопрос можно ли через IVR сформировать запрос, который будет создавать договор?

Автор:  skn [ 13 мар 2014, 02:06 ]
Заголовок сообщения:  Re: Автоматическое создание договора по карте.

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

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

ивр ни чего не знает про создание договоров.....

Автор:  firstishe [ 19 мар 2014, 01:24 ]
Заголовок сообщения:  Re: Автоматическое создание договора по карте.

Ок, спасибо.

Ну мы попробовали тестовые ИВР скрипты для циски, хотим построить решение на базе ИВР системы астериска, суть одна же, но скрипты эти не заработали, пытаемся сами написать сгенерировав нужный запрос исходя из примера.

Никак не можем реализовать поиск карты\договора с автоматическим созданием договора при наличии карты, запрос получился такой.
/bgbilling/pubexecuter?action=IVRFindContract&module=card&mid=4&contract_id=100212919&contract_type=1&content_type=stream
карта 1002 пин 12919 в модуле кард прописано ivr.card.size.9.login.length=4

Возвращает ошибку <vxml version="2.0"><form id="find_contract"><block><var expr="'0'" name="contract_id"/><return namelist="contract_id"/></block></form></vxml>
какой бы договор не указали.

Так же вопрос, есть ли где документация по всем параметрам и требованиям action=IVRFindContract и прочих?

Автор:  skn [ 19 мар 2014, 11:15 ]
Заголовок сообщения:  Re: Автоматическое создание договора по карте.

Код:
/bgbilling/pubexecuter?action=IVRFindContract&module=card&mid=4&contract_id=100212919&contract_type=1&content_type=stream


а что вы этим запросом хотите добиться?

Код:
package bitel.billing.server.card.action.pub;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.w3c.dom.Element;

import ru.bitel.bgbilling.common.BGException;
import ru.bitel.common.Utils;
import ru.bitel.common.XMLUtils;
import bsh.Interpreter;

public class ActionIVRFindContract
    extends ActionIVRBase
{
    @Override
   public void doAction()
       throws SQLException, BGException
   {
        String phoneNum = request.getParameter( "phone_num" );
        String contractType = request.getParameter( "contract_type" );
       
        Element block = getBlockElement();
       
        Element var = XMLUtils.newElement( block, "var" );
        var.setAttribute( "name", "contract_id" );
       
        int cid = 0;
       
        String pswd = null;
        if( phoneNum != null )
        {
           int pos = phoneNum.indexOf( '.' );
           if( pos > 0 )
           {
              pswd = phoneNum.substring( pos + 1 );
              phoneNum = phoneNum.substring( 0, pos );              
           }
        }
       
        if( moduleSetup != null )
        {
            String pref = "ivr.contract.type." + contractType;
           
            String prefix = moduleSetup.get( pref + ".pref", null );           
            String prepare = moduleSetup.get( pref + ".prepare", null );
            if( Utils.notBlankString( prepare ) )
            {
                try
                {
                    Interpreter it = new Interpreter();
                    it.set( "phone", phoneNum );
                    phoneNum = (String)it.eval( prepare );                   
                }
                catch (Exception e)
                {
                    log.error( e.getMessage(), e );
                }
            }           
           
            if( prefix != null )
            {
               phoneNum = prefix + phoneNum;
               
                String query =  "SELECT id FROM contract WHERE title=?";
                if( Utils.notBlankString( pswd ) )
                {
                   query += " AND pswd=? ";
                }
                query += " LIMIT 1";
                PreparedStatement psFind = con.prepareStatement( query );
               
                psFind.setString( 1, phoneNum );
                if( Utils.notBlankString( pswd ) )
                {
                   psFind.setString( 2, pswd );
                }
               
                ResultSet rs = psFind.executeQuery();
                if( rs.next() )
                {
                    cid = rs.getInt( 1 );
                }
            }
        }
       
        var.setAttribute( "expr", "'" + cid +  "'" );
       
        Element returnEl = createElement( block, "return" );
        returnEl.setAttribute( "namelist", "contract_id" );       
               
        sendResponse( block.getOwnerDocument() );               
    }
}

Автор:  firstishe [ 20 мар 2014, 22:16 ]
Заголовок сообщения:  Re: Автоматическое создание договора по карте.

Как и писал выше, мы хотим добиться активации карты без использования веба.

Цитата:
алгоритм такой
при авторизации вводиться логин и пароль с карты в виде пинкода
этот пин ищется среди существующих договоров, а затем если для задан код карточного модуля в конфиге, если среди карт находится карта с нужным пином и карта имеет тип создания договора, то создается новый договор на него заносится сумма с карты и логин с паролем, а затем происходит авторизация по новому договору

Вот именно этого.

Вопрос в том как эти данные присылать http запросом либо радиус запросом с наса.. к сожалению так и не получается ничего.

Автор:  skn [ 21 мар 2014, 01:16 ]
Заголовок сообщения:  Re: Автоматическое создание договора по карте.

да не надо ничего специально присылать, при правильной настройке, при первой попытке позвонить по карте, договор будет создан АВТОМАТИЧЕСКИ, а то что вы пытаетесь сделать запросом это дополнительная возможность пополнения баланса СУЩЕСТВУЮЩЕГО договора через IVR с помощью карты.

Автор:  firstishe [ 24 мар 2014, 21:14 ]
Заголовок сообщения:  Re: Автоматическое создание договора по карте.

ОК.
Ну вот у нас в модуле телефонии прописано:
card.module.id=8
ivr.card.size.9.login.length=4

В насе:
card.activate.service=0

В модуле кард (8)
Услуга пополнения\Услуга активации у серии есть.
Карта
1002 пароль 12919

С наса пытаемся прислать через
User-Name=100212919 - Логин и карта не найдены

User-Name=1002
User-Password=12919 - Тоже самое.

Не подскажете, может что не так сделали?

Автор:  skn [ 25 мар 2014, 00:42 ]
Заголовок сообщения:  Re: Автоматическое создание договора по карте.

http://bgbilling.ru/v6.0/doc/ch31s09.html
http://bgbilling.ru/v6.0/doc/ch14s14.html
При следующем звонке RADIUS-сервер должен найти этот логин, для этого в режимах поиска должен присутствовать метод User-Name=LOGIN.
http://bgbilling.ru/v6.0/doc/ch31s04.html

Автор:  firstishe [ 28 мар 2014, 00:35 ]
Заголовок сообщения:  Re: Автоматическое создание договора по карте.

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

Итак с НАСА приходит запрос
User-Name=1002
User-Password=12919

В модуле карт есть карта 1002 с пином 12919, у серии карт указана услуга из модуля Карты активации и пополнения картой. Карта у дилера и в ПРОДАЖЕ.

В конфиге модуля Voice и в конфиге наса(на всякий случай) прописано
card.activate.service=0
card.module.id=8

Режим поиска
findmode.0.title=Поиск по User-Name=LOGIN
findmode.0.value=User-Name=LOGIN
findmode.1.title=Поиск по User-Name=ALIAS
findmode.1.value=User-Name=ALIAS
findmode.2.title=Поиск по Calling-Station-Id=ALIAS
findmode.2.value=Calling-Station-Id=ALIAS

find.order=0,1,2

Установлен.

Помогите, пожалуйста.

Автор:  skn [ 28 мар 2014, 02:10 ]
Заголовок сообщения:  Re: Автоматическое создание договора по карте.

покажите скрин окошка с картой 1002

Автор:  firstishe [ 28 мар 2014, 02:48 ]
Заголовок сообщения:  Re: Автоматическое создание договора по карте.

Пожалуйста

Вложения:
bill.jpg
bill.jpg [ 272.03 КБ | Просмотров: 8417 ]

Автор:  firstishe [ 30 мар 2014, 19:18 ]
Заголовок сообщения:  Re: Автоматическое создание договора по карте.

На скрине все верно?

Автор:  firstishe [ 03 апр 2014, 20:38 ]
Заголовок сообщения:  Re: Автоматическое создание договора по карте.

Так каким образом можно решить проблему нашу?

Автор:  skn [ 04 апр 2014, 00:56 ]
Заголовок сообщения:  Re: Автоматическое создание договора по карте.

обращались в хелпдеск?

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/