Technické podrobnosti
Protokol, chybové kódy, přístupnost a skutečný stav za každým příslibem.
Tato stránka je pro ty, kdo chtějí znát podrobnosti. Vše je zde změřeno nebo vyčteno ze zdrojového kódu — nic není odhad.
Jak se widget načítá
Ve dvou fázích. Nejprve malý načítací skript, který vykreslí tlačítko a nic dalšího nedělá. Samotný chat se stáhne až při aktivaci jednoho z pěti spouštěčů — prohlížeč je nečinný (nejpozději po třech sekundách), myš nebo prst na tlačítku, příkaz ze stránky, signál frustrace z MousePlayer nebo push pobídka, například z vašeho service workeru.
Má to důvod: většina návštěvníků chat nikdy neotevře. Neměl by jim zdržovat načítání stránky; které spouštěče platí, se nastavuje ve značce script.
- Načítací skript: 3,48 kB při přenosu z našeho CDN pomocí gzip
- Celý widget: 85,5 kB, přenášený stejným způsobem a až při aktivaci některého spouštěče
- Než se zobrazí tlačítko: 11–21 ms
- Posun rozložení: 0,0000 — místo je vyhrazené dřív, než se cokoli zobrazí
Pro srovnání, také změřeno a u všech tří s kompresí brotli: načítací skript Crisp má 2 876 B, Intercom 3 161 B. S 3 069 B jsme mezi nimi, nikoli o řády níže. Kdo tvrdí opak, neměřil.
Neruší váš web
Widget žije v uzavřeném shadow DOM. Vaše styly se k němu nedostanou a jeho
styly se nedostanou na vaši stránku — ani když nastavíte
* { box-sizing: border-box } nebo použijete CSS framework, který předefinuje
všechno.
Běží s přísnou Content Security Policy bez jediné zprávy v konzoli:
žádné eval, žádné webové písmo, žádný sledovací pixel. Styly nastavuje přes
constructable stylesheets, na které se style-src nevztahuje. Tlačítko,
okno chatu, prohlídky produktu i konzole operátora na vašem webu proto
nepotřebují unsafe-inline — změřeno při style-src 'self' a dokonce při
style-src 'none': žádné porušení, plný vzhled. Měřeno v aktuálním
Chromiu; starší prohlížeče bez constructable stylesheets (například Safari
před verzí 16.4) přecházejí na prvek <style>, který přísná politika blokuje.
Žádné požadavky na jiné servery. Vše pochází z reactive.chat nebo, s vlastní doménou, z vaší vlastní adresy; obrázky jako logo a avatary pocházejí z adres, které sami zadáte.
Protokol
Spojení používá WebSocket; pokud síť WebSocket nepropustí, používá běžné požadavky HTTPS (server-sent events nebo long polling). Protokol má verze a definuje 31 chybových kódů, z toho 26 pro widget a zbytek pro pult operátorů a vyhledávání na webu — každý má předepsanou reakci klienta (opakovat ihned, opakovat po čekání, opakovat po opětovném připojení, neopakovat), některé také kód uzavření. Chyba, která není v seznamu, se považuje za dočasnou chybu serveru: opakování po čekání a po pěti pokusech se zpráva považuje za nedoručenou a lze ji odeslat znovu — žádná nekonečná smyčka.
Opětovné připojení s rostoucí prodlevou. Při výpadku spojení se zprávy ukládají do vyrovnávací paměti a odešlou se hned po obnovení. Každá zpráva nese ID; server rozpozná opakování a neuloží ji dvakrát.
Přístupnost
Vytvořeno podle WCAG 2.2 AA:
- Fokus zůstává v otevřeném okně, ESC ho zavře, fokus se vrátí na původní místo
- Nové zprávy se oznamují přes
aria-live - Kontrast mezi textem a plochou se počítá, nepředpokládá se — viz níže
- Plné ovládání klávesnicí, viditelný rámeček fokusu
Kontrast se počítá
Zadáte barvu. Plocha získá přesně tuto barvu. Text na ní se posouvá, dokud nedosáhne poměru 4,5:1 — požadavku WCAG pro běžný text.
Změřeno na 178 barvách ve dvou motivech a třech kombinacích, tedy 1 068 datových bodech: ani jeden pod 4,5:1, nejhorší hodnota 4,50:1.
V tom je rozdíl oproti jiným poskytovatelům: u nich lze widget nastavit tak, že ho nikdo nepřečte.
Osobní údaje
Maskování probíhá na dvou místech — v prohlížeči návštěvníka dřív, než cokoli opustí zařízení, a znovu na serveru před uložením. Rozpoznávají se čísla karet (s Luhnovou kontrolou), IBAN, e-mailové adresy, telefonní čísla, daňová identifikační čísla a čísla průkazů totožnosti. Čísla objednávek a zákazníků se nemění.
Dvě místa, protože jedno nestačí: maskování v prohlížeči lze vypnout, server vidí jen to, co dorazí.
Pravidla
Kdy se widget ozve, určuje deklarativní seznam pravidel — nikoli podmínka v kódu. Výchozí dodávka obsahuje šest pravidel (dlouhé setrvání na stránce, naštvané klikání, chyba JavaScriptu, zaseknutý formulář, záměr nákupu, odchod z pokladny); naštvané klikání, zaseknutý formulář a záměr nákupu se rozpoznávají pouze společně s MousePlayer. Vlastní pravidla můžete přidat v účtu. V tarifu Free se pro každý projekt uplatní jedna aktivní pobídka.
Rozdíl je praktický: změna pravidla znamená změnu nastavení v účtu, nikoli nasazení kódu.
Integrace
Webhooky a Slack jsou hotové. Pro více než 30 dalších služeb je připravené připojení; většina byla testována proti simulovaným protějškům, ale nikdy neběžela proti skutečné službě, a stránka integrací v účtu je takto označuje.
Serverové API (REST a MCP) čte konverzace, zprávy, projekty, návštěvníky, události a pravidla, zapisuje zprávy a události a registruje webhooky. Seznam návštěvníků a MCP lze vypnout pro jednotlivé projekty.
Každá integrace prochází frontou s ochranným jističem: pokud se třetí strana zasekne, po opakovaných selháních se na chvíli vynechá. Zprávu v chatu to nikdy nezdrží — to je nejdůležitější pravidlo této vrstvy.
Co není hotové
Aby se to nikdo nedozvěděl až při integraci:
- Most k MousePlayer používá dotazování, protože MousePlayer zatím sám nevysílá dohodnuté události.
- Přílohy, A/B testy a vlastní doména běží jako beta: fungují a byly změřeny, ale mohou se ještě změnit.
- E-mailové kanály a kanály Telegram, SMS, WhatsApp, Messenger a Instagram jsou testované proti simulovaným protějškům, zatím ne se skutečnými účty. Pokud odpověď přes kanál definitivně selže, konverzace to v současnosti nezobrazí.
Další informace v dokumentaci
Jak spolupracují widget, server a spojení: Architektura a průběh. Připojení, záloha přes HTTP a opětovné připojení: Přenos. Všechny kapitoly: dokumentace.
शेवटचे अद्यतन: