commit
This commit is contained in:
		
							parent
							
								
									73d4ae393e
								
							
						
					
					
						commit
						f79efa2951
					
				@ -5,7 +5,7 @@ import json
 | 
				
			|||||||
import datetime
 | 
					import datetime
 | 
				
			||||||
import requests
 | 
					import requests
 | 
				
			||||||
from pymongo import MongoClient
 | 
					from pymongo import MongoClient
 | 
				
			||||||
 | 
					import time
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
db_connection = MongoClient("mongodb://mongodb:Cc03Wz5XX3iI3uY3@mongo")
 | 
					db_connection = MongoClient("mongodb://mongodb:Cc03Wz5XX3iI3uY3@mongo")
 | 
				
			||||||
@ -16,25 +16,19 @@ phoneNAnswer = db_base["phone-n-answer"]
 | 
				
			|||||||
phoneRecallTrue = db_base["phone-recall-true"]
 | 
					phoneRecallTrue = db_base["phone-recall-true"]
 | 
				
			||||||
phoneRecallFalse = db_base["phone-recall-false"]
 | 
					phoneRecallFalse = db_base["phone-recall-false"]
 | 
				
			||||||
phoneLog = db_base["phone-log"]
 | 
					phoneLog = db_base["phone-log"]
 | 
				
			||||||
 | 
					phoneDebug = db_base["phone-debug"]
 | 
				
			||||||
coll_userkey = db_base['userkey']
 | 
					coll_userkey = db_base['userkey']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mkt_phones = ['83912051046', '83912051045']
 | 
					mkt_phones = ['83912051046', '83912051045']
 | 
				
			||||||
IgnoreList = ['83919865589', '83912051046', '83912051045', '84950213944', '84951252791', '83919865589',
 | 
					IgnoreList = ['83919865589', '83912051046', '83912051045', '84950213944', '84951252791', '83919865589',
 | 
				
			||||||
              '84951183750', '89919237009', '89919241441', '89919863883', '89919505445', '89919398228', '89919500798']
 | 
					              '84951183750', '89919237009', '89919241441', '89919863883', '89919505445', '89919398228', '89919500798']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
# Stats:
 | 
					# Stats:
 | 
				
			||||||
# 0 - ответили
 | 
					# 0 - ответили
 | 
				
			||||||
# 1 - не приняли
 | 
					# 1 - не приняли
 | 
				
			||||||
# 2 - перезвонили успешно
 | 
					# 2 - перезвонили успешно
 | 
				
			||||||
