Що пам'ятає віджет: розмови й сховище
Для розробників, у коді: що віджет тримає на пристрої відвідувача і скільки, як розмова переживає навігацію і перетинає сімейство сайтів, і один виклик, що все стирає.
Розмова переживає навігацію, бо віджет тримає її в localStorage браузера, окремо для origin, без
гарантій: браузер із вимкненим чи заповненим сховищем просто нічого не зберігає, і ніщо не
ламається.
Два ключі, два годинники
| Ключ | Містить | Живе |
|---|---|---|
sa:widget:<code> |
до 10 розмов по 50 повідомлень (id розмови на сервері, текст, назву), яка активна, чи був віджет відкритий, запам’ятований режим (текст чи голос), коли закрили привітальний тизер | кожна розмова — 7 днів після власної останньої активності; поля сесії — відкритість, режим, активний id, закриття тизера — 45 хвилин після останнього запису |
sa:widget:prefs:<code> |
перетягнуту позицію, чи віджет узагалі відкривали, обрану мову мовлення і чи обрано її вручну, чи було озвучене привітання, які проактивні знахідки показано на яких шляхах (щонайбільше 40 записів) | без терміну |
Тож відвідувач, який пішов, при наступному візиті не отримує багатоденну розмову назад — вона
лишається на одне натискання в списку історії картки, — а відвідувач, який перезавантажив сторінку
посеред чату, повертається в нього. Застарілий id розмови (сервер відповідає not_found) мовчки
починає нову. Жодних cookies, жодного sessionStorage.
Історія для відвідувача
Кнопка з годинником на картці показує недавні розмови цього пристрою — перше питання і відносний час — з ✕ у кожному рядку; вибір робить цю розмову поточною. Видалення — для цього origin і ніколи не торкається власного запису розмови у власника.
Між сайтами одного сімейства
localStorage не перетинає origin, тож перехід на сусідній домен втратив би чат. Коли відповідь
пропонує сторінку іншого origin зі списку того самого ключа віджета, рантайм додає до цього
посилання ?sa-conversation=<токен>. Сам віджет ніколи не переводить відвідувача на інший origin:
відвідувач переходить кліком (посилання відкривається в новій вкладці) або це робить ваш роутер.
Віджет на місці призначення один раз обмінює одноразовий токен
(GET /conversation), переймає текст розмови, відкривається і прибирає токен з URL, щоб він не
витік через історію чи поширене посилання. Недійсний, прострочений (90 с) чи вже використаний
токен просто починає з нуля.
Стерти
Shukai.clearHistory() забуває всі розмови на цьому пристрої і запам’ятований режим, завершує
живу голосову розмову, перериває диктування і очищає поле вводу. Викликайте його при виході на
сайті з власним входом — у віджеті немає кнопки «очистити все» для відвідувача.
Shukai.clearUser() — інший виклик (Ідентичність користувача).
Що не зберігається
- переданий токен користувача — лише в пам’яті;
- значення полів сторінки — вони їдуть з повідомленням лише під режимом читання власника і ніколи не пишуться в сховище;
- нічого для атрибуції: кампанія, з якої прийшов відвідувач, іде з першим повідомленням розмови і не зберігається на пристрої, тож відвідувач, який перейшов на іншу сторінку до розмови, її губить — прийнята ціна того, щоб не навішувати на власника обов’язок просити згоду.