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>