From f79efa2951d328bbf48971e87b558e26632968b5 Mon Sep 17 00:00:00 2001 From: filimonov Date: Thu, 8 Feb 2024 19:37:47 +0700 Subject: [PATCH] commit --- worker-dev/app.py | 92 ++++++++++++++++++++++++++++++----------------- 1 file changed, 60 insertions(+), 32 deletions(-) diff --git a/worker-dev/app.py b/worker-dev/app.py index beda3c2..980247c 100644 --- a/worker-dev/app.py +++ b/worker-dev/app.py @@ -5,7 +5,7 @@ import json import datetime import requests from pymongo import MongoClient - +import time db_connection = MongoClient("mongodb://mongodb:Cc03Wz5XX3iI3uY3@mongo") @@ -16,25 +16,19 @@ phoneNAnswer = db_base["phone-n-answer"] phoneRecallTrue = db_base["phone-recall-true"] phoneRecallFalse = db_base["phone-recall-false"] phoneLog = db_base["phone-log"] +phoneDebug = db_base["phone-debug"] coll_userkey = db_base['userkey'] mkt_phones = ['83912051046', '83912051045'] IgnoreList = ['83919865589', '83912051046', '83912051045', '84950213944', '84951252791', '83919865589', '84951183750', '89919237009', '89919241441', '89919863883', '89919505445', '89919398228', '89919500798'] - # Stats: # 0 - ответили # 1 - не приняли # 2 - перезвонили успешно # 4 - Перезвонили неуспешно -def WriteLog(desc, data, ex = None): - try: - log = {"dt": datetime.datetime.now(),"desc": desc, "data": data, "ex":ex } - phoneLog.insert_one(log) - except Exception as e: - print("!!!", e) def main(): @@ -44,45 +38,79 @@ def main(): channel.queue_declare(queue='incoming-dev') + print("RUN") + def callback(ch, method, properties, body: bytearray): try: # Парсим строку srcJson = json.loads(str(body.decode('utf-8')).replace("\'", "\"")) srcJson["time"] = datetime.datetime.fromtimestamp( srcJson["time"]).strftime('%Y-%m-%d %H:%M:%S') - # Определяем направление соединения # Отсекаем лишние события по признаку длиины номера - - if srcJson['to'] in mkt_phones and srcJson['direction'] == "incoming" and srcJson['state'] == "HANGUP" and srcJson not in IgnoreList: + + if srcJson['to'] in mkt_phones and srcJson['direction'] == "incoming" and srcJson['state'] == "HANGUP" and srcJson not in IgnoreList and int(srcJson['duration']) > 30: + # Формируем словарь для загрузки + upd = { + "_id": srcJson['uuid'], + "client": srcJson['from'], + "operator": srcJson['to'], + "time": srcJson['time'] + } + if srcJson.get("recordUrl", False): # Запись бывает только у принятых вызовов, поэтому сразу добавляем в базу try: - WriteLog("Add Phone Answer", srcJson) - phoneAnswer.insert_one(srcJson) + upd["recordUrl"] = srcJson["recordUrl"] + phoneAnswer.insert_one(upd) + phoneNAnswer.delete_many({"client": srcJson["from"]}) except Exception as e: - WriteLog("Add Phone Answer", srcJson, e) + pass else: # Добавляем запись только в том случае если ранее номер отсутствовал, # В противном случае обновляем запись try: - WriteLog("Add Phone Non Answer", srcJson) - phoneNAnswer.update_one(filter={'from': srcJson['from']}, update={'$set': srcJson}, upsert=True) + phoneNAnswer.update_one(filter={'client': srcJson['from']}, update={ + '$set': upd}, upsert=True) except Exception as e: - WriteLog("Add Phone Non Answer", srcJson, e) - - - if srcJson['state'] == "HANGUP" and srcJson['direction'] == "external": - if phoneNAnswer.count_documents({"from": srcJson["to"]}) > 0: - phoneNAnswer.delete_one(filter = {"from": srcJson["to"]}) + pass + + if srcJson['direction'] == "external" and srcJson['state'] == "START": + phoneNAnswer.update_one({"client": srcJson["to"]}, {"currstate": "calling"}) + + # Парсим исходящие звонки только в том случае если продолжительность разговора более 40 секунд + if srcJson['state'] == "HANGUP" and srcJson['direction'] == "external" and int(srcJson['duration']) > 30: + # Обработка запускается только в том случае если в базе пропущенных есть записи + if phoneNAnswer.count_documents({"client": srcJson["to"]}) > 0: + # Удаляем запись из списка пропушеных + phoneNAnswer.delete_many( + filter={"client": {'$regex': srcJson["to"]}}) + # формируем данные для загрузки + ins = { + "_id": srcJson["uuid"], + "client": srcJson["to"], + "operator": srcJson["from"], + "time": srcJson["time"], + "currstate": srcJson["from"] + } + # Если запись разговора есть то записываем считаем что дозвонились if srcJson.get("recordUrl", False): - phoneRecallTrue.insert_one(srcJson) - phoneRecallFalse.delete_one(filter = {"to": srcJson["to"]}) + ins["recordUrl"] = srcJson["recordUrl"] + try: + # Добавляем в таблицу дозвонились успешно и удаляем по маске из недозвонившихся + phoneRecallTrue.insert_one(ins) + phoneRecallFalse.delete_one( + filter={"client": {'$regex': srcJson["to"]}}) + except Exception as e: + print(2, e) else: - phoneRecallFalse.insert_one(srcJson) - except: - print(e.with_traceback) - + try: + phoneRecallFalse.insert_one(ins) + except: + print(2, e) + except Exception as e: + print("!!!!!!!", e) + channel.basic_consume( queue='incoming-dev', on_message_callback=callback, auto_ack=True) @@ -146,10 +174,10 @@ def main(): # except Exception as e: # print(e) - # except Exception as e: - # print(e.with_traceback) - # print(e) - # exit() + # except Exception as e: + # print(e.with_traceback) + # print(e) + # exit() # channel.basic_consume( # queue='incoming-dev', on_message_callback=callback, auto_ack=False)