$ci, $fu, $tu, etc are all variables that reference parts of the SIP message in 
the current context. The E_DLG_STATE_CHANGED is an event route triggered by a 
change in dialog state; it does not run in the context of any SIP message. So 
none of those variables will be available in the event route.

Additionally, I'm not sure why but the E_DLG_STATE_CHANGED event does not 
automatically load the context of the dialog that changed either. So $dlg_val 
variables are also not available. But for this there is a solution. The event 
provides several parameters [1]. These can be obtained by using 
fetch_event_params [2]. You can then use that information to call either 
get_dialog_vals [3] or get_dialog_info [4] to load the dialog variables you 
want. Ours looks like this:

fetch_event_params("hash_entry=$var(dlg_state_chg_hash_entry);hash_id=$var(dlg_state_chg_hash_id);callid=$var(dlg_state_chg_ci);old_state=$var(dlg_state_chg_old_state);new_state=$var(dlg_state_chg_new_state)");
get_dialog_vals("$avp(dlg_state_names)","$avp(dlg_state_vals)","$var(dlg_state_chg_ci)")
 ;

So any values you will need to access, whether from a message or otherwise, 
will need to be saved in dlg_vals, as you are doing with $fu, and retrieved in 
this manner.

This is the process we are using and the only one we've found to work. It is a 
lot of steps so I would be interested if anyone has found a better way.

Note: One issue with this approach is that by default get_dialog_vals ignores 
dialogs in an ended state [5], so if you need any dlg_vals to process an ended 
event you have to store the values off yourself into some other storage from 
which you can retrieve them, because get_dialog_vals will not return any data 
once the BYE has been received. And if you are storing them into your own 
separate storage anyway, you might as well use that for your lookups for the 
other events too, rather than jump through all the hoops above.

[1] - 
https://opensips.org/docs/modules/2.4.x/dialog.html#event_E_DLG_STATE_CHANGED
[2] - 
https://opensips.org/docs/modules/2.4.x/event_route.html#func_fetch_event_params
[3] - https://opensips.org/docs/modules/2.4.x/dialog.html#func_get_dialog_vals
[4] - https://opensips.org/docs/modules/2.4.x/dialog.html#func_get_dialog_info
[5] - https://github.com/OpenSIPS/opensips/issues/1637

Ben Newlin 

On 3/28/20, 9:09 AM, "Users on behalf of Aleksandar Sosic" 
<[email protected] on behalf of [email protected]> wrote:

    Hi Guys,
    
    I'm new to OpenSIPS, been using kamailio for some time but I'm not
    that of a SIP expert.
    
    Let me explain you my issue here...I'm trying to make HTTP REST calls
    to a service on an INVITE to check if the call can be made, then on
    the begin event of a call and when the call is closed.
    
    I've successfully done the first API call with this block of code in
    the main `route`:
    ```
    if (is_method("INVITE") && !has_totag()) {
        $dlg_val(account_tag) = $fU;
        route(rating_authorization);
    }
    ```
    
    Now I'm using the `E_DLG_STATE_CHANGED` like this:
    ```
    event_route[E_DLG_STATE_CHANGED] {
        if($param(new_state) == 4 ) {
            route(rating_begin_transaction);
        }
        ...
    }
    ```
    Which I'm not sure is correct. In Kamailio I just do this:
    ```
    event_route[dialog:start] {
        route(RATING_BEGIN_TRANSACTION);
    }
    ```
    
    So the problem here is that in the route `rating_begin_transaction` I
    don't see these variables here:
    ```
    xlog("L_NOTICE", "rating_begin_transaction :: $ci,
    $dlg_val(account_tag), $fu, $tu \n");
    ```
    
    They seem to be `<null>` but I need to pass them in the REST call:
    ```
    Mar 27 22:12:50 [376] rating_begin_transaction :: <null>, <null>, <null>, 
<null>
    ```
    
    What am I doing wrong here?
    
    Thanks,
    ---
    Aleksandar Sosic
    
    _______________________________________________
    Users mailing list
    [email protected]
    http://lists.opensips.org/cgi-bin/mailman/listinfo/users
    
    

_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to