exten => _X.,n,Set(accountcode=${CDR(accountcode)})
exten => _X.,n,Set(exten=${EXTEN})
exten => _X.,n,Set(calltime=${STRFTIME(||%d.%m.%y\;%H:%M)})
exten => _X.,n,Dial(SIP/${EXTEN}@${provider}||${Switches})
exten => _X.,n,Goto(DS-${DIALSTATUS}|1)
exten => _X.,n(hangup),hangup(${cause})
exten => h,1,GotoIf($[0${cycle}]?cycle)
exten => h,n,Set(charge=$[${rate}/10])
exten => h,n,Goto(charge)
exten => h,n(cycle),Set(billcycles=${MATH($[0${ANSWEREDTIME}+${cycle}-1]/${cycle}|int)})
exten => h,n,Set(charge=$[${rate}*${billcycles}*${cycle}/600])
exten => h,n(charge),GotoIf($[${charge}]?:end)
exten => h,n,Set(DB(Users/Billing/${accountcode})=$[0${charge} + 0${DB(Users/Billing/${accountcode})}])
exten => h,n,Set(DB(Users/Billing/${provider})=$[0${charge} + 0${DB(Users/Billing/${provider})}])
exten => h,n,TrySystem(echo "${calltime}\;${accountcode}\;${exten}\;${ANSWEREDTIME}\;${charge}" >> /var/log/asterisk/billing/${STRFTIME(||%y-%m)}/Billing.csv)
exten => h,n,TrySystem(echo "${calltime}\;${exten}\;${ANSWEREDTIME}\;$[${billcycles}*${cycle}]\;${rate}\;${charge}" >> /var/log/asterisk/billing/${STRFTIME(||%y-%m)}/${accountcode}${PIN}.csv)
exten => h,n,TrySystem(ln -s ${STRFTIME(||%y-%m)}/${accountcode}${PIN}.csv /var/log/asterisk/billing/${accountcode}${PIN}.txt)
exten => h,n(end),Set(CDR(userfield)=${exten}!${ANSWEREDTIME}!$[${billcycles}*${cycle}]!${charge}!${provider})
exten => h,n,Set(DB(Users/Billing/Calls/${accountcode})=$[$[0${ANSWEREDTIME} > 0] + 0${DB(Users/Billing/Calls/${accountcode})}])
exten => h,n,Set(DB(Users/Billing/Calls/${provider})=$[$[0${ANSWEREDTIME} > 0] + 0${DB(Users/Billing/Calls/${provider})}])
exten => h,n,Set(DB(Users/Billing/Time/${accountcode})=$[0${ANSWEREDTIME} + 0${DB(Users/Billing/Time/${accountcode})}])
exten => h,n,Set(DB(Users/Billing/Time/${provider})=$[0${ANSWEREDTIME} + 0${DB(Users/Billing/Time/${provider})}])
exten => h,n,Goto(${exten}|hangup)