← AI process automation with n8n
05 / 07 · 45 min

Errors, retries, and idempotency

Retry On Fail and node error branches, Error Trigger and alerts, deduplication and idempotency keys, safe re-runs.

Lesson content is currently available in Russian.

What you will learn

  • →Выбирать стратегию On Error и настраивать Retry On Fail под тип ошибки.
  • →Строить централизованный error workflow с Error Trigger и полезными алертами.
  • →Делать обработчики идемпотентными: дедупликация, естественные ключи, безопасные повторы.

Что происходит, когда нода падает

По умолчанию упавшая нода останавливает всё: execution помечается failed, ноды после неё не выполняются. Это правильный дефолт — но n8n даёт три стратегии в Settings каждой ноды (параметр On Error).

Stop Workflow (дефолт): падение — значит падение, честно и заметно.

Continue (using regular output): ошибка проглатывается, вниз по потоку идут данные с полем error. Опасный режим: молчаливые сбои — худший сценарий интеграций; включайте только с осознанной обработкой поля error ниже по потоку.

Continue (using error output): у ноды появляется второй, красный выход; успешные items идут в обычный, ошибка — в error-ветку, где её обрабатывают явно: лог, алерт, ответ 502, деградация до значения по умолчанию.

Там же в Settings — Retry On Fail: Max Tries и Wait Between Tries (мс). Это первое средство от транзиентных ошибок: сетевой таймаут, 429 Too Many Requests, 503 у перегруженного сервиса. Но ретрай не лечит постоянные ошибки: 401 Unauthorized останется 401 и с пятой попытки, а ретраить POST без идемпотентности — значит рисковать дублями (об этом ниже).

Правило: транзиентное — ретраим, постоянное — падаем громко, ожидаемое — обрабатываем error-веткой.

Error Workflow: единая точка алертов

Алерты о падениях не надо строить в каждом workflow копипастой — для этого есть механизм Error Workflow.

Создайте отдельный workflow, начинающийся с ноды Error Trigger. Затем в настройках БОЕВЫХ workflow (Settings → Error Workflow) укажите его. Теперь любое падение запускает error-workflow и передаёт ему контекст:

{
  "execution": {
    "id": "231",
    "url": "https://n8n.example.com/execution/231",
    "lastNodeExecuted": "Enrich lead",
    "error": { "message": "connect ECONNREFUSED 10.0.0.5:443" }
  },
  "workflow": { "id": "12", "name": "Lead intake" }
}

Дальше — нода Slack или Telegram с сообщением из этих полей: имя workflow, упавшая нода, текст ошибки и обязательно {{ $json.execution.url }} — дежурный открывает проблемный execution в один клик вместо раскопок в списке.

Один error-workflow обслуживает сколько угодно боевых. Полезно добавить в него Switch по имени workflow: критичные пайплайны — в канал с пейджингом, второстепенные — в тихий лог-канал.

Проверьте настройку до того, как она понадобится: вставьте в боевой workflow заведомо падающую ноду и убедитесь, что алерт пришёл. Про error-workflow, который никто не тестировал, узнаёшь в худший момент.

Идемпотентность: дубликаты придут обязательно

Идемпотентность — свойство обработчика давать одинаковый результат при повторной обработке того же события. В интеграциях это не опция: вебхук-провайдеры ретраят доставку при таймаутах, пользователи жмут кнопку дважды, ваш же Retry On Fail повторяет шаги. Вопрос не «придут ли дубликаты», а «что вы с ними сделаете».

Инструменты в n8n.

Первый — нода Remove Duplicates в режиме Remove Items Processed in Previous Executions: она запоминает обработанные значения ключа (например, {{ $json.body.email }} или id события) МЕЖДУ executions и молча отбрасывает повторы. Ставьте её до side effects.

Второй — проверка перед записью: GET «существует ли запись с этим external id» перед POST, или upsert-операции нод БД и CRM, где они есть.

Третий — правильный выбор ключа. Лучший ключ идемпотентности — естественный id события от источника: id платежа Stripe, id сообщения, id заявки. Генерировать свой ключ из timestamp — антипаттерн: у ретрая той же заявки будет другой timestamp.

Если внешний API поддерживает заголовок Idempotency-Key (Stripe — эталонный пример), передавайте его: тогда даже задвоенный запрос не создаст второй платёж. Общий порядок в workflow железный: сначала дедупликация, потом side effects.

Паттерны надёжности: backoff, Wait, sub-workflow

Несколько паттернов, которые превращают «обычно работает» в «работает».

Экспоненциальный backoff. Встроенный Retry On Fail ждёт фиксированный интервал. Когда нужен рост паузы (щадящий режим для лежащего сервиса), соберите цикл вручную: error-ветка → Wait с expression-задержкой, растущей от номера попытки → возврат на ноду запроса, и IF-ограничитель числа попыток, чтобы цикл не стал вечным.

Маленькие workflow. Длинный пайплайн делите через Execute Sub-workflow: под-workflow можно ретраить целиком, тестировать отдельно и переиспользовать. Упавший шаг в маленьком workflow — понятная единица повтора; в монолите на тридцать нод — археология.

Retry из списка executions. Failed production executions сохраняются (проверьте в Settings workflow, что сохранение включено). После починки причины упавший execution можно перезапустить прямо из списка — Retry. Именно здесь окупается идемпотентность: повтор всего workflow безопасен.

Антипаттерны на закрепление: Continue (using regular output) без обработки поля error — молчаливая потеря данных; retry-цикл без ограничителя; ретрай неидемпотентного шага — классика с двойным списанием денег. Если шаг нельзя сделать идемпотентным, ретрай на нём должен быть выключен, а падение — громким.

Practice

Закалить lead-API

Возьмите workflow из урока 3 и добавьте: Retry On Fail (3 попытки, 2000 мс) на HTTP-ноды, error-ветку с ответом 502, отдельный error workflow с алертом в мессенджер и Remove Duplicates по email до side effects. Отправьте один payload дважды и устройте аварию внешнего API.

Deliverable

JSON обоих workflow, скриншот алерта из error workflow и execution, где повторный payload отброшен дедупликацией.

Checkpoint

Устройте своему workflow аварию (отключите внешний API или подайте мусор) и покажите, что система повела себя предсказуемо.

  • ✓ Падение ноды приводит к управляемой error-ветке или алерту, а не к тихой потере данных.
  • ✓ Повторная отправка того же события не создаёт дубликат side effect.
  • ✓ Ретраи ограничены по числу и применяются только к транзиентным ошибкам.

Check yourself

Чем опасен режим On Error: Continue (using regular output)?

01Чем опасен режим On Error: Continue (using regular output)?

Как n8n понимает, какой error workflow запускать при падении?

02Как n8n понимает, какой error workflow запускать при падении?

Для какой ошибки ретрай осмысленен?

03Для какой ошибки ретрай осмысленен?

Какой ключ идемпотентности предпочтителен?

04Какой ключ идемпотентности предпочтителен?

Что делает Remove Duplicates в режиме Remove Items Processed in Previous Executions?

05Что делает Remove Duplicates в режиме Remove Items Processed in Previous Executions?

Sources

Errors, retries, and idempotency · AI process automation with n8n · VORCL