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

n8n workflows

AI-School может запускать workflows n8n через production webhook. Это удобно, когда нужно запустить автоматизированный процесс за пределами AI-School, например создание задачи, обновление CRM-записи, запуск потока отчетности или передача данных формы в другую систему.

Пример: новость на школьном сайте

Предположим, что у школы есть workflow n8n, который публикует новость на сайте WordPress школы. В AI-School вы тогда вводите лишь короткий фрагмент текста, например пару предложений о проектной неделе, спортивном дне или дне открытых дверей. Именно этим текстом вы запускаете workflow в n8n.

Далее workflow n8n может, например:

  1. Из короткого текста сделать черновик текста с помощью LLM-узла и промпта, подходящего для тона школы.
  2. Создать подходящую иллюстрацию с помощью второго LLM-узла, например в цветах школы и в узнаваемом иллюстративном стиле.
  3. Подготовить или опубликовать текст и изображение как блог-пост на WordPress сайте.

Так AI-School и n8n работают вместе: в AI-School пользователь выбирает workflow и заполняет необходимую информацию. Затем n8n выполняет автоматизированные шаги и обеспечивает, чтобы новость корректно оказалась на сайте.

Что делает эта интеграция?

Вы запускаете workflow n8n из обзора workflow. Обязательны только production-webhook, POST и Header Auth. Поля и обратные уведомления из n8n опциональны и могут быть настроены независимо.

  • Если у workflow нет полей, webhook вызывается сразу.
  • Если у workflow есть поля, сначала открывается форма. Пользователь заполняет поля и затем запускает workflow кнопкой.
  • Заполненные значения отправляются JSON-ом в POST-запросе к n8n webhook.
  • Без обратных уведомлений AI-School просто подтверждает, что workflow запущен, и он продолжает работать в n8n. Окно не показывает индикатор загрузки и может быть закрыто сразу.
  • Если это включено в регистрации, workflow может отправлять промежуточные шаги или завершение обратно в AI-School.
  • Если включено одобрение в регистрации, пользователь может выбрать прямо в AI-School. Затем n8n продолжит с ожидающего шага.

Как создать n8n workflow в AI-School

Администратор регистрирует workflow следующим образом:

  1. Перейдите в Ассистенты.
  2. Откройте Рабочие процессы.
  3. Выберите Новый n8n workflow.
  4. Введите имя workflow и production-url n8n.
  5. Настройте Header authentication с именем заголовка и секретным значением заголовка.
  6. В разделе Terugmeldingen uit n8n отметьте только те элементы, которые действительно были построены в этом n8n-workflow: прогресс, одобрение и/или завершение workflow.
  7. Опционально добавьте поля, которые должны быть отправлены в POST-запросе.
  8. Сохраните workflow.

Все три варианта обратной связи отключены по умолчанию. Если позже вы добавляете callbacks или шаг одобрения в n8n, также обновите регистрацию в AI-School. Диалог тогда знает, показывать ли только подтверждение старта или ждать дальнейших сигналов.

Поля

  • Поля опциональны.
  • У каждого поля есть одно имя поля и тип.
  • Поддерживаемые типы полей: короткий текст, длинный текст, число, да/нет, дата, один выбор и несколько выборов.
  • Для Один выбор и Несколько выборов добавьте доступные варианты. Один выбор отображается как компактный выпадающий список; Несколько выборов отображаются как флажки. Выбранные значения отправляются в JSON-теле.
  • Обязательные поля должны быть заполнены перед тем, как workflow можно запустить.
  • Имя поля становится ключом в JSON-теле, отправляемом в n8n.

Совместимый workflow в n8n

  1. Создайте в n8n новый workflow.
  2. Добавьте в качестве первого узла Webhook.
  3. Точно назовите этот узел Start workflow. Примеры ниже используют это имя.
  4. Установите HTTP Method на POST.
  5. В Authentication выберите Header Auth и выберите credential для Header Auth.
  6. Введите в той же креденции имя заголовка и секретное значение так же, как в workflow в AI-School.
  7. Установите Respond или Response Mode на Immediately. Приложение сразу получит успешное подтверждение старта, в то время как n8n продолжит работу.
  8. Скопируйте Production URL узла Webhook в поле n8n production-url в AI-School. Не используйте тестовый url с /webhook-test/.
  9. Активируйте workflow в n8n.

Данные из AI-School находятся в n8n под body. Информация об интеграции находится там же в body.integration. Не удаляйте эти данные в Edit Fields-, Set- или Code-узле. Примеры ниже читают их прямо из узла Start workflow.

