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

Ожидание (Waiting)

Пауза выполнения workflow с возобновлением по времени или событию

Waiting позволяет приостановить выполнение workflow и возобновить его позже — по таймеру или при получении webhook.

СценарийОписание
Rate limitingЗадержка между API вызовами
Ожидание подтвержденияПауза до одобрения пользователем
Scheduled actionsОтложенное выполнение
External eventsОжидание внешнего события

Нода Wait приостанавливает выполнение workflow.

Возобновление через указанное время:

┌────────────┐ ┌────────────┐ ┌────────────┐
│ Trigger │───→│ Wait │───→│ Следующая │
│ │ │ (5 минут) │ │ нода │
└────────────┘ └────────────┘ └────────────┘

Настройки:

  • Amount: число
  • Unit: секунды, минуты, часы, дни

При работе с API с лимитами:

┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐
│ Get Data │───→│ Process │───→│ Wait │───→│ Next Batch │
│ │ │ │ │ (1 секунда)│ │ │
└────────────┘ └────────────┘ └────────────┘ └────────────┘

Отправка письма с ссылками на одобрение/отклонение:

┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐
│ Request │───→│ Send Email │───→│ Wait │───→│ Switch │
│ │ │ (с ссылками)│ │ (webhook) │ │(approve?) │
└────────────┘ └────────────┘ └────────────┘ └────────────┘
┌─────────┴─────────┐
↓ ↓
┌──────────┐ ┌──────────┐
│ Approved │ │ Rejected │
└──────────┘ └──────────┘

Email содержит:

Новый запрос на отпуск от {{ $json.employee }}
[Одобрить]({{ $node.Wait.resumeUrl }}?action=approve)
[Отклонить]({{ $node.Wait.resumeUrl }}?action=reject)

Напоминание через определённое время:

┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐
│ Create │───→│ Slack │───→│ Wait │───→│ Slack │
│ Task │ │ (создано) │ │ (24 часа) │ │(напомнить) │
└────────────┘ └────────────┘ └────────────┘ └────────────┘

Сбор данных в несколько этапов:

Step 1: Получить email
[Wait for webhook] ← Пользователь заполняет форму
Step 2: Получить контактные данные
[Wait for webhook] ← Пользователь продолжает
Step 3: Финализация

При использовании режима On webhook call, Wait нода предоставляет уникальный URL:

// Доступ к URL в выражениях:
{{ $node.Wait.resumeUrl }}
// Полный URL примерно такой:
https://n8n.example.com/webhook-waiting/abc123-def456

Данные, отправленные на webhook, доступны в следующих нодах:

Окно терминала
# Пример вызова:
curl -X POST "https://n8n.example.com/webhook-waiting/abc123" \
-H "Content-Type: application/json" \
-d '{"action": "approve", "comment": "OK"}'
// В следующей ноде:
{{ $json.action }} // "approve"
{{ $json.comment }} // "OK"

ОграничениеОписание
Максимальное времяЗависит от настроек (по умолчанию 365 дней)
ПамятьДанные хранятся в БД, не в памяти
WebhooksURL валиден только пока execution ожидает

// В переменных окружения:
EXECUTIONS_TIMEOUT=3600 // Общий timeout (секунды)
EXECUTIONS_TIMEOUT_MAX=86400 // Максимальный timeout

В настройках Wait ноды можно установить максимальное время ожидания webhook:

Limit Wait Time: 7 days

Если webhook не получен за это время — execution завершается с ошибкой.


// ✅ Хорошо: конкретный лимит
Wait: 24 hours (max 7 days)
// ❌ Плохо: бесконечное ожидание
Wait: forever

При отправке approval ссылок:

  • Укажите deadline
  • Объясните последствия бездействия
  • Добавьте fallback (автоматическое отклонение)
┌────────────┐ ┌────────────┐ ┌────────────┐
│ Wait │───→│ Switch │───→│ Process │
│ (webhook) │ │ (timeout?) │ │ │
└────────────┘ └─────┬──────┘ └────────────┘
Timeout
┌────────────┐
│ Fallback │
└────────────┘

При работе с webhooks добавляйте ID для отслеживания:

// В URL:
{{ $node.Wait.resumeUrl }}?request_id={{ $json.id }}

ЗадачаЛучший выбор
Простая задержкаWait с time interval
Задержка между batchSplit In Batches
Запуск по расписаниюSchedule Trigger
Ожидание событияWait с webhook
Polling внешней системыLoop + Wait + IF

Looping

Циклы — повторное выполнение