# 4 - Перезвонили неуспешно
 | 
					# 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():
 | 
					def main():
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -44,44 +38,78 @@ def main():
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    channel.queue_declare(queue='incoming-dev')
 | 
					    channel.queue_declare(queue='incoming-dev')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    print("RUN")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def callback(ch, method, properties, body: bytearray):
 | 
					    def callback(ch, method, properties, body: bytearray):
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            # Парсим строку
 | 
					            # Парсим строку
 | 
				
			||||||
            srcJson = json.loads(str(body.decode('utf-8')).replace("\'", "\""))
 | 
					            srcJson = json.loads(str(body.decode('utf-8')).replace("\'", "\""))
 | 
				
			||||||
            srcJson["time"] = datetime.datetime.fromtimestamp(
 | 
					            srcJson["time"] = datetime.datetime.fromtimestamp(
 | 
				
			||||||
                srcJson["time"]).strftime('%Y-%m-%d %H:%M:%S')
 | 
					                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):
 | 
					                if srcJson.get("recordUrl", False):
 | 
				
			||||||
                    # Запись бывает только у принятых вызовов, поэтому сразу добавляем в базу
 | 
					                    # Запись бывает только у принятых вызовов, поэтому сразу добавляем в базу
 | 
				
			||||||
                    try:
 | 
					                    try:
 | 
				
			||||||
                        WriteLog("Add Phone Answer", srcJson)
 | 
					                        upd["recordUrl"] = srcJson["recordUrl"]
 | 
				
			||||||
                        phoneAnswer.insert_one(srcJson)
 | 
					                        phoneAnswer.insert_one(upd)
 | 
				
			||||||
 | 
					                        phoneNAnswer.delete_many({"client": srcJson["from"]})
 | 
				
			||||||
                    except Exception as e:
 | 
					                    except Exception as e:
 | 
				
			||||||
                        WriteLog("Add Phone Answer", srcJson, e)
 | 
					                        pass
 | 
				
			||||||
                else:
 | 
					                else:
 | 
				
			||||||
                    # Добавляем запись только в том случае если ранее номер отсутствовал,
 | 
					                    # Добавляем запись только в том случае если ранее номер отсутствовал,
 | 
				
			||||||
                    # В противном случае обновляем запись
 | 
					                    # В противном случае обновляем запись
 | 
				
			||||||
                    try:
 | 
					                    try:
 | 
				
			||||||
                        WriteLog("Add Phone Non Answer", srcJson)
 | 
					                        phoneNAnswer.update_one(filter={'client': srcJson['from']}, update={
 | 
				
			||||||
                        phoneNAnswer.update_one(filter={'from': srcJson['from']}, update={'$set': srcJson}, upsert=True)
 | 
					                                                '$set': upd}, upsert=True)
 | 
				
			||||||
                    except Exception as e:
 | 
					                    except Exception as e:
 | 
				
			||||||
                        WriteLog("Add Phone Non Answer", srcJson, e)
 | 
					                        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if srcJson['direction'] == "external" and srcJson['state'] == "START":
 | 
				
			||||||
 | 
					                phoneNAnswer.update_one({"client": srcJson["to"]}, {"currstate": "calling"})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if srcJson['state'] == "HANGUP" and srcJson['direction'] == "external":
 | 
					            # Парсим исходящие звонки только в том случае если продолжительность разговора более 40 секунд
 | 
				
			||||||
                if phoneNAnswer.count_documents({"from": srcJson["to"]}) > 0:
 | 
					            if srcJson['state'] == "HANGUP" and srcJson['direction'] == "external" and int(srcJson['duration']) > 30:
 | 
				
			||||||
                    phoneNAnswer.delete_one(filter = {"from": srcJson["to"]})
 | 
					                # Обработка запускается только в том случае если в базе пропущенных есть записи
 | 
				
			||||||
 | 
					                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):
 | 
					                    if srcJson.get("recordUrl", False):
 | 
				
			||||||
                        phoneRecallTrue.insert_one(srcJson)
 | 
					                        ins["recordUrl"] = srcJson["recordUrl"]
 | 
				
			||||||
                        phoneRecallFalse.delete_one(filter = {"to": srcJson["to"]})
 | 
					                        try:
 | 
				
			||||||
 | 
					                            # Добавляем в таблицу дозвонились успешно и удаляем по маске из недозвонившихся
 | 
				
			||||||
 | 
					                            phoneRecallTrue.insert_one(ins)
 | 
				
			||||||
 | 
					                            phoneRecallFalse.delete_one(
 | 
				
			||||||
 | 
					                                filter={"client": {'$regex': srcJson["to"]}})
 | 
				
			||||||
 | 
					                        except Exception as e:
 | 
				
			||||||
 | 
					                            print(2, e)
 | 
				
			||||||
                    else:
 | 
					                    else:
 | 
				
			||||||
                        phoneRecallFalse.insert_one(srcJson)
 | 
					                        try:
 | 
				
			||||||
 | 
					                            phoneRecallFalse.insert_one(ins)
 | 
				
			||||||
                        except:
 | 
					                        except:
 | 
				
			||||||
            print(e.with_traceback)
 | 
					                            print(2, e)
 | 
				
			||||||
 | 
					        except Exception as e:
 | 
				
			||||||
 | 
					            print("!!!!!!!", e)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    channel.basic_consume(
 | 
					    channel.basic_consume(
 | 
				
			||||||
        queue='incoming-dev', on_message_callback=callback, auto_ack=True)
 | 
					        queue='incoming-dev', on_message_callback=callback, auto_ack=True)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user