asterrc is a billing script in asterCC package, together with astercc, asterrc could provide you the realtime billing feature to your asterisk system.
there’re some billing fields in table ‘curcdr’, they are
`credit` : credit by customer rate (rates in table ‘myrate’)
`callshopcredit`: credit by callshop (rates in table ‘callshoprate’)
`resellercredit`: credit by reseller (rates in table ‘resellerrate’)
`creditlimit`: if we have a creditlimit for this call, if it has once the ‘credit’ reach the number, the call would be hang up
`destination` : destination of the call, get from table ‘myrate’
`memo` : rate of the call, get from table ‘myrate’
asterrc daemon will maintain these fields during a live call, and we have same fields in table mycdr, so when a call is finished, we can also get the credit of the call.
Also, we have billing fields in table ‘clid’, ‘accountgroup’,’resellergroup’
`curcredit` current credit (works as a billing flag)
`credit_clid` total clid credit for the item
`credit_group` total group credit for the item
`credit_reseller` total reseller credit for the item
Here’s a example to show you how asterrc works
say we have defined a rate, we sell to reseller in 0.1 a minute, reseller sell to callshop in 0.2 a minute, and callshop sell 0.4 a minute to customer, when customer start a call, astercc will get the live CDR into table curcdr, and asterrc will put value 0.4, 0.2, 0.1 to fields ‘credit’, ‘callshopcredit’, ‘resellercredit’ when it’s the first minute, and then 0.8, 0.4, 0.2 when it’s the second minute …. when it’s 2 minutes and a half, customer hangup the call, then we get a record with billing message 1.2 in ‘credit’, 0.6 in ‘callshopcredit’, 0.3 in ‘resellercredit’, meantime fields in clid, accountgroup and resellergroup would be updated, credit_clid = credit_clid + 1.2, credit_group = credit_group + 0.6, credit_reseller = credit_reseller + 0.3.
field ‘curcredit’ is used to save credit for comparing with creditlimt, it is updated after a call is finished, if limit type is set and curcredit is greater or equal with the creditlimit, the call would be hangup, when clid/group/reseller charges, we set curcredit = curcredit – {fund charged} so that curcredit is less than creditlimit and calls can go out.
Say a reseller pay you 500 euro, and u set his limit type to prepaid, and creditlimit = 500, then it is curcredit = 0, limittype= prepaid, creditlimit = 500 in table resellergroup, then booths under this reseller start to call , curcredit will increase by resellerrate, when it reachs 500, all calls stoped, reseller comes to you and charge 2000 euro, here you have two options
1. set credit limit to 500+2000 = 2500, but not recommend, coz there’d no log for changing of creditlimit
2. charge 2000 to curcredit, then curcredit = 500-2000 = -1500, and this operation would be logged in credithistory, so that you can check the charge history of each customer.
Hope this could help you under stand how asterbilling works.