Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
n8n (wymawiane n-eight-n, od angielskiego nodemation) to open-source narzędzie do automatyzacji przepływów pracy (workflow automation). Pozwala łączyć ze sobą setki aplikacji, baz danych, API i usług AI - bez pisania kodu, za pomocą wizualnego edytora węzłów (node-based editor).
Przepływ to gotowy scenariusz automatyzacji - ciąg połączonych kroków, które n8n wykonuje sam, jeden po drugim, bez Twojego udziału. Każdy krok to węzeł (klocek), a strzałki między węzłami pokazują, jak dane wędrują od początku do końca.
Każdy przepływ zaczyna się od wyzwalacza - zdarzenia, które go uruchamia (nowy e-mail, konkretna godzina, wysłany formularz). Potem kolejne węzły coś z danymi robią: pobierają je z bazy albo z innego systemu, przeliczają i wysyłają dalej. Schemat jest zawsze ten sam:
Najprościej myśleć o przepływie jak o przepisie kucharskim albo taśmie produkcyjnej: ustalasz kroki raz, a potem wykonują się same - codziennie rano, przy każdym nowym mailu czy po każdym wypełnionym formularzu.
W przeciwieństwie do płatnych SaaS-ów jak Zapier czy Make.com, n8n możesz uruchomić na własnym serwerze - i nie płacisz ani za liczbę integracji, ani za liczbę wykonań. To fundamentalna różnica dla firm, które przetwarzają tysiące rekordów dziennie lub dbają o prywatność danych.
n8n uruchomisz na dwa sposoby. Pierwszy to chmura - gotowy, zarządzany hosting n8n Cloud, gdzie nie zajmujesz się administracją i płacisz za wygodę. Drugi to własny serwer (self-hosted) - pełna kontrola nad danymi, bez limitów wykonań i bez abonamentu. Jeśli chcesz samodzielnie, krok po kroku postawić n8n na własnej maszynie, mamy o tym osobny, szczegółowy tutorial: Jak postawić n8n na własnym serwerze - kompletny przewodnik krok po kroku.
n8n powstał w 2019 roku, jest napisany w TypeScript/Node.js i działa natywnie na Linuksie, macOS, Windows oraz w kontenerach Docker. Projekt ma ponad 190 000 gwiazdek na GitHub i jedną z najaktywniejszych społeczności wśród narzędzi automatyzacji, która regularnie tworzy nowe węzły.
Te cztery narzędzia trafiają na tę samą listę przy każdej decyzji o automatyzacji. Różnią się fundamentalnie modelem biznesowym i możliwościami technicznymi.
| Kryterium | n8n | Zapier | Make.com | Power Automate |
|---|---|---|---|---|
| Open-source | Tak | Nie | Nie | Nie |
| Self-hosting | Pełny | Brak | Brak | Brak (chmura MS) |
| Cena (start) | $0 (self-hosted) | ~$20/mies. | ~$9/mies. | od ~$15/użytk./mies. |
| Limity wykonań | Brak (self-hosted) | 750/mies. (plan darmowy) | 1 000/mies. (plan darmowy) | Limity API wg planu |
| Wbudowane węzły AI | Natywne | Ograniczone | Ograniczone | AI Builder (dodatek) |
| JavaScript w węzłach | Pełny | Brak | Częściowy | Brak (Power Fx) |
| Liczba integracji | 400+ | 6 000+ | 1 500+ | 1 000+ konektorów |
| Prywatność danych | Pełna kontrola | Chmura obca | Chmura obca | Chmura obca (Microsoft) |
Kiedy wybrać n8n: gdy liczy się prywatność danych (branża medyczna, finanse, B2B Enterprise), gdy przepływ wymaga niestandardowej logiki w kodzie, gdy koszty rosną przy dużej skali wykonań.
Kiedy Zapier ma przewagę: gdy potrzebujesz szybko połączyć niszową aplikację (Zapier ma 6 000+ integracji) i nie zależy Ci na self-hostingu.
Kiedy Power Automate ma przewagę: gdy Twoja firma żyje w ekosystemie Microsoft 365 (Outlook, SharePoint, Teams, Excel) i chcesz automatyzować głównie w jego obrębie. Płacisz wtedy za to, co i tak masz, a konektory do produktów Microsoftu są dopracowane. W zamian tracisz jednak otwartość, pełny self-hosting i swobodę kodu (zamiast JavaScriptu jest język wyrażeń Power Fx), a dane i tak przechodzą przez chmurę Microsoftu.
Po uruchomieniu n8n wita nas dashboard z listą przepływów pracy (workflows), historią wykonań i zarządzaniem danymi uwierzytelniającymi (credentials).
Serce n8n to edytor canvas - nieskończona przestrzeń robocza, na której buduje się przepływ przez przeciąganie i łączenie węzłów. Każdy węzeł reprezentuje jedną operację: pobranie danych z bazy, wysyłkę emaila, wywołanie API, decyzję warunkową albo uruchomienie modelu AI.
Węzeł (po angielsku „node") to pojedynczy klocek przepływu - jedna operacja: pobranie danych, wysłanie maila, decyzja warunkowa albo wywołanie modelu AI. Kolejne węzły dodajesz zawsze tak samo: klikasz „+" przy istniejącym węźle, a n8n otwiera panel „What happens next?" („co dalej?") z wyszukiwarką i kategoriami. To w tym panelu wybierasz, jaki klocek dołożyć. Z grubsza węzły dzielą się na pięć rodzajów:
Kiedy dodasz węzeł, klikasz w niego dwukrotnie, żeby otworzyć jego panel ustawień. Panel ma zawsze ten sam, trzykolumnowy układ: po lewej INPUT (dane wchodzące z poprzedniego kroku), w środku parametry samego węzła (czyli to, co ma zrobić), a po prawej OUTPUT (wynik, który zobaczysz po kliknięciu „Execute step", czyli „wykonaj krok"). Cała konfiguracja dzieje się w środkowej kolumnie.
Dla przykładu spójrz na panel węzła Webhook. Webhook to po prostu adres URL, pod który inne programy mogą wysłać dane do Twojego przepływu - na przykład gdy klient wyśle formularz zamówienia na Twojej stronie, sklep może przekazać to zamówienie właśnie pod taki adres. W panelu wybierasz metodę HTTP, a w polu Path (ścieżka) - końcówkę tego adresu.
Jedna rzecz w polu „Path" potrafi zmylić. Gdy dopiero dodasz węzeł Webhook, n8n wpisuje tam automatycznie losowy, dziwnie wyglądający ciąg (coś w stylu 0643d861-24c8-4245-...) - nie trzeba tego rozumieć ani wpisywać samemu, n8n generuje go sam, żeby webhook od razu miał unikalny adres. Możesz go zostawić, ale dużo czytelniej nadać własną nazwę: tutaj wpisaliśmy nowe-zamowienie, więc n8n zbudował z niej gotowy adres .../webhook/nowe-zamowienie (widoczny na górze panelu):
Każde pole w panelu węzła możesz wypełnić na dwa sposoby. Tryb Fixed (stały) to zwykła, wpisana na sztywno wartość. Tryb Expression (wyrażenie) zamienia pole w mały wzór, który liczy się sam na podstawie danych z wcześniejszych kroków - przełączasz go ikoną „=" obok pola. Wyrażenia piszesz w podwójnych nawiasach klamrowych {{ }}, a w środku sięgasz po dane przez $json (bieżący element), $now (aktualny czas) albo $node["Nazwa"] (wynik konkretnego, nazwanego węzła).
Najlepiej widać to na przykładzie. Wyobraź sobie, że do Twojego przepływu trafia nowe zamówienie - powiedzmy z formularza zamówienia na stronie albo prosto z systemu sklepu. Surowe dane (imię, nazwisko, e-mail, kwota netto) wpadają do węzła Przetwarzanie danych (typ Edit Fields), a Ty wyrażeniami od razu liczysz z nich gotowe pola - dokładnie tak, jak na zrzucie poniżej:
{{ $json.imie + ' ' + $json.nazwisko }} - sklejone imię i nazwisko (pole „imie_i_nazwisko"){{ $json.email.toLowerCase() }} - e-mail sprowadzony do małych liter (pole „email_lowercase"){{ ($json.wartosc_netto * 1.23).toFixed(2) }} - kwota brutto policzona w locie, VAT 23% (pole „wartosc_brutto"){{ $now.toFormat('dd.MM.yyyy HH:mm') }} - bieżąca data i godzina (pole „data_zamowienia"){{ $json.wartosc_netto > 1000 ? 'VIP' : 'standard' }} - etykieta klienta zależna od kwoty (pole „status")
$now n8n od razu pokazuje wyliczony wynik: „29.06.2026 19:47".Zamiast suchej teorii zbudujemy razem konkretną, przydatną automatyzację, którą możesz odtworzyć u siebie w kilkanaście minut: codziennie rano n8n sam pobierze aktualny kurs euro z Narodowego Banku Polskiego i wyśle Ci go na e-mail. Bez pisania kodu, bez instalowania niczego poza n8n. Cały przepływ to trzy klocki: wyzwalacz czasowy, pobranie danych i wysyłka maila.
To dobry pierwszy projekt, bo każdy krok przetestujesz na żywo (jednym kliknięciem), a dane są prawdziwe - API NBP jest darmowe i nie wymaga logowania ani klucza.
Każdy przepływ w n8n musi się od czegoś zacząć - od wyzwalacza (po angielsku „trigger"), czyli zdarzenia, które go uruchamia. Tworzymy nowy, pusty przepływ, a n8n od razu pyta „What triggers this workflow?" („co uruchamia ten przepływ?"). W wyszukiwarce wpisujemy Schedule i z listy wybieramy Schedule Trigger - wyzwalacz, który sam odpala przepływ o ustalonej porze, bez Twojego udziału.
Inne popularne wyzwalacze to formularz, nowy e-mail albo zdarzenie z aplikacji. My chcemy „codziennie rano", więc wybieramy harmonogram.
Po dodaniu wyzwalacza n8n od razu otwiera jego ustawienia (gdy zamkniesz panel, wrócisz do niego dwuklikiem w węzeł na planszy). Tutaj decydujesz, jak często przepływ ma ruszać. Rozwijamy listę Trigger Interval i wybieramy jednostkę czasu - do wyboru są sekundy, minuty, godziny, dni, tygodnie, miesiące, a nawet własny harmonogram w formacie Cron. Dla „codziennie rano" wybieramy Days. Niżej, w polu Days Between Triggers wpisujemy 1 (co jeden dzień), a w Trigger at Hour i Trigger at Minute ustawiamy godzinę 8 i minutę 0.
Panel ustawień węzła nie ma osobnego przycisku „Zapisz" ani „OK" - po prostu zamykasz go krzyżykiem w prawym górnym rogu (albo klikając w planszę poza panelem), a wpisane wartości zostają zapamiętane. Zanim zamkniesz, możesz kliknąć „Execute step" („wykonaj krok"), żeby od razu przetestować wyzwalacz - n8n pokaże wtedy w panelu po prawej, że zadziałał. Jedno zastrzeżenie: samo ustawienie godziny to jeszcze nie znaczy, że przepływ już chodzi - żeby naprawdę ruszał codziennie o 8:00, trzeba na końcu zapisać cały przepływ i go włączyć (zrobimy to w ostatnim kroku).
Gdy zamkniemy panel ustawień, na planszy zostaje sam wyzwalacz - z zielonym znacznikiem po teście i wolnym wyjściem (znak „+"), do którego za chwilę podłączymy kolejny krok:
Mamy wyzwalacz, teraz dodajemy właściwą akcję - pobranie kursu. Klikamy znak „+" przy węźle wyzwalacza, a w panelu „What happens next?" wyszukujemy i dodajemy węzeł HTTP Request - to uniwersalny klocek do rozmowy z dowolnym serwisem przez internet.
W węźle HTTP Request zostawiamy metodę GET i w polu „URL" wklejamy adres darmowego API NBP (bez logowania i bez klucza):
https://api.nbp.pl/api/exchangerates/rates/a/eur/?format=json
Po wklejeniu adresu klikamy „Execute step" („wykonaj krok"), żeby od razu przetestować węzeł - n8n wykona zapytanie do NBP i w panelu po prawej pokaże odpowiedź:
HTTP Request to uniwersalny klocek do rozmowy z dowolnym serwisem przez internet. Tu pobiera kurs walut, ale tak samo pobierze pogodę, dane z Twojego sklepu czy z firmowego API.
Na koniec dodajemy węzeł, który wyśle pobrany kurs mailem. Tak jak poprzednio klikamy „+", w wyszukiwarce wpisujemy Send Email i wybieramy go z listy. Przy pierwszym użyciu raz podłączasz własne konto pocztowe - przycisk „Set up credential" (serwer SMTP albo Gmail) - a potem wpisujesz adres nadawcy, odbiorcy i temat wiadomości.
Zanim n8n wyśle wiadomość, trzeba raz podłączyć konto pocztowe, z którego maile będą wychodzić. W ustawieniach węzła, w sekcji „Credential" na samej górze, klikamy „Set up credential".
W treści maila wstawiamy gotowy tekst z wyrażeniami, które podstawią pobrany kurs - możesz go wkleić wprost w pole „Text". A jeśli wolisz nie wpisywać wyrażeń ręcznie, każdą wartość z danych pobranych z NBP możesz też po prostu przeciągnąć myszką do treści maila (pokazujemy to na animacji nieco niżej):
Aktualny kurs EUR/PLN: {{ $json.rates[0].mid }} zł (tabela {{ $json.rates[0].no }} z dnia {{ $json.rates[0].effectiveDate }}).
{{ $json.rates[0].mid }} - to ono podstawi kurs pobrany w poprzednim kroku. Po lewej widać dane, z których n8n może czerpać.Wyrażenie w podwójnych nawiasach klamrowych to sposób n8n na „weź wartość z poprzedniego węzła". Nie musisz nic programować - przeciągasz pole z danymi z panelu po lewej wprost do pola w węźle, a n8n sam wstawi odpowiednie wyrażenie.
{{ $json.rates[0].mid }}. W trakcie przeciągania n8n podświetla pola, do których możesz upuścić dane.To wszystko - przepływ z trzech węzłów jest gotowy. Zanim włączymy go na stałe, warto przetestować całość: klikamy „Execute workflow" na dole ekranu, a n8n wykona po kolei wszystkie kroki i pokaże wynik każdego z nich (sprawdź, czy mail dotarł).
Jeśli test się powiódł, publikujemy przepływ. Klikamy przycisk „Publish" w prawym górnym rogu ekranu:
n8n pokaże okno z nazwą wersji (możesz zostawić domyślną) i opcjonalnym opisem zmian. Zatwierdzamy przyciskiem „Publish" i od tej chwili przepływ działa na żywo: uruchamia się codziennie o 8:00 samodzielnie, nawet przy zamkniętej przeglądarce.
Najlepsze jest to, że ten sam szkielet rozwiązuje dziesiątki innych zadań. Wymień jeden klocek na inny i masz nową automatyzację: zamiast kursu walut pobierz pogodę, zamiast maila wyślij wiadomość na Slacka albo Telegrama, a zamiast harmonogramu użyj formularza, po którego wypełnieniu coś się dzieje. Zasada zostaje ta sama: wyzwalacz, pobranie lub przetworzenie danych, akcja.
Gdy klient wypełnia formularz na stronie, n8n odbiera webhook, sprawdza duplikat w CRM, a jeśli kontakt jest nowy: dodaje go do HubSpot lub Salesforce, wysyła email powitalny i powiadamia handlowca na Slacku z pełnymi danymi. Czas reakcji: poniżej 3 sekund, przez całą dobę.
Co poniedziałek o 07:00 n8n pobiera dane z bazy, agreguje sprzedaż tygodniową, tworzy plik Excel (węzeł Spreadsheet File), generuje PDF i wysyła go do zarządu. Zero ręcznej pracy.
Email od klienta trafia do n8n, jego treść wędruje do modelu AI (ChatGPT lub Claude) razem z bazą wiedzy, a model proponuje odpowiedź. Jeśli pewność jest wysoka, odpowiedź wychodzi automatycznie; jeśli niższa, trafia jako szkic do akceptacji agenta przez Slack. Czas odpowiedzi: minuty zamiast godzin.
Zamówienie w WooCommerce uruchamia n8n, który aktualizuje stan magazynowy w ERP, synchronizuje status klienta w CRM, tworzy fakturę i powiadamia dział logistyki. Wszystkie systemy mają zawsze aktualne dane.
Nowe zamówienie uruchamia weryfikację płatności (Stripe lub Przelewy24), rezerwację w magazynie, wygenerowanie etykiety kurierskiej (API DPD lub InPost) oraz email z linkiem do śledzenia, a po dostawie - prośbę o opinię.
Nowy artykuł na blogu (wyzwalacz RSS) uruchamia AI, które generuje wersje na LinkedIn, Twittera i Instagram, wysyła je jako szkic do Slacka, a po akceptacji publikuje automatycznie na wszystkich platformach. Jeden przycisk i wszystkie kanały obsłużone.
n8n co minutę sprawdza dostępność usługi (health-check), a w razie błędu tworzy zgłoszenie w Jira, powiadamia Slacka, wysyła alert do PagerDuty i email do dyżurnego inżyniera. Agregacja alertów działa rozsądnie: pierwszy błąd to natychmiastowe powiadomienie, a kolejne dziesięć w ciągu godziny - jedna zbiorcza wiadomość.
PDF faktury przychodzi emailem, n8n przesyła go do usługi OCR (na przykład Google Document AI), AI wyciąga dane (NIP, kwota, data, pozycje), waliduje je z bazą dostawców, tworzy rekord w systemie ERP lub Symfonii i powiadamia księgowość do zatwierdzenia.
Integracja AI to miejsce, gdzie n8n zdecydowanie wyprzedza konkurencję. Nie chodzi tylko o prosty węzeł „wywołaj ChatGPT" - n8n oferuje pełny stack agentic AI z narzędziami, pamięcią i łańcuchami wywołań.
Węzeł AI Agent to ReAct-style agent, który dostaje zadanie i może wielokrotnie wywoływać narzędzia (tools) żeby je wykonać. Jako narzędzia możesz podłączyć dowolny węzeł n8n: zapytanie SQL, wywołanie HTTP, operacje na plikach, wyszukiwanie w bazie wektorowej.
Szczególnie ciekawe jest wsparcie dla Ollama - lokalnego serwera modeli LLM. Firmy, które nie mogą wysyłać danych do OpenAI (np. ze względu na RODO), mogą uruchomić Llamę lub Mistrala lokalnie i podłączyć do n8n bez żadnych zmian w przepływach.
n8n ma wbudowane węzły dla baz wektorowych (Pinecone, Qdrant, Weaviate, Supabase Vector) i embeddings (OpenAI Embeddings, Ollama Embeddings). Możesz zbudować pełny pipeline RAG bez pisania kodu:
Embeddings OpenAI zamienia pytanie na wektorVector Store pobiera podobne dokumenty z bazy wiedzyAI Agent odpowiada w kontekście pobranych dokumentów
Węzły Window Buffer Memory i Redis Chat Memory pozwalają agentowi pamiętać poprzednie wiadomości w rozmowie. Możesz zbudować chatbota z kontekstem sesji - bez żadnego frameworka backendu.
Wyrażenia w n8n mają dostęp do:
$json - dane bieżącego elementu$node["NodeName"].json - dane z konkretnego węzła$items("NodeName", 0, 0) - konkretny element z listy$now - aktualny czas (Luxon datetime)$workflow.id, $execution.id - metadane wykonania// Wyrażenie w polu "To" węzła Email:
{{ $json.email }}
// Formatowanie daty (Luxon):
{{ $now.setZone('Europe/Warsaw').toFormat('dd.MM.yyyy HH:mm') }}
// Warunkowe przypisanie:
{{ $json.amount > 1000 ? 'VIP' : 'Standard' }}
// Łączenie pól:
{{ $json.firstName + ' ' + $json.lastName }}
Gdy wyrażenia nie wystarczą, węzeł Code pozwala pisać pełny JavaScript:
// Przetwarzanie listy zamówień - węzeł Code w n8n
const orders = $input.all();
const result = orders
.filter(item => item.json.status === 'completed')
.map(item => ({
json: {
orderId: item.json.id,
customerEmail: item.json.customer.email,
totalGross: (item.json.total * 1.23).toFixed(2),
formattedDate: new Date(item.json.createdAt).toLocaleDateString('pl-PL')
}
}));
return result;
Duże automatyzacje warto dzielić na mniejsze przepływy. Węzeł Execute Workflow pozwala wywołać inny przepływ jako podprocedurę - z przekazaniem danych i odebraniem wyników. Typowy wzorzec: główny przepływ zarządza całością, a sub-przepływy realizują konkretne operacje (np. „wyślij email", „zapisz do CRM", „sprawdź płatność").
Wszystkie hasła, API keys i tokeny przechowywane są w zaszyfrowanym magazynie credentiali. Raz skonfigurowane dane dostępowe możesz używać w dowolnym przepływie - bez hardkodowania w węzłach.
Najprościej zacząć w ogóle bez własnego serwera: n8n Cloud to oficjalny, płatny hosting zarządzany przez twórców n8n. Płacisz abonament (aktualne plany widać na stronie n8n), a w zamian nie zajmujesz się administracją, dostajesz automatyczne backupy i aktualizacje, a na wyższych planach znikają limity wykonań. Dobra opcja, gdy chcesz po prostu działać.
# Uruchom n8n lokalnie - dane w katalogu ~/.n8n docker run -it --rm \ --name n8n \ -p 5678:5678 \ -v ~/.n8n:/home/node/.n8n \ docker.n8n.io/n8nio/n8n # n8n dostępne pod: http://localhost:5678
# docker-compose.yml
version: '3.8'
services:
postgres:
image: postgres:16
environment:
POSTGRES_USER: n8n
POSTGRES_PASSWORD: strongpassword123
POSTGRES_DB: n8n
volumes:
- postgres_data:/var/lib/postgresql/data
n8n:
image: docker.n8n.io/n8nio/n8n
ports:
- "5678:5678"
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_USER: n8n
DB_POSTGRESDB_PASSWORD: strongpassword123
DB_POSTGRESDB_DATABASE: n8n
N8N_ENCRYPTION_KEY: your-random-32char-key
WEBHOOK_URL: https://twoja-domena.pl
volumes:
- n8n_data:/home/node/.n8n
depends_on:
- postgres
volumes:
postgres_data:
n8n_data:
Pełną, produkcyjną instalację na własnym serwerze - z reverse proxy, certyfikatem HTTPS, automatycznym startem i kopiami zapasowymi - rozpisaliśmy krok po kroku w osobnym tutorialu: Jak postawić n8n na własnym serwerze - kompletny przewodnik krok po kroku.
Dobra wiadomość: n8n wcale nie jest zarezerwowane dla programistów. To prawda, że nie jest też najprostszym „klikaniem dla każdego" - ale jeśli ogarniasz podstawy techniczne, poradzisz sobie bez problemu. W praktyce wystarczy, że nie boisz się zajrzeć w ustawienia, z grubsza wiesz, czym jest JSON i adres API, i potrafisz przeczytać komunikat o błędzie. Całej reszty - przeciągania klocków, wyrażeń, łączenia węzłów - nauczysz się w trakcie, na żywych przykładach.
Jeśli szukasz narzędzia, w którym wszystko klikasz jednym przyciskiem i zupełnie bez technicznych detali, prościej zaczniesz od Zapiera czy Make.com. Ale gdy chcesz mieć pełną kontrolę nad logiką i danymi - a odrobina techniczności Cię nie odstrasza - n8n jest w segmencie open-source jednym z najmocniejszych wyborów. I szybko przekonasz się, że to wcale nie jest takie trudne.
Chcesz nauczyć się n8n od podstaw do zaawansowanych agentów AI? JSystems oferuje praktyczne szkolenie n8n + AI: sztuczna inteligencja w automatyzacji firmy - 2 dni warsztatów z prawdziwymi integratorami n8n.
Szkolenie n8n + AI -->
Program szkolenia obejmuje: instalację n8n na własnym serwerze, budowanie przepływów krok po kroku, integracje z bazami danych (PostgreSQL, MySQL, MS SQL), obsługę webhook i HTTP, wyrażenia i transformacje danych, węzły AI Agent i integrację z OpenAI/Ollama, sub-workflows i architekturę produkcyjną oraz monitoring i obsługę błędów.
Komentarze (0)
Brak komentarzy...