Broker-CRM dla pośrednictwa budowlanego między Polską a Niemcami
Pośredniczka łączy niemieckich klientów z polskimi firmami wykonawczymi i zarabia na marży. Cały układ trzyma się na jednym: żadna ze stron nie może poznać drugiej. Przeniosłem to z WhatsAppa i arkusza do systemu, w którym anonimizacja jest wymuszona przez kod, a nie przez pamięć operatora.
Branża: Pośrednictwo budowlane, rynek polsko-niemiecki
W skrócie
- Firma wykonawcza nigdy nie poznaje klienta końcowego, a osoba pozyskująca zlecenie nigdy nie poznaje firmy
- Telefon klienta w osobnej, szyfrowanej tabeli, w panelu widoczne tylko cztery ostatnie cyfry
- Dobór wykonawców deterministyczny, z reguł w bazie, maksymalnie trzy firmy do jednego zlecenia
- Retencja numeru telefonu 90 dni, z automatycznym czyszczeniem
O projekcie
Marka wychodząca na rynek niemiecki to Angebot aus Polen. Zlecenia dotyczą schodów, ogrodzeń, tarasów, balustrad, carportów, ogrodów zimowych, brukarstwa i konstrukcji stalowych. Osoba pozyskująca zlecenie wysyła zapytanie, pośredniczka dobiera firmy, firmy odsyłają cenę, a klient dostaje ofertę z narzutem. Do tej pory wszystko szło przez WhatsAppa i jeden arkusz.
Wyzwanie
Model zarabia na tym, że strony się nie znają. Jeśli osoba pozyskująca zlecenie pozna wykonawcę albo wykonawca pozna klienta, pośrednik przestaje być potrzebny. Ręczna dyscyplina wystarcza przy kilku zleceniach dziennie i przestaje wystarczać przy kilkunastu. Do tego dochodzą numery telefonu klientów w arkuszu, czyli dane osobowe bez żadnej ochrony.
Cele
- Wymusić rozdzielenie stron przez system, nie przez pamięć człowieka
- Wyjąć numery telefonu z arkusza i objąć je szyfrowaniem oraz retencją
- Zamienić dobór firm z przeczucia na powtarzalne reguły
- Dać panel, który działa na telefonie, bo operator pracuje z telefonu
Wyzwania techniczne
Anonimizacja wymuszona przez kod
Dane wychodzą do stron przez mappery z listą dozwolonych pól, osobne dla osoby pozyskującej zlecenie i dla firmy. Nie ma sytuacji, w której ktoś zapomni czegoś ukryć, bo domyślnie nie wychodzi nic, co nie jest jawnie dopuszczone. Nazwa firmy, jej oznaczenie robocze, cena firmy i marża nigdy nie trafiają do drugiej strony.
Telefon klienta odseparowany fizycznie
W tabeli zlecenia nie ma kolumny z numerem. Numer powstaje osobno, dopiero gdy klient wyrazi zainteresowanie, jest szyfrowany kluczem trzymanym poza bazą, dostęp jest zawężony do właściciela i osoby, która lead przyniosła, a każde podejrzenie numeru trafia do osobnego rejestru. W interfejsie widać cztery ostatnie cyfry.
Dobór firm bez modelu językowego
Reguły siedzą w bazie jako dane: rodzaj usługi, prefiks kodu pocztowego, region, wymóg statyki, limity dzienne na firmę, priorytet i waga. Te same dane wejściowe zawsze dają tę samą listę, maksymalnie trzy firmy. System podpowiada, decyzję podejmuje człowiek.
Treść z komunikatora nigdy nie steruje systemem
Wiadomości od firm i od osób pozyskujących zlecenia są traktowane jak treść niezaufana. Parsowanie jest deterministyczne, model językowy służy najwyżej do rozbioru swobodnej wiadomości, po usunięciu danych osobowych, i nigdy nie nadaje identyfikatorów.
Rozwiązanie i wdrożenie
Panel operatora zamiast arkusza
Zlecenia z własnym kodem i kodem kreskowym, statusy po polsku, rejestr wycen per firma z wykrywaniem braków, podpowiedź doboru firm i generowanie oferty PDF pod marką Angebot aus Polen. Panel jest projektowany pod telefon, karty zamiast tabel.
Logowanie numerem telefonu, nie adresem e-mail
Operator loguje się numerem i hasłem, właściciel dodatkowo drugim składnikiem. Reset hasła idzie kodem SMS na numer konta. Do tego limit prób logowania, blokada konta po serii nieudanych prób i generyczne komunikaty błędu.
Pomost na czas przejścia z WhatsAppa
Zamiast kazać wszystkim od razu zmienić nawyki, panel przyjmuje wklejoną wiadomość i sam wypełnia formularz, a potem podaje gotowe teksty do skopiowania: jeden do firmy z kodem zlecenia, drugi zwrotny bez nazwy firmy.
Rezultaty
Wyciek przestaje zależeć od czujności
Rozdzielenie stron jest cechą systemu. Nawet pomyłka operatora nie wyśle nazwy firmy tam, gdzie nie powinna trafić.
Dane osobowe wyszły z arkusza
Numery telefonu są szyfrowane, dostęp jest zawężony i rejestrowany, a po dziewięćdziesięciu dniach numer znika automatycznie.
Dobór firm da się odtworzyć
Zamiast pamiętać, kto ostatnio miał wolne moce, system liczy to z reguł i limitów dziennych, zawsze tak samo.
Wnioski
Model biznesowy da się zapisać w schemacie bazy
Jeśli firma zarabia na tym, że dwie strony się nie znają, to rozdzielenie tabel i lista dozwolonych pól są ważniejsze niż jakakolwiek funkcja w interfejsie.
Automatyzacja nie musi zaczynać się od rewolucji
Wklejanie wiadomości z komunikatora do panelu wygląda prymitywnie, ale pozwala zacząć korzystać z systemu w pierwszym tygodniu, bez zmiany nawyków wszystkich naraz.
Zakres
- Analiza i architektura
- System od zera
- Anonimizacja i RODO
- Panel mobile first
Technologie
- Express
- TypeScript
- React
- Prisma
- PostgreSQL
- Docker
Najczęstsze pytania
Czemu tyle uwagi poświęcone anonimizacji?
Bo na niej stoi cały model. Gdy osoba pozyskująca zlecenie pozna wykonawcę albo wykonawca pozna klienta, pośrednik przestaje być w tym układzie potrzebny.
Jak system chroni numer telefonu klienta?
Numer leży w osobnej, szyfrowanej tabeli, klucz jest poza bazą, dostęp mają tylko właściciel i osoba, która lead przyniosła, każde podejrzenie jest zapisywane, a po dziewięćdziesięciu dniach numer jest usuwany.
Czy o doborze firm decyduje sztuczna inteligencja?
Nie. Dobór liczy się z reguł zapisanych w bazie i jest w pełni powtarzalny. System podpowiada maksymalnie trzy firmy, decyzję podejmuje człowiek.
Czy działa już automatyczna obsługa WhatsAppa?
Nie. To zaprojektowany kolejny etap, na dziś szkielet poza wdrożeniem. Wersja działająca opiera się na wklejaniu wiadomości do panelu.
Czemu logowanie numerem telefonu, a nie e-mailem?
Bo tak pracują ludzie w tym łańcuchu. Numer jest tym, co i tak mają pod ręką, a reset hasła idzie kodem SMS na ten sam numer.