Dane klientów w czacie (zamówienia, wysyłka, faktury)
Asystent AI odpowiada zalogowanym klientom na pytania o ich własne zamówienia – bezpiecznie dzięki podpisanej tożsamości, z dokładnie określonymi polami, przez pobieranie z Twojego sklepu albo import.
Dzięki danym klientów asystent AI odpowiada na pytania takie jak „Gdzie jest moja paczka?”, „Czy moja faktura jest już opłacona?” albo „Co było w moim ostatnim zamówieniu?” – zalogowanym klientom i tylko na temat ich własnych danych. Funkcja jest dostępna w płatnych planach.
Jak chronione są dane
- Przeglądarka niczego nie dowodzi. Żaden numer zamówienia ani faktury, żaden adres e-mail i nic, co widać na stronie lub co ktoś napisze w czacie, nie daje dostępu. O tym, kto może zobaczyć jakie dane, decyduje wyłącznie tożsamość podpisana przez Twój serwer.
- Numer to tylko filtr. Jeśli klient poda numer zamówienia, jest on szukany tylko wśród jego własnych zamówień. Cudzy numer nic nie zwraca.
- Decydujesz o każdym polu. Asystent dostaje tylko pola, które udostępnisz. Wszystko inne jest odrzucane przy odbiorze – nawet jeśli Twój sklep to wyśle.
- Brak zbioru danych u nas (pobieranie). Przy pobieraniu reactive.chat pyta Twój sklep przy każdym pytaniu i nie zapisuje odpowiedzi. Przy imporcie dane są przechowywane u nas w postaci zaszyfrowanej i usuwane najpóźniej po 90 dniach.
- Tylko własne maszyny. Dane trafiają wyłącznie do naszych własnych serwerów AI (albo do Twojego własnego węzła AI), nigdy do usługi AI podmiotu trzeciego.
Warunek: weryfikacja tożsamości
Asystent korzysta z danych klientów tylko w przypadku odwiedzających, których tożsamość potwierdził Twój serwer. W koncie, w sekcji Projekt → Weryfikacja tożsamości, utwórz sekret. Pozostaje on na Twoim serwerze i nigdy nie trafia do przeglądarki ani do fragmentu kodu (snippetu).
Dla każdego zalogowanego klienta Twój serwer oblicza hash z czasem ważności (najwyżej 24 godziny naprzód) i przekazuje go widżetowi:
$userId = (string) $klient->id;
$exp = time() + 3600;
$hash = hash_hmac('sha256', $userId . '.' . $exp, getenv('RC_IDENT_SEKRET'));
echo "<script>ReactiveChat('identify', { userId: " . json_encode($userId)
. ", userHash: " . json_encode($hash) . ", exp: " . $exp . " });</script>";
const crypto = require('crypto');
const exp = Math.floor(Date.now() / 1000) + 3600;
const hash = crypto.createHmac('sha256', process.env.RC_IDENT_SEKRET)
.update(String(user.id) + '.' + exp).digest('hex');
// w szablonie: ReactiveChat('identify', { userId: '<id>', userHash: '<hash>', exp: <exp> });
Hash bez exp nadal potwierdza odwiedzającego (np. na potrzeby historii rozmowy), ale nie wystarcza do danych klientów. Po odnowieniu sekretu stary pozostaje ważny jeszcze przez 24 godziny.
Podpisywanie także adresu e-mail (do rezerwacji terminów i integracji opartych na e-mailu). email obok hasha jest uznany za potwierdzony tylko wtedy, gdy wchodzi do podpisu: userHash = HMAC-SHA256(sekret, userId + "." + exp + "." + email) – adres dokładnie taki, jaki przekazujesz do identify. Bez tego odwiedzający pozostaje zalogowany, ale asystent nie zarezerwuje terminu na ten adres, a integracje nie będą go wyszukiwać. Dotychczasowa forma userId + "." + exp działa bez zmian.
Pobieranie, import czy oba
W sekcji Projekt → Dane klientów wybierasz, skąd asystent bierze dane:
- Pobieranie z Twojego sklepu – reactive.chat przy każdym pasującym pytaniu wywołuje Twój endpoint. Dane zostają u Ciebie. Zalecane.
- Import przez API – Twój sklep wysyła zamówienia klienta do reactive.chat. Przydatne, jeśli sklep nie może udostępnić endpointu.
- Oba – najpierw dane zaimportowane, a jeśli tam nic nie ma, pobieranie.
Jakie dane może dostać asystent
Każde pole udostępniasz osobno. Ustawienia domyślne obejmują typowe pytania:
bestellung.nummer– numer zamówienia. Domyślnie: zawsze włączone. Do czego: pole obowiązkowe – bez numeru nie ma zamówieniabestellung.datum– data zamówienia (RRRR-MM-DD). Domyślnie: wł.. Do czego: „Kiedy zamówiłem?”bestellung.status– status zamówienia jako tekst. Domyślnie: wł.. Do czego: „Czy moje zamówienie zostało wysłane?”bestellung.summe– kwota całkowita. Domyślnie: wł.. Do czego: „Ile zapłaciłem?”bestellung.waehrung– waluta (ISO, np. PLN). Domyślnie: wł.. Do czego: tylko razem z kwotąpositionen.name– nazwa artykułu. Domyślnie: wł.. Do czego: „Co było w zamówieniu?”positionen.menge– ilość artykułu. Domyślnie: wł.. Do czego: „Ile sztuk zamówiłem?”versand.dienst– przewoźnik. Domyślnie: wł.. Do czego: „Kto dostarcza paczkę?”versand.sendungsnummer– numer przesyłki. Domyślnie: wł.. Do czego: „Gdzie jest moja paczka?”versand.status– status wysyłki jako tekst. Domyślnie: wł.. Do czego: „Czy jest już w drodze?”versand.ort– miejscowość adresu dostawy. Domyślnie: wył.. Do czego: „Dokąd idzie moja paczka?”versand.plz– kod pocztowy adresu dostawy. Domyślnie: wył.. Do czego: jak wyżejrechnung.nummer– numer faktury. Domyślnie: wł.. Do czego: „Która faktura do tego należy?”rechnung.status– status płatności jako tekst. Domyślnie: wł.. Do czego: „Czy faktura jest opłacona?”rechnung.faellig_am– termin płatności. Domyślnie: wł.. Do czego: „Do kiedy muszę zapłacić?”
Wyłączone pole nigdy nie dociera do asystenta: przy pobieraniu jest odrzucane, przy imporcie w ogóle nie jest zapisywane. Miejscowość i kod pocztowy są celowo dostępne tylko po wyraźnym włączeniu – ulica i nazwisko zawsze pozostają poza zasięgiem.
Czego nigdy się nie przekazuje
Tych danych nie da się włączyć. Jeśli Twój sklep je wyśle, zostaną odrzucone:
- ulica, numer domu i kolejne linie adresu
- imię i nazwisko odbiorcy lub zamawiającego
- adres e-mail i numer telefonu
- IBAN, BIC, numer konta i dane karty
- data urodzenia
- hasła, tokeny i klucze dostępu
- numery podatkowe i numery dokumentów tożsamości
Limity
Najwyżej 10 zamówień na odpowiedź, najwyżej 20 pozycji na zamówienie, teksty najwyżej 200 znaków, cała odpowiedź najwyżej 16 kB. Nieznane pola są odrzucane bez komunikatu o błędzie.
Endpoint do pobierania
reactive.chat wywołuje Twój endpoint metodą POST:
POST https://sklep.twoja-domena.pl/rc-dane-klientow
Content-Type: application/json
X-RC-Zeit: 1791196400
X-RC-Signatur: <hex(HMAC_SHA256(sekret endpointu, X-RC-Zeit + "." + treść))>
{"user_id":"4711","anliegen":"bestellung","referenz":"2026-0815","sprache":"pl","nonce":"..."}
user_idto potwierdzony identyfikator klienta z weryfikacji tożsamości – nigdy dane wzięte z czatu.anliegentobestellung(zamówienie),lieferung(dostawa),rechnung(faktura),retoure(zwrot) albotestdla przycisku testowego.referenzto numer podany przez klienta albo pusta wartość. Szukaj go tylko wśród zamówień tegouser_id.
Twój endpoint musi:
- sprawdzać podpis (porównanie w stałym czasie) i odrzucać żądania, których
X-RC-Zeitróżni się o ponad 5 minut, - zwracać wyłącznie dane podanego
user_id, - być dostępny przez
httpsna porcie 443 pod publicznym adresem, bez przekierowań, - odpowiadać w ciągu 3 sekund.
Odpowiedź:
{
"bestellungen": [
{
"nummer": "2026-0815", "datum": "2026-09-28", "status": "wysłane",
"summe": "199.00", "waehrung": "PLN",
"positionen": [ { "name": "Rowerek biegowy niebieski", "menge": 1 } ],
"versand": { "dienst": "InPost", "sendungsnummer": "6200...", "status": "w doręczeniu" },
"rechnung": { "nummer": "FV/2026/1201", "status": "opłacona", "faellig_am": "2026-10-12" }
}
]
}
Pełny przykład w PHP znajdziesz w dokumentacji dla programistów (kundendaten-referenz-endpunkt.php).
Przycisk Testuj połączenie wywołuje Twój endpoint z user_id rc-test i rodzajem sprawy test oraz pokazuje wynik. Zwróć wtedy pustą listę albo przykładowe zamówienie.
Import przez API
Z kluczem API z uprawnieniem kundendaten:schreiben:
PUT https://reactive.chat/v1/kundendaten/4711?project_id=123
Authorization: Bearer <klucz API>
Content-Type: application/json
{"bestellungen":[ ... jak wyżej ... ]}
project_id to numer Twojego projektu; jeśli Twoja przestrzeń robocza ma tylko jeden projekt, możesz go pominąć. PUT zastępuje wszystkie zamówienia tego identyfikatora klienta (najwyżej 50). DELETE /v1/kundendaten/4711?project_id=123 je usuwa. Zaimportowane dane są przechowywane u nas w postaci zaszyfrowanej i usuwane 90 dni po ostatnim imporcie – wysyłaj więc zmiany na bieżąco, np. przy każdej zmianie statusu.
Niezalogowani odwiedzający
Jeśli ktoś bez potwierdzonej tożsamości zapyta o zamówienie, asystent niczego nie pobiera. Zamiast tego pokazuje komunikat, który ustawiasz w sekcji Projekt → Dane klientów: tekst w każdym języku i opcjonalnie link do logowania. Alternatywnie przekazuje pytanie Twojemu zespołowi.
Co jest zapisywane
- Pobieranie: odpowiedź Twojego sklepu służy tylko do jednej odpowiedzi asystenta i nie jest zapisywana – ani w rozmowie, ani w bazie wiedzy.
- Import: w postaci zaszyfrowanej, najwyżej 90 dni, usuwany razem z projektem.
- Odpowiedź asystenta widnieje w historii rozmowy jak każda wiadomość. Twój zespół widzi ją w panelu.
Rozwiązywanie problemów
- Asystent prosi klienta o zalogowanie, choć ten jest zalogowany: jeśli brakuje
exp, minął jego czas albo hash się nie zgadza, odwiedzający nie jest uznany za potwierdzonego. Sprawdź sekret, kolejnośćuserId + "." + expi zegar swojego serwera. - Przycisk testowy zgłasza „adres niedozwolony”: endpoint musi być dostępny przez
httpspod publicznym adresem; adresy wewnętrzne i inne porty są odrzucane. - Twoja strona zgłasza błąd podpisu: podpisywany jest ciąg
X-RC-Zeit + "." + treśćsekretem endpointu – dokładnie ta treść, która dotarła, bez ponownego kodowania. - W odpowiedzi asystenta brakuje pola: czy jest włączone w sekcji „Jakie dane może dostać asystent”?
Więcej w dokumentacji
Szczegółowo: Endpoint danych klientów. Wszystkie rozdziały znajdziesz w dokumentacji.
Kemas kini terakhir: