рабочие процессы n8n
AI-School может запускать рабочие процессы n8n через production webhook. Это удобно, когда вы хотите запустить автоматизированный процесс вне AI-School, например создание задачи, обновление записи в CRM, запуск потока отчётности или передачу данных формы в другую систему.
Пример: новостная статья на школьном сайте
Предположим, что школа создала рабочий процесс n8n, который публикует новостную статью на сайте WordPress школы. В AI-School вы тогда вводите только короткий текст, например несколько предложений о неделе проекта, спортивном дне или дне открытых дверей. С этим текстом вы запускаете workflow в n8n.
После этого workflow n8n может, например:
- Превратить короткий текст в аккуратный черновик с помощью узла LLM и промпта, который хорошо подходит по тону школе.
- Создать подходящую иллюстрацию с помощью второго узла LLM, например в цветах школы и в узнаваемом иллюстративном стиле.
- Подготовить текст и изображение как запись блога или опубликовать их на сайте WordPress.
Так AI-School и n8n работают вместе: в AI-School пользователь выбирает workflow и заполняет нужную информацию. Затем n8n выполняет автоматизированные шаги и следит за тем, чтобы новостная статья аккуратно оказалась на сайте.
Что делает эта интеграция?
Вы запускаете workflow n8n из обзора workflow. Обязательны только production webhook, POST и Header Auth. Поля и обратные уведомления из n8n необязательны и могут настраиваться независимо друг от друга.
- Если у workflow нет полей, webhook вызывается сразу.
- Если у workflow есть поля, сначала открывается форма. Пользователь заполняет поля и затем запускает workflow кнопкой.
- Введённые значения отправляются как JSON в POST-request на webhook n8n.
- Без обратных уведомлений AI-School только подтверждает, что workflow запущен и дальше выполняется в n8n. Окно не показывает spinner и его можно сразу закрыть.
- Если это включено при регистрации, workflow может отправлять в AI-School промежуточные шаги или завершение.
- Если при регистрации включено одобрение, пользователь может сделать выбор прямо в AI-School. После этого n8n продолжает работу с ожидающего шага.
Создание workflow n8n в AI-School
Администратор регистрирует workflow следующим образом:
- Перейдите в Ассистенты.
- Откройте вкладку Workflow-ассистенты.
- Нажмите в карточке сверху Новый workflow и выберите n8n workflow.
- Укажите имя workflow и production URL n8n.
- Настройте Header authentication с помощью имени заголовка и секретного значения заголовка.
- В разделе Обратные уведомления из n8n отметьте только те пункты, которые действительно реализованы в этом n8n-workflow: прогресс, одобрение и/или конец workflow.
- При необходимости добавьте поля, которые должны отправляться в POST-request.
- Сохраните workflow.
Все три опции обратных уведомлений по умолчанию выключены. Если позже вы добавите callbacks или шаг одобрения в n8n, обновите также регистрацию в AI-School. Так диалог будет знать, нужно ли ему показывать только подтверждение запуска или продолжать ждать дальнейших сигналов.
Поля
- Поля необязательны.
- У каждого поля есть одно имя поля и тип.
- Поддерживаемые типы полей: короткий текст, длинный текст, число, да/нет, дата, один выбор и множественный выбор.
- Для Одного выбора и Множественного выбора добавьте доступные варианты. Один выбор отображается как компактный список выбора; Множественный выбор показывает чекбоксы. Выбранное значение или значения отправляются в JSON body.
- Обязательные поля должны быть заполнены до запуска workflow.
- Имя поля становится key в JSON body, отправляемом в n8n.
Создание совместимого workflow в n8n
- Создайте в n8n новый workflow.
- Добавьте первым узлом Webhook.
- Дайте этому узлу точное имя Start workflow. Ниже приведённые примеры используют это имя.
- Установите HTTP Method на POST.
- В Authentication выберите Header Auth и выберите credential Header Auth.
- В этом credential укажите то же имя заголовка и то же секретное значение, что и в workflow в AI-School.
- Установите Respond или Response Mode на Immediately. Тогда приложение сразу получит успешное подтверждение запуска, а n8n продолжит работу.
- Скопируйте Production URL узла Webhook в поле n8n productie-url в AI-School. Не используйте test-url с
/webhook-test/. - Активируйте workflow в n8n.
Данные из AI-School в n8n находятся в body. Интеграционные данные поэтому находятся в body.integration. Не удаляйте эти данные в узле Edit Fields, Set или Code. Примеры ниже всегда читают их напрямую из узла Start workflow.
Пример JSON body
Если вы определите поля с именами prompt, klantnaam, doelgroepen и datum, n8n, например, получит такой JSON body. AI-School автоматически добавляет объект integration.
{
"prompt": "Сделайте краткое резюме запроса.",
"klantnaam": "Пример организации",
"doelgroepen": ["сотрудники", "родители"],
"datum": "2026-09-22",
"integration": {
"runId": "chat-document-id",
"tenant": "default",
"callbackUrl": "https://europe-west1-ai-school-pro.cloudfunctions.net/n8nWorkflowCallback",
"callbackToken": "временный-токен-для-этого-запуска"
}
}
Callback token привязан к одному запуску. Не сохраняйте его в логах, постоянной конфигурации или других системах.
Опционально: отправка прогресса и завершения
AI-School может показывать только то, что сообщает n8n. Используйте эти callbacks только если при регистрации вы включили Сообщать промежуточный прогресс и/или Сообщать о конце workflow.
Настройка узла HTTP Request
-
Добавьте узел HTTP Request и назовите его, например, Сообщить прогресс.
-
Установите Method на POST.
-
Нажмите у URL на Expression.
-
Вставьте точно такое выражение:
{{ $('Start workflow').first().json.body.integration.callbackUrl }} -
В Authentication выберите None. Временный токен будет добавлен на следующем шаге как header.
-
Включите Send Headers и добавьте эти два заголовка:
Name Value AuthorizationBearer {{ $('Start workflow').first().json.body.integration.callbackToken }}Content-Typeapplication/json -
Включите Send Body.
-
Выберите Body Content Type: JSON и Specify Body: Using JSON.
-
Вставьте нижеследующий 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": "Создание документа"
},
"message": "Документ создаётся."
}
- Выберите Execute step при тестировании workflow через приложение. Узел должен вернуть статус 200.
Скопируйте этот узел HTTP Request для каждого сообщения о статусе. Для каждой копии изменяйте минимум eventId, step.id, step.label и message.
Настройка последнего callback
Если включено Сообщать о конце workflow, в конце каждого возможного пути должен быть последний callback. Используйте type: "completed" при успехе, type: "failed" при ошибке, которую вы обрабатываете сами, и type: "rejected", когда пользователь отклоняет workflow.
Для успешного выполнения body может выглядеть так:
{
"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 завершён"
},
"message": "Workflow завершён.",
"output": {
"resultaat": "Краткое описание или ссылка на результат"
}
}
В рамках одного запуска используйте для каждого callback другой eventId. Также всегда используйте понятный step.label: этот текст пользователь видит в окне выполнения.
Опционально: запрос одобрения в приложении
Настройка Wait node
- В месте, где требуется одобрение, добавьте узел Wait.
- В Resume выберите On Webhook Call.
- Установите HTTP Method на POST.
- В Authentication выберите Header Auth.
- Выберите тот же credential Header Auth, что и для узла Start workflow.
- Перед Wait node поместите копию ранее настроенного узла HTTP Request и назовите её Запросить одобрение.
- Используйте в этом узле тот же динамический URL и те же headers. Замените только JSON body на:
{
"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": "Проверка документа"
},
"approval": {
"question": "Можно ли продолжить workflow?",
"context": "Сначала проверьте сгенерированный документ.",
"resumeUrl": "{{ $execution.resumeUrl }}",
"choices": [
{ "value": "approve", "label": "Одобрить" },
{ "value": "reject", "label": "Отклонить" }
]
}
}
Соедините Запросить одобрение с Wait node. После этого пользователь увидит кнопки в AI-School. Секретный resume-url не передаётся в браузер; сервер безопасно отправляет выбор в Wait node.
Обработка выбора после Wait node
-
После Wait node добавьте узел Switch.
-
В качестве проверяемого значения используйте:
{{ $json.body.decision }} -
Создайте, например, маршрут для
approveи маршрут дляreject. -
Завершите каждый маршрут подходящим callback
completed,rejectedилиfailed.
Значение выбора может содержать только буквы, цифры, _ и -. Подпись может содержать обычный читаемый текст.
Настройка production callback-url
Production callback-url для AI-School:
https://europe-west1-ai-school-pro.cloudfunctions.net/n8nWorkflowCallback
Не вставляйте этот URL как фиксированный текст в каждый callback-node. В поле URL узла HTTP Request выберите Expression и используйте:
{{ $('Start workflow').first().json.body.integration.callbackUrl }}
Так AI-School автоматически передаёт правильный production-url при каждом запуске. Указанный выше фиксированный URL используйте только для проверки во время тестирования, что выражение указывает на AI-School.
Callable triggerCustomN8nWorkflow, triggerN8nWorkflow и resumeN8nWorkflow вызываются самим приложением. Эти URL не нужно настраивать в n8n.
Отправка неожиданных ошибок
Обычный callback failed работает только тогда, когда workflow достигает соответствующего узла HTTP Request. Для неожиданных ошибок узлов дополнительно используйте центральный n8n Error Workflow.
Создание центрального Error Workflow
-
Создайте в n8n отдельный workflow с именем AI-School - fouten terugsturen.
-
Добавьте узел Error Trigger.
-
Затем добавьте узел HTTP Request.
-
Установите Method на POST.
-
В поле URL укажите этот фиксированный production-URL:
https://europe-west1-ai-school-pro.cloudfunctions.net/n8nWorkflowExecutionFailed -
Выберите Authentication: None.
-
Включите Send Headers и добавьте:
Name Value n8n-handihow-nameсекретное стандартное значение, которое вы получаете от администратора платформы Content-Typeapplication/json -
Включите Send Body, выберите JSON и вставьте этот body:
{
"executionId": "{{ $json.execution.id }}",
"workflowId": "{{ $json.workflow.id }}",
"workflowName": "{{ $json.workflow.name }}",
"lastNode": "{{ $json.execution.lastNodeExecuted }}",
"message": "{{ $json.execution.error.message }}"
}
- Активируйте Error Workflow.
- Откройте настройки обычного workflow и выберите в Error Workflow этот новый Error Workflow.
Сразу после Start workflow всегда отправляйте как минимум один callback прогресса с executionId: "{{ $execution.id }}". Так приложение узнает, к какому запуску относится неожиданная ошибка n8n.
Важные ограничения
- Поддерживаются только webhook triggers.
- Поддерживаются только production webhook-URLs.
- Test-webhook-URLs с
/webhook-test/отклоняются. - Поддерживается только POST.
- Поддерживается только generic header authentication.
- Значение header в приложении обрабатывается как секрет.
- Callback tokens и resume-URL обрабатываются только на стороне сервера и не доступны пользователям напрямую.
- Tenant определяется на стороне сервера по вошедшему в систему пользователю, а не по значению, отправленному браузером.
Поиск и устранение проблем
- 404 или webhook не зарегистрирован: активируйте workflow в n8n и используйте production-url.
- Ошибка аутентификации: проверьте, что имя и значение header в обеих системах полностью совпадают.
- Отсутствуют данные: проверьте, что имена полей в приложении соответствуют keys, которые ожидает n8n.
- В n8n нет request: проверьте, что workflow начинается с webhook trigger и использует POST.
- Окно выполнения продолжает вращаться: если вы включили Сообщать о конце workflow, проверьте, отправляет ли n8n последний callback
completed,failedилиrejected. Если вы не ожидаете обратных уведомлений, выключите все три опции при регистрации. - Не видно прогресса: проверьте, включена ли при регистрации опция Сообщать промежуточный прогресс, сохраняется ли объект
integrationи имеет ли каждый callback уникальныйeventId. - Кнопки одобрения не работают: проверьте Wait node,
resumeUrl, header authentication и разрешённые символы вchoices[].value.