System CRM

Ten wpis jest w trybie przedpremierowym.
Podaj hasło dostępu, aby zobaczyć treść.

Nieprawidłowe hasło. Spróbuj ponownie.

← wróć do Integracji
Start / Integracje / System CRM
07.07.2026
Wdrożenie flagowe 2 miesiące pracy Produkcja

System CRM: od maila do rezerwacji — bez przepisywania danych

Skrzynka mailowa wielu firm to w praktyce cała firma: zapytania o terminy, ustalenia cenowe, adresy, zaliczki, potwierdzenia. Problem w tym, że te dane żyją tylko w mailach — ktoś musi je przeczytać, przepisać do kalendarza, pamiętać o zaliczce i sprawdzić, czy sprzęt nie jest już zarezerwowany.

Zbudowaliśmy system, który tę pracę wykonuje sam. Poniżej pełny opis realnego wdrożenia dla wypożyczalni atrakcji eventowych — sześć współpracujących modułów: dwa boty mailowe, otwartoźródłowy CRM, planer rezerwacji, most LLM i asystent czatowy. Architektura jest uniwersalna — te same klocki pasują do biura nieruchomości, serwisu, kancelarii czy każdej firmy żyjącej z korespondencji.

6
niezależnych modułów
1000+
maili zaimportowanych 1. dnia
~150
klientów w CRM automatycznie
24/7
nasłuch nowych wiadomości

Problem: firma, która mieszka w skrzynce mailowej

Przed wdrożeniem

  • Kilkaset wątków mailowych rocznie czytanych i przepisywanych ręcznie do kalendarza lub arkusza
  • Godziny pracy tygodniowo na „administrację skrzynką" zamiast na obsługę klientów
  • Ryzyko podwójnej rezerwacji tego samego sprzętu na jeden dzień
  • Zaliczki i płatności pilnowane „z głowy" — brak jednego miejsca z prawdą o należnościach
  • Jedno przeoczone zapytanie = stracony kontrakt

Po wdrożeniu

  • Każdy mail jest czytany przez bota, a dane trafiają do CRM same — kontakt, ustalenia, zadanie z terminem
  • Kalendarz rezerwacji z kontrolą dostępności sprzętu i ostrzeganiem o konfliktach
  • Zaliczki i „do zapłaty" wyliczane automatycznie ze statusów rezerwacji
  • Asystent AI: „co mamy wolnego 14 czerwca?" — odpowiedź w kilka sekund, bez klikania
  • Wszystko na własnym serwerze, dostęp tylko przez VPN, skrzynka czytana w trybie tylko-do-odczytu

Kluczowa obserwacja z tego wdrożenia: klienci nie wypełniają formularzy. Piszą zwykłe maile — „szukamy zjeżdżalni na piknik 14 czerwca w godzinach 12–17, jaka cena?". Cała sztuka polega na tym, żeby system rozumiał taki język i sam zamieniał go na ustrukturyzowane dane: kontakt, zadanie, termin, listę atrakcji, wycenę. Dokładnie to robi warstwa językowa (LLM) opisana niżej — i robi to równie dobrze na modelu chmurowym, jak i na modelu uruchomionym lokalnie, bez wysyłania korespondencji poza firmę.

Architektura: sześć modułów, jedna baza danych

System nie jest monolitem. Składa się z niezależnych modułów spiętych wspólną bazą danych (otwartoźródłowy CRM Twenty na PostgreSQL). Każdy moduł można wyłączyć, wymienić lub rozbudować bez ruszania pozostałych. Poniższy schemat pokazuje, jak dane płyną przez system — od skrzynki mailowej, przez analizę językową, do bazy, planera i asystenta.

Przepływ danych w systemie (animacja)

📧 Skrzynka e-mail tryb tylko-do-odczytu zero śladu na skrzynce 1. Bot importu historii jednorazowo: całe archiwum 2. Bot nasłuchujący 24/7: każdy nowy mail 🧠 Warstwa LLM ekstrakcja danych z języka 3. CRM Twenty PostgreSQL · open source kontakty · notatki · zadania wspólna baza dla wszystkich 4. Planer rezerwacji kalendarz · cennik · rozliczenia 5. Most + sync statusów mail → rezerwacja · CRM ⇄ planer 6. Asystent AI Open WebUI · czat z danymi
odczyt maili zapis do CRM / odczyt danych analiza językowa (LLM) automatyzacje mostu

Moduły niezależne

Każdy klocek ma zdefiniowany kontrakt (REST + wspólny model danych). Wyłączenie lub wymiana jednego nie psuje pozostałych.

