Webhook to prosty pomysł: Twój workflow n8n dostaje unikalny URL, a każdy HTTP POST na ten adres go uruchamia. Formularz ze strony wysyła dane? Webhook. Nowy lead z LinkedIna? Webhook. Wiadomość od Stripe’a o zapłaconej fakturze? Webhook. Przewodnik pokazuje wszystko — od pierwszego URL-a do produkcyjnej konfiguracji.
Jak dodać webhook w n8n — krok po kroku
- 1.W nowym workflowie wybierz „Webhook” jako pierwszy node (zamiast Schedule albo Manual Trigger)
- 2.Ustaw metodę HTTP (najczęściej POST) i ścieżkę (np. /lead-form)
- 3.n8n wygeneruje dwa URL-e: Test URL (do developmentu) i Production URL (aktywny dopiero po zapisaniu workflowu jako „Active”)
- 4.Skopiuj Production URL i wklej go w swoim systemie źródłowym (formularz, Stripe, Slack app itd.)
- 5.Zapisz workflow i włącz tryb aktywny — od tej chwili każde żądanie POST na ten URL uruchamia przepływ
Co przychodzi do webhooka i jak to odczytać
Każde żądanie HTTP ma trzy części: nagłówki (headers), parametry query i ciało (body). n8n dostarcza wszystkie trzy w pierwszym node pod kluczami `$json.headers`, `$json.query` i `$json.body`. W 95% przypadków interesuje Cię body.
Przykład: formularz kontaktowy wysyła JSON `{"email":"jan@example.com","message":"Hej"}`. W kolejnym node odczytasz to przez `{{ $json.body.email }}` i `{{ $json.body.message }}`. n8n sam wykrywa format — JSON, form-urlencoded, multipart.
Jak zabezpieczyć webhook
Domyślnie URL webhooka jest publiczny. Każdy kto go zna, może go wywołać. W produkcji to ryzyko: spam, ataki DoS, koszty wywołań AI. Trzy warstwy zabezpieczeń, które powinieneś zastosować:
1. Unikalna, losowa ścieżka
n8n domyślnie generuje UUID w ścieżce. Nie używaj prostych ścieżek jak `/lead` — ktoś je zgadnie. `/lead-form-a7f3b9c1` jest praktycznie niemożliwe do odgadnięcia.
2. Walidacja nagłówka — secret token
W ustawieniach webhooka włącz „Authentication: Header Auth”. n8n odrzuci każde żądanie, które nie ma poprawnego nagłówka (np. `X-Auth-Token: abc123xyz`). Ten token ustawiasz po obu stronach — w workflowie i w systemie źródłowym.
3. Signature verification (HMAC)
Dla webhooków od Stripe, GitHub, Shopify — używaj HMAC. System źródłowy podpisuje każde żądanie kluczem tajnym, a Ty w n8n sprawdzasz czy podpis się zgadza. To najpewniejsze zabezpieczenie przed podszywaniem.
Odpowiedź z webhooka — co wraca do klienta
Domyślnie n8n odpowiada `200 OK` od razu po przyjęciu żądania i kontynuuje workflow w tle. Jeśli chcesz zwrócić konkretną odpowiedź (np. dla formularza, który czeka na „wysłano pomyślnie”), dodaj na końcu workflowu node „Respond to Webhook” i zwróć dowolny JSON lub status.
Przy długich workflowach (>30 sek) zawsze używaj trybu „Respond Immediately” z odpowiedzią potwierdzającą — inaczej klient zobaczy timeout, nawet jeśli workflow dokończy pracę poprawnie.
Najczęstsze błędy i jak ich uniknąć
- Brak obsługi retry — gdy źródło robi retry (np. Stripe), workflow wykona się 2–3 razy. Zawsze dodawaj sprawdzenie czy zdarzenie nie było już obsłużone
- Obciążenie sync — jeśli webhook robi 30 sekund ciężkiej pracy, źródło uzna że nie żyjesz. Oddziel szybką odpowiedź (<2s) od ciężkiego przetwarzania w tle
- Brak logowania błędów — ustaw Error Workflow w każdym webhook flow. Inaczej 5% nieudanych żądań zniknie bez śladu
- Hardcodowane tokeny — trzymaj secret token w zmiennych środowiskowych n8n, nie w samym workflowie
- Brak rate limitingu — na publicznym webhooku dodaj rate limit (w Nginx/Caddy lub w pierwszym node), inaczej bot zaśpiewa pizzę za 2000 zł w OpenAI
Praktyczne zastosowania webhooków u naszych klientów
- Formularz na stronie → webhook → CRM + Slack powiadomienie
- Stripe payment succeeded → webhook → faktura w Fakturownia + mail z dostępem
- Nowy komentarz pod postem LinkedIn → webhook → klasyfikacja (lead/spam/pytanie) → CRM lub odpowiedź AI
- Zgłoszenie w Intercom → webhook → klasyfikacja priorytetu → przypisanie w ClickUp
- Zmiana statusu zamówienia w Shopify → webhook → powiadomienie klienta SMS-em (Twilio)
Kiedy webhook to zły pomysł
Webhook działa tylko gdy źródło sama wie, że ma go wysłać. Jeśli potrzebujesz nasłuchu czegoś bez natywnego webhooka (np. zmiany w Excelu na Google Drive), użyj polling — n8n node „Schedule Trigger” + sprawdzanie co X minut. Webhook jest lepszy, polling jest uniwersalny.
Podsumowanie
Webhook to fundament każdej poważnej automatyzacji w n8n. Poprawnie zbudowany jest szybki, tani, niezawodny i bezpieczny. Poprawnie ZBUDOWANY — z walidacją, retry, rate limitingiem i logowaniem błędów. Bez tego jest miną, która wybucha po pierwszym incydencie.
Jeśli chcesz, żebyśmy zbudowali i zabezpieczyli webhooki dla Twoich procesów — autigrove.pl/konsultacja. Robimy to dla każdego klienta w cenie wdrożenia.
