VERIFIED CASE / 02 / 03
Как превратить разрозненные сообщения лида в проверяемый CRM-сигнал
CASE / WEBHOOK / LEAD QUALIFICATION
Лид редко присылает готовый бриф одним сообщением. Система должна безопасно накопить имя, задачу, бюджет, срок и контакт, пережить повторную доставку webhook и создать CRM-действие только один раз.
01 / CHALLENGE
Задача
Входящие сообщения приходят частями и могут дублироваться. Неподписанный запрос нельзя считать доверенным, а раннее создание сделки приводит к неполным карточкам и дублям. При этом демонстрационный MVP должен оставаться бесплатным и воспроизводимым.
02 / SOLUTION
Решение
FastAPI-сервис проверяет HMAC-SHA256 на исходных байтах webhook, нормализует событие, вычисляет стабильный ключ идемпотентности и накапливает бриф в SQLite. Детерминированные правила извлекают поля, задают следующий конкретный вопрос и при первом переходе в ready возвращают единственное разрешённое действие crm.deal.add.
03 / OUTCOME
Результат
Получился объяснимый квалификатор с типизированным API и контролируемой границей CRM. Повторная доставка возвращает сохранённый результат, а отсутствие внешней LLM делает тесты быстрыми, бесплатными и полностью воспроизводимыми.
ENGINEERING / DECISIONS
Ключевые решения
- 01
HMAC по raw body
Подпись проверяется до доверия к payload, а replay и размер тела ограничиваются на входе.
- 02
Локальная идемпотентность
Стабильный ключ события предотвращает повторное изменение состояния при повторной доставке.
- 03
Whitelist действий
Готовый бриф может вернуть только явно разрешённое crm.deal.add, а не произвольную CRM-команду.
VALIDATION / PUBLIC EVIDENCE
Что подтверждено
- В публичном README зафиксирован успешный набор из 61 автоматического теста.
- Официальный webhook self-test был доставлен с HTTP 200 и нулевой стоимостью.
- HMAC, replay, ограничение тела и rate limiting проверены на постоянном HTTPS endpoint.
- Секреты отсутствуют в репозитории и примерах конфигурации.