# czy budować własny widget czatu?

Twój agent zbuduje widget czatu przed obiadem. Oto wszystko, co musi robić po obiedzie: reconnecty, spam, wątki na Slacku, 12 języków i RODO.

2026-10-15 · Kuba

Tak, możesz zbudować widget czatu sam. Twój agent postawi bąbelek na stronie przed obiadem i będzie wyglądał świetnie. Ten wpis jest o tym, co przychodzi po obiedzie: o liście rzeczy, które widget czatu musi robić dobrze, zanim oddasz mu prawdziwego klienta. Znamy tę listę, bo zbudowaliśmy wszystko, co na niej jest. Jest dłuższa, niż wygląda.

## popołudnie

Oto wersja, którą każdy buduje najpierw. Przycisk w rogu. Panel z inputem. Websocket do twojego serwera. Bot na Slacku, który wrzuca wiadomość na kanał. Piszesz „hej” na localhoście, pojawia się na Slacku, czujesz się świetnie.

To prawdziwy postęp i jakieś 10% widgetu czatu. Pozostałe 90% wychodzi dopiero, gdy używają go prawdziwi odwiedzający, prawdziwe telefony i prawdziwi ludzie z zespołu. Żaden kawałek nie jest trudny sam w sobie. Po prostu jest ich dużo, a każdy psuje się w sposób, który odkrywasz dopiero na produkcji.

## widget musi żyć na cudzej stronie

Twój widget nie działa na pustej stronie. Działa w środku serwisu z własnym CSS, własnymi fontami, własnymi skryptami i własnym pomysłem na to, jak wygląda `button`.

- **Izolacja.** Style strony nie mogą wyciekać do twojego panelu, a twoje nie mogą wyciekać na zewnątrz. To znaczy Shadow DOM i nauka tego, czego on nie izoluje.
- **Waga.** Wszystko, co ładujesz przed kliknięciem, płaci każdy odwiedzający, także ci, którzy nigdy nie otworzą czatu. Spookat przed kliknięciem ładuje jeden plik, około 2 kb, i nic więcej.
- **Telefony.** Klawiatura zasłania input. iOS przybliża każde pole z fontem poniżej 16 px. Launcher siada na pasku „dodaj do koszyka” sklepu. Każda z tych rzeczy to popołudnie na zauważenie i drugie na poprawkę, która nie zepsuje desktopu.
- **Dostępność.** Użytkownik klawiatury musi do niego dojść, otworzyć, pisać i zamknąć, a fokus ma wrócić tam, gdzie był. Czytnik ekranu ma słyszeć nowe odpowiedzi. Nasz widget przechodzi axe bez żadnej uwagi, a dojście do tego to checklista, nie vibe.
- **Wygląd.** Twoja strona nie jest brutalnie zielona jak nasza. Potrzebujesz stylów, fontów, koloru akcentu, lewej lub prawej strony, etykiety. My mamy 8 stylów i 17 fontów i każdy musi działać na każdym ekranie.
- **Języki.** Nie wszyscy twoi odwiedzający czytają po angielsku. Widget Spookata mówi w 12 językach, także w tych, w których „ty” ma formę grzecznościową i luźną, i trzeba wybrać.

## połączenie musi przeżyć prawdziwe życie

Na localhoście websocket nigdy się nie rozłącza. W pociągu rozłącza się w każdym tunelu.

- **Ponowne łączenie** bez młócenia twojego serwera, gdy całe miasto naraz wraca do sieci.
- **Wiadomości pisane offline** muszą poczekać i wyjść, gdy połączenie wróci.
- **Nic nie idzie dwa razy.** Wiadomość wysłana dokładnie w chwili zerwania mogła dojść albo nie. Widget tego nie wie, więc każda wiadomość potrzebuje identyfikatora, który serwer rozpozna przy drugiej próbie.
- **Odpowiedzi, które przyszły pod nieobecność odwiedzającego,** muszą się pojawić, gdy wróci, po kolei.

To jedna z cichszych części produktu i jedna z najważniejszych.

## slack to łatwa część, dopóki nie jest

Wrzucenie wiadomości na Slacka to jedno wywołanie API. Prowadzenie supportu ze Slacka to dużo więcej.

