Automatyzacje w n8n, które chodzą na produkcji
Mam na imię Seweryn Buduję automatyzacje w n8n self-hosted, integracje API i rozwiązania AI dla małych firm i sklepów internetowych. Pracuję sam – od rozmowy o procesie, przez wdrożenie, po dokumentację i utrzymanie. Wszystko, co opisuję niżej, działa na mojej instancji. Mogę pokazać na żywo.Stack, który utrzymuję sam
Wszystko poniżej stoi na jednej instancji, którą sam postawiłem i sam utrzymuję – z kopiami zapasowymi, monitorem dostępności i wspólną obsługą błędów dla każdego przepływu.Pięć wdrożeń, cztery do kliknięcia
Trzy z nich możesz sprawdzić sam, teraz, w drugiej karcie przeglądarki. Przy każdym piszę, na jakim etapie naprawdę jest – łącznie z tym, który nigdy nie obsłużył prawdziwego zgłoszenia, a i tak da się go kliknąć.Zapytania po godzinach zostawały bez odpowiedzi, rezerwacje były rozrzucone między telefonem a wiadomościami, nie było jak sprawdzić, czy termin jest wolny.
Co zbudowałem- formularz rezerwacji, który przed przyjęciem zgłoszenia sprawdza listę zablokowanych terminów
- zgłoszenie idzie mailem do właściciela z przyciskiem POTWIERDŹ; kliknięcie wraca webhookiem do n8n i dopiero wtedy powstaje rezerwacja
- panel do blokowania terminów i dopisywania rezerwacji ręcznych, dane w Google Sheets
- automatyczna archiwizacja starych rezerwacji
- opcjonalnie asystent AI na stronie z bazą wiedzy w Google Docs, odpowiada na pytania o ofertę, cennik, dostępność i zasady
Zapytania obsługiwane całą dobę, wszystkie rezerwacje w jednym miejscu, a właściciel nadal decyduje o każdej z nich.
Co konkretnie się zdarzyło
Formularz przyjął zgłoszenie bez daty, bo atrybutnovalidate unieważnił required i sprawdzenie blokad zostało pominięte. Numer zgłoszenia nie zawierał sekund, więc dwa zgłoszenia z tej samej minuty dostały ten sam numer i drugie nadpisało pierwsze. Najpoważniejsza: webhook nie miał ustawionego responseMode, więc odpowiadał kodem 200 zanim wykonał się kod przetwarzający – niekompletne zgłoszenie przepadało w wyjątku, a klient widział ekran „wysłano”. Naprawione po obu stronach: brakująca walidacja w formularzu i osobna ścieżka w n8n, która przy niekompletnym zgłoszeniu wysyła właścicielowi ostrzeżenie z telefonem klienta zamiast milczeć.
Formularz przyjęcia sprzętu, rejestr zleceń w arkuszu, gotowe SMS-y do wysłania z firmowego telefonu przy zmianie statusu, panel serwisanta w AppSheet z podziałem ról, moduł głosowy odbierający telefon po godzinach.
Decyzja, którą zmieniłemPowiadomienia szły przez bramkę SMS, co znaczyło dla klienta osobne konto i doładowania. Przerobiłem to tak, że system składa gotową wiadomość i pokazuje ją pracownikowi — jednym kliknięciem otwiera się w telefonie warsztatu. Zero kosztów, a SMS przychodzi z numeru, który klient zna i na który może oddzwonić.
egraty.pl/demo-system-dla-serwisu → Przyjmij zlecenie, zmień jego status, porozmawiaj z asystentem. To ten sam system, którego klient nie wdrożył – możesz go kliknąć sam. Status: zbudowany i przetestowany, bez ruchu produkcyjnego. Klient wycofał się jeszcze zanim zobaczył gotowy system, więc nigdy nie obsłużył prawdziwego zgłoszenia – działa u mnie i można go kliknąćWebhook z WooCommerce po opłaceniu zamówienia → odczyt danych z zamówienia → treść generowana przez Claude API → dokument tworzony i formatowany przez Google Docs API → eksport do PDF → mail z załącznikiem do klienta. Wariant rozszerzony dokłada plik audio i wysyła oba załączniki razem.
EfektKlient dostaje swój plik kilka minut po zakupie, bez udziału człowieka.
egraty.pl/produkt/bajka-personalizowana-dla-dziecka → Sklep jest mój, więc pokazuję go z nazwy. To ten produkt stoi za opisanym wyżej przepływem – od opłacenia zamówienia po plik w skrzynce klienta. Status: workflow jest aktywny i obsługuje prawdziwe zamówieniaPrzy zapisie produktu w sklepie leci webhook do n8n, a ten zgłasza adres do Google Indexing API. Uwierzytelnianie przez OAuth2 i konto serwisowe. Nowe i zmienione strony trafiają do indeksacji same, bez wklejania adresów ręcznie w Search Console.
EfektZgłoszenia dochodzą. Jest tam jeden znany błąd, którego jeszcze nie poprawiłem: przy zapisie wariantu produktu zamiast czystego adresu potrafi pójść wersja z parametrami. Nie szkodzi, bo prawidłowy adres i tak zostaje zgłoszony przy zapisie produktu głównego, ale część zgłoszeń leci w próżnię. Poprawka to jeden dodatkowy krok wyciągający adres produktu nadrzędnego.
Status: działa od kwietnia, sprawdzone w lipcuCzytasz to na moim sklepie. Postawiłem go i utrzymuję sam – od struktury kategorii i stron, przez płatności i pliki dostarczane po zakupie, po opisy i dane strukturalne produktów.
- sklep WooCommerce z płatnościami i produktami cyfrowymi wysyłanymi automatycznie po zakupie
- opisy produktów i meta SEO tworzone przez n8n przy zapisie – WooCommerce REST API i WordPress API
- nowe adresy zgłaszane do Google Indexing API zaraz po publikacji
- własne snippety PHP tam, gdzie motyw nie wystarczał, i widoki dopasowane do telefonu
- kopie zapasowe oraz monitor dostępności sprawdzający trzy adresy co 5 minut
Ta sama instancja jest moim poligonem: stoi na niej dziś 54 aktywne workflow i to tutaj automatyzacja musi się najpierw popsuć, zanim pojadę z nią do klienta. Reszta ze stu szesnastu to eksperymenty, które wyłączyłem – nie każdy był dobrym pomysłem i część z nich to widać.
Status: moja własna strona, nie zlecenie klienta – ale działa, przyjmuje prawdziwe zamówienia i klikasz ją właśnie terazInstancja, backupy i błędy, które widać
Najciekawsze awarie nie krzyczą. Dlatego przy każdym systemie sprawdzam nie tylko to, czy działa, ale też co się dzieje, gdy padnie.- Instancjan8n w Dockerze na własnym VPS (Ubuntu), dostęp po HTTPS pod własną subdomeną, konfiguracja przez zmienne środowiskowe, kontrolowane aktualizacje wersji. Instancję postawiłem z gotowego obrazu dostawcy VPS i utrzymuję ją sam. Warstwy proxy nie konfigurowałem od zera i tego nie ukrywam.
- Linux i VPS w praktyceDostęp po SSH, obsługa kontenera przez
docker compose(restart, podmiana wersji, zmienne środowiskowe), czytanie logów kontenera przy diagnozie, transfer plików przez SFTP (przy większych plikach, bo przesyłanie przez SSH w base64 przestaje działać ok. 512 MB). - Dwa backupy, oba jako workflowBaza danych instancji trafia na Drive codziennie o 5:00, pełny eksport JSON wszystkich workflow codziennie o 2:30. Odtworzenie instancji nie zależy od tego, czy ktoś pamiętał zrobić eksport.
- Error workflow od pierwszego dniaGlobalny error workflow podpinany do każdego nowego workflow: przechwytuje błąd, zapisuje kontekst i wysyła alert. Ustawiam go zaraz po utworzeniu workflow, nie na końcu.
- APIREST, webhooki (walidacja danych wejściowych i zabezpieczenie endpointu), OAuth2 (Google), konta serwisowe, API keys, paginacja, obsługa limitów, retry przy wywołaniach zewnętrznych. Przykład z praktyki: Google Sheets ma limit 60 zapytań na minutę i łatwo go przekroczyć, jeśli drugi węzeł w łańcuchu czyta arkusz raz na każdy element.
- SekretyTrzymam wyłącznie w zmiennych środowiskowych i w credentials n8n. Nigdy w treści workflow ani w repozytorium.
- Błąd ma być widocznyUstawienie
continueOnFailna węźle, który sprawdza dostępność, zamienia awarię w pustą listę i klient rezerwuje zajęty termin, a w n8n wszystko świeci na zielono. Takich miejsc szukam w pierwszej kolejności, gdy przeglądam cudze workflow. - Jak testujęPracuję na jednej instancji, na osobnych arkuszach i danych testowych. Zmiany na działającym systemie wprowadzam w godzinach bez ruchu i po zrobieniu kopii.
- Co dostajesz przy odbiorzeDokumentację: opis przepływu, zależności zewnętrzne, miejsca, w których może paść, i co wtedy zrobić. Do tego instrukcja dla osoby nietechnicznej po Waszej stronie.
Co klienci pytają najpierw
Jedna osoba. Pracuję jako indywidualny wykonawca, nie agencja – od rozmowy o procesie, przez wdrożenie, po dokumentację i utrzymanie. Nie ma przekazywania sprawy między działami ani opiekuna klienta, który nie rozumie technicznie systemu.
Trzy z nich są pod linkiem na tej stronie i możesz je kliknąć od razu – system rezerwacji wypożyczalni, produkt w moim sklepie oraz demo systemu serwisowego. Czwarty pokażę na żywo na spotkaniu. Trzy z czterech obsługują prawdziwy ruch: rezerwacje, zamówienia w sklepie i zgłoszenia do Google.
n8n w Dockerze na własnym VPS z Ubuntu, dostęp po HTTPS pod własną subdomeną, konfiguracja przez zmienne środowiskowe i kontrolowane aktualizacje wersji. Do tego dwa niezależne backupy jako workflow: baza instancji codziennie o 5:00 i pełny eksport JSON wszystkich workflow o 2:30.
Dokumentację: opis przepływu, zależności zewnętrzne, miejsca, w których system może paść, i co wtedy zrobić. Do tego instrukcję dla osoby nietechnicznej po stronie klienta. Każdy nowy workflow dostaje też globalny error workflow, który przechwytuje błąd i wysyła alert.
Kosztem przy większym wolumenie. Proces obsługujący 300 zdarzeń dziennie to około 90 000 operacji miesięcznie. U dostawcy rozliczającego się za operacje to kilkaset złotych miesięcznie, na własnym serwerze to koszt VPS-a, czyli 40–80 zł, niezależnie od liczby wykonań.
Masz proces, który zjada czas?
Napisz dwa zdania o tym, co się dzieje dzisiaj ręcznie. Odpiszę, czy da się to odchudzić i ile mniej więcej pracy to jest.
NAPISZ