import logging from datetime import datetime import database import events from bot import telegram as tg 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, }) tg.recreate_post( task_id, str(number), base_text, group_id, closed=closed, new_event_lines=new_event_lines, ) # ── Гифка для ТО ────────────────────────────────────────────────────── # Отправляем (и удаляем предыдущую) при любом вебхуке если ТО = да if is_to_now: tg.send_gif_for_to(task_id) except Exception: log.exception("Error while handling webhook")