LLM wymienny

System rozmawia z modelem przez standardowy interfejs zgodny z API OpenAI. Podmiana modelu chmurowego na lokalny to zmiana konfiguracji, nie kodu.

Jedna prawda o danych

Wszystkie moduły piszą i czytają z jednego relacyjnego modelu danych. Nie ma dwóch kalendarzy ani trzech list klientów.

Taka budowa ma jeszcze jedną konsekwencję, ważną dla właściciela firmy: system rośnie razem z biznesem. Fakturowanie, powiadomienia SMS, integracja z kalendarzem zewnętrznym — to kolejne klocki dokładane do istniejącej bazy, a nie przebudowa całości. Więcej o kierunkach rozbudowy na końcu wpisu.

Budowa systemu — moduł po module

Poniżej wszystkie sześć modułów w kolejności, w jakiej „dotykają" danych: od pierwszego odczytu skrzynki, przez bazę, po interfejsy, w których pracuje zespół. Przy każdym module opisujemy co robi, jak jest zbudowany i jak łączy się z resztą systemu.

01

Bot importu historii — CRM wypełnia się sam

Wdrożenie nowego CRM-u zwykle rozbija się o jedno pytanie: „kto przepisze te wszystkie dane?". Tutaj — nikt. Bot importu przetwarza archiwum skrzynki (w opisywanym wdrożeniu: ponad tysiąc maili, około 150 unikalnych klientów), grupuje wiadomości w wątki po adresie klienta, odsiewa powiadomienia automatyczne i newslettery, a z pozostałych rozmów model językowy wyciąga ustrukturyzowane dane.

Efekt: pierwszego dnia po wdrożeniu firma ma w CRM komplet kontaktów z pełną historią współpracy — czego ręcznie nie zrobiłby nikt. Import działa wyłącznie na lokalnej kopii skrzynki, w trybie tylko-do-odczytu, i jest idempotentny: można go bezpiecznie przerywać, wznawiać i powtarzać — duplikaty nie powstają, bo rekordy są dopasowywane po adresie e-mail i nazwie.

Jak przebiega import archiwum

📥
1. Archiwum
1000+ maili z lokalnej kopii skrzynki (tylko odczyt)
🧵
2. Wątkowanie
grupowanie wiadomości po adresie klienta w rozmowy
🚮
3. Filtr
odsianie newsletterów, powiadomień i automatów (SKIP)
🧠
4. Ekstrakcja
LLM wyciąga kontakty, ustalenia i tematy rozmów
5. CRM gotowy
~150 kontaktów z historią pierwszego dnia

Dlaczego to takie ważne? Puste narzędzie nikogo nie przekonuje. CRM, który w dniu startu zna wszystkich klientów firmy i pamięta każdą rozmowę, od razu staje się miejscem, do którego zespół zagląda z własnej woli — bo tam po prostu jest wszystko.

02

Bot nasłuchujący 24/7 — co system wyciąga z każdego maila

Drugi bot działa całodobowo i reaguje na każdą nową wiadomość. Z treści maila — pisanego zwykłym, ludzkim językiem, bez żadnych formularzy — model językowy wydobywa trzy warstwy informacji: dane kontaktowe, profil klienta i konkrety rezerwacyjne. Zobacz na żywym przykładzie:

Z maila do rekordów w CRM (animacja)

Nowa wiadomość · 09:14
Od: anna.kowalska@przyklad.pl

Dzień dobry,

szukamy zjeżdżalni dmuchanej na piknik firmowy 14 czerwca w Łodzi, w godzinach 12–17. Do tego chętnie wata cukrowa. Impreza dla ok. 80 osób, teren zielony przy biurze.

Proszę o wycenę.
Anna Kowalska, tel. 601 123 456
Firma Przykładowa Sp. z o.o.

Kontakt
Imię i nazwiskoAnna Kowalska Telefon+48 601 123 456 FirmaFirma Przykładowa Typ kontaktuLead
Notatka (profil klienta)
Zapytanie o piknik firmowy dla ~80 osób, teren zielony przy biurze. Oczekuje wyceny zjeżdżalni + waty cukrowej.
Zadanie w CRM
Termin14.06, godz. 12:00–17:00 LokalizacjaŁódź AtrakcjeZjeżdżalnia, Wata cukrowa Typ eventuFirmowy StatusNowe

Warstwa 1: dane kontaktowe

