52 lines
1.6 KiB
Python
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")
|