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

рабочие процессы n8n

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

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

Предположим, что школа создала рабочий процесс 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-request на webhook n8n.
  • Без обратных уведомлений AI-School только подтверждает, что workflow запущен и дальше выполняется в n8n. Окно не показывает spinner и его можно сразу закрыть.
  • Если это включено при регистрации, workflow может отправлять в AI-School промежуточные шаги или завершение.
  • Если при регистрации включено одобрение, пользователь может сделать выбор прямо в AI-School. После этого n8n продолжает работу с ожидающего шага.

Создание workflow n8n в AI-School​

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

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

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

Поля​

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

Создание совместимого workflow в n8n​

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

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

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

  3. Нажмите у URL на Expression.

  4. Вставьте точно такое выражение:

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

  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": "Создание документа"
},
"message": "Документ создаётся."
}
  1. Выберите 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​

  1. В месте, где требуется одобрение, добавьте узел Wait.
  2. В Resume выберите On Webhook Call.
  3. Установите HTTP Method на POST.
  4. В Authentication выберите Header Auth.
  5. Выберите тот же credential Header Auth, что и для узла Start workflow.
  6. Перед Wait node поместите копию ранее настроенного узла HTTP Request и назовите её Запросить одобрение.
  7. Используйте в этом узле тот же динамический 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​

  1. После Wait node добавьте узел Switch.

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

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

  4. Завершите каждый маршрут подходящим 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​

  1. Создайте в n8n отдельный workflow с именем AI-School - fouten terugsturen.

  2. Добавьте узел Error Trigger.

  3. Затем добавьте узел HTTP Request.

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

  5. В поле URL укажите этот фиксированный production-URL:

    https://europe-west1-ai-school-pro.cloudfunctions.net/n8nWorkflowExecutionFailed
  6. Выберите Authentication: None.

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

    NameValue
    n8n-handihow-nameсекретное стандартное значение, которое вы получаете от администратора платформы
    Content-Typeapplication/json
  8. Включите 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 }}"
}
  1. Активируйте Error Workflow.
  2. Откройте настройки обычного 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.