Imię i nazwisko, e-mail, telefon (automatycznie ujednolicany do jednego formatu), nazwa firmy oraz klasyfikacja: klient, lead, partner czy usługodawca. Adresy systemowe i automaty są rozpoznawane i pomijane.

Warstwa 2: profil klienta

Zwięzłe podsumowanie, o czym toczy się rozmowa, plus kluczowe ustalenia: uzgodnione ceny, rabaty, warunki. Handlowiec przed telefonem widzi esencję całego wątku w kilku zdaniach.

Warstwa 3: zadania i terminy

Gdy w mailu pada konkret, powstaje zadanie z datą, godzinami, lokalizacją, listą atrakcji rozpoznanych z treści i typem eventu: urodziny, komunia, chrzest, impreza firmowa, prywatna albo zlecenie od agencji.

Zasady, na których stoi bot

Uzupełnianie addytywne. Jeśli kontakt już istnieje, bot dopisuje tylko brakujące dane (np. telefon), ale nigdy nie nadpisuje ręcznych poprawek człowieka. Jedyny świadomy wyjątek: adres eventu — tu wygrywa najnowszy mail, bo klienci robią imprezy w różnych miejscach i aktualny adres jest cenniejszy niż historyczny.
Tylko odczyt, audytowalnie. W kodzie bota nie istnieje żadna ścieżka wysyłania, kasowania ani modyfikowania wiadomości — lista dozwolonych operacji na skrzynce jest wypisana wprost w kodzie i można ją zweryfikować. Firma niczym nie ryzykuje.
Zero śladu na skrzynce. Bot pobiera treść maili w sposób, który nie oznacza wiadomości jako przeczytanych — właściciel skrzynki pracuje jak zawsze i nie widzi żadnego śladu działania automatu.
Filtr nadawców systemowych. Powiadomienia, faktury automatyczne i newslettery są klasyfikowane jako „pomiń" i nie zaśmiecają CRM-u — w bazie lądują tylko prawdziwe rozmowy z ludźmi.
Normalizacja telefonów. „601 123 456", „+48 601-123-456" i „601123456" to dla systemu ten sam numer, zapisany w jednym międzynarodowym formacie — dzięki temu wyszukiwanie i deduplikacja działają niezawodnie.
Defensywne czytanie odpowiedzi modelu. Odpowiedź LLM jest zawsze walidowana i czyszczona zanim cokolwiek trafi do bazy — „zwracaj tylko dane" w poleceniu to prośba, nie gwarancja, więc system dodatkowo pilnuje formatu sam.

Rozwój bez ryzyka. Bot jest rozwijany wersjami — każda poprawka to nowa, opisana wersja, a powrót do poprzedniej zajmuje minutę. Tak doszły kolejne funkcje: pole adresu eventu, własna kolumna statusów, klasyfikacja typu imprezy z kontekstu maila. Żadna zmiana nie zatrzymała systemu.

03

CRM Twenty — otwarty fundament zamiast abonamentu

Sercem systemu jest Twenty — nowoczesny, otwartoźródłowy CRM (alternatywa dla Salesforce i HubSpota) uruchomiony na własnym serwerze firmy, w kontenerach Docker, na bazie PostgreSQL. Interfejs przypomina Notion: czysty, szybki, przyjemny w codziennej pracy.

0 zł
opłat licencyjnych za użytkownika — dziś i za pięć lat
100%
własności danych — baza stoi na serwerze firmy, nie u dostawcy
rozszerzalność — własne obiekty, pola i relacje przez API

Najważniejsza cecha z punktu widzenia całej integracji to rozszerzalny model danych: przez API można programowo dokładać własne obiekty, pola i relacje. Z tego korzystają wszystkie pozostałe moduły — rezerwacje, atrakcje, taryfy i pozycje rezerwacji to nasze obiekty dobudowane do CRM-u, a nie funkcje „wciśnięte" w cudzy szablon. Standardowe obiekty (kontakty, firmy, notatki, zadania) zostały z kolei rozszerzone o pola potrzebne w branży eventowej: adres imprezy, typ eventu, typ kontaktu.

Miejsce na zrzut ekranu
Screenshot CRM Twenty — widok kontaktów, zadań i notatek uzupełnionych automatycznie przez boty

Dlaczego nie gotowy CRM z abonamentem? Bo w modelu abonamentowym płaci się za każdego użytkownika co miesiąc, dane leżą u dostawcy, a dopasowanie systemu do własnego procesu kończy się na tym, co przewidział producent. Tutaj proces firmy definiuje kształt systemu — nie odwrotnie.

04

