106 lines
3.1 KiB
Python
106 lines
3.1 KiB
Python
from datetime import datetime
|
|
import logging
|
|
import os
|
|
import config
|
|
import json
|
|
from aiohttp import ClientSession
|
|
import aiohttp
|
|
|
|
|
|
def loggingDict(title: str, data: dict) -> None:
|
|
call_id = data.get("call_session_id", "None")
|
|
today = datetime.now().strftime("%Y-%m-%d")
|
|
file_name = f"log/post/{today}/{call_id}.log"
|
|
if not os.path.exists(f"log/post/{today}"):
|
|
os.makedirs(f"log/post/{today}")
|
|
with open(file_name, "a") as f:
|
|
f.write(f"{title}:\n{json.dumps(data, indent=4)}\n\n")
|
|
|
|
|
|
async def send_post_request(body: dict):
|
|
|
|
async def post_request(
|
|
url: str,
|
|
headers: dict = None,
|
|
json: dict = None,
|
|
**kwargs,
|
|
):
|
|
|
|
try:
|
|
async with ClientSession() as session:
|
|
async with session.post(
|
|
url, json=json, headers=headers, **kwargs
|
|
) as response:
|
|
response.raise_for_status()
|
|
return await response.json()
|
|
except aiohttp.ClientError as e:
|
|
if config.DEBUG:
|
|
logging.error(f"Request failed: {str(e)}")
|
|
return None
|
|
|
|
data = {"call": body}
|
|
headers = {
|
|
"Content-Type": "application/json",
|
|
"Authorization": f"Bearer {config.MEDODS_TOKEN}",
|
|
}
|
|
if config.DEBUG:
|
|
loggingDict("Sending data to Medods", body)
|
|
r = await post_request(url=config.MEDODS_SERVER, headers=headers, json=data)
|
|
try:
|
|
res = {
|
|
"id": r["call"]["id"],
|
|
"status": r["call"]["status"],
|
|
"call_session_id": r["call"]["call_session_id"],
|
|
}
|
|
except:
|
|
res = {}
|
|
loggingDict("Recieved data from Medods:", res)
|
|
else:
|
|
await post_request(url=config.MEDODS_SERVER, headers=headers, json=data)
|
|
|
|
|
|
async def incoming_call(call_session_id, contact_phone_number, called_phone_number):
|
|
body = {
|
|
"status": "incoming_call",
|
|
"call_session_id": call_session_id,
|
|
"contact_phone_number": contact_phone_number,
|
|
"called_phone_number": called_phone_number,
|
|
}
|
|
await send_post_request(body)
|
|
|
|
|
|
async def call_started(call_session_id):
|
|
body = {
|
|
"status": "call_started",
|
|
"call_session_id": call_session_id,
|
|
"responsibles": [{"id": 777}],
|
|
}
|
|
await send_post_request(body)
|
|
|
|
|
|
async def call_finished(call_session_id, duration):
|
|
body = {
|
|
"status": "call_finished",
|
|
"call_session_id": call_session_id,
|
|
"duration": duration,
|
|
}
|
|
await send_post_request(body)
|
|
|
|
|
|
async def call_lost(call_session_id):
|
|
body = {
|
|
"status": "call_lost",
|
|
"call_session_id": call_session_id,
|
|
"responsibles": config.OPERATORS,
|
|
}
|
|
await send_post_request(body)
|
|
|
|
|
|
async def call_record_file(call_session_id, uniqueid):
|
|
body = {
|
|
"status": "call_record_file",
|
|
"call_session_id": call_session_id,
|
|
"file_link": f"{config.RECORDS_SERVER}{uniqueid}",
|
|
}
|
|
await send_post_request(body)
|