Workflowi n8n
AI-School może uruchamiać workflowy n8n za pośrednictwem produkcyjnego webhooka. Jest to przydatne, gdy chcesz uruchomić zautomatyzowany proces poza AI-School, na przykład utworzenie zadania, aktualizację rekordu CRM, rozpoczęcie flow raportowania albo przekazanie danych formularza do innego systemu.
Przykład: artykuł prasowy na stronie szkoły
Załóżmy, że szkoła utworzyła workflow n8n, który publikuje artykuł prasowy na stronie WordPress szkoły. W AI-School wpisujesz wtedy tylko krótki fragment tekstu, na przykład kilka zdań o tygodniu projektowym, dniu sportu lub dniu otwartym. Tym tekstem uruchamiasz workflow w n8n.
Workflow n8n może potem na przykład:
- Z krótkiego tekstu stworzyć zgrabny tekst roboczy za pomocą węzła LLM i promptu dobrze dopasowanego do tonu szkoły.
- Wygenerować pasującą ilustrację za pomocą drugiego węzła LLM, na przykład w kolorach szkoły i w rozpoznawalnym stylu ilustracyjnym.
- Przygotować lub opublikować tekst i obraz jako wpis blogowy na stronie WordPress.
Tak współpracują AI-School i n8n: w AI-School użytkownik wybiera workflow i wypełnia potrzebne informacje. Następnie n8n wykonuje zautomatyzowane kroki i sprawia, że artykuł trafia na stronę.
Co robi ta integracja?
Uruchamiasz workflow n8n z poziomu przeglądu workflowów. Obowiązkowe są tylko produkcyjny webhook, POST i Header Auth. Pola oraz komunikaty zwrotne z n8n są opcjonalne i mogą być konfigurowane niezależnie od siebie.
- Jeśli workflow nie ma pól, webhook jest wywoływany od razu.
- Jeśli workflow ma pola, najpierw otwiera się formularz. Użytkownik wypełnia pola, a potem uruchamia workflow przyciskiem.
- Wprowadzone wartości są przesyłane jako JSON w POST-request do webhooka n8n.
- Bez komunikatów zwrotnych AI-School tylko potwierdza, że workflow został uruchomiony i dalej działa w n8n. Okno nie pokazuje spinnera i można je od razu zamknąć.
- Jeśli zostało to zaznaczone przy rejestracji, workflow może przesyłać do AI-School pośrednie kroki lub zakończenie.
- Jeśli zostało zaznaczone zatwierdzanie przy rejestracji, użytkownik może dokonać wyboru bezpośrednio w AI-School. n8n kontynuuje wtedy od kroku oczekującego.
Tworzenie workflow n8n w AI-School
Administrator rejestruje workflow w następujący sposób:
- Przejdź do Asystenci.
- Otwórz zakładkę Asystenci workflow.
- W karcie u góry kliknij Nowy workflow i wybierz workflow n8n.
- Wpisz nazwę workflow oraz produkcyjny URL n8n.
- Skonfiguruj Header authentication z nazwą nagłówka i tajną wartością nagłówka.
- W sekcji Komunikaty zwrotne z n8n zaznacz tylko te elementy, które rzeczywiście są zbudowane w tym workflow n8n: postęp, zatwierdzenie i/lub koniec workflow.
- Opcjonalnie dodaj pola, które mają być przesyłane w POST-request.
- Zapisz workflow.
Domyślnie wszystkie trzy opcje komunikatów zwrotnych są wyłączone. Jeśli później dodasz callbacki lub krok zatwierdzania w n8n, zaktualizuj też rejestrację w AI-School. Dzięki temu dialog wie, czy ma tylko pokazać potwierdzenie startu, czy czekać na dalsze sygnały.
Pola
- Pola są opcjonalne.
- Każde pole ma jedną nazwę pola i typ.
- Obsługiwane typy pól to krótki tekst, długi tekst, liczba, tak/nie, data, jeden wybór i wiele wyborów.
- Dla Jeden wybór i Wiele wyborów dodajesz dostępne opcje. Jeden wybór jest wyświetlany jako kompaktowa lista wyboru; Wiele wyborów pokazuje pola wyboru. Wybrana wartość lub wartości są przesyłane w body JSON.
- Pola wymagane muszą zostać wypełnione, zanim workflow będzie można uruchomić.
- Nazwa pola staje się kluczem w body JSON wysyłanym do n8n.
Tworzenie kompatybilnego workflow w n8n
- W n8n utwórz nowy workflow.
- Jako pierwszy node dodaj Webhook.
- Nadaj temu node’owi dokładnie nazwę Start workflow. Poniższe przykłady używają tej nazwy.
- Ustaw HTTP Method na POST.
- Wybierz przy Authentication opcję Header Auth i wybierz credential Header Auth.
- W tym credentialu wpisz tę samą nazwę nagłówka i tę samą tajną wartość co w workflow w AI-School.
- Ustaw Respond lub Response Mode na Immediately. Aplikacja otrzyma wtedy od razu pomyślne potwierdzenie startu, podczas gdy n8n będzie pracować dalej.
- Skopiuj Production URL z node’a Webhook do pola n8n produkcyjny url w AI-School. Nie używaj testowego URL-a z
/webhook-test/. - Aktywuj workflow w n8n.
Dane z AI-School znajdują się w n8n pod body. Dane integracyjne są więc dostępne pod body.integration. Nie usuwaj tych danych w node’ach Edit Fields, Set ani Code. Poniższe przykłady odczytują je bezpośrednio z node’a Start workflow.
Przykład body JSON
Jeśli zdefiniujesz pola o nazwach prompt, klantnaam, doelgroepen i datum, n8n otrzyma na przykład takie body JSON. AI-School automatycznie dodaje obiekt integration.
{
"prompt": "Stwórz krótkie podsumowanie zgłoszenia.",
"klantnaam": "Przykładowa organizacja",
"doelgroepen": ["pracownicy", "rodzice"],
"datum": "2026-09-22",
"integration": {
"runId": "chat-document-id",
"tenant": "default",
"callbackUrl": "https://europe-west1-ai-school-pro.cloudfunctions.net/n8nWorkflowCallback",
"callbackToken": "tymczasowy-token-dla-tego-uruchomienia"
}
}
Token callbacka należy do jednego uruchomienia. Nie zapisuj go w logach, stałej konfiguracji ani w innych systemach.
Opcjonalnie: przesyłanie postępu i zakończenia
AI-School może wyświetlać tylko to, co zwróci n8n. Używaj tych callbacków tylko wtedy, gdy przy rejestracji włączyłeś Zgłaszaj pośredni postęp i/lub Zgłaszaj koniec workflow.
Konfiguracja node’a HTTP Request
-
Dodaj node HTTP Request i nazwij go na przykład Zgłoś postęp.
-
Ustaw Method na POST.
-
Kliknij przy URL opcję Expression.
-
Wklej dokładnie ten expression:
{{ $('Start workflow').first().json.body.integration.callbackUrl }} -
Wybierz przy Authentication opcję None. Tymczasowy token zostanie dodany w następnym kroku jako nagłówek.
-
Włącz Send Headers i dodaj te dwa nagłówki:
Name Value AuthorizationBearer {{ $('Start workflow').first().json.body.integration.callbackToken }}Content-Typeapplication/json -
Włącz Send Body.
-
Wybierz Body Content Type: JSON i Specify Body: Using JSON.
-
Wklej poniższy JSON do pola 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": "Tworzenie dokumentu"
},
"message": "Dokument jest tworzony."
}
- Wybierz Execute step podczas testowania workflow przez aplikację. Node powinien zwrócić status 200.
Skopiuj ten node HTTP Request dla każdego komunikatu statusu. W każdej kopii zmień co najmniej eventId, step.id, step.label i message.
Konfiguracja ostatniego callbacka
Jeśli włączono Zgłaszaj koniec workflow, na końcu każdej możliwej ścieżki musi znajdować się ostatni callback. Użyj type: "completed" przy sukcesie, type: "failed" dla błędu, który obsługujesz samodzielnie, oraz type: "rejected" gdy użytkownik odrzuci workflow.
Dla udanego wykonania body może wyglądać tak:
{
"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 zakończony"
},
"message": "Workflow został zakończony.",
"output": {
"resultaat": "Krótki opis lub link do wyniku"
}
}
W ramach jednego uruchomienia używaj dla każdego callbacka innego eventId. Zawsze używaj też czytelnego step.label: ten tekst użytkownik widzi w oknie wykonania.
Opcjonalnie: proszenie o zatwierdzenie w aplikacji
Konfiguracja node’a Wait
- W miejscu, w którym potrzebne jest zatwierdzenie, dodaj node Wait.
- Wybierz przy Resume opcję On Webhook Call.
- Ustaw HTTP Method na POST.
- Wybierz przy Authentication opcję Header Auth.
- Wybierz ten sam credential Header Auth co dla node’a Start workflow.
- Przed node’em Wait umieść kopię wcześniej skonfigurowanego node’a HTTP Request i nazwij ją Poproś o zatwierdzenie.
- Użyj w tym node’ie tego samego dynamicznego URL-a i tych samych nagłówków. Zastąp jedynie body JSON przez:
{
"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": "Sprawdzenie dokumentu"
},
"approval": {
"question": "Czy workflow może kontynuować?",
"context": "Najpierw sprawdź wygenerowany dokument.",
"resumeUrl": "{{ $execution.resumeUrl }}",
"choices": [
{ "value": "approve", "label": "Zatwierdź" },
{ "value": "reject", "label": "Odrzuć" }
]
}
}
Połącz Poproś o zatwierdzenie z node’em Wait. Użytkownik zobaczy potem przyciski w AI-School. Tajny resume-url nie jest przekazywany do przeglądarki; serwer bezpiecznie przesyła wybór do node’a Wait.
Obsługa wyboru po node’ie Wait
-
Po node’ie Wait dodaj node Switch.
-
Jako sprawdzaną wartość użyj:
{{ $json.body.decision }} -
Utwórz na przykład trasę dla
approvei trasę dlareject. -
Każdą trasę zakończ odpowiednim callbackiem
completed,rejectedlubfailed.
Wartość wyboru może zawierać tylko litery, cyfry, _ i -. Etykieta może zawierać zwykły czytelny tekst.
Ustawienie produkcyjnego callback-url
Produkcjny callback-url dla AI-School to:
https://europe-west1-ai-school-pro.cloudfunctions.net/n8nWorkflowCallback
Nie wklejaj tego URL-a jako stałego tekstu w każdym callback node. W polu URL node’a HTTP Request wybierz Expression i użyj:
{{ $('Start workflow').first().json.body.integration.callbackUrl }}
AI-School automatycznie przekazuje przy każdym uruchomieniu właściwy produkcyjny URL. Stały URL powyżej służy tylko do sprawdzenia podczas testów, czy expression wskazuje na AI-School.
Callable triggerCustomN8nWorkflow, triggerN8nWorkflow i resumeN8nWorkflow są wywoływane przez samą aplikację. Nie musisz ustawiać tych URL-i w n8n.
Zgłaszanie nieoczekiwanych błędów
Zwykły callback failed działa tylko wtedy, gdy workflow dotrze do odpowiedniego node’a HTTP Request. W przypadku nieoczekiwanych błędów node’ów użyj dodatkowo centralnego n8n Error Workflow.
Tworzenie centralnego Error Workflow
-
Utwórz w n8n osobny workflow o nazwie AI-School - zwracanie błędów.
-
Dodaj node Error Trigger.
-
Następnie dodaj node HTTP Request.
-
Ustaw Method na POST.
-
W polu URL wpisz ten stały produkcyjny URL:
https://europe-west1-ai-school-pro.cloudfunctions.net/n8nWorkflowExecutionFailed -
Wybierz Authentication: None.
-
Włącz Send Headers i dodaj:
Name Value n8n-handihow-nametajna wartość domyślna, którą otrzymasz od administratora platformy Content-Typeapplication/json -
Włącz Send Body, wybierz JSON i wklej to body:
{
"executionId": "{{ $json.execution.id }}",
"workflowId": "{{ $json.workflow.id }}",
"workflowName": "{{ $json.workflow.name }}",
"lastNode": "{{ $json.execution.lastNodeExecuted }}",
"message": "{{ $json.execution.error.message }}"
}
- Aktywuj Error Workflow.
- Otwórz ustawienia zwykłego workflow i w sekcji Error Workflow wybierz ten nowy Error Workflow.
Bezpośrednio po Start workflow zawsze wysyłaj co najmniej jeden callback postępu z executionId: "{{ $execution.id }}". Dzięki temu aplikacja wie, do którego wykonania należy nieoczekiwany błąd n8n.
Ważne ograniczenia
- Obsługiwane są tylko webhook triggers.
- Obsługiwane są tylko produkcyjne webhook URL-e.
- Testowe webhook URL-e z
/webhook-test/są odrzucane. - Obsługiwany jest tylko POST.
- Obsługiwana jest tylko ogólna autoryzacja nagłówkiem.
- Wartość nagłówka jest traktowana w aplikacji jako sekret.
- Tokeny callbacków i resume-url są przetwarzane tylko po stronie serwera i nie są bezpośrednio dostępne dla użytkowników.
- Tenant jest ustalany po stronie serwera na podstawie zalogowanego użytkownika, a nie na podstawie wartości przesyłanej przez przeglądarkę.
Rozwiązywanie problemów
- 404 lub webhook nie jest zarejestrowany: aktywuj workflow w n8n i użyj produkcyjnego URL-a.
- Błąd autoryzacji: sprawdź, czy nazwa nagłówka i wartość w obu systemach są dokładnie takie same.
- Brakujące dane: sprawdź, czy nazwy pól w aplikacji odpowiadają kluczom, których oczekuje n8n.
- Brak requestu w n8n: sprawdź, czy workflow zaczyna się od triggera webhook i używa POST.
- Okno wykonania pozostaje otwarte: jeśli włączyłeś Zgłaszaj koniec workflow, sprawdź, czy n8n wysyła ostatni callback
completed,failedlubrejected. Jeśli nie oczekujesz żadnych komunikatów zwrotnych, wyłącz wszystkie trzy opcje przy rejestracji. - Brak widocznego postępu: sprawdź, czy Zgłaszaj pośredni postęp jest włączone przy rejestracji, czy obiekt
integrationjest zachowany oraz czy każdy callback ma unikalnyeventId. - Przyciski zatwierdzania nie działają: sprawdź node Wait,
resumeUrl, autoryzację nagłówkiem oraz dozwolone znaki wchoices[].value.