El Friday 05 September 2008 10:00:04 Adrian Georgescu escribió:
> The problem with concurrent prepaid calls and single balance is that
> you have to correlate between the call control and rating angine
> somehow so that all calls terminate when balnce becomes zero. The
> problem is a bit complex:
>
> Example:
>
> Balance = 10.
> A call starts to destination XXX, for the sake of example max session
> time = 2 minutes
> After one minute, you start second call to destination YYY which has a
> different price and your balance is not anymore 10 but depends on the
> duration of the first call which is in progress.
>
> What is the maximum session time for it given that the first call is
> already in progress?
> What should happen with the first call?
>
> I am looking for suggestions on implementing a proper algorithm to
> deal with this situation in the rating engine. If you have any I would
> be glad to hear it.
>
> Adrian

Hi Adrian, A simple approach could be:

- New Call1 to Dest XXX
        - Get cost per sec to dest XXX
        - Get connection cost to dest XXX (if any)
        - Set customer.balance =- thisCallConnectionCost
        - Set global var customer.costPerSec to customercostPerSec =+ 
thisCallCostPerSec
        - Notify externalWatcher new customer.costPerSec

- BYE Call1 to Dest XXX
        - Get disconnection cost to dest XXX (if any)
        - Set customer.balance =- thisCallDisconnectionCost
        - Set global var customer.costPerSec to customercostPerSec =- 
thisCallCostPerSec
        - Notify externalWatchr new customer.costPerSec

Then on a separate  thread or proc or "something" ...
- Every timeslice
        - while activeCustomers.next()
                - activeCustomer.balance =- activeCustomer.costPerSec
                - If (activeCustomer.balance <= activeCustomer.lowBalanceAlarm) 
and 
!activeCustomer.allreadyNotified
                        - Send lowBalance Notify to customer
                - If (activeCustomer.balance <= 
activeCustomer.minAllowedBalance)
                        - while activeCustomer.activeCall.next()
                                - activeCustomer.activeCall.finish()
                        - activeCustomer.lockNewCalls()

I think it's a good approach

-- 
Raúl Alexis Betancor Santana
Dimensión Virtual S.L.

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

Reply via email to