Клиент — SaaS для записи на услуги. Интеграции разрослись: 5 webhook от платёжки, CRM, SMS-шлюза — каждый в отдельный скрипт на VPS, логи разрозненны, дубли событий создавали двойные сделки в AmoCRM.
Задача: единый webhook-hub на Python — одна точка POST, верификация подписи, идемпотентность, маршрутизация в CRM / Telegram / email по правилам. Audit log всех событий.
Реализация:
• FastAPI endpoints /webhook/{source} с HMAC-проверкой;
• idempotency key (event_id) в Redis — duplicate → 200 без повторной обработки;
• rule engine YAML: event type → actions (crm.update,telegram.notify,email.send);
• async workers для тяжёлых действий;
• PostgreSQL: raw payload, processed_at, error, retry_count;
• admin UI (minimal): replay event, disable source, stats;
• alert Telegram при error rate > 5%.
Стек: Python, FastAPI, Redis, PostgreSQL, AmoCRM API, aiogram, SendGrid, Docker. Приёмка: 1000 replay событий, 0 duplicate CRM deals.
Итог: интеграции в одном месте; время добавления нового источника — часы, не недели. NDA: SaaS не публикуется.