Planer rezerwacji — kalendarz, cennik i rozliczenia w jednym

Na modelu danych CRM zbudowaliśmy dedykowaną aplikację webową — planer rezerwacji. To operacyjne centrum firmy: tu widać kalendarz imprez, dostępność sprzętu, wyceny i stan płatności. Aplikacja działa w przeglądarce (na laptopie i telefonie) i rozmawia bezpośrednio z bazą CRM — obie strony zawsze widzą te same dane. Cztery zakładki:

Eventy

Tabela wszystkich rezerwacji z filtrami po statusie, cenami, zaliczkami i typem eventu. Status można zmienić bezpośrednio z listy — klik w kolorową etykietę rozwija wybór, bez wchodzenia w edycję.

Nad tabelą kafelki finansowe: suma przychodów, zaliczki wpłacone i oczekujące oraz kwota „do zapłaty" wraz z liczbą eventów, za które firma wciąż czeka na przelew.

Kalendarz

Widok miesiąca z kolorowymi kropkami statusów. Klik w dzień pokazuje wszystkie imprezy: klient, godziny, lokalizacja, atrakcje.

Z tego samego widoku można od razu założyć nowy event na wybraną datę — system podpowie, co tego dnia jest jeszcze wolne.

Atrakcje

Katalog sprzętu w kategoriach: zamki, zjeżdżalnie, tory przeszkód, atrakcje dodatkowe i gry plenerowe — od strefy darta i cornhole po giga chińczyka i mega jengę.

Kluczowa funkcja: dostępność na wybrany dzień. System sprawdza wszystkie rezerwacje i oznacza zajęty sprzęt; przy próbie rezerwacji ostrzega o konflikcie.

Statystyki

Pulpit biznesowy: liczba eventów i przychód w ujęciu 12 miesięcy, struktura typów imprez, ranking najczęściej rezerwowanych atrakcji, KPI bieżącego miesiąca.

Wykresy są rysowane bezpośrednio w aplikacji — lekkie, szybkie, czytelne również na telefonie.

Miejsce na zrzut ekranu
Screenshot planera rezerwacji — kalendarz, lista eventów i kafelki finansowe

Cykl życia rezerwacji: dziesięć statusów (animacja)

Każda rezerwacja przechodzi przez jasno zdefiniowany cykl życia. Na statusy spięta jest logika rozliczeń: zaliczka liczy się jako wpłacona od statusu „Zaplanowane", a event znika z listy „do zapłaty" dopiero po „Opłacone" — celowo nie przy „Zrealizowane", bo zrealizowany nie znaczy opłacony. Dzięki temu kafelki finansowe zawsze mówią prawdę o realnych należnościach.

Pipeline statusów

podświetlenie wędruje automatycznie
Nowe Ustalenia Potwierdzone Zaplanowane W realizacji Zrealizowane Faktura Opłacone Feedback
Anulowane — możliwe z każdego etapu; dane zostają, sprzęt się zwalnia
Od statusu Zaplanowane zaliczka liczy się jako wpłacona — pojawia się w kafelku „zaliczki wpłacone".
Dopiero status Opłacone zdejmuje event z listy „do zapłaty" — bo zrealizowany nie znaczy opłacony.

Cennik taryfowy i automatyczna wycena

Cennik atrakcji jest taryfowy: 3h / 4h / 5h / powyżej 5h. Wybór taryfy automatycznie podpowiada cenę pozycji z cennika i wylicza godzinę zakończenia imprezy (start + godziny taryfy). Atrakcje z wyceną indywidualną mają cenę wpisywaną ręcznie.

Cena całego eventu przelicza się sama jako suma pozycji — przy każdym dodaniu, zmianie lub usunięciu atrakcji. Koniec z sytuacją, w której na rezerwacji widnieje „do zapłaty: 0 zł" przy trzech dodanych atrakcjach.

Przykład wyceny eventu
Zjeżdżalnia Kraina Lodu taryfa 5h 1 200 zł
Zamek Dżungla taryfa 5h 900 zł
Wata cukrowa taryfa 5h 450 zł
Cena eventu (suma pozycji) 2 550 zł
Godziny: start 12:00 + taryfa 5h 12:00 – 17:00

Kontrola dostępności — ostrzega, ale nie ubezwłasnowolnia

