A few people have mentioned this but I haven’t seen a response. Why do you have 
to do this conversion in the script? The call duration in ms is already 
included by default in every CDR. We are only talking about rounding here, why 
wouldn’t your rating application do that for you? That’s much less complex than 
adding an entirely new field just so OpenSIPS can do the rounding.

Ben Newlin

From: Users <users-boun...@lists.opensips.org> on behalf of tre...@webon.co.za 
<tre...@webon.co.za>
Date: Tuesday, January 23, 2024 at 2:42 PM
To: OpenSIPS users mailling list <users@lists.opensips.org>
Subject: Re: [OpenSIPS-Users] $DLG_lifetime but in ms
 EXTERNAL EMAIL - Please use caution with links and attachments

On Tue, 2024-01-23 at 09:25 -0600, Marcin Groszek wrote:
>
> If you are not calculating the cost of the call in the script it self
> you may create external script to go over your acc table and use
> "ms_duration" to adjust "duration"
>
> or use $Ts$Tsm  at the beginning of the call, save it to a dialog and
> compare it with same value at the end of the call, then round up and
> write to acc table and/or calculate cost of the call.
>
>
>
>
> On 1/23/2024 9:01 AM, Marcin Groszek wrote:
>
>
> > use math_ceil
> >
> >  1.4.5.  math_ceil(number, result_var)
> >
> >  Truncates a number, always towards +infinity. This means that
> > ceil(3.2) = 4.0 and ceil(-2.9) = -2.0
> >
> >
> >  1.10.3. $DLG_lifetime
> >
> >  Returns the duration (in seconds)...

Hi Marcin,

Using math_ceil on $DLG_lifetime wont work as it returns seconds not
ms.

As for your other suggestion I am doing something similar just not sure
its the most efficient I am using get_accurate_time would $ts$Tsm be a
better approach,


at 200OK in onreply route

    if ($rs == 200) {
        get_accurate_time($var(now_s), $var(now_us));
        $dlg_val(start_s) = $var(now_s);
        $dlg_val(start_us) = $var(now_us);
    }

then on BYE

if (is_method("BYE")) {
    get_accurate_time($var(end_s), $var(end_us));
    ts_usec_delta($(dlg_val(start_s){s.int}),
$(dlg_val(start_us){s.int}), $var(end_s),  $var(end_us) ,
$var(billed_duration));
   $var(end_us) , $acc_extra(billed_duration)\n");
    math_eval("$var(billed_duration) / 1000000",
$var(billed_duration));
    math_ceil($var(billed_duration),$var(billed_duration));
    $acc_extra(billed_duration) = $var(billed_duration);

## Rate the call

    math_eval("$acc_extra(c_price) / 60 * $acc_extra(billed_duration)",
$var(c_cost));
    math_eval("$acc_extra(v_price) / 60 * $acc_extra(billed_duration)",
$var(v_cost));
    $acc_extra(cost) = $var(c_cost);
    $acc_extra(v_cost) = $var(v_cost);
}

Thanks.

_______________________________________________
Users mailing list
Users@lists.opensips.org
http://lists.opensips.org/cgi-bin/mailman/listinfo/users
_______________________________________________
Users mailing list
Users@lists.opensips.org
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to