intrabot/intradesk/handler.py
2026-03-15 21:36:03 +03:00

68 lines
2.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import logging
from datetime import datetime
import database
import events
from bot import poster
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)
base_text = formatter.format_notification(payload)
group_id = formatter.get_executor_group_id(fields)
closed = formatter.is_final(fields)
is_to_now = formatter.is_to(fields)
# Формируем плоский список новых строк событий для накопления в посте
new_event_lines = changes + [f"💬 {c}" for c in comments]
# Если заявка новая в БД — добавляем описание первым событием
is_new_task = not database.get_message_data(task_id)
if is_new_task:
desc_event = formatter.get_description_event(fields)
if desc_event:
new_event_lines = [desc_event] + new_event_lines
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": base_text,
})
poster.recreate_post(
task_id, str(number), base_text, group_id,
closed=closed, new_event_lines=new_event_lines,
)
# ── Гифка для ТО ──────────────────────────────────────────────────────
# Отправляем (и удаляем предыдущую) при любом вебхуке если ТО = да
if is_to_now:
poster.send_gif_for_to(task_id)
except Exception:
log.exception("Error while handling webhook")