Przewodnik integracji
Zapier, Make i n8n: CRM w Twoich scenariuszach bez programisty
Dwa kierunki krok po kroku: zdarzenie w CRM uruchamia scenariusz Zapier, Make albo n8n, a scenariusz dodaje szansę do CRM.
Webhook wychodzący to adres Catch Hook i zaznaczone zdarzenia, a webhook przychodzący to token i jeden POST z JSON-em.
Dwa kierunki
| Kierunek | Co się dzieje | Gdzie ustawić |
|---|---|---|
| CRM → Zapier, Make, n8n | po zdarzeniu (np. nowy lead, zmiana etapu) CRM wysyła POST z JSON-em na adres scenariusza | Ustawienia, blok Webhooki, Dodaj webhook |
| Zapier, Make, n8n → CRM | scenariusz wysyła POST z danymi kontaktu, a CRM tworzy szansę albo rozpoznaje duplikat | Ustawienia, blok Webhooki przychodzące |
Oba kierunki ustawia właściciel konta w panelu, bez zmian w kodzie i bez udziału FluxLab.
CRM uruchamia scenariusz
1. Adres w Zapierze, Make albo n8n
- Zapier: nowy Zap, wyzwalacz Webhooks by Zapier, zdarzenie Catch Hook. Skopiuj adres webhooka.
- Make: nowy scenariusz, moduł Webhooks, wyzwalacz Custom webhook, Add. Skopiuj adres.
- n8n: węzeł Webhook, metoda POST. Skopiuj adres produkcyjny.
2. Webhook w CRM
- Ustawienia, blok Webhooki, przycisk Dodaj webhook.
- Nazwa (np. „Zapier, nowe leady”), Adres (https): adres skopiowany ze scenariusza.
- Zdarzenia: zaznacz te, które mają uruchamiać scenariusz (lista niżej).
- Opcjonalnie: Tylko z tych źródeł i Tylko na tych etapach (po przecinku, puste = wszystkie) oraz lekki ładunek (tylko id i typ, bez danych osobowych).
- Zapisz. CRM pokaże sekret podpisu jeden raz; zachowaj go, jeśli chcesz sprawdzać podpis.
3. Próbka do mapowania pól
Przy webhooku kliknij Wyślij zdarzenie testowe. Scenariusz dostanie przykładową szansę z tymi samymi polami co prawdziwa, więc w Zapierze (Test trigger) albo w Make (Run once, potem Redetermine data structure) wszystkie pola są od razu do zmapowania. Wynik widać w dzienniku pod webhookiem: kod odpowiedzi i czas.
Co przychodzi
Żądanie POST z Content-Type: application/json. Przykład zdarzenia nowy_lead:
{
"zdarzenie": "nowy_lead",
"id_dostawy": 1,
"kiedy": "2026-11-11T17:15:02",
"sekwencja": 1,
"lead": {
"id": 18,
"nazwa": "Jan Testowy",
"firma": "Przykład sp. z o.o.",
"email": "jan.testowy@example.com",
"telefon": "+48500600700",
"status": "w_trakcie",
"etap": "nowe",
"kwota": null,
"zrodlo": "make",
"tytul": null
}
}
Zdarzenia mogą mieć dodatkowe pola obok lead, np. zmiana_etapu ma etap_przed, a opiekun_zmieniony ma opiekun_przed i opiekun. sekwencja rośnie osobno dla każdej szansy, więc scenariusz może ułożyć zdarzenia w kolejności.
Nagłówki: X-FluxCRM-Event (nazwa zdarzenia), X-FluxCRM-Delivery (id dostawy), X-FluxCRM-Timestamp (czas uniksowy w sekundach), X-FluxCRM-Sequence (ta sama liczba co sekwencja w treści) i X-FluxCRM-Signature: sha256= i HMAC-SHA256 z tekstu <timestamp>.<treść>, kluczem jest sekret webhooka. Zapier i Make same podpisu nie sprawdzają; adres Catch Hook jest tajny i to on chroni scenariusz. Kto chce sprawdzać podpis, robi to w kroku kodu (Code by Zapier, n8n Code) albo na własnym serwerze; przykłady w Pythonie i Node są w dokumentacji API.
Zdarzenia
| Zdarzenie | Kiedy |
|---|---|
nowy_lead | powstała nowa szansa (panel, API, import, kanał, formularz) |
zmiana_etapu | szansa zmieniła etap; etap_przed to poprzedni |
wygrana | szansa dostała status wygrany |
przegrana | szansa dostała status przegrany |
oferta_wyslana | do klienta wyszła oferta |
oferta_zaakceptowana | klient podpisał ofertę |
wiadomosc_klienta | klient napisał (mail, kanał, portal) |
wiadomosc_wyslana | do klienta wyszła wiadomość |
zadanie_utworzone | dodano zadanie przy szansie |
zadanie_wykonane | zadanie oznaczono jako zrobione |
notatka_dodana | dodano notatkę przy szansie |
opiekun_zmieniony | zmienił się opiekun szansy |
lead_scalony | szansa została scalona z inną |
pole_zmienione | zmieniło się pole szansy (każda zapisana zmiana: pole, stara i nowa wartość, kto) |
dokument_zmieniony | dokument szansy dostał nowy stan albo został dodany |
umowa_utworzona | powstała nowa umowa |
Zdarzenia łapie sama baza, więc przychodzą niezależnie od tego, czy zmianę zrobił człowiek w panelu, import, API czy automat.
Gdy scenariusz nie odpowiada
- Odpowiedź 2xx: dostarczone.
- 5xx, 408, 429 albo błąd sieci: kolejne próby po 1, 5, 15, 45, 120, 360 i 720 minutach (razem do 8 prób w ciągu doby), potem stan błąd.
- Inny kod 4xx albo przekierowanie: od razu błąd.
- Po 50 błędach z rzędu webhook zostaje wstrzymany, właściciel dostaje powiadomienie, a przycisk Wznów go włącza.
- W dzienniku dostaw każdą dostawę można Wyślij ponownie; idzie ta sama treść.
Adresy w sieci prywatnej, localhost i adresy metadanych chmury są odrzucane, więc webhook musi wskazywać publiczny adres https.
Scenariusz dodaje szansę do CRM
1. Token w CRM
Ustawienia, blok Webhooki, część Webhooki przychodzące: wpisz Nazwa (np. „Make, formularz partnera”) i Źródło (np. zapier, make; pod tą nazwą szanse będą widoczne na liście), potem Utwórz token. CRM pokaże pełny adres jeden raz:
https://crm.twojafirma.pl/api/v1/wejscie/whin_…
Adres z tokenem działa jak hasło do wpisywania szans: wklej go tylko do scenariusza. Token można w każdej chwili usunąć; licznik przyjętych i odrzuconych zgłoszeń widać przy tokenie.
2. Krok w scenariuszu
- Zapier: akcja Webhooks by Zapier, zdarzenie POST, Payload Type:
json, w Data pola z tabeli niżej. - Make: moduł HTTP, Make a request, metoda POST, Body type: Raw, Content type: JSON, treść jak w przykładzie.
- n8n: węzeł HTTP Request, metoda POST, Body: JSON.
| Pole | Opis | Limit znaków |
|---|---|---|
nazwa | imię i nazwisko kontaktu | 200 |
email | adres e-mail | 200 |
telefon | numer telefonu | 40 |
firma | nazwa firmy | 200 |
tytul | temat zgłoszenia | 200 |
wiadomosc | treść zgłoszenia (przyjmujemy też nazwę opis) | 4000 |
id | identyfikator w systemie nadawcy, chroni przed duplikatem | 100 |
Wymagane jest przynajmniej jedno z: nazwa, email, telefon, wiadomosc.
{
"id": "make-1234",
"nazwa": "Jan Testowy",
"email": "jan.testowy@example.com",
"telefon": "500600700",
"firma": "Przykład sp. z o.o.",
"wiadomosc": "Prośba o kontakt"
}
Odpowiedzi
| Kod | Treść | Znaczenie |
|---|---|---|
| 200 | {"ok": true, "lead_id": 18, "nowy_lead": true, "duplikat": false} | szansa utworzona; lead_id można zapisać w scenariuszu |
| 200 | {"ok": true, "lead_id": 18, "nowy_lead": false, "duplikat": true} | to samo id (albo ta sama treść) przyszło drugi raz, nic nie dodano |
| 401 | {"ok": false, "powod": "nieznany albo wylaczony token"} | zły albo usunięty token |
| 422 | {"ok": false, "powod": "…"} | brak wymaganych pól albo pole za długie |
Szansa z webhooka przechodzi tę samą drogę co zgłoszenie z formularza na stronie, razem z filtrem, który oznacza spam i oferty kierowane do Twojej firmy. Jej utworzenie wywołuje też zdarzenie nowy_lead dla webhooków wychodzących.
Powiadomienia na Slacku i w Teams
Do powiadomień zespołu na Slacku albo w Teams nie potrzeba Zapiera, Make ani n8n. Wystarczy adres Incoming Webhook.
- W Slacku dodaj do kanału aplikację Incoming Webhooks. W Teams na kanale wybierz Przepływy pracy albo Łączniki, potem Incoming Webhook. Skopiuj adres zaczynający się od
https://. - W CRM otwórz Ustawienia, blok Webhooki, przycisk Dodaj kanał Slack lub Teams (widzi go właściciel konta). Wybierz komunikator, wklej adres i zaznacz zdarzenia.
- Kliknij Wyślij zdarzenie testowe przy nowym kanale. Na kanale pojawi się wiadomość „Test FluxCRM: powiadomienia na ten kanał działają”.
| Zdarzenie | Wiadomość na kanale |
|---|---|
nowy_lead | Nowy lead: kontakt (firma), tytuł szansy |
zmiana_etapu | Zmiana etapu: kontakt (firma), etap przed → etap po |
wygrana | Wygrana: kontakt (firma), kwota |
Każda wiadomość ma link Otwórz kartę do szansy w panelu. Kanał można dodać też przez API: POST /api/automatyzacje/kanaly z polami typ (slack albo teams), url i zdarzenia. GET /api/automatyzacje/kanaly podaje przy każdym kanale stan dostawy: wstrzymany (data wstrzymania po serii błędów albo null), wstrzymanie_powod, bledy_z_rzedu i ostatnia_dostawa (zdarzenie, stan, kod HTTP, błąd, godzina ostatniej próby).
Kanał dodany w Ustawieniach dostaje tylko trzy zdarzenia szansy z tabeli. Skrzynka zespołu (wzmianki w czacie szansy i inne powiadomienia dla handlowców) to osobne ustawienie instancji: adresy slack_webhook i teams_webhook w sekcji [integracje] pliku instancja.toml oraz lista zespol_kanaly. Ustawia je administrator instancji. Ten sam adres Incoming Webhook może służyć do obu, wtedy na kanale pojawią się oba rodzaje wiadomości.
Gdy trzeba więcej
Do odczytu i zmian innych danych (szanse, zadania, notatki, etapy) służy API REST z kluczem integracji: Ustawienia, blok Klucze API integracji (nie „Klucze dostępu”, to logowanie bez hasła). Klucz ma wybrane moduły, tryb odczyt albo zapis i termin ważności. Wysyła się go w nagłówku Authorization: Bearer <klucz>; w n8n to węzeł HTTP Request z Authentication: Generic Credential Type, Header Auth (nazwa Authorization, wartość Bearer <klucz>).
| Co | Metoda i adres | Uwagi |
|---|---|---|
| lista szans | GET https://crm.twojafirma.pl/api/v1/leady?limit=50 | odpowiedź ma next_cursor; następna strona: cursor=<next_cursor>, koniec listy: null; tylko zmienione: zmienione_od=<data i godzina> |
| jedna szansa | GET https://crm.twojafirma.pl/api/v1/leady/<id> | z notatkami, zadaniami i historią |
| nowa szansa | POST https://crm.twojafirma.pl/api/v1/leady | JSON z polami firma, nazwa_kontaktu, email, tytul (co najmniej jedno z pierwszych trzech) |
Pola w REST mają inne nazwy niż w webhooku przychodzącym (nazwa_kontaktu zamiast nazwa). Webhook przychodzący wystarcza do dodawania szans i sam rozpoznaje duplikaty; REST jest do reszty. Opis wszystkich ścieżek i przykłady: dokumentacja API. Formularz na własnej stronie podłącza się według przewodnika formularza.