Глава 8. Обработка ошибок и отладка
Автоматизация без обработки ошибок — это бомба с таймером. Внешние API падают, данные приходят в неожиданном формате, лимиты исчерпываются. В n8n есть несколько уровней защиты.
Просмотр ошибок выполнения
Каждое выполнение воркфлоу фиксируется во вкладке Executions. Цвет иконки показывает статус:
- 🟢 Success — всё прошло
- 🔴 Error — выполнение прервалось с исключением
- 🟡 Waiting — воркфлоу ждёт продолжения (Wait нода)
Нажмите на выполнение — откроется воркфлоу в режиме просмотра с данными каждой ноды на момент выполнения. Нажмите на красную ноду — увидите текст ошибки и входные данные, которые её вызвали.
Retry on Fail — повтор при ошибке
Самый простой механизм: при временных сбоях (сеть упала, API вернул 503) нода автоматически повторяет запрос.
Включение: в настройках ноды → Settings → Retry on Fail: On
Параметры:
| Параметр | Описание |
|---|---|
| Max Tries | Максимальное число попыток (1-5). По умолчанию: 3 |
| Wait Between Tries | Пауза между попытками в миллисекундах (по умолчанию: 1000) |
Когда применять
Retry on Fail хорошо работает для нестабильных HTTP-запросов. Не поможет при логических ошибках (неверный формат данных) — нода будет падать снова и снова.
Continue on Fail — продолжить несмотря на ошибку
Включение: Settings → Continue on Fail: On
При ошибке нода не прерывает воркфлоу, а передаёт айтем дальше с дополнительным полем:
{
"error": {
"message": "Request failed with status code 404",
"statusCode": 404,
"description": "Not Found"
}
}Дальше можно проверить через IF:
{{ $json.error !== undefined }} is true → обработка ошибкиStop and Error — намеренная остановка
Нода Stop and Error явно прерывает воркфлоу с заданным сообщением. Используйте, когда входные данные не соответствуют ожидаемому формату.
// Пример: проверка обязательного поляОбычный паттерн — поставить после IF с проверкой данных:
HTTP Request → IF: {{ $json.userId }} is empty
true → Stop and Error ("userId отсутствует в ответе API")
false → продолжение обработкиВ Error Workflow (см. ниже) получите сообщение через {{ $json.execution.error.message }}.
Error Workflow — глобальный обработчик ошибок
Специальный воркфлоу, который запускается, когда в другом воркфлоу произошла необработанная ошибка. Аналог try/catch на уровне воркфлоу.
Настройка
- Создайте новый воркфлоу, добавьте Error Trigger как первую ноду.
- Постройте нужную логику (отправка в Slack, Telegram, email).
- Скопируйте название этого воркфлоу.
- В воркфлоу, который хотите защитить: Settings → Error Workflow → выберите созданный.
Данные в Error Trigger
{
"execution": {
"id": "12345",
"url": "https://your-n8n.com/execution/12345",
"retryOf": null,
"error": {
"message": "Request failed with status code 500",
"stack": "Error: Request failed...",
"cause": {
"statusCode": 500,
"responseBody": "Internal Server Error"
}
},
"lastNodeExecuted": "HTTP Request",
"mode": "trigger",
"startedAt": "2024-01-15T10:30:00.000Z",
"stoppedAt": "2024-01-15T10:30:05.000Z"
},
"workflow": {
"id": "abc123",
"name": "Daily Sales Report"
}
}Пример Error Workflow с уведомлением в Telegram
Error Trigger
→ Telegram (
Chat ID: -1001234567890
Message: |
🚨 Ошибка в воркфлоу!
Воркфлоу: {{ $json.workflow.name }}
Нода: {{ $json.execution.lastNodeExecuted }}
Ошибка: {{ $json.execution.error.message }}
🔗 {{ $json.execution.url }}
)Отладка с помощью нод
Noda "Set" для промежуточной проверки
Вставьте ноду Set между нодами, чтобы проверить данные в конкретной точке:
HTTP Request → Set (просто пропускаем данные, ничего не меняем) → CodeНажмите Execute Node на Set — увидите, что из неё выходит.
Noda "Code" для логирования
// Временное логирование для отладки
console.log('Items count:', items.length);
console.log('First item:', JSON.stringify(items[0].json, null, 2));
return items;Вывод console.log появляется в System Logs (если включены) или в Executions → Logs в режиме просмотра выполнения.
Инструменты отладки в редакторе
Режим просмотра выполнения
После запуска воркфлоу нажмите на любую ноду — откроется панель с данными:
- INPUT — что нода получила на вход
- OUTPUT — что нода отдала (для каждого айтема)
- INFO — время выполнения, количество айтемов
Pin Data (зафиксировать данные)
Нажмите на ноду → Pin Data. Данные фиксируются и при следующих запусках нода не выполняется — используются сохранённые данные.
Полезно для:
- Отладки нод после медленного HTTP Request — не нужно каждый раз делать запрос
- Тестирования с конкретными данными
- Изоляции части воркфлоу
Иконка скрепки на ноде показывает, что данные зафиксированы.
Test with Previous Data
Кнопка Test with Previous Data в панели выполнения позволяет повторно запустить воркфлоу с теми же входными данными, что и в прошлый раз. Экономит время при итеративной отладке.
Паттерны устойчивости
Идемпотентность
Проектируйте воркфлоу так, чтобы повторный запуск с теми же данными не создавал дубликатов. Для HTTP Request:
// Перед вставкой — проверьте существование
// GET /api/items?externalId={{ $json.id }}
// IF: items.length > 0 → пропустить
// ELSE → POST /api/itemsDead Letter Queue
Ошибочные айтемы сохраняйте для повторной обработки:
HTTP Request [Continue on Fail = On]
→ IF: {{ $json.error !== undefined }}
true → Google Sheets (записать в лист "errors": id, timestamp, error)
false → обычная обработкаНочью отдельный воркфлоу читает лист "errors" и пытается повторить обработку.