Перейти к содержимому

Обработка ошибок

Настройка Error Workflows и graceful error handling в n8n

При разработке workflow важно предусмотреть обработку ошибок. Error Workflow позволяет контролировать реакцию n8n на сбои выполнения.

ТипОписаниеПример
Node ErrorОшибка в конкретной нодеНеправильные credentials
Trigger ErrorОшибка в триггереWebhook недоступен
Memory ErrorНехватка памятиОбработка больших файлов
TimeoutПревышение лимита времениДолгий API запрос
Validation ErrorНеверные данныеОтсутствует обязательное поле

Error Workflow запускается при сбое любого workflow, к которому он привязан.

  1. Создайте новый workflow

  2. Добавьте ноду Error Trigger как первую

  3. Добавьте ноды для обработки ошибок (email, Slack и т.д.)

  4. Сохраните workflow (например, “Error Handler”)

  5. Привяжите к другим workflows

  1. Откройте workflow, для которого нужна обработка ошибок
  2. OptionsSettings
  3. В поле Error workflow выберите созданный Error Handler
  4. Сохраните

Error Trigger получает подробную информацию о сбое:

[
{
"execution": {
"id": "231",
"url": "https://n8n.example.com/execution/231",
"retryOf": "34",
"error": {
"message": "Example Error Message",
"stack": "Stacktrace..."
},
"lastNodeExecuted": "HTTP Request",
"mode": "manual"
},
"workflow": {
"id": "1",
"name": "My Workflow"
}
}
]
ПолеОписаниеДоступность
execution.idID выполненияЕсли сохранено в БД
execution.urlСсылка на выполнениеЕсли сохранено в БД
execution.retryOfID оригинального выполненияТолько для retry
execution.error.messageТекст ошибкиВсегда
execution.error.stackStack traceВсегда
execution.lastNodeExecutedНода с ошибкойВсегда
execution.modeРежим запускаВсегда
workflow.idID workflowВсегда
workflow.nameНазвание workflowВсегда

Если ошибка произошла в триггере (не в обычной ноде), структура данных отличается:

{
"trigger": {
"error": {
"name": "WorkflowActivationError",
"message": "Connection refused",
"cause": {
"message": "ECONNREFUSED",
"stack": "..."
},
"timestamp": 1654609328787,
"node": { ... }
},
"mode": "trigger"
},
"workflow": {
"id": "1",
"name": "My Workflow"
}
}

┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Error Trigger│───→│ Set │───→│ Slack │
│ │ │ (формат msg) │ │ │
└──────────────┘ └──────────────┘ └──────────────┘

Сообщение в Slack:

:warning: *Ошибка в workflow*
*Workflow:* {{ $json.workflow.name }}
*Нода:* {{ $json.execution.lastNodeExecuted }}
*Ошибка:* {{ $json.execution.error.message }}
*Ссылка:* {{ $json.execution.url }}
┌──────────────┐ ┌──────────────┐
│ Error Trigger│───→│ Gmail │
│ │ │ Send Email │
└──────────────┘ └──────────────┘
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Error Trigger│───→│ Code │───→│ PostgreSQL │
│ │ │ (parse data) │ │ Insert Row │
└──────────────┘ └──────────────┘ └──────────────┘
// Code нода для подготовки данных:
return [{
json: {
workflow_id: $json.workflow.id,
workflow_name: $json.workflow.name,
error_message: $json.execution.error?.message || $json.trigger?.error?.message,
failed_node: $json.execution?.lastNodeExecuted || 'Trigger',
execution_id: $json.execution?.id || null,
timestamp: new Date().toISOString()
}
}];

Нода Stop And Error позволяет принудительно завершить workflow с ошибкой при определённых условиях.

  • Валидация входных данных
  • Проверка бизнес-правил
  • Защита от некорректных состояний
┌────────────┐ ┌────────────┐ ┌────────────┐
│ Webhook │───→│ IF │───→│ Обработка │
│ (заказ) │ │(amount>0?) │ │ заказа │
└────────────┘ └─────┬──────┘ └────────────┘
Нет ↓
┌────────────────┐
│ Stop And Error │
│ "Сумма должна │
│ быть > 0" │
└────────────────┘

  1. OptionsSettings
  2. Найдите настройку Execution Order
  3. Выберите нужный режим

При одинаковой высоте веток — сначала выполняется левая.


В настройках HTTP Request и некоторых других нод:

Settings → Retry On Fail: true
Settings → Max Tries: 3
Settings → Wait Between Tries: 1000ms
  1. Откройте Executions
  2. Найдите failed execution
  3. Нажмите Retry

Повторяет с теми же входными данными


  1. Executions — просмотр всех выполнений
  2. Log streaming — отправка логов во внешние системы
  3. Error Workflow — кастомная обработка
  1. Откройте workflow
  2. Найдите failed execution
  3. Load data from previous execution
  4. Отладьте проблему

┌─────────────────────────────────────────────┐
│ Продакшн Workflow │
│ │
│ Settings: │
│ ├─ Error workflow: Error Handler │
│ └─ Save failed executions: Yes │
│ │
└─────────────────────────────────────────────┘
// ❌ Плохо
throw new Error("Error");
// ✅ Хорошо
throw new Error(`Заказ ${orderId}: товар ${productId} отсутствует на складе`);

3. Разделяйте критичные и некритичные ошибки

Заголовок раздела «3. Разделяйте критичные и некритичные ошибки»
┌──────────────┐ ┌──────────────┐
│ Error Trigger│───→│ Switch │
└──────────────┘ └──────┬───────┘
┌────────────────┼────────────────┐
↓ ↓ ↓
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Critical │ │ Warning │ │ Info │
│ (PagerD) │ │ (Slack) │ │ (Log) │
└──────────┘ └──────────┘ └──────────┘

В сообщениях об ошибках указывайте:

  • Какой workflow упал
  • На какой ноде
  • Какие данные обрабатывались
  • Ссылку на execution

Логи

Logging — настройка логирования