Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
Skrzynka działu obsługi to zwykle jeden wielki kosz, do którego wpada wszystko naraz: reklamacje, pytania o zamówienia, faktury, prośby o ofertę i sprawy, które trudno od razu przypisać. Ktoś musi to codziennie ręcznie przeglądać i rozdzielać. W tym artykule pokażemy, jak tę robotę przejmie agent AI zbudowany w n8n - przeczyta każdą wiadomość, rozpozna, o co chodzi, i sam skieruje ją tam, gdzie trzeba.
Co ważne, nasz agent nie wysyła nic za plecami człowieka. Dla reklamacji i zamówień przygotowuje gotową wersję roboczą odpowiedzi (draft) u właściwej osoby - ta tylko ją przegląda, ewentualnie poprawia i wysyła. A jeśli model nie jest pewny, do jakiej kategorii należy mail, nie zgaduje na siłę, tylko przekazuje go dalej, do eksperta. Wszystko zbudujemy klikając węzły, bez pisania kodu.
Zasada jest prosta i mieści się w jednym zdaniu: przeczytaj treść, rozpoznaj typ sprawy, skieruj tam, gdzie trzeba. Na diagramie poniżej widać cały przepływ z lotu ptaka.
Agent ma trzy możliwe drogi:
Każdy przepływ w n8n musi się od czegoś zacząć. Na produkcji wyzwalaczem jest nowy mail - węzeł „Gmail Trigger" albo „Email Trigger (IMAP)", który sam odpala przepływ, gdy do skrzynki wpadnie wiadomość. Najpierw pokażemy ten wyzwalacz na prawdziwej skrzynce, a potem - żeby wygodnie przetestować resztę - podłożymy przykładową wiadomość.
a) Dodaj wyzwalacz poczty. Na pustej kanwie klikamy duży kafelek „Add first step" (znak „+") - otwiera się panel wyzwalaczy. W polu wyszukiwania wpisujemy „Email Trigger" i wybieramy: dla dowolnego serwera poczty uniwersalny „Email Trigger (IMAP)", a dla Gmaila dedykowany „Gmail Trigger".
b) Otwórz edytor poświadczenia. Zaraz po dodaniu węzła (krok a) otwiera się jego panel z ustawieniami - a jeśli go zamknąłeś, wejdziesz w węzeł ponownie dwuklikiem na nim na kanwie. To właśnie w tym panelu, przy polu „Credential", na starcie widnieje „No credentials yet". Klikamy obok przycisk „Set up credential" - to on otwiera edytor, w którym wpisujemy dane logowania do skrzynki (przy kolejnych węzłach Gmail wybierzemy to poświadczenie już z listy, bez ponownego wpisywania).
c) Wpisz dane skrzynki. W edytorze poświadczenia podajemy dane konta pocztowego:
powiadomienia@jsystems.pl;imap.gmail.com;993;Hasło pozostaje ukryte, a n8n trzyma je zaszyfrowane w osobnym poświadczeniu - nie widać go ani w węźle, ani w przepływie.
d) Wskaż skrzynkę, akcję i format danych. Po zapisaniu poświadczenia wracamy do węzła: wybieramy je z listy „Credential" i ustawiamy folder do nasłuchu (pole „Mailbox Name", zwykle INBOX). W polu „Action" decydujemy, co n8n zrobi z pobraną wiadomością: „Mark as Read" oznaczy ją jako przeczytaną (dzięki temu nie trafi do przepływu drugi raz), a „Nothing" zostawi ją bez zmian - w tym demo użyliśmy „Nothing", żeby nie ruszać stanu skrzynki. Na koniec - to ważne - w polu „Format" zmieniamy domyślne „Simple" na „Resolved". Dzięki temu na wyjściu dostaniemy gotowe, rozłożone pola (temat, nadawca, treść), a nie surowy obiekt wiadomości - i kolejne węzły łatwo się nimi posłużą.
e) Sprawdź, że naprawdę działa. Klikamy „Execute step" - węzeł łączy się ze skrzynką i realnie pobiera wiadomość. Na wyjściu dostajemy pełną treść maila (nadawca, temat, treść), gotową do dalszej obróbki.
Żeby wygodnie przetestować resztę przepływu bez czekania na prawdziwe wiadomości, na czas nauki podłożymy agentowi przykładowy mail węzłem „Edit Fields" (Ustaw pola). Zbudujmy ten węzeł krok po kroku.
1. Dodaj węzeł. Na kanwie klikamy przycisk „+" (w prawym górnym rogu albo na wyjściu poprzedniego węzła) - otwiera się panel dodawania węzłów. W polu wyszukiwania wpisujemy Edit Fields i wybieramy „Edit Fields (Set)".
2. Wybierz tryb. W środkowym panelu, w polu „Mode", zostawiamy Manual Mapping (ręczne mapowanie), a sekcja „Fields to Set" - czyli pola, które węzeł ma ustawić - jest jeszcze pusta, więc klikamy „Add Field". Lewy panel „Input" może być pusty albo pokazywać dane z poprzedniego węzła (np. wiadomość z wyzwalacza) - to normalne; konfigurujemy tu wyłącznie środek, czyli pola do ustawienia.
3. Dodaj pierwsze pole. Klikamy „Add Field", zostawiamy typ String, wpisujemy nazwę from i wartość - adres nadawcy (np. anna.kowalska@example.com).
4. Dodaj pozostałe dwa pola. Tak samo dodajemy subject (temat) i body (treść). W każde wpisujemy przykładową wartość - tak, jakby to była prawdziwa reklamacja uszkodzonego laptopa.
5. Uruchom węzeł i zobacz dane. Klikamy „Execute step". Węzeł wykonuje się i po prawej, w panelu „Output", pojawia się gotowy element z trzema polami: from, subject i body. To dokładnie te dane, które popłyną dalej - do klasyfikatora i agentów.
To serce całego agenta. Węzeł Text Classifier, korzystając z modelu językowego, czyta treść maila i przypisuje go do jednej z kategorii. Zbudujmy go krok po kroku.
1. Dodaj węzeł Text Classifier. Klikamy „+", wpisujemy Text Classifier i wybieramy węzeł z rodziny AI.
2. Otwórz świeży węzeł. Zaraz po dodaniu klasyfikator jest pusty - w środku nie ma jeszcze ani tekstu do analizy, ani kategorii. Po lewej, w panelu „Input", widać już wiadomość z poprzedniego węzła (pola from, subject i body) - to na niej za chwilę popracujemy.
3. Wskaż tekst do klasyfikacji. W polu „Text to Classify" mówimy, co model ma czytać: temat i treść wiadomości ({{ $json.subject }} oraz {{ $json.body }}).
Nie musimy wpisywać tych wyrażeń ręcznie - najwygodniej przeciągnąć pola z panelu „Input" (po lewej) prosto do pola „Text to Classify". n8n sam wstawi wtedy odpowiednie wyrażenie, np. {{ $json.subject }}.
4. Zdefiniuj kategorie i wyjście dla niepewnych. Dodajemy dwie kategorie, każdą opisujemy jednym zdaniem - to po tych opisach model rozpoznaje, gdzie pasuje wiadomość. Im konkretniejszy opis, tym celniejsza klasyfikacja:
Reklamacja - klient skarży się na produkt lub usługę: uszkodzenie, wada, chce wymiany, zwrotu albo naprawy. Zamówienie - pytanie o zamówienie: status, dostawa, faktura, chęć złożenia lub zmiany zamówienia.
W węźle klikamy „Add Category" i dla każdej kategorii wpisujemy jej nazwę w pole „Category" (np. Reklamacja), a opis wklejamy do pola „Description". To właśnie ten opis czyta model, decydując, czy wiadomość pasuje do kategorii.
Zostało najważniejsze zabezpieczenie: trzecie wyjście dla wiadomości, których model nie rozpozna na pewno. Nie ma go domyślnie - trzeba je dodać. W sekcji „Options" klikamy „Add Option" i z listy wybieramy „When No Clear Match".
Dodaną opcję ustawiamy na „Output on Extra, 'Other' Branch" - to ona tworzy osobną, trzecią gałąź „Other" dla spraw niejasnych. Druga możliwość, „Discard Item", po prostu wyrzuciłaby taką wiadomość, a my chcemy ją przekazać człowiekowi.
To wszystko. Kategorie możesz zostawić rozwinięte albo zwinąć strzałką przy ich nazwie - to tylko kosmetyka i nie wpływa na działanie. Zwinięty, gotowy klasyfikator wygląda tak:
5. Podłącz „mózg" - model językowy. Sam klasyfikator nie myśli. U dołu jego węzła jest osobne gniazdo „Model" (z czerwoną gwiazdką - jest wymagane, dlatego węzeł ma na razie ostrzeżenie). Klikamy w nim „+", w wyszukiwarce wpisujemy OpenAI Chat Model i wybieramy ten węzeł (albo lokalny model przez Ollama, jeśli treść maili nie ma opuszczać Twojej firmy). Model podepnie się pod klasyfikator.
Świeżo dodany model prosi jeszcze o jedno: poświadczenie OpenAI. W węźle „OpenAI Chat Model", przy polu „Credential", klikamy „Set up credential" i w polu „API Key" wklejamy swój klucz API OpenAI (wygenerujesz go w panelu OpenAI, w sekcji „API keys"). To jednorazowe - potem model jest gotowy do pracy.
Klasyfikator ma teraz trzy wyjścia. Z pierwszego, „Reklamacja", wiadomość trafi do węzła AI Agent, który napisze odpowiedź, a gotowy tekst wyląduje jako wersja robocza w skrzynce działu. Budujemy to dwoma węzłami.
1. Dodaj węzeł AI Agent. Na wyjściu „Reklamacja" klikamy „+", wpisujemy AI Agent i wybieramy węzeł agenta.
2. Otwórz świeży węzeł. Świeżo dodany agent ma w polu „Source for Prompt (User Message)" zwykle domyślnie „Connected Chat Trigger Node" - a nasz przepływ nie ma czatu, więc zmieniamy tę opcję na „Define below" (zdefiniuj poniżej). Dopiero wtedy pojawia się pole na własny prompt (na razie puste).
3. Wpisz instrukcję (prompt). Cały sekret tkwi w instrukcji - mówimy agentowi, kim jest i jak ma odpowiedzieć. Treść maila podstawia się automatycznie wyrażeniami w nawiasach klamrowych:
Jesteś konsultantem działu reklamacji. Napisz uprzejmą, empatyczną odpowiedź na poniższą reklamację klienta. Przeproś za sytuację, zaproponuj konkretne rozwiązanie (wymiana/zwrot) i poproś o brakujące dane, jeśli trzeba. Nie obiecuj rzeczy niepewnych.
Od: {{ $json.from }}
Temat: {{ $json.subject }}
Treść: {{ $json.body }}
4. Dodaj węzeł Gmail i wybierz „wersję roboczą". Na wyjściu agenta klikamy „+", wyszukujemy Gmail i klikamy go. n8n pokazuje wtedy listę akcji tego węzła - wybieramy z niej „Create a draft" (utworzenie wersji roboczej). Najszybciej znaleźć ją, wpisując „draft" w wyszukiwarce akcji.
5. Skonfiguruj wersję roboczą. Świeży węzeł Gmail najpierw wymaga jednorazowego podłączenia konta - ale przez OAuth (inaczej niż wyzwalacz IMAP w kroku 1, gdzie podawaliśmy login i hasło). W węźle, przy polu „Credential", klikamy „Set up credential" - otwiera się edytor poświadczenia „Gmail OAuth2 API".
W edytorze widać wybraną metodę „OAuth2 (recommended)". Dalsze kroki zależą od tego, gdzie działa Twój n8n:
Klient OAuth w Google Cloud (tylko własny serwer). Gdy n8n stoi na Twoim serwerze, klienta OAuth zakładasz raz w Google Cloud Console. Ze strony głównej wejdź w „APIs & Services", po lewej otwórz „Credentials", kliknij „Create credentials" i wybierz „OAuth client ID" (w części kont Google przenosi to na ekran „Google Auth Platform" z sekcją „Clients" - to ten sam kreator).
Jako „Application type" wybierz „Web application", a w polu „Authorized redirect URIs" wklej adres „OAuth Redirect URL" skopiowany z n8n (ten z poprzedniego zrzutu). Po kliknięciu „Create" Google pokaże Client ID i Client Secret - te dwie wartości wklejasz z powrotem do poświadczenia w n8n.
Po podłączeniu konta komunikat o poświadczeniu znika, a samo poświadczenie zostaje na liście „Credential" (przy kolejnych węzłach Gmail wybierzesz je wprost, bez ponownego logowania). Teraz - jak zapowiadaliśmy - jako treść wersji roboczej wstawiamy odpowiedź agenta, a temat i skrzynkę działu uzupełniamy jak w zwykłym mailu.
Druga gałąź działa bliźniaczo: te same dwa węzły co przy reklamacjach (AI Agent + Gmail), tylko inny dział i inny ton. Dodajemy je dokładnie tak samo jak w kroku 3 - „+", „AI Agent", a potem „+", „Gmail".
1. Dodaj agenta i wpisz prompt dla zamówień. Z wyjścia „Zamówienie" dodajemy osobny węzeł AI Agent. Świeży agent ma pusty prompt - wklejamy instrukcję dopasowaną do obsługi zamówień:
Jesteś konsultantem działu zamówień. Napisz rzeczową, miłą odpowiedź na poniższą wiadomość dotyczącą zamówienia. Podaj następne kroki (np. status, termin dostawy) i poproś o numer zamówienia, jeśli go brakuje.
Od: {{ $json.from }}
Temat: {{ $json.subject }}
Treść: {{ $json.body }}
2. Dodaj wersję roboczą w skrzynce działu zamówień. Odpowiedź agenta zapisujemy jako wersję roboczą - tym razem w skrzynce działu zamówień. To właśnie tu „reklamację do jednego, zamówienie do drugiego" zamienia się w konkret: dwie gałęzie, dwie różne osoby, dwie różne skrzynki.
Najważniejsza - i najczęściej pomijana - część dobrego agenta to obsługa przypadków, których nie da się jednoznacznie przypisać. Dzięki ustawieniu „Output on Extra, 'Other' Branch" z kroku 2 klasyfikator ma trzecie wyjście, „Other". Trafiają tu maile, których model nie zaklasyfikował z pewnością. Zamiast zgadywać, po prostu przekazujemy je do eksperta - jednym węzłem Gmail. To proste zabezpieczenie sprawia, że agent jest godny zaufania: lepiej oddać trudną sprawę człowiekowi, niż udzielić błędnej automatycznej odpowiedzi.
1. Dodaj węzeł Gmail. Na wyjściu „Other" klikamy „+", wyszukujemy Gmail i dodajemy węzeł - dokładnie jak w krokach 3-4.
2. Ustaw wysyłkę do eksperta. W świeżym węźle wybieramy zasób „Message" i operację „Send" (wyślij). W polu „To" wpisujemy adres eksperta, a w treści przekazujemy oryginalną wiadomość - z adnotacją, że wymaga ludzkiej decyzji. Treść możemy złożyć z wyrażeń dynamicznych (składnia {{ }}), żeby wciągnąć temat i treść oryginalnego maila wprost z poprzednich węzłów - jak one działają, opisujemy w artykule o n8n, w sekcji o wyrażeniach dynamicznych. Przykład takiej treści widać na zrzucie poniżej.
Gdy całość działa na przykładowym mailu, zostają trzy rzeczy, by wpuścić agenta do prawdziwej skrzynki:
To przepływ (workflow) w n8n, który dla każdej przychodzącej wiadomości czyta jej treść modelem językowym, rozpoznaje typ sprawy (reklamacja, zamówienie albo coś innego) i kieruje ją tam, gdzie trzeba: tworzy gotową wersję roboczą odpowiedzi u właściwej osoby, a sprawy niejasne przekazuje do eksperta.
Nie musi. W naszym przepływie agent tworzy wersję roboczą (draft) odpowiedzi w skrzynce właściwej osoby. Człowiek ją tylko przegląda, ewentualnie poprawia i wysyła. To bezpieczny wzorzec: AI wykonuje większość pracy, a decyzja zostaje po stronie człowieka.
Klasyfikator ma osobne wyjście dla przypadków bez pewnej kategorii. Taka wiadomość nie jest zgadywana na siłę - trafia (forward) do wyznaczonej osoby albo eksperta, który zdecyduje, co dalej.
Potrzebujesz n8n (open-source, można uruchomić na własnym serwerze albo w chmurze), konta skrzynki pocztowej (Gmail lub dowolny IMAP) oraz dostępu do modelu językowego (np. OpenAI albo lokalny model przez Ollama). Całość buduje się klikając węzły, bez pisania kodu.
Pokazaliśmy szkielet, który możesz dowolnie rozbudowywać: dorzucić zapis sprawy do bazy lub CRM, powiadomienie na Slacku, ocenę pilności czy automatyczne tagowanie. Jeśli chcesz nauczyć się budować takie przepływy od podstaw - od pierwszego węzła po agentów AI z narzędziami i pamięcią - zapraszamy na nasze praktyczne szkolenie.
Szkolenie n8n + AI -->
Komentarze (0)
Brak komentarzy...