Dla wybranego dnia system buduje mapę zajętości: która atrakcja jest już zarezerwowana i przez jaki event (rezerwacje anulowane nie blokują sprzętu). Zajęte atrakcje spadają na dół listy i dostają czerwoną plakietkę, ale pozostają klikalne — to świadoma decyzja projektowa. System ostrzega o konflikcie, lecz nie zabrania: dwie imprezy w tym samym dniu bywają obsługiwalne logistycznie, np. jedna rano, druga wieczorem. Decyzję podejmuje człowiek, system dostarcza pełną informację.

Dostępność na dzień: 14 czerwca
Zamek Dżungla WOLNE
Piana Party WOLNE
Zjeżdżalnia Kraina Lodu ZAJĘTE

Zajęty sprzęt można mimo wszystko dodać do eventu — po wyraźnym ostrzeżeniu o konflikcie terminów.

Drobiazgi, które decydują o codziennej wygodzie

Zmiana statusu jednym kliknięciem. Kolorowa plakietka statusu w tabeli jest jednocześnie przyciskiem — klik podmienia ją w miejscu na listę wyboru, zapis następuje od razu po wyborze. Klik w resztę wiersza otwiera pełną edycję.
Tryb kompletowania eventu. Po utworzeniu rezerwacji aplikacja przechodzi w tryb dodawania atrakcji: baner z kontekstem eventu, dostępność liczona na dzień tej imprezy, każda karta atrakcji z wyborem taryfy, podpowiedzią ceny i przyciskiem „dodaj do eventu".
Ciche odświeżanie danych. Po każdej zmianie dane przeładowują się w tle, bez ekranu ładowania i bez zamykania otwartych okien — aplikacja „czuje się" jak natywna.
Dwa tryby anulowania. „Anuluj event" to zmiana statusu — dane zostają, sprzęt się zwalnia, statystyki nie liczą anulowanych. „Usuń trwale" kasuje rezerwację z pozycjami — z wyraźnym ostrzeżeniem, że operacji nie da się cofnąć.
05

Most mail → rezerwacja i synchronizacja statusów

Najciekawsza automatyzacja spina moduły w całość i robi rzecz zaskakująco trudną: zamienia rozmowę w strukturę. Gdy zadanie w CRM osiąga status „Zaplanowane", osobna usługa (pracująca w pętli, cykl co 60 sekund) pobiera całą korespondencję z danym klientem — obie strony rozmowy, ułożone chronologicznie — i prosi model językowy o wyciągnięcie ostatecznych ustaleń.

Jak z wątku mailowego powstaje kompletna rezerwacja

🎯
Wyzwalacz
zadanie w CRM dostaje status „Zaplanowane"
🧾
Cały wątek
korespondencja z klientem, chronologicznie, obie strony rozmowy
🧠
Finalne ustalenia
LLM: „późniejsze maile nadpisują wcześniejsze"
🧪
Kontrole
sprawdzenie godzin, dopasowanie atrakcji, wycena
📅
Rezerwacja
kompletny wpis w planerze, powiązany z klientem i zadaniem

Dlaczego „ostateczne ustalenia" to klucz

W prawdziwych negocjacjach klient najpierw pyta o trzy atrakcje, potem z jednej rezygnuje, potem zmienia godzinę. Rezerwacja ma odzwierciedlać finał rozmowy, nie jej historię — dlatego model dostaje cały wątek z jawną regułą, że późniejsze maile nadpisują wcześniejsze. Z wyniku powstaje kompletny wpis: nazwa, data, godziny, lokalizacja, cena, zaliczka oraz pozycje atrakcji dopasowane do katalogu.

Kontrola godzin. Modele językowe świetnie czytają, ale bywają słabe w arytmetyce czasu — z maila „spotkajmy się 14:30" potrafiła powstać rezerwacja 14:30–15:00 przy wynajmie na 3 godziny. Most po ekstrakcji sprawdza, czy czas trwania nie jest krótszy niż wynajęta taryfa — jeśli tak, koryguje godzinę zakończenia i odnotowuje korektę.
Dopasowanie atrakcji odporne na język naturalny. Klient pisze „dmuchaniec ze zjeżdżalnią", katalog ma „Zjeżdżalnia Kraina Lodu". Dopasowanie idzie kaskadą: ujednolicenie zapisu → dopasowanie dokładne → zawieranie nazwy → dopasowanie przybliżone z progiem podobieństwa, plus słownik aliasów dla nazw historycznych. Czego nie da się dopasować pewnie, tego system nie zgaduje — odnotowuje do ręcznego uzupełnienia.
Wycena kaskadowa. Cena pozycji: najpierw kwota umówiona w mailach; gdy jej brak — cennik taryfowy atrakcji dla rozpoznanego czasu. Cena całkowita: kwota z maili, a gdy brak — suma znanych pozycji. Ustalenia z negocjacji zawsze wygrywają z cennikiem.
Ponawianie z głową. Każde zadanie ma licznik prób z powodem ostatniego niepowodzenia (najczęściej: brakujące dane, np. brak e-maila przy kontakcie). Smaczek: edycja zadania w CRM resetuje licznik — skoro człowiek coś uzupełnił, system próbuje ponownie. Mała rzecz, a domyka pętlę współpracy człowiek–automat.
Bez duplikatów, z pełnym audytem. Rezerwacja nosi identyfikator zadania, z którego powstała — restart usługi ani powtórka cyklu nie stworzą kopii, a ścieżka „od maila, przez zadanie, do rezerwacji" jest w każdej chwili odtwarzalna.

