
Czy Twój zespół spędza cenne godziny na ręcznym kopiowaniu danych z formularzy kontaktowych do CRM? Czy chciałbyś mieć system, który nie tylko odbiera zapytania od klientów, ale także je analizuje, przygotowuje wstępną ofertę i informuje Cię o wszystkim np na Slacku?
Jeśli tak, to ten poradnik jest dla Ciebie.
Pokażemy Ci, jak krok po kroku zbudować w N8N w pełni zautomatyzowany proces, który wesprze Twój dział sprzedaży. Stworzymy "cyfrowego asystenta", który pracuje 24/7, nie popełnia błędów i pozwala Twojemu zespołowi skupić się na tym, co najważniejsze – na rozmowie z klientami.
Co zbudujemy?
Nasz system będzie:
- Odbierał zapytania z formularza kontaktowego (WordPress) na stronie oraz z dedykowanej skrzynki e-mail.
- Analizował treść zapytania za pomocą AI (chatGPT), tworząc zwięzły tytuł i wstępną ofertę.
- Automatycznie tworzył kontakt i szansę sprzedaży w Pipedrive CRM.
- Wysyłał natychmiastowe powiadomienie na Slacka z linkiem do CRM.
- Wysyłał do klienta e-mail z potwierdzeniem otrzymania wiadomości.
Czego potrzebujesz?
- Konto N8N (w chmurze lub na własnym serwerze).
- Dostęp do API OpenAI.
- Konto w Pipedrive (lub innym CRM, proces można łatwo dostosować).
- Konto Slack. (opcjonalnie)
- Konto w serwisie do wysyłki e-maili (np. Mailgun, SendGrid)
Konfiguracja WordPress
Większość z nas posiada strony internetowe oparte o system CMS WordPress. Formularz kontaktowy w większości przypadku będzie oparty o wtyczkę Contact Form 7
. Gdy potencjalny klient wyślę do nas zapytanie przez tę wtyczkę musimy przesłać dane zebranę przez formularz do N8N. Do tego posłuży nam wtyczka CF7 to Webhook.
Zainstaluj tę wtyczkę i skonfiguruj.

Poznasz ten adres w kolejnych krokach.
Przejdź do ustawień zaawansowanych wtyczki. Ustaw metodę wysyłki danych na POST
i wklej poniższy kod do zakładki Body
.
{
"message": {
"content": "New message!",
"sender": {
"name": "[your-name]",
"email": "[your-email]",
"phone": "[your-phone]"
},
"body": "[your-message]",
"dataProcessingAccepted": "[acceptance-data-processing]"
}
}
W razie potrzeby dostosuj nazwy pól [your-name]
itd do swojej struktury.

Odbieranie wiadomości
Stwórz nowy proces w N8N i zacznij krok po kroku go budować.
Zaczniemy od zbudowania części odpowiadającej za odbieranie danych z formularza kontaktowego oraz skrzynki mailowej.

Odbiór wiadomości z formularza kontaktowego
1. Dodaj node typu Webhook
- Metoda:
POST
- Ścieżka: np.
/webhook/contact-form-7
W Contact Form 7 w WordPressie ustaw url wysyłki do Twojego webhooka:
https://twoja-domena.pl/webhook/contact-form-7
2. Dodaj node typu Edit Fields.

Odbiór wiadomości ze skrzynki mailowej
1. Trigger na e-mail (IMAP)
Dodaj node Email Trigger (IMAP)
- Host, port, user, pass (Twoja skrzynka, np.
sales@twoja-domena.pl
) - Oznacz, by wywoływał się na każde nowe wiadomości.

2. UTF-8 support
Dodaj node typu Code. Ten node jest przydatny w przypadku problemów z polskimi znakami w odbieranych mailach.
Ten blok powinien wyglądać tak:

UTF-8 support
Kod do skopiowania:
const text = $input.first().json.textPlain// Zakładając, że treść wiadomości jest w polu 'text'
const correctedText = Buffer.from(text, 'binary').toString('utf8');
$input.item.json.text = correctedText;
return $input.item;
3. Parse From Mail
Przetwórz dane odebrane z wiadomości email. Dodaj node Set.

Zmienne do skopiowania:
- name:
{{ $json.from.replace(/<.*>/, '').trim() }}
- subject:
{{ $json.subject }}
- email:
{{ $json.from.match(/<([^>]+)>/)[1] }}
- body:
{{ $json.text }}
- phone:
999 999 99
Scalanie danych
- Wstaw node Merge (tryb
Append
) - Połącz wyjścia z Webhooka i z Email Triggera
- Efekt: jednolity obiekt:

Merge Input
Generowanie tytułu i oferty przez GPT-4
Dodaj Node OpenAI.