Пример JSON-тела

Если вы определяете поля с именами prompt, klantnaam, doelgroepen и datum, то n8n получит, например, следующий JSON-тел. AI-School автоматически добавляет объект integration.

{
"prompt": "Maak een korte samenvatting van de aanvraag.",
"klantnaam": "Voorbeeldorganisatie",
"doelgroepen": ["medewerkers", "ouders"],
"datum": "2026-09-22",
"integration": {
"runId": "chat-document-id",
"tenant": "default",
"callbackUrl": "https://europe-west1-ai-school-pro.cloudfunctions.net/n8nWorkflowCallback",
"callbackToken": "tijdelijk-token-voor-deze-uitvoering"
}
}

Токен обратного вызова относится к одному исполнению. Не сохраняйте его в логах, конфигурациях или других системах.

Опционально: отправлять прогресс и завершение

AI-School может показывать только то, что возвращает n8n. Используйте эти callbacks только если в регистрации вы включили Сообщать промежуточный прогресс и/или Сообщать о завершении workflow.

Настройка узла HTTP Request

  1. Добавьте узел HTTP Request и назовите его, например, Сообщить прогресс.

  2. Установите Method на POST.

  3. Включите в URL Expression.

  4. Вставьте ровно следующую выражение:

    {{ $('Start workflow').first().json.body.integration.callbackUrl }}
  5. В Authentication выберите None. Временный токен будет добавлен в следующем шаге как заголовок.

  6. Включите Send Headers и добавьте два заголовка:

    NameValue
    AuthorizationBearer {{ $('Start workflow').first().json.body.integration.callbackToken }}
    Content-Typeapplication/json
  7. Включите Send Body.

  8. Выберите Body Content Type: JSON и Specify Body: Using JSON.

  9. Вставьте ниже приведённый JSON в поле JSON:

{
"tenant": "{{ $('Start workflow').first().json.body.integration.tenant }}",
"runId": "{{ $('Start workflow').first().json.body.integration.runId }}",
"eventId": "document-maken-gestart",
"type": "progress",
"executionId": "{{ $execution.id }}",
"step": {
"id": "document_maken",
"label": "Document maken"
},
"message": "Het document wordt gemaakt."
}
  1. Выберите Execute step во время тестирования workflow через приложение. Узел должен возвращать статус 200.

Скопируйте этот узел HTTP Request для каждого статуса. Для каждой копии измените как минимум eventId, step.id, step.label и message.

Установка последнего callback

Если включено Сообщать о завершении workflow, на конце каждого возможного маршрута должен быть последний callback. Используйте type: "completed" при успехе, type: "failed" при ошибке, которую вы обрабатываете, и type: "rejected" когда пользователь отклоняет workflow.

Пример тела для успешного выполнения:

{
"tenant": "{{ $('Start workflow').first().json.body.integration.tenant }}",
"runId": "{{ $('Start workflow').first().json.body.integration.runId }}",
"eventId": "workflow-afgerond",
"type": "completed",
"executionId": "{{ $execution.id }}",
"step": {
"id": "afronding",
"label": "Workflow afgerond"
},
"message": "De workflow is afgerond.",
"output": {
"resultaat": "Короткое описание или ссылка на результат"
}
}

В одном исполнении для каждого callback используйте разный eventId. Также всегда указывайте четкую step.label, чтобы пользователь видел её в окне выполнения.

Опционально: запрос на одобрение в приложении

Настройка Wait узла

  1. Добавьте узел Wait на месте, где требуется одобрение.
  2. Выберите в Resume значение On Webhook Call.
  3. Установите HTTP Method на POST.
  4. Виберите AuthenticationHeader Auth.
  5. Выберите те же credentials Header Auth, что и у узла Start workflow.
  6. Перед Wait узлом разместите копию ранее настроенного HTTP Request узла и назовите её Vraag goedkeuring (Запрос одобрения).
  7. В этом узле используйте ту же динамическую URL и заголовки. Замените только JSON-тело на:
{
"tenant": "{{ $('Start workflow').first().json.body.integration.tenant }}",
"runId": "{{ $('Start workflow').first().json.body.integration.runId }}",
"eventId": "controle-document",
"type": "approval_required",
"executionId": "{{ $execution.id }}",
"step": {
"id": "controle_document",
"label": "Document controleren"
},
"approval": {
"question": "Mag de workflow doorgaan?",
"context": "Controleer eerst het gegenereerde document.",
"resumeUrl": "{{ $execution.resumeUrl }}",
"choices": [
{ "value": "approve", "label": "Goedkeuren" },
{ "value": "reject", "label": "Afwijzen" }
]
}
}