Dwukierunkowa synchronizacja statusów

Zespół pracuje w dwóch narzędziach: handlowo w CRM (zadania), operacyjnie w planerze (rezerwacje). Oba mają ten sam słownik dziesięciu statusów, a synchronizator dba, żeby zawsze mówiły to samo: zmiana statusu w planerze w ciągu minuty pojawia się na zadaniu w CRM — i odwrotnie. Przy rozbieżności wygrywa nowsza zmiana, a pusty status nigdy nie nadpisuje niepustego. Każdy pracuje w narzędziu, które woli, a dane są zawsze spójne.

Zadanie w CRM
status: Zaplanowane
sync co 60 s · wygrywa nowsza zmiana
Rezerwacja w planerze
status: Zaplanowane
06

Asystent AI w Open WebUI — rozmowa zamiast klikania

Całość spina asystent czatowy zbudowany na Open WebUI — otwartoźródłowym interfejsie czatu, który można uruchomić z modelem lokalnym. Dedykowane narzędzie daje modelowi kontrolowany dostęp do skrzynki, CRM-u i planera, a użytkownik po prostu rozmawia. Rzeczy, które wymagały otwarcia trzech systemów i kilkunastu kliknięć, załatwia jedno zdanie na czacie.

Przykładowa rozmowa z asystentem

Co potrafi asystent

„Znajdź maile o pikniku w Łodzi"

Przeszukuje skrzynkę (tylko odczyt, wiele folderów) i streszcza wątek — bez otwierania programu pocztowego.

„Pokaż historię tego klienta"

Kontakt, firma, notatki, zadania i rezerwacje zebrane w jedną odpowiedź — pełny obraz współpracy w kilka sekund.

„Co mamy wolnego 14 czerwca?"

Sprawdza kalendarz rezerwacji i zwraca listę dostępnych oraz zajętych atrakcji na wskazany dzień.

„Dodaj rezerwację: urodziny, 20 lipca…"

Tworzy wpis w planerze z podpiętym klientem i pozycjami atrakcji dopasowanymi po nazwie.

„Załóż kontakt / firmę / notatkę / zadanie"

Tworzy rekordy w CRM, pilnując poprawnych formatów — normalizacji telefonów i słownikowych typów kontaktów.

Szkic odpowiedzi na maila (opcjonalnie)

Szkic ląduje w folderze roboczym skrzynki i zawsze czeka na akceptację człowieka. Asystent niczego nie wysyła sam — w kodzie po prostu nie ma wysyłki.

Asystent ma też dostęp do firmowej bazy wiedzy (cenniki, zasady, FAQ), więc odpowiada w kontekście realnej oferty. Ważne: to nie zastępuje planera ani CRM-u — to trzeci, najszybszy sposób dostępu do tych samych danych.

Miejsce na zrzut ekranu
Screenshot Open WebUI — asystent odpowiada na pytanie o dostępność atrakcji

Wzorzec, który polecamy przy każdej integracji LLM z systemami firmowymi: model nie dostaje dostępu do bazy — dostaje dostęp do skończonej listy funkcji, z których każda waliduje wejście i ma jasno określony, ograniczony skutek. Asystent może dużo przeczytać i niewiele popsuć — bo destrukcyjnych operacji po prostu nie ma na jego liście.

Gdzie lądują dane — model relacji w bazie

Siłą systemu jest to, że wszystkie moduły piszą i czytają z jednego, relacyjnego modelu danych. Najważniejsze obiekty i powiązania:

