95 lines
2.9 KiB
Python
95 lines
2.9 KiB
Python
import pika
|
|
import sys
|
|
import os
|
|
import json
|
|
import datetime
|
|
import re
|
|
import config
|
|
from pymongo import MongoClient
|
|
from msg import msg
|
|
import requests
|
|
import time
|
|
|
|
CONNECTION_STRING = "mongodb://mongodb:Cc03Wz5XX3iI3uY3@192.168.0.20"
|
|
db_connection = MongoClient(CONNECTION_STRING)
|
|
|
|
db_base = db_connection["phone"]
|
|
coll_call = db_base["phone_dev"]
|
|
from_api = db_base["from_api"]
|
|
|
|
|
|
def main():
|
|
connection = pika.BlockingConnection(pika.ConnectionParameters(
|
|
"192.168.0.20", 5672, "mkt", pika.PlainCredentials(
|
|
"rabbit", "mrl2X0jwnYuCCiKFTshG7WKyOAhfDo")
|
|
))
|
|
channel = connection.channel()
|
|
|
|
def callback(ch, method, properties, body: bytearray):
|
|
m = msg(body)
|
|
|
|
# Разбираем входящие звонки
|
|
if m.isIncoming():
|
|
# Если статус START
|
|
if m.getState() == "START":
|
|
insert_value = {
|
|
"uuid": m.getUUID(),
|
|
"status": -1,
|
|
"canClose": 0
|
|
}
|
|
|
|
coll_call.update_one(
|
|
filter={"client": m.getClient(), "status": -1},
|
|
update={"$set": insert_value},
|
|
upsert=True
|
|
)
|
|
#print("НАЧАТ:", m.dict)
|
|
|
|
# Если Статус END
|
|
if m.getState() == "END":
|
|
coll_call.update_one(
|
|
filter={"uuid": m.getUUID()},
|
|
update={"$set": {"canClose": 1}}
|
|
)
|
|
#print("ЗАКОНЧЕН:", m.dict)
|
|
time.sleep(5)
|
|
resp = requests.get("https://callinfo.services.mobilon.ru/api/call/info/1e86a98e026578eb5f6bf8c092c0c4a2/" + m.getUUID())
|
|
j = json.loads(resp.content.decode('utf-8'))
|
|
d = dict(j)
|
|
from_api.insert_one(d)
|
|
|
|
# Если статус HANGUP
|
|
if m.getState() == "HANGUP":
|
|
if m.isAnswered():
|
|
insert_value = {
|
|
"status": 0,
|
|
"duration": m.getDuration(),
|
|
"recordUrl": m.getRecordUrl()
|
|
}
|
|
else:
|
|
insert_value = {
|
|
"status": 1
|
|
}
|
|
coll_call.update_one(
|
|
filter={"uuid": m.getUUID(), "canClose": 1},
|
|
update={"$set": insert_value}
|
|
)
|
|
#print("Положена трубка:", m.dict)
|
|
|
|
channel.basic_consume(
|
|
queue='test', on_message_callback=callback, auto_ack=True)
|
|
|
|
print(' [*] Waiting for messages. To exit press CTRL+C')
|
|
channel.start_consuming()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
try:
|
|
main()
|
|
except KeyboardInterrupt:
|
|
print('Interrupted')
|
|
try:
|
|
sys.exit(0)
|
|
except SystemExit:
|
|
os._exit(0)
|