Nodul LogoNodul

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

Во всех узлах-действиях на Nodul в разделе расширенных настроек есть настройка обработки ошибок. Она позволяет автоматически перезапускать узел для повторной попытки отправить запрос, а также перезапускать узел пока API не вернёт нужный результат.

Демонстрация работы retry

Когда это нужно

1. API вернул ошибку

Сервис, к которому вы обращаетесь, вернул ошибку — 500, 503, таймаут, 429 "Too Many Requests" и т.д.

В обычном поведении это привело бы к остановке сценария. Но с включённым перезапуском система автоматически повторит запрос указанное количество раз с заданной паузой между попытками.

Когда это нужно:

  • API иногда отвечает 500 или 503
  • Бывают таймауты при высокой нагрузке
  • Сервис возвращает 429 при превышении лимита запросов

2. API ещё не готов отдать данные

API формально ответил успешно (статус 200), но задача ещё в обработке. Это особенно важно при генерации контента — видео, аудио, картинок, документов.

Когда использовать:

  • Работа с узлами типа "Get Result", где один узел стартует процесс и возвращает ID запуска, а второй получает результат спустя время
  • Применимо почти для всех ИИ-сервисов (кроме текстовых)

Типичный пример — API генерации видео:

// Первый запрос — задача в очереди
{"status": "queued", "id": "abc123"}

// Через 5 секунд — обрабатывается
{"status": "processing", "id": "abc123"}

// Через 10 секунд — готово!
{"status": "completed", "url": "https://..."}

Вам нужно дождаться completed с готовой ссылкой на файл. Вы указываете триггерные слова (queued, processing) — пока они есть в ответе, узел перезапускается через заданное время. Как только пришёл completed (без триггерных слов) — узел завершается успешно, результат (файл) передаётся в сценарий для дальнейшей работы.

Включите: Повторить при некорректных данных

Для генерации контента (видео, аудио, картинки): 5-10 попыток, задержка 20-30 сек. Для обычных API-ошибок: 2-3 попытки, задержка 3-5 сек.

Настройка обработки ошибок

Полная панель настроек обработки ошибок

Повторить при ошибке узла — Включить автоматический повтор при ошибке узла.

Повторить при некорректных данных — Включить автоматический повтор при несоответствии ответа ожидаемому паттерну.

Количество попыток — Сколько раз повторить запрос (по умолчанию: 2)

Задержка между попытками (сек) — Пауза между попытками в секундах (по умолчанию: 3)

RegExp (регулярное выражение) — Функционал перезапуска настраивается через регулярные выражения. Используется для фильтрации ошибок и проверки ответа API.

RegExp (регулярные выражения)

Вы указываете триггерные слова — если они найдены в ответе, узел перезапускается через заданное время. Если триггерных слов нет — это успех, узел завершается и передаёт результат дальше в сценарий.

Важно: Без .* паттерн будет работать только если весь ответ целиком равен вашему слову. Всегда пишите .*(ваш_паттерн).*

Примеры паттернов:

ЗадачаПаттерн
Перезапуск пока статус queued.*queued.*
Перезапуск пока queued или pending.*(queued|pending).*
Перезапуск пока идёт обработка.*(queued|pending|processing|in_progress).*
Перезапуск пока ready = false.*"ready":\s*false.*

Пример: Ожидание генерации видео

Сценарий генерации видео

Задача: API генерации видео сначала возвращает in_progress, потом queued, и только потом completed с готовой ссылкой.

Настройка:

Настройки retry для генерации видео

  1. Включите Повторить при некорректных данных
  2. RegExp (регулярное выражение): .*(in_progress|queued).*
  3. Количество попыток: 5
  4. Задержка между попытками (сек): 30

Как это работает:

Итерация 1 показывает статус in_progress

  • Iteration 1: "status": "in_progress" — Содержит триггерное слово. Узел перезапускается через 30 секунд.

Итерация 2 показывает статус queued

  • Iteration 2: "status": "queued" — Содержит триггерное слово. Узел перезапускается через 30 секунд.

Итерация 3 показывает статус completed

  • Iteration 3: "status": "completed" — Триггерных слов нет! Это успех. Узел завершается, результат (видео) передаётся в следующий узел сценария.

Суть: Узел перезапускается каждые 30 секунд до момента, пока не получит ответ без триггерных слов (queued, in_progress). Пока триггерные слова есть — данные НЕ передаются дальше, узел перезапускается снова. Как только пришёл успешный ответ (completed) — файл/данные передаются в сценарий для дальнейшей работы.

Технические детали

  • Используется движок регулярных выражений Go (RE2)
  • Поддерживаются: \d (цифры), \s (пробелы), \w (буквы), | (или), () (группы)
  • Не поддерживаются: lookahead (?=...) и lookbehind (?<=...)

Что дальше