- **Jeden wątek na rozmowę,** żeby odpowiedź trafiła do właściwego odwiedzającego, a nie do tego, kto pisał ostatni.
- **Imiona ludzi z zespołu.** Odwiedzający ma widzieć „Anna”, a nie „spookat-bot”. Każdy w zespole potrzebuje imienia i sposobu, żeby je ukryć.
- **Limity Slacka.** Slack przyjmuje mniej więcej jedną wiadomość na sekundę na kanał. Pracowity poniedziałek potrzebuje kolejki, która to szanuje i niczego nie gubi.
- **Discord też,** jeśli twoja społeczność tam siedzi. Inne API, inny gateway i inne limity.

## odwiedzający, który wyszedł, dalej chce odpowiedzi

Większość odwiedzających pyta i wychodzi. Jeśli twoja odpowiedź przyjdzie, gdy zamknęli już kartę, trafi donikąd. Spookat może wysłać odpowiedź mailem, w języku odwiedzającego, w twoim imieniu, z możliwością wypisania się. To deliverability maili, szablony w 12 językach i proces wypisu, tylko na wypadek, gdy nikt nie patrzy.

## boty go znajdą

Publiczne pole tekstowe na publicznej stronie zostanie znalezione. W ciągu kilku tygodni zobaczysz spam, potem floody. Potrzebujesz limitów, które zatrzymają bota, a nie zatrzymają prawdziwego odwiedzającego w połowie rozmowy, i to per strona, żeby jedna głośna strona nigdy nie spowolniła innej. W naszym load teście jedna zalewana strona została przyhamowana, a wszystkie inne działały, jakby [nic się nie stało](/pl/blog/1000-messages-a-second/).

## nudna część to część prawna

Widget czatu zbiera dane osobowe. Potrzebujesz więc strony o prywatności, która mówi dokładnie, co przechowujesz, umowy powierzenia dla klientów firmowych, listy podprocesorów, okresu przechowywania, sposobu na usunięcie rozmowy i sposobu na eksport wszystkiego. My nigdy nie zapisujemy adresu IP, a widget nie ustawia żadnych cookies, więc nie potrzebuje banera cookies. Zaprojektowanie tego w ten sposób to decyzja z pierwszego dnia, a nie ficzer, który dokłada się później.

## a potem to musi dalej działać

Wszystko wyżej to budowa. Potem przychodzi część, której nikt nie wpisuje w kalendarz:

- Slack, Discord i przeglądarki zmieniają swoje API i zasady.
- Backupy, monitoring i ktoś, kto zauważy o 3 w nocy.
- Twój zespół chce inboxa na chwile poza Slackiem, ról, kto może zmieniać ustawienia, i logu, kto co zrobił.
- Twój agent chce API, webhooków i serwera MCP, żeby pomagać w odpowiadaniu.

Każda rzecz na tej stronie to coś, co zbudowaliśmy, przetestowaliśmy i teraz utrzymujemy. To niewdzięczne 90% i powód, dla którego widget dalej wygląda prosto.

## kiedy budowanie samemu ma sens

Są dobre powody, żeby zbudować własny. Jeśli czat to rdzeń twojego produktu, miej go na własność. Jeśli potrzebujesz flow, którego nie daje żaden widget, na przykład czatu wpiętego we własne reguły ticketów, zbuduj tę część. Jeśli się uczysz, widget czatu to świetny projekt: websockety, bot, trochę UI, prawdziwi userzy.

Pytanie brzmi tylko, czy chcesz przez lata utrzymywać pozostałe 90%. Większość zespołów woli shipować to, za co płacą im klienci, i mieć czat, który już działa.

## uczciwa matematyka

Policz godziny, które spędziłbyś nad listą wyżej, i pomnóż przez to, ile warta jest godzina twojego czasu. Spookat kosztuje 19 zł za stronę miesięcznie, dla całego zespołu, z 14 dniami za darmo i bez karty.

Jeśli widget czatu to twój produkt, buduj. To świetny problem. Jeśli twój produkt to coś innego, spędź to popołudnie na nim.

[Zobacz, co jest w cenie](/pl/pricing/).

---
source: https://spookat.com/pl/blog/build-your-own-chat-widget/
