exten => h,1,StopMixMonitor
exten => h,n,AGI(agi://127.0.0.1:4573)
def fastAgiMain( agi ): sequence = fastagi.InSequence() # . cdr_vars = { 'CDR(start)':'', 'CDR(disposition)}':'', 'CDR(duration)':'', 'CDR(end)':'', 'DIALSTATUS':'', } # easla.com sequence.append(sendCDR, None, agi, cdr_vars, iter(cdr_vars)) # asterisk sequence.append(agi.finish) def onFailure( reason ): log.error( "Failure: %s", reason.getTraceback()) agi.finish() return sequence().addErrback( onFailure ) # , cdr_vars def sendCDR(result, agi, cdr_vars, keys): def setVar(result, key): cdr_vars[key] = result def notAvailable(reason, key): print "key " + key + " not found" try: key = keys.next() except StopIteration, err: duration = str(timedelta(seconds=int(cdr_vars['CDR(duration)']))) # getVariable callerid uniqueid caller_id = agi.variables['agi_callerid'] wav_file = '/data/wav/' + agi.variables['agi_uniqueid'] + '.wav' status = cdr_vars['DIALSTATUS'] # thread = Thread(target=sendCallInfo, args=(caller_id, duration, wav_file, status)) thread.start() return None else: return agi.getVariable(key) \ # key .addCallback(setVar, key) \ # cdr_vars .addErrback(notAvailable, key) \ # key .addCallback(sendCDR, agi, cdr_vars, keys) #
def sendCallInfo(callid, callduration, wav_file ,status): raw_params = { 'incoming_call_number': callid, 'incoming_call_time': callduration,} if status: if status == 'ANSWER': raw_params['status'] = 'incoming_call_answered' if status == 'BUSY': raw_params['status'] = 'incoming_call_busy' if status == 'NOANSWER': raw_params['status'] = 'incoming_call_unanswered' if status == 'CANCEL': raw_params['status'] = 'incoming_call_unanswered' if status == 'CONGESTION': raw_params['status'] = 'incoming_call_congestion' url = 'http://easla.com/user/soap' client = Client(url) client.service.login('login','password') call_management_proc = client.service.getProcess('call_management') incoming_call_def = client.service.getObjectdef(call_management_proc, 'incoming_call', 0) keyval_array = client.factory.create('KeyValuesPairSoapArray') # KeyValuesPairSoapArray easla.com for key, value in raw_params.iteritems(): keyval = client.factory.create('KeyValuesPairSoap') keyval.key = key keyval.values.item.append(value) keyval_array.item.append(keyval) # easla.com incoming_call_obj = client.service.createObjectref(incoming_call_def, None, keyval_array) if os.path.exists(wav_file): # asterisk while is_locked(wav_file): time.sleep(1) mp3_file = wav2mp3(wav_file) with open(mp3_file, "rb") as image_file: encoded_string = base64.b64encode(image_file.read()) if encoded_string: # mp3 file_attr = client.factory.create('KeyValuePairSoapArray') file_name = client.factory.create('KeyValuePairSoap') file_content = client.factory.create('KeyValuePairSoap') file_name.key = 'srcname' file_name.value = os.path.basename(mp3_file) file_content.key = 'content' file_content.value = encoded_string file_attr.item.append(file_name) file_attr.item.append(file_content) # client.service.addFile(incoming_call_obj, 'incoming_call_file', file_attr) if wav_file: os.remove(wav_file) if mp3_file: os.remove(mp3_file)
Source: https://habr.com/ru/post/301708/
All Articles