def process_cdr(self, cdr_xml):
        cdr_dom = xml.parseString(cdr_xml)
        #handle only b-legs for billing
        origin = cdr_dom.getElementsByTagName("origination")
        if (origin):
            return

        billsec = getText(cdr_dom.getElementsByTagName("billsec")[0].childNodes)
        caller = getText(cdr_dom.getElementsByTagName("username")[0].childNodes)
        if (caller[0] == '+'):
            caller = caller[1:]

        #in b-leg cdrs, there are multiple destinations
        #the sip one (IMSI) and the dialed one (MSISDN)
        #we want the latter
        callees = cdr_dom.getElementsByTagName("destination_number")
        callee = ''
        for c in callees:
            c = getText(c.childNodes)
            #NOT THE IMSI
            if (c[0:4] != "IMSI"):
                callee = c
                break

        if (callee[0] == "+"):
            callee = callee[1:]

        if len(cdr_dom.getElementsByTagName("service_type")) > 0:
            service_type = getText(cdr_dom.getElementsByTagName("service_type")[0].childNodes)
            rate = vbts_credit.get_service_tariff(service_type)
            cost = vbts_credit.call_cost(billsec, service_type)
            print "%s: %s sec @ %s R/min, %d" % (caller, billsec, rate, cost)
            vbts_credit.deduct(cost, caller, "%d sec call to %s at %s" % (int(billsec), callee, service_type))
        else:
            print "No rate info for this call. (from: %s, billsec: %s)" % (caller, billsec)
Beispiel #2
0
    def process_cdr(self, cdr_xml):
        cdr_dom = xml.parseString(cdr_xml)
        #handle only b-legs for billing
        origin = cdr_dom.getElementsByTagName("origination")
        if (origin):
            return

        billsec = getText(
            cdr_dom.getElementsByTagName("billsec")[0].childNodes)
        caller = getText(
            cdr_dom.getElementsByTagName("username")[0].childNodes)
        if (caller[0] == '+'):
            caller = caller[1:]

        #in b-leg cdrs, there are multiple destinations
        #the sip one (IMSI) and the dialed one (MSISDN)
        #we want the latter
        callees = cdr_dom.getElementsByTagName("destination_number")
        callee = ''
        for c in callees:
            c = getText(c.childNodes)
            #NOT THE IMSI
            if (c[0:4] != "IMSI"):
                callee = c
                break

        if (callee[0] == "+"):
            callee = callee[1:]

        if len(cdr_dom.getElementsByTagName("service_type")) > 0:
            service_type = getText(
                cdr_dom.getElementsByTagName("service_type")[0].childNodes)
            rate = vbts_credit.get_service_tariff(service_type)
            cost = vbts_credit.call_cost(billsec, service_type)
            print "%s: %s sec @ %s R/min, %d" % (caller, billsec, rate, cost)
            vbts_credit.deduct(
                cost, caller, "%d sec call to %s at %s" %
                (int(billsec), callee, service_type))
        else:
            print "No rate info for this call. (from: %s, billsec: %s)" % (
                caller, billsec)
def fsapi(session, stream, env, args):
    res = str(vbts_credit.get_service_tariff(str(args).strip()))
    consoleLog('info', "Returned FSAPI: " + res + "\n")
    stream.write(res)
def chat(message, args):
    res = str(vbts_credit.get_service_tariff(str(args).strip()))
    consoleLog('info', "Returned Chat: " + res + "\n")
    message.chat_execute('set', 'service_type=%s' % res)