OpenAI
i połącz go za węzłem Merge
. Nazwij node GPT processing
- Wybierz model, np.
gpt-4o
. - W polu
Messages
, w roliAssistant
, wklej precyzyjnie przygotowany prompt.
To najważniejsza część – mówisz AI, co dokładnie ma zrobić. Oto przykład z naszego procesu:
Komtekst: obsługujemy zapytanie od klienta. Musimy stworzyć dla niego ofertę. Zrób po polsku podsumowanie wiadomości w 1 zdaniu. Niech to będzie tytuł szansy sprzedaży do CRM. Zapytanie od potencjalnego klienta:
{{ $json.body }}
Przygotuj ofertę na wykonanie zlecenia o której pyta klient. Staraj się podać przedział cenowy. Podpisz się jako Marek Golan firma Dogtronic Sp. z o.o.
Odpowiedź rozbij na 2 sekcje:
- tytuł szansy sprzedaży (zmienna "title")
- oferta (zmienna "offer") bez kolejnych sekcji
Oczywiście powyższy prompt przygotuje nam ofertę na dużym poziomie ogólności. Nie należy się nim sugerować. To co nam napisze AI możemy traktować jako podpowiedź w jaki sposób odpisać osobie, która zadała nam pytanie. W kolejnym poradniku napiszemy jak dodać wiedzę o naszej formie / ofercie do modelu AI by odpowiedzi były bardziej wartościowe.

JSON Output
, aby otrzymać dane w ustrukturyzowanej formie.Scalanie danych
Musisz ponownie scalić dane odebrane z 2 źródeł.

Set
1. Dodaj node Set
nazwij go GPT form
.

Manual Mapping
Zmienne do skopiowania:
- title:
{{ $json.message.content.title }}
- name:
{{ $('Parse From Webhook').item.json.name }}
- email:
{{ $('Parse From Webhook').item.json.email }}
- body:
{{ $('Parse From Webhook').item.json.body }}
- offer:
{{ $('GPT processing').item.json.message.content.offer }}
- phone:
{{ $('Parse From Webhook').item.json.phone }}
2. Dodaj node Set
nazwij go GPT Mail
.

Manual Mapping
Zmienne do skopiowania:
- name:
{{ $('Merge Input').item.json.name }}
- title:
{{ $('GPT processing').item.json.message.content.title }}
- offer:
{{ $('GPT processing').item.json.message.content.offer }}
- email:
{{ $('Merge Input').item.json.email }}
- body:
{{ $('Parse From Mail').item.json.body.replace(/\r?\n/g, '\n') }}
Integracja z CRM PipeDrive
Czas automatycznie dodać wszystko do naszego systemu CRM.

Wyszukaj Osobę: Dodaj węzeł Pipedrive
i wybierz operację Person
-> Search
. W polu Term
wstaw e-mail klienta z poprzednich kroków. To zapobiegnie tworzeniu duplikatów.

Search Person in Pipedrive
Jaki url podaj:
https://api.pipedrive.com/v1/itemSearch?term={{$json.email}}&field_key=email&exact_match=true&item_types=person
Dodaj node Code

Check if person is in Pipedrive and output the ID
Wklej poniższy kod:
const inputItems = $input.all();
// Check if there are items and that the items array is not empty
const hasItems = inputItems.length > 0 && inputItems[0]?.json?.data?.items.length > 0;
// Retrieve the ID of the first item if available
const firstItemId = hasItems ? inputItems[0].json.data.items[0].item.id : null;
return { hasItems, firstItemId };
Sprawdź, czy Istnieje: Dodaj węzeł IF
. Ustaw warunek, który sprawdzi, czy poprzedni krok znalazł jakieś wyniki.

IF Person exists in Pipedrive
Dwie Ścieżki:

Ścieżka „Fałsz” (Brak osoby w CRM):
Połącz ją z nowym węzłem Pipedrive
ustawionym na Person
-> Create
. Wypełnij pola name
, email
, phone
, aby stworzyć nowy kontakt.

PipeDrive
Zmienne do skopiowania:
- Name:
{{ $('Merge Input').item.json.name }}
- Email:
{{ $('Merge Input').item.json.email }}
- Phone: {
{ $('Merge Input').item.json.phone }}
Ścieżka „Prawda”: Zostaw ją pustą – idziemy dalej.
Dodaj node Code
w którym zadbamy o Person ID.

New Person ID
Wklej poniższy kod:
// Check whether the value from the previous node is available
let personId;
// Check whether the value of 'IF Person exists in Pipedrive' node is present
if ($('IF Person exists in Pipedrive').item.json.firstItemId) {
personId = $('IF Person exists in Pipedrive').item.json.firstItemId;
}
// If the above value is not available, check whether a value of '$('Pipedrive').item.json.id' is available
else if ($('Pipedrive').item.json.id) {
personId = $('Pipedrive').item.json.id;
}
// If a value was found for personId, it is output as a new variable
if (personId) {
return { person_id: personId };
} else {
return { error: 'Keine Person-ID gefunden' };
}
Utwórz Szansę Sprzedaży (Lead):
Połącz obie ścieżki z węzłem Pipedrive
ustawionym na Lead
-> Create
.