Свяжите Vraag goedkeuring с Wait узлом. После этого пользователь увидит кнопки в AI-School. Секретный resume-url не передаётся браузеру; сервер безопасно отправляет выбор Wait узлу.

Обработка выбора после Wait

  1. Добавьте после Wait узла Switch.

  2. Используйте для проверки значение:

    {{ $json.body.decision }}
  3. Создайте, например, маршрут для approve и маршрут для reject.

  4. Завершите каждый маршрут соответствующим образом, с подходящим completed, rejected или failed callback.

Значение выбора может содержать только буквы, цифры, нижнее подчеркивание и дефис. Метка может содержать обычный читаемый текст.

Настройка production callback-url

Production callback-url для AI-School:

https://europe-west1-ai-school-pro.cloudfunctions.net/n8nWorkflowCallback

Не вставляйте этот URL как статический текст в каждое callback-узел. Введите в поле URL узла HTTP Request выражение:

{{ $('Start workflow').first().json.body.integration.callbackUrl }}

AI-School автоматически предоставляет правильный production-url для каждого старта. Вышеприведённый фиксированный URL полезен лишь для тестирования, чтобы проверить, что выражение ссылается на AI-School.

Значения triggerCustomN8nWorkflow, triggerN8nWorkflow и resumeN8nWorkflow вызываются самим приложением. Эти URL-адреса не нужно настраивать в n8n.

Неожиданные ошибки и возврат данных

Обычный callback failed срабатывает только если workflow достиг узла HTTP Request. Для неожиданных ошибок узлов используйте централизованный n8n Error Workflow.

Создание центральной Error Workflow

  1. В n8n создайте отдельный workflow с именем AI-School - ошибки возврата.
  2. Добавьте узел Error Trigger.
  3. Затем добавьте узел HTTP Request.
  4. Установите Method на POST.
  5. Введите фиксированный production URL:
https://europe-west1-ai-school-pro.cloudfunctions.net/n8nWorkflowExecutionFailed
  1. Выберите Authentication: None.

  2. Включите Send Headers и добавьте:

    NameValue
    n8n-handihow-nameсекретное стандартное значение, полученное от администратора платформы
    Content-Typeapplication/json
  3. Включите Send Body, выберите JSON и вставьте тело:

{
"executionId": "{{ $json.execution.id }}",
"workflowId": "{{ $json.workflow.id }}",
"workflowName": "{{ $json.workflow.name }}",
"lastNode": "{{ $json.execution.lastNodeExecuted }}",
"message": "{{ $json.execution.error.message }}"
}
  1. Активируйте Error Workflow.
  2. Откройте настройки обычного workflow и выберите в Error Workflow этот новый Error Workflow.

Сразу после Start workflow обязательно отправляйте как минимум один callback прогресса с executionId: "{{ $execution.id }}". Так приложение узнает, к какому исполнению относится неожиданная ошибка n8n.

Важные ограничения

  • Поддерживаются только webhook-триггеры.
  • Поддерживаются только production-webhook-urls.
  • Тестовые webhook-urls с /webhook-test/ отклоняются.
  • Поддерживается только POST.
  • Поддерживается только generic header authentication.
  • Значение заголовка считается как секрет в приложении.
  • Callback-токены и resume-url обрабатываются только на серверной стороне и недоступны напрямую пользователям.
  • Тенант определяется на серверной стороне от вошедшего пользователя, а не из значения, отправленного браузером.

Решение проблем

  • 404 или webhook не зарегистрирован: активируйте workflow в n8n и используйте production-url.
  • Ошибка аутентификации: проверьте, что имя заголовка и значение в обеих системах совпадают.
  • Отсутствующие данные: проверьте, соответствуют ли имена полей ключам, которые ожидает n8n.
  • Нет запроса в n8n: проверьте, начинается ли workflow с webhook-триггера и используется ли POST.
  • Окно исполнения продолжает крутиться: если включено Сообщать о завершении workflow, проверьте, отправляет ли n8n последний completed, failed или rejected callback. Если вы не ожидаете обратных уведомлений, отключите все три варианта в регистрации.
  • Нет видимого прогресса: проверьте, включено ли в регистрации Сообщать промежуточный прогресс, или сохранён ли объект integration, и что у каждого callback есть уникальный eventId.
  • Кнопки одобрения не работают: проверьте Wait узел, resumeUrl, аутентификацию заголовков и допустимые символы в choices[].value.
WhatsApp