ObiektCo przechowujeSkąd trafiają daneGdzie są wykorzystywane
Kontaktimię i nazwisko, e-mail, telefon, typ kontaktu, adres eventuboty z maili, asystent, ręcznieplaner (wybór klienta), historia klienta, korespondencja
Firmanazwa, adres, typboty, asystentpowiązanie z kontaktami i rezerwacjami
Notatkaprofil klienta: podsumowanie rozmów, ustalenia cenowebot z maili, asystentpodgląd przed kontaktem, kontekst negocjacji
Zadanietytuł, termin, status, typ eventu, adres eventubot z maili, asystentlejek obsługi zapytania; wyzwala utworzenie rezerwacji
Rezerwacjadata i godziny, lokalizacja, cena, zaliczka, status, typ eventumost z korespondencji, planer, asystentkalendarz, dostępność, statystyki, rozliczenia
Atrakcjanazwa, kategoria, cennik taryfowy 3/4/5h lub wycena indywidualnakatalog, ręczniedostępność, wycena pozycji, ranking popularności
Pozycja rezerwacjirezerwacja ↔ atrakcja + taryfa czasu + cena pozycjiplaner, most, asystentwykrywanie konfliktów terminów, automatyczna suma ceny eventu

Relacje: rezerwacja wskazuje na kontakt, firmę i zadanie, z którego powstała — pełna ścieżka od maila do imprezy jest odtwarzalna. Powiązanie „rezerwacja ↔ atrakcje" realizuje obiekt pośredniczący (pozycja rezerwacji), który przy okazji niesie taryfę i cenę konkretnej pozycji — czyli rzeczy, które nie są cechą ani rezerwacji, ani atrakcji, tylko ich związku. Dzięki temu jedno zapytanie o dzień zwraca komplet: kto, gdzie, jakie atrakcje, za ile i na jakim etapie rozliczenia.

Ścieżka audytu: od maila do rozliczenia

📧
Mail
👤
Kontakt
📋
Zadanie
📅
Rezerwacja
💰
Rozliczenie

Każdy rekord „pamięta", z czego powstał — w dowolnym momencie można prześledzić drogę od pierwszej wiadomości do faktury.

Bezpieczeństwo: nic nie wystaje do internetu

System pracuje na serwerze, do którego żadna usługa nie jest wystawiona publicznie. To nie deklaracja marketingowa, tylko konkretny zestaw zasad architektonicznych:

Dostęp wyłącznie przez VPN

Panel CRM i planer są dostępne tylko przez prywatną, szyfrowaną sieć VPN — z laptopa i telefonu właściciela, ale nie z otwartego internetu. Z zewnątrz serwera po prostu nie widać.

Skrzynka: tylko odczyt, zawsze

Żaden komponent nie może wysłać, skasować ani zmodyfikować maila — takich operacji nie ma w kodzie, co można audytowo zweryfikować. Boty nie zostawiają nawet flagi „przeczytane".

Sekrety poza kodem

Hasła i klucze API żyją w konfiguracji poza repozytorium kodu. Przed każdą zmianą struktury bazy wykonywany jest backup — nudna zasada, aż do dnia, w którym przestaje być nudna.

Suwerenność danych jako opcja

Warstwę LLM można w całości przenieść na model lokalny (np. na własnej stacji AI) — wtedy korespondencja firmy nie opuszcza jej serwera nawet na etapie analizy językowej. To zmiana konfiguracji, nie przebudowa.

Te zasady nie wzięły się z podręcznika. Projekt ma w historii realny incydent bezpieczeństwa (na poprzednim serwerze, przed obecną architekturą), gdy usługa wystawiona na publicznym porcie została przejęta. Obecna architektura — wszystko za VPN, usługi związane z pętlą lokalną, baza niewidoczna spoza wewnętrznej sieci kontenerów — jest bezpośrednią odpowiedzią na tamtą lekcję.

Jakość wykonania: zasady, które trzymają system w ryzach

Dwa miesiące pracy nad tym projektem to nie tylko funkcje — to również inżynierska dyscyplina, dzięki której system można bezpiecznie rozwijać latami. Kilka reguł, które odróżniają go od „skryptu, który kiedyś działał":

Wersjonowanie zamiast nadpisywania

Żadna poprawka nie nadpisuje działającego kodu. Każda zmiana to nowa, opisana wersja modułu, a powrót do poprzedniej zajmuje minutę. Zawsze wiadomo, co działa i co działało wcześniej.

Idempotencja wszędzie

Każdy proces — import, konfiguracja, synchronizacja — można uruchomić dowolną liczbę razy bez ryzyka duplikatów. Restart, awaria prądu czy powtórka cyklu niczego nie psują.

Najpierw plan, potem wykonanie

