Пайплайн без обработки ошибок ломается на третий день — и вы узнаёте об этом от недовольного руководителя. Сделаем систему, которая работает неделями без вашего внимания.
🎯 После урока сможешь: добавить в пайплайн обработку ошибок, чтобы он работал неделями без тебя.
Где обычно ломается

Три стратегии устойчивости

Валидация ответа AI
AI иногда возвращает не то, что ждём (особенно при просьбе вернуть JSON). Простая проверка ловит «битый» ответ, не роняя пайплайн:
// Нод Code в n8n
const response = $input.first().json.text;
try {
const parsed = JSON.parse(response);
if (!parsed.sentiment || !parsed.topics) throw new Error("Нет нужных полей");
return [{json: parsed}];
} catch (e) {
return [{json: {error: e.message, raw: response}}]; // сохранить для разбора
}
Логи и мониторинг расходов

Мониторинг расходов — защита от кошмара «забыл лимит, потратил $200 за ночь». Один сторожевой пайплайн, который следит за тратами и умеет всё выключить, стоит настроить в первую очередь.
Контрольный вопрос. Что делает Error Workflow?
Подсказка: Аварийный обработчик.
Онлайн-проверка ответа появится позже
Контрольный вопрос. Зачем валидировать ответ AI перед использованием?
Подсказка: Ответ бывает не по формату.
Онлайн-проверка ответа появится позже
Контрольный вопрос. Что защищает от «сжёг $200 за ночь»?
Подсказка: Мониторинг трат с авто-стопом.
Онлайн-проверка ответа появится позже
Контрольный вопрос. Пайплайн падает из-за кратковременных сетевых обрывов раз в несколько запусков, но в остальном стабилен. Какую из трёх стратегий устойчивости применить в первую очередь?
Подсказка: Смотри, какая стратегия из трёх нацелена именно на сетевые сбои.
Онлайн-проверка ответа появится позже
Контрольный вопрос. Нод Code (см. промпт в уроке) получил ответ агента: строка
Конечно! Вот твой JSON: {"sentiment": "positive"}— то есть JSON не единственное содержимое ответа. Что вернёт код из урока при попыткеJSON.parse(response)?Исходный код для этого задания:
const response = $input.first().json.text; try { const parsed = JSON.parse(response); if (!parsed.sentiment || !parsed.topics) throw new Error("Нет нужных полей"); return [{json: parsed}]; } catch (e) { return [{json: {error: e.message, raw: response}}]; // сохранить для разбора }Подсказка: JSON.parse ломается на лишнем тексте перед фигурной скобкой — вспомни try/catch из кода урока.
Онлайн-проверка ответа появится позже
Что дальше
Пайплайн устойчив. В финальном уроке модуля — готовые рецепты, которые можно скопировать и адаптировать под свою задачу за вечер.