Crete lead
Zmienne do skopiowania:
- title:
{{ $('GPT processing').item.json.message.content.title }}
- Person ID:
{{ $json.person_id }}
Powiąż leada z osobą, używając ID z kroku wyszukiwania lub tworzenia.
Dodaj Notatkę: Na końcu dodaj jeszcze jeden węzeł Pipedrive
(Note
-> Create
). W treści notatki
Umieść oryginalne zapytanie klienta oraz ofertę od AI. To da Twojemu zespołowi pełen kontekst.

Create Node
Zmienne:
- Zapytanie:
{{ $('Merge Input').item.json.body }}
- Oferta (AI):
{{ $('GPT processing').first().json.message.content.offer }}
Efekt:

Powiadomienia
Slack
W tym kroku wyślemy wiadomość na Slacka oraz na maila do klienta oraz naszego zespołu.

Skonfiguruj node Slack
. Pamiętaj o autoryzacji.

Skopiuj poniższy kod do pola Blocks
{
"blocks": [
{
"type": "header",
"text": {
"type": "plain_text",
"text": "Nowa wiadomość z Dogtronic.io :email:",
"emoji": true
}
},
{
"type": "context",
"elements": [
{
"type": "mrkdwn",
"text": " {{ $('Merge Input').item.json.name }} {{ $('Merge Input').item.json.email }}"
}
]
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*Analiza (AI):* {{ $('GPT processing').item.json.message.content.title }} \r\n "
}
},
{
"type": "divider"
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*Klient:* \r\n {{ $('Merge Input').item.json.body.replace(/\r?\n/g, '\\n') }}"
}
},
{
"type": "divider"
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*Oferta (AI):* \r\n {{ $('GPT processing').item.json.message.content.offer.replace(/\n/g, '\\n'); }}"
}
},
{
"type": "divider"
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "Zaplanuj działanie w CRM"
},
"accessory": {
"type": "button",
"text": {
"type": "plain_text",
"text": "PipeDrive",
"emoji": true
},
"value": "click_me_123",
"url": "https://dogtronic.pipedrive.com/deal/{{ $json.deal_id }}",
"action_id": "button-action"
}
}
]
}
Efekt:

Odpowiedź AI jest wyłącznie do naszego wglądu.
Zadbajmy o profesjonalny wizerunek i spokój klienta.
Dodaj węzeł do wysyłki e-maili, np. Mailgun
.
W polu To Email
wstaw adres e-mail klienta.
Napisz treść maila z podziękowaniem za kontakt i potwierdzeniem otrzymania danych. Możesz nawet wkleić wiadomość, którą wysłał, aby miał pewność, że wszystko dotarło poprawnie.

Send mail to client
Przykładowa treść wiadomości do klienta:
Szanowni Państwo,
Dziękujemy za przesłanie wiadomości za pośrednictwem naszego formularza kontaktowego. Potwierdzamy otrzymanie Państwa zapytania i poinformujemy, że skontaktujemy się z Państwem najszybciej, jak to możliwe, aby omówić szczegóły.
Dla przypomnienia, poniżej znajdują się dane, które otrzymaliśmy:
Imię i nazwisko: {{ $('Merge Input').item.json.name }}
Adres e-mail: {{ $('Merge Input').item.json.email }}
Treść wiadomości:
{{ $('Merge Input').item.json.body.replace(/\n/g, '
') }}
Jeśli mają Państwo dodatkowe pytania lub chcą uzupełnić swoje zapytanie, prosimy o odpowiedź na tę wiadomość.
Z poważaniem,
Zespół Dogtronic
Efekt

Aktywacja
Połącz wszystkie węzły zgodnie z opisaną logiką, upewnij się, że wszystkie ścieżki są połączone, a na koniec kliknij przełącznik Active
w prawym górnym rogu.
Gotowe! Właśnie zbudowałeś potężną machinę, która oszczędzi Ci dziesiątki godzin i sprawi, że żaden potencjalny klient nie zostanie pominięty.
Co dalej? To dopiero początek! Możesz rozbudować ten proces o kolejne kroki:
- Automatyczne przypisywanie handlowców do leadów.
- Wysyłanie spersonalizowanych follow-upów po kilku dniach.
- Analizę sentymentu wiadomości od klienta.
Automatyzacja to nie przyszłość, to teraźniejszość. Eksperymentuj, ucz się i daj znać w komentarzach, jakie procesy Ty zautomatyzowałeś w swojej firmie 🙂
Chcesz przetestować działanie tego procesu? Napisz na sales@dogtronic.io lub wypełnij nasz formularz kontaktowy.