Operacje modyfikujące bazę produkcyjną domyślnie tylko pokazują, co by zrobiły — realny zapis wymaga jawnego potwierdzenia. Zmiany są wyłącznie addytywne: nowe pola się dokłada, istniejących się nie przerabia.

Usługi, które same wstają

Boty i synchronizator działają jako usługi systemowe z automatycznym restartem — podnoszą się same po awarii i po restarcie serwera. Logi trafiają równolegle do pliku i do dziennika systemowego.

Testy na żywym organizmie — bezpiecznie

Nowe funkcje są weryfikowane protokołem rekordów tymczasowych: powstaje rekord testowy z jednoznaczną nazwą, sprawdzane jest zachowanie systemu (np. czy status propaguje się w obie strony w ciągu cyklu), po czym rekord jest sprzątany.

Dokumentacja jako część systemu

W projekcie żyją: opis architektury ze zweryfikowanym przepływem danych, rejestr błędów z priorytetami, dziennik zmian i instrukcja dla właściciela pisana ludzkim językiem. Wiedza nie mieszka w niczyjej głowie.

Co to daje w praktyce? Przykład z życia tego wdrożenia: klient poprosił o nową kategorię „gry plenerowe" z piętnastoma atrakcjami, jedno pole daty zamiast zakresu, opcję „brak zaliczki" i szybką zmianę statusu z listy. Komplet zmian wszedł na produkcję tego samego dnia, bez przestoju systemu.

Dla kogo jest taki system

Opisane wdrożenie powstało dla wypożyczalni atrakcji eventowych, ale architektura — dwa boty, otwarty CRM, dedykowany panel, most LLM i asystent czatowy — przenosi się na każdą branżę, w której klienci piszą maile, a firma planuje zasoby w czasie. Zmienia się słownik (zamiast „atrakcji" — mieszkania, ekipy, sale, pojazdy), ale nie mechanika.

Biuro nieruchomości

zapytania o oferty → prezentacje w kalendarzu, historia negocjacji przy każdym kliencie

Firma budowlana / remontowa

zapytania o wyceny → harmonogram ekip, pilnowanie zaliczek i etapów

Serwis / warsztat

zgłoszenia mailowe → zlecenia z terminami, statusy napraw, historia urządzeń

Kancelaria

korespondencja ze stronami → sprawy, terminy, pełna historia każdego wątku

Fotografowie / eventy

rezerwacje terminów, sprzęt, zaliczki — jeden kalendarz prawdy

Wynajem sprzętu / floty

dostępność maszyn i pojazdów na dzień, konflikty terminów, taryfy czasowe

System, który rośnie razem z firmą

To nie jest zamknięte pudełko — ten system nie ma „wersji pudełkowej". Całość, od pól w bazie, przez logikę botów, po wygląd planera, jest w pełni modyfikowalna, bo każda firma ma inny proces. Rolą wdrożenia nie jest wciśnięcie firmy w cudzy schemat, tylko odwzorowanie jej rzeczywistego obiegu informacji: z maili, przez bazę, do kalendarza i rozliczeń. Kierunki rozbudowy, na które architektura jest gotowa już dziś:

Fakturowanie

Status „Faktura" już istnieje w cyklu życia rezerwacji — brakuje tylko generatora dokumentów podpiętego pod rezerwację.

Powiadomienia SMS / e-mail

Przypomnienie o zbliżającym się evencie albo o zaliczce — wyzwalacz na statusach i datach, wzorzec identyczny jak w synchronizatorze.

Kalendarz zewnętrzny

Publikacja potwierdzonych rezerwacji do kalendarza firmowego (np. Google) po zmianie statusu.

Pełny RAG na korespondencji

Baza wiedzy asystenta jest dziś plikowa; przy większej skali naturalny krok to indeks wektorowy na archiwum maili — dokładnie taki, jak w naszym wpisie o integracji RAG.

Panel klienta końcowego

Wariant „podglądowy" planera dla klienta firmy — kwestia klucza dostępu o zawężonych uprawnieniach, nie nowej aplikacji.

Migracja LLM na model lokalny

Zmiana konfiguracji, nie kodu — np. na stację ASUS GX10 z modelem typu Gemma 4. Korespondencja firmy przestaje opuszczać serwer nawet na etapie analizy.

Chcesz zobaczyć, jak taki system wyglądałby na Twoich danych?

Napisz do nas — pokażemy demo i podpowiemy, które moduły mają sens w Twoim biznesie, zanim wydasz złotówkę na wdrożenie.

Skontaktuj się z nami