intrabot/intradesk/handler.py
2026-02-24 15:15:23 +03:00

52 lines
1.6 KiB
Python

import logging
from datetime import datetime
import events
from bot import telegram as bot
from intradesk import formatter
log = logging.getLogger(__name__)
def handle_webhook(payload: dict):
try:
task_id = payload.get("Id")
op_type = payload.get("Event", {}).get("OperationType", "")
fields = payload.get("Fields", {})
number = fields.get("Number", "?")
if not task_id:
log.warning("Webhook payload missing Id — skipped")
return
if op_type not in ("Created", "Updated"):
log.debug(f"OperationType '{op_type}' — skipped")
return
changes, comments = formatter.parse_lifetime(fields)
full_text = formatter.format_notification(payload)
events.broadcast({
"type": "webhook",
"timestamp": datetime.utcnow().strftime("%d.%m.%Y %H:%M:%S"),
"task_id": task_id,
"task_number": number,
"operation": op_type,
"raw": payload,
"parsed": {
"changes": changes,
"comments": comments,
},
"formatted": full_text,
})
closed = formatter.is_final(fields)
if op_type == "Created":
bot.send_or_edit(task_id, number, full_text, closed=closed)
else:
summary = formatter.format_update_summary(changes, comments)
bot.send_or_edit(task_id, number, full_text, summary, closed=closed)
except Exception:
log.exception("Error while handling webhook")