Can you log the output you receive in "route..." In evapi message received?<br><br>суббота, 29 августа 2015 г. пользователь Admin написал:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Thank you for responding to my post. Here it is.<br>
<br>
include_file "kamailio-cgrates.cfg"<br>
<br>
request_route {<br>
<br>
...<br>
<br>
switch ($fU) {<br>
case 1001:<br>
case 1006:<br>
$dlg_var(cgrReqType) = "*prepaid";<br>
break;<br>
case 1002:<br>
$dlg_var(cgrReqType) = "*postpaid";<br>
break;<br>
case 1003:<br>
$dlg_var(cgrReqType) = "*pseudoprepaid";<br>
break;<br>
default:<br>
$dlg_var(cgrReqType) = "*rated";<br>
}<br>
$dlg_var(cgrTenant) = "<a href="http://cgrates.org" target="_blank">cgrates.org</a>";<br>
$dlg_var(cgrAccount) = $fU;<br>
$dlg_var(cgrDestination) = $rU;<br>
route(CGRATES_AUTH_REQUEST); # Will be answered in CGRATES_AUTH_REPLY<br>
#route(CGRATES_LCR_REQUEST);<br>
exit;<br>
}<br>
<br>
# Here will land requests after processing them with CGRateS.<br>
# Call RELAY or other routes following this route<br>
route[CGRATES_AUTH_REPLY] {<br>
if $var(CgrError) != "" {<br>
xlog("CGR_AUTH_ERROR: $var(CgrError)");<br>
sl_send_reply("503","CGR_ERROR");<br>
exit;<br>
}<br>
if $var(CgrMaxSessionTime) != -1 {<br>
if $var(CgrMaxSessionTime) == 0 { // Not enough balance, do not allow<br>
the call to go through<br>
sl_send_reply("403","Insufficient credit");<br>
exit;<br>
} else if !dlg_set_timeout("$var(CgrMaxSessionTime)") {<br>
sl_send_reply("503","CGR_MAX_SESSION_TIME_ERROR");<br>
exit;<br>
}<br>
}<br>
if $var(CgrSuppliers) != "" { # Enforce the supplier variable to the<br>
first one received from CGRateS<br>
$dlg_var(cgrSupplier) = $(var(CgrSuppliers){s.select,0,,});<br>
}<br>
route(RELAY);<br>
}<br>
<br>
====================================================================<br>
<br>
# kamailio-cgrates.cfg<br>
<br>
# Kamailio-CGRateS related route blocks<br>
<br>
# Called on new connection over evapi, should normally be the case of<br>
CGRateS engine<br>
event_route[evapi:connection-new] {<br>
$sht(cgrconn=>cgr) = $evapi(srcaddr) + ":" + $evapi(srcport); #<br>
Detect presence of at least one connection<br>
}<br>
<br>
# Called when the connection with CGRateS closes<br>
event_route[evapi:connection-closed] {<br>
$var(connClosed) = $evapi(srcaddr) + ":" + $evapi(srcport);<br>
if $sht(cgrconn=>cgr) == $var(connClosed) {<br>
$sht(cgrconn=>cgr) = $null;<br>
}<br>
}<br>
<br>
# Message received from CGRateS, dispatch it to own route<br>
event_route[evapi:message-received] {<br>
json_get_field("$evapi(msg)", "Event", "$var(Event)");<br>
route($(var(Event){s.rm,"})); # String characters are kept by<br>
json_get_field, remove them here<br>
}<br>
<br>
# Called by Kamailio on new dialog<br>
event_route[dialog:start] {<br>
route(CGR_CALL_START);<br>
}<br>
<br>
# Called by Kamailio on dialog end<br>
event_route[dialog:end] {<br>
route(CGR_CALL_END);<br>
}<br>
<br>
# Called by Kamailio on local disconnect<br>
event_route[tm:local-request] {<br>
route(CGR_CALL_END);<br>
}<br>
<br>
<br>
# Send AUTH_REQUEST to CGRateS<br>
route[CGRATES_AUTH_REQUEST] {<br>
# Auth INVITEs with CGRateS<br>
if $sht(cgrconn=>cgr) == $null {<br>
sl_send_reply("503","Charging controller unreachable");<br>
exit;<br>
}<br>
evapi_async_relay("{\"event\":\"CGR_AUTH_REQUEST\",<br>
\"tr_index\":\"$T(id_index)\",<br>
\"tr_label\":\"$T(id_label)\",<br>
\"cgr_reqtype\":\"$dlg_var(cgrReqType)\",<br>
\"cgr_tenant\":\"$dlg_var(cgrTenant)\",<br>
\"cgr_account\":\"$dlg_var(cgrAccount)\",<br>
\"cgr_destination\":\"$dlg_var(cgrDestination)\",<br>
\"cgr_setuptime\":\"$TS\",<br>
\"cgr_computelcr\":\"true\"}");<br>
}<br>
<br>
# Process AUTH_REPLY from CGRateS<br>
route[CGR_AUTH_REPLY] {<br>
json_get_field("$evapi(msg)", "TransactionIndex",<br>
"$var(TransactionIndex)");<br>
json_get_field("$evapi(msg)", "TransactionLabel",<br>
"$var(TransactionLabel)");<br>
json_get_field("$evapi(msg)", "MaxSessionTime",<br>
"$var(MaxSessionTime)");<br>
json_get_field("$evapi(msg)", "Suppliers", "$var(Suppliers)");<br>
json_get_field("$evapi(msg)", "Error", "$var(Error)");<br>
$var(id_index) = $(var(TransactionIndex){<a href="http://s.int" target="_blank">s.int</a>});<br>
$var(id_label) = $(var(TransactionLabel){<a href="http://s.int" target="_blank">s.int</a>});<br>
$var(CgrMaxSessionTime) = $(var(MaxSessionTime){<a href="http://s.int" target="_blank">s.int</a>});<br>
$var(CgrSuppliers) = $(var(Suppliers){s.rm,"});<br>
$var(CgrError) = $(var(Error){s.rm,"});<br>
t_continue("$var(id_index)", "$var(id_label)", "CGRATES_AUTH_REPLY"); #<br>
Unpark the transaction<br>
}<br>
<br>
# Send AUTH_REQUEST to CGRateS<br>
route[CGRATES_LCR_REQUEST] {<br>
# Auth INVITEs with CGRateS<br>
if $sht(cgrconn=>cgr) == $null {<br>
sl_send_reply("503","Charging controller unreachable");<br>
exit;<br>
}<br>
evapi_async_relay("{\"event\":\"CGR_LCR_REQUEST\",<br>
\"tr_index\":\"$T(id_index)\",<br>
\"tr_label\":\"$T(id_label)\",<br>
\"cgr_tenant\":\"$dlg_var(cgrTenant)\",<br>
\"cgr_account\":\"$dlg_var(cgrAccount)\",<br>
\"cgr_destination\":\"$dlg_var(cgrDestination)\",<br>
\"cgr_setuptime\":\"$TS\"}");<br>
}<br>
<br>
# Process LCR_REPLY from CGRateS<br>
route[CGR_LCR_REPLY] {<br>
json_get_field("$evapi(msg)", "TransactionIndex",<br>
"$var(TransactionIndex)");<br>
json_get_field("$evapi(msg)", "TransactionLabel",<br>
"$var(TransactionLabel)");<br>
json_get_field("$evapi(msg)", "MaxSessionTime",<br>
"$var(MaxSessionTime)");<br>
json_get_field("$evapi(msg)", "Suppliers", "$var(Suppliers)");<br>
json_get_field("$evapi(msg)", "Error", "$var(Error)");<br>
$var(id_index) = $(var(TransactionIndex){<a href="http://s.int" target="_blank">s.int</a>});<br>
$var(id_label) = $(var(TransactionLabel){<a href="http://s.int" target="_blank">s.int</a>});<br>
$var(CgrMaxSessionTime) = $(var(MaxSessionTime){<a href="http://s.int" target="_blank">s.int</a>});<br>
$var(CgrSuppliers) = $(var(Suppliers){s.rm,"});<br>
$var(CgrError) = $(var(Error){s.rm,"});<br>
t_continue("$var(id_index)", "$var(id_label)", "CGRATES_AUTH_REPLY"); #<br>
Unpark the transaction<br>
}<br>
<br>
# CGRateS request for session disconnect<br>
route[CGR_SESSION_DISCONNECT] {<br>
json_get_field("$evapi(msg)", "HashEntry", "$var(HashEntry)");<br>
json_get_field("$evapi(msg)", "HashId", "$var(HashId)");<br>
json_get_field("$evapi(msg)", "Reason", "$var(Reason)");<br>
jsonrpc_exec('{"jsonrpc":"2.0","id":1,<br>
"method":"dlg.end_dlg","params":[$(var(HashEntry){s.rm,"}),<br>
$(var(HashId){s.rm,"})]}');<br>
#$jsonrpl($var(reply));<br>
}<br>
<br>
# Inform CGRateS about CALL_START (start prepaid sessions loops)<br>
route[CGR_CALL_START] {<br>
if $sht(cgrconn=>cgr) == $null {<br>
xlog("Charging controller unreachable");<br>
exit;<br>
}<br>
evapi_async_relay("{\"event\":\"CGR_CALL_START\",<br>
\"callid\":\"$dlg(callid)\",<br>
\"from_tag\":\"$dlg(from_tag)\",<br>
\"h_entry\":\"$dlg(h_entry)\",<br>
\"h_id\":\"$dlg(h_id)\",<br>
\"cgr_reqtype\":\"$dlg_var(cgrReqType)\",<br>
\"cgr_tenant\":\"$dlg_var(cgrTenant)\",<br>
\"cgr_account\":\"$dlg_var(cgrAccount)\",<br>
\"cgr_destination\":\"$dlg_var(cgrDestination)\",<br>
\"cgr_answertime\":\"$TS\",<br>
\"cgr_supplier\":\"$dlg_var(cgrSupplier)\"}");<br>
}<br>
<br>
# Inform CGRateS about CALL_END (stop debit loops, perform accounting if<br>
desired in this way)<br>
route[CGR_CALL_END] {<br>
if $sht(cgrconn=>cgr) == $null {<br>
xlog("Charging controller unreachable");<br>
exit;<br>
}<br>
$var(callDur) = $TS - $dlg(start_ts);<br>
evapi_async_relay("{\"event\":\"CGR_CALL_END\",<br>
\"callid\":\"$dlg(callid)\",<br>
\"from_tag\":\"$dlg(from_tag)\",<br>
\"cgr_reqtype\":\"$dlg_var(cgrReqType)\",<br>
\"cgr_tenant\":\"$dlg_var(cgrTenant)\",<br>
\"cgr_account\":\"$dlg_var(cgrAccount)\",<br>
\"cgr_destination\":\"$dlg_var(cgrDestination)\",<br>
\"cgr_answertime\":\"$dlg(start_ts)\",<br>
\"cgr_duration\":\"$var(callDur)\",<br>
\"cgr_supplier\":\"$dlg_var(cgrSupplier)\",<br>
\"cgr_disconnectcause\":\"$T_reply_code\"}");<br>
}<br>
<br>
<br>
_______________________________________________<br>
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list<br>
<a href="javascript:;" onclick="_e(event, 'cvml', 'sr-users@lists.sip-router.org')">sr-users@lists.sip-router.org</a><br>
<a href="http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users" target="_blank">http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users</a><br>
</blockquote><br><br>-- <br><div dir="ltr">Alexandru Covalschi<br>ABRISS-Solutions<div>VoIP engineer and system administrator<br>phone: +37367398493<br>web: <a href="http://abs-telecom.com/" target="_blank">http://abs-telecom.com/</a></div></div><br>