Через меню "Сервис/Автоматизация/Функции скриптов поведения" был создан скрипт для события "Модуль IP телефония" следующего содержания (там много лишних моментов, много чего пробовали):
Код:
import java.math.*;
import java.util.*;
import bitel.billing.server.util.*;
import bitel.billing.server.radius.*;
import ru.bitel.bgbilling.kernel.network.radius.*;
import ru.bitel.bgbilling.common.*;
import ru.bitel.bgbilling.kernel.base.phone.server.*;
import ru.bitel.bgbilling.server.util.*;
import bitel.billing.common.*;
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.tariff.*;
import bitel.billing.server.tariff.voice.calc.*;
String toNum = "100";
//int callType = 1;
//int serviceId = 6;
int mid = 10;
//этот объект производит поиск направления по зонам и нужен при тарификации по зонам
//объект создаётся лишь один раз в контексте приложения при первом обращении
ZoneDestFinder zdf = ZoneDestFinder.getZoneFinder( con, mid );
public void onEvent( event, setup, con, conSlave )
{
// print( "Radius-Аутентификация!" );
print( "UserName="+event.getUserName()+", ObjectID=" + event.getLogin().getObjectId() + ", Cid=" + event.getLogin().getCid() + ", Id=" + event.getLogin().getId()+", Login="+event.getLogin().getLogin());
// print("YATE ACCESS !!! :: METHOD="+request.getStringAttribute(Vendors.CISCO, 34, ""));
// Акцесс (REGISTER,INVITE,...)
// Нам нужен метод INVITE
if( event.request.getStringAttribute(Vendors.CISCO,34,"").equals("INVITE") ) {
print("YATE INVITE !!!");
Calendar startTime = new GregorianCalendar();
List treeList = new ContractManager( con ).getRealtimeTariffTreeSet( event.getLogin().getCid(), startTime, "voiceip", mid, true ).getTreeList( startTime );
for( TariffModuleTree tree : treeList ) {
TariffRequest req = new TariffRequest();
req.setRequestParam( "action", "calculate" );
req.setRequestParam( "time", startTime );
req.setRequestParam( "phone", toNum );
req.setRequestParam( "sid", 6 );
req.setRequestParam( "call_type", 1 );
req.setRequestParam( "zdf", zdf );
// req.setRequestParam( "costMapCache", costMapCache );
tree.processRequest( req );
Integer destCode = req.getResponseParam( "dest" );
Float minCost = req.getResponseParam( "min_cost" );
// VoiceTariffConfig config = req.getResponseParam( "config" );
Integer zone = req.getResponseParam( "zone" );
String oper1 = req.getResponseParam( "oper_id" );
String oper2 = req.getResponseParam( "operatorId" );
String oper3 = req.getResponseParam( "operarorid" );
String oper4 = req.getResponseParam( "oper" );
String oper5 = req.getResponseParam( "operator" );
String oper6 = req.getResponseParam( "operid" );
String oper7 = req.getResponseParam( "operId" );
// Integer ooo = event.request.getOption("operator");
print("YATE::destCode="+destCode+",minCost="+minCost+",zone="+zone+",oper1="+oper1+",oper2="+oper2+",oper3="+oper3+",oper4="+oper4+",oper5="+oper5+",oper6="+oper6+",oper7="+oper7);
// if( req.wasAccepted() && destCode != null && minCost != null ) {
//ваш код
// print("YATE:: ACCEPTED");
// }
}
}
}
Изначально предполагалось в этом скрипте добавлять в Reply-пакет какой-нибудь атрибут на основании обьекта договора, привязанного к логину.
Но как мы не пытались ObjectID всегда равен нулю.
вот пример вывода этого скрипта:
Код:
GENERATE_TIME: 21.06.11 14:26:55
EXECUTION_STOP_TIME: 21.06.11 14:26:55
PROCESS_TIME: 2
OUT:
UserName=mt101, ObjectID=0, Cid=739, Id=589, Login=571
Существует ли в принципе возможность получать значения обьекта договора привязанного к логину?
Если да то подскажите как. Серфинг по форуму и wiki результатов не дал...