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

Под-workflows (Sub-workflows)

Создание модульных workflows с вызовом одного workflow из другого

Под-workflows позволяют вызывать один workflow из другого. Это делает ваши автоматизации модульными и помогает избежать проблем с памятью при обработке больших объёмов данных.

ПреимуществоОписание
МодульностьРазбивайте сложную логику на переиспользуемые блоки
ПамятьИзбегайте ошибок памяти при больших workflows
Повторное использованиеОдин под-workflow можно вызывать из нескольких родительских
ОрганизацияЧистая структура проекта
ТестированиеЛегче тестировать отдельные части

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

  2. Добавьте триггер Execute Sub-workflow Trigger (или “When Executed by Another Workflow”)

  3. Настройте режим входных данных (Input data mode)

  4. Добавьте остальные ноды для логики под-workflow

  5. Сохраните workflow

РежимОписаниеКогда использовать
Define using fieldsОпределите поля и типы данныхСтрогая типизация, автоподстановка
Define using JSONПример JSON структурыСложные объекты
Accept all dataПринимает любые данныеГибкость, но без валидации
// Пример JSON схемы для "Define using JSON":
{
"customer_id": "12345",
"email": "user@example.com",
"order_total": 150.00
}

По умолчанию под-workflow может вызывать только владелец. Для изменения:

  1. Откройте OptionsSettings
  2. Найдите This workflow can be called by
  3. Выберите нужный уровень доступа

  1. Откройте родительский workflow

  2. Добавьте ноду Execute Sub-workflow

  3. Выберите способ указания под-workflow

  4. Заполните требуемые входные данные

  5. Сохраните и запустите

СпособОписание
From listВыбор из списка ваших workflows
By IDУказание ID workflow
By URLURL до workflow
From fileЗагрузка из локального файла
ParameterJSON workflow как параметр

┌─────────────────────────────────────────────────────────────┐
│ Родительский Workflow │
│ │
│ ┌────────────┐ ┌───────────────────┐ ┌────────────┐ │
│ │ Trigger │───→│ Execute Sub- │───→│ Следующая │ │
│ │ │ │ workflow │ │ нода │ │
│ └────────────┘ └─────────┬─────────┘ └────────────┘ │
│ │ │
└──────────────────────────────┼───────────────────────────────┘
↓ Данные отправляются
┌─────────────────────────────────────────────────────────────┐
│ Под-Workflow │
│ │
│ ┌───────────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ Execute Sub- │───→│ Обработка │───→│ Последняя │ │
│ │ workflow Trigger │ │ │ │ нода │ │
│ └───────────────────┘ └────────────┘ └─────┬──────┘ │
│ │ │
└────────────────────────────────────────────────────┼─────────┘
↑ Результат возвращается

Процесс:

  1. Execute Sub-workflow отправляет данные в триггер под-workflow
  2. Под-workflow обрабатывает данные
  3. Последняя нода под-workflow возвращает результат
  4. Результат появляется на выходе Execute Sub-workflow

  1. Добавьте Execute Sub-workflow в родительский workflow
  2. Выберите DatabaseFrom list
  3. Нажмите Create a sub-workflow
  4. n8n создаст новый workflow с триггером
  1. Выделите ноды, которые хотите вынести
  2. Правый клик → Convert to sub-workflow
  3. n8n автоматически:
    • Создаст новый под-workflow
    • Заменит ноды на Execute Sub-workflow
    • Настроит входные/выходные данные

При выполнении workflow можно переключаться между родителем и под-workflow:

  • В Execute Sub-workflow ноде — ссылка View sub-execution
  • В под-workflow — ссылка на родительский execution

Это упрощает отладку и понимание потока данных.


Родительский workflow:
┌────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Webhook │───→│ Execute Sub- │───→│ Execute Sub- │
│ (заказ) │ │ workflow │ │ workflow │
└────────────┘ │ (валидация) │ │ (уведомления) │
└─────────────────┘ └─────────────────┘
Под-workflow "Валидация":
- Проверка наличия товара
- Валидация адреса
- Расчёт доставки
Под-workflow "Уведомления":
- Email клиенту
- Slack команде
- SMS при VIP заказе
Родительский workflow (оркестратор):
┌────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Schedule │───→│ Loop Over Items │───→│ Execute Sub- │
│ (ежечасно) │ │ (источники) │ │ workflow │
└────────────┘ └─────────────────┘ │ (ETL для │
│ источника) │
└─────────────────┘
Под-workflow "ETL":
1. Extract — получить данные из источника
2. Transform — преобразовать в нужный формат
3. Load — записать в целевую БД
// Под-workflow для каждой AI модели:
// - gpt4-processor
// - claude-processor
// - gemini-processor
// Родительский workflow выбирает модель:
{
"model": "gpt4",
"prompt": "Проанализируй текст..."
}

✅ Хорошо:
- [SUB] Email Notifications
- [SUB] Data Validation
- Order Processing / Validate Order
❌ Плохо:
- Workflow 1
- Test
- Untitled

Используйте Sticky Notes в начале под-workflow:

  • Описание назначения
  • Ожидаемые входные данные
  • Возвращаемый результат
  • Автор и дата создания
Родительский workflow:
┌────────────────┐
│ Execute Sub- │
│ workflow │
└───────┬────────┘
┌────┴────┐
↓ ↓
Success Error ───→ [Error Handler]

Настройте Error Workflow для под-workflows отдельно.



  1. Создайте под-workflow с триггером

  2. Установите Input data mode в Accept all data

  3. В настройках: Save successful production executions = Save

  4. Запустите родительский workflow

  5. Откройте под-workflow → загрузите данные из previous execution

  6. Закрепите данные (Pin) для дальнейшей разработки

ПроблемаРешение
”Workflow not found”Проверьте ID и права доступа
”Invalid input”Сверьте схему данных
Пустой результатПроверьте последнюю ноду под-workflow
TimeoutУвеличьте лимит или оптимизируйте