Робочі процеси n8n
AI-School може запускати робочі процеси n8n через production webhook. Це корисно, коли ви хочете ініціювати автоматизований процес поза межами AI-School, наприклад створення задачі, оновлення запису в CRM, запуску звітування або передавання даних форми в іншу систему.
Приклад: новинна стаття на шкільному сайті
Припустімо, що школа створила робочий процес n8n, який публікує новинну статтю на сайті WordPress школи. В AI-School ви тоді вводите лише короткий текст, наприклад кілька речень про тиждень проєктів, спортивний день або день відкритих дверей. Саме з цим текстом ви запускаєте workflow у n8n.
Після цього workflow n8n може, наприклад:
- Створити з короткого тексту охайний чернетковий текст за допомогою LLM node і prompt, що добре відповідає тону школи.
- Згенерувати відповідну ілюстрацію за допомогою другої LLM node, наприклад у кольорах школи та у впізнаваному ілюстративному стилі.
- Підготувати або опублікувати текст і зображення як блог-публікацію на сайті WordPress.
Так AI-School і n8n працюють разом: в AI-School користувач обирає workflow і заповнює потрібну інформацію. Потім n8n виконує автоматизовані кроки та забезпечує, щоб новинна стаття охайно потрапила на сайт.
Що робить ця інтеграція?
Ви запускаєте workflow n8n з огляду workflows. Обов’язковими є лише 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 із header name та secret header value.
- У блоці Зворотні повідомлення з n8n позначте лише ті частини, які справді реалізовані в цьому n8n-workflow: прогрес, схвалення та/або завершення workflow.
- За потреби додайте поля, які мають надсилатися в POST-request.
- Збережіть workflow.
Усі три параметри зворотних повідомлень за замовчуванням вимкнені. Якщо пізніше ви додасте callbacks або крок схвалення в n8n, оновіть і реєстрацію в AI-School. Так діалог знатиме, чи має він лише показати підтвердження запуску, чи чекати на подальші сигнали.
Поля
- Поля є необов’язковими.
- Кожне поле має одну назву поля та один тип.
- Підтримувані типи полів: короткий текст, довгий текст, число, так/ні, дата, один вибір і кілька виборів.
- Для Один вибір і Кілька виборів додайте доступні опції. Один вибір показується як компактний список; Кілька виборів показує прапорці. Обране значення або значення надсилаються в JSON body.
- Обов’язкові поля мають бути заповнені, перш ніж workflow можна буде запустити.
- Назва поля стає key у JSON body, що надсилається до n8n.
Створення сумісного workflow в n8n
- Створіть у n8n новий workflow.
- Додайте першим node Webhook.
- Дайте цьому node точну назву Start workflow. Нижче в прикладах використовується саме ця назва.
- Встановіть HTTP Method на POST.
- У Authentication виберіть Header Auth і виберіть Header Auth credential.
- У цьому credential вкажіть ту саму назву header і secret value, що й у workflow в AI-School.
- Установіть Respond або Response Mode на Immediately. Тоді застосунок одразу отримає успішне підтвердження запуску, а n8n продовжить роботу.
- Скопіюйте Production URL з Webhook-node у поле n8n production-url в AI-School. Не використовуйте test-url з
/webhook-test/. - Активуйте workflow в n8n.
Дані з AI-School у n8n знаходяться в body. Дані інтеграції тому знаходяться в body.integration. Не видаляйте ці дані в Edit Fields-, Set- або Code-node. Наведені нижче приклади щоразу читають їх безпосередньо з node 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 node
-
Додайте HTTP Request node і назвіть його, наприклад, Повідомити прогрес.
-
Встановіть Method на POST.
-
Біля URL натисніть Expression.
-
Вставте точно такий вираз:
{{ $('Start workflow').first().json.body.integration.callbackUrl }} -
У Authentication виберіть None. Тимчасовий token буде додано в наступному кроці як header.
-
Увімкніть Send Headers і додайте ці два 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 через застосунок. Node має повертати статус 200.
Скопіюйте цей HTTP Request node для кожного повідомлення про статус. Для кожної копії змініть щонайменше 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 node.
- У Resume виберіть On Webhook Call.
- Встановіть HTTP Method на POST.
- У Authentication виберіть Header Auth.
- Виберіть той самий Header Auth credential, що й для node Start workflow.
- Перед Wait node вставте копію раніше налаштованого HTTP Request node і назвіть її Запросити схвалення.
- Використайте в цьому node ту саму динамічну 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. Secret resume-url не передається в браузер; сервер безпечно надсилає вибір до Wait node.
Обробка вибору після Wait node
-
Після Wait node додайте Switch node.
-
Використайте як значення для перевірки:
{{ $json.body.decision }} -
Створіть, наприклад, маршрут для
approveі маршрут дляreject. -
Завершіть кожен маршрут відповідним callback
completed,rejectedабоfailed.
Значення вибору може містити лише літери, цифри, _ і -. Label може містити звичайний читабельний текст.
Налаштування production callback-url
Production callback-url для AI-School:
https://europe-west1-ai-school-pro.cloudfunctions.net/n8nWorkflowCallback
Не вставляйте цю URL як фіксований текст у кожен callback node. У полі URL в HTTP Request node виберіть 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 node. Для неочікуваних помилок node додатково використовуйте центральний n8n Error Workflow.
Створення центрального Error Workflow
-
Створіть у n8n окремий workflow з назвою AI-School - fouten terugsturen.
-
Додайте node Error Trigger.
-
Потім додайте node HTTP Request.
-
Встановіть Method на POST.
-
У полі URL введіть цю фіксовану production-URL:
https://europe-west1-ai-school-pro.cloudfunctions.net/n8nWorkflowExecutionFailed -
Виберіть Authentication: None.
-
Увімкніть Send Headers і додайте:
Name Value n8n-handihow-namesecret default value, який ви отримуєте від адміністратора платформи 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-url.
- Test-webhook-url з
/webhook-test/відхиляються. - Підтримується лише POST.
- Підтримується лише generic header authentication.
- Значення header у застосунку обробляється як secret.
- Callback tokens і resume-url обробляються лише на сервері й недоступні користувачам напряму.
- Tenant визначається на сервері з даних увійшлого користувача, а не зі значення, яке надсилає браузер.
Усунення проблем
- 404 або webhook не зареєстровано: активуйте workflow в n8n і використовуйте production-url.
- Помилка автентифікації: перевірте, що header name і value в обох системах збігаються точно.
- Відсутні дані: перевірте, чи назви полів у застосунку відповідають key, які очікує n8n.
- Немає request у n8n: перевірте, чи workflow починається з webhook trigger і використовує POST.
- Вікно виконання не закривається: якщо ви увімкнули Повідомляти про завершення workflow, перевірте, чи n8n надсилає останній callback
completed,failedабоrejected. Якщо ви не очікуєте зворотних повідомлень, вимкніть усі три опції під час реєстрації. - Немає видимого прогресу: перевірте, чи під час реєстрації увімкнено Повідомляти проміжний прогрес, чи зберігається об’єкт
integrationі чи кожен callback має унікальнийeventId. - Кнопки схвалення не працюють: перевірте Wait node,
resumeUrl, header authentication і дозволені символи вchoices[].value.