Webhook n8n создаёт дубли заявок: как спроектировать защиту от повтора
Поставщик отправил один webhook дважды, и в CRM появились две заявки. Повторная доставка — обычный сценарий интеграции, особенно если отправитель не получил ответ вовремя. Проверять дубли нужно до внешнего бизнес-действия, а не после него.
Как разобрать ситуацию
Определите устойчивый event_id и область его уникальности. Затем атомарно зарегистрируйте событие во внешнем хранилище и свяжите его с результатом обработки. Простая проверка «записи пока нет» перед созданием не защищает от двух параллельных запусков. Для этого нужна операция с уникальным ограничением или эквивалентной гарантией выбранной базы.
Пример и ожидаемый результат
Учебный протокол: webhook с event_id=E17 создаёт заявку C9 и сохраняет связку. Повтор E17 с тем же содержимым возвращает прежний результат. E17 с другой суммой отправляется в конфликт, а не незаметно переписывает заявку.
E17, payload A → created C9 E17, payload A → replay C9 E17, payload B → conflict
Ожидаемый результат — одна заявка для одного события и наблюдаемый статус повторной доставки. Успешный HTTP-ответ сам по себе не доказывает отсутствие дублей в CRM.
Проверка перед применением
- Отправьте два одинаковых события одновременно в тестовом окружении.
- Смоделируйте падение после создания заявки, но до сохранения результата обработки.
- Проверьте срок хранения event_id: слишком ранняя очистка снова разрешит старый повтор.
Храните журнал переходов обработки: received, processing, completed и failed с привязкой к событию. Тогда оператор понимает, что произошло после сбоя и можно ли безопасно продолжить. Не используйте случайный execution_id n8n как единственный ключ дедупликации: повторный запуск получает другой технический идентификатор, хотя бизнес-событие осталось прежним.
Границы решения
Конкретная настройка узлов зависит от базы и контракта CRM. Схема ниже является протоколом проектирования, а не проверенным экспортом n8n. Подпись webhook и права доступа проверяются отдельно от идемпотентности.
Если простые сценарии уже работают и нужна практика надёжных API-интеграций, проверок и обработки сбоев, посмотрите наш платный курс
Продвинутый n8n: production-автоматизации и AI-агенты. Перед записью сравните программу со своей задачей и подготовкой.
Техническая справка: docs.n8n.io: документация.
Следующий шаг: n8n в работе: разборы данных, сбоев и автоматизаций. По смежным вопросам: Пагинация API в n8n зациклилась: как проверить cursor и условие остановки, HTTP Request в n8n зелёный после 500: как не потерять ошибку API.
Продолжить на практике
- Продвинутый n8n: production-автоматизации и AI-агенты ↗
Продвинутый курс по n8n: надёжные интеграции, AI-агенты, RAG, тестирование и self-hosted production.
