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:
|
||||||
except:
|
phoneRecallFalse.insert_one(ins)
|
||||||
print(e.with_traceback)
|
except:
|
||||||
|
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)
|
||||||
@ -146,10 +174,10 @@ def main():
|
|||||||
# except Exception as e:
|
# except Exception as e:
|
||||||
# print(e)
|
# print(e)
|
||||||
|
|
||||||
# except Exception as e:
|
# except Exception as e:
|
||||||
# print(e.with_traceback)
|
# print(e.with_traceback)
|
||||||
# print(e)
|
# print(e)
|
||||||
# exit()
|
# exit()
|
||||||
|
|
||||||
# channel.basic_consume(
|
# channel.basic_consume(
|
||||||
# queue='incoming-dev', on_message_callback=callback, auto_ack=False)
|
# queue='incoming-dev', on_message_callback=callback, auto_ack=False)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user