CSP і що віджет зберігає в браузері
Для розробників, у коді: яка Content-Security-Policy потрібна сторінці, що віджет зберігає на пристрої відвідувача і чого ніколи не робить.
Content-Security-Policy
Якщо ваша сторінка задає CSP, віджету потрібні такі дозволи. Два хости замініть на ті, що у вашому фрагменті встановлення.
| Директива | Значення | Навіщо |
|---|---|---|
script-src |
https://<хост віджета> blob: |
бандл; blob: — для аудіоворклета мікрофона |
connect-src |
https://<хост агента> wss://<хост агента> |
GET /widget/config, сокети /ws і /ws/stt, /tts, маячки |
media-src |
blob: data: |
голосові відповіді — аудіокліпи з /tts, відтворювані одним елементом <audio> |
img-src |
https://<ваш CDN> |
хост зображення кнопки запуску, завантаженого чи вставленого посиланням |
Стилі лежать усередині shadow root і не потребують дозволу style-src понад те, що ваша сторінка
вже дозволяє для вбудованих стилів; якщо ваша політика повністю забороняє вбудовані стилі —
перевірте: віджет пише свій CSS в елемент <style> у власному shadow-дереві.
Що віджет зберігає на пристрої відвідувача
Усе в localStorage, окремо для кожного origin, без гарантій: браузер із вимкненим чи заповненим
сховищем просто нічого не зберігає, і ніщо не ламається.
| Ключ | Що | Скільки |
|---|---|---|
sa:widget:<code> |
до 10 розмов по 50 повідомлень, активна розмова, чи був віджет відкритий, запам’ятований режим (текст чи голос) | кожна розмова — 7 днів після власної останньої активності; поля сесії — 45 хвилин після останнього запису |
sa:widget:prefs:<code> |
перетягнута позиція, чи віджет узагалі відкривали, коли закрили привітальну підказку, які проактивні підказки показано на яких шляхах, обрана мова мовлення | без терміну |
Жодних cookies. Нічого не пишеться для атрибуції: кампанія, з якої прийшов відвідувач, надсилається з першим повідомленням розмови й ніколи не зберігається на пристрої, тож перехід на іншу сторінку до розмови її губить — прийнята ціна того, щоб не навішувати на власника обов’язок просити згоду.
Чого віджет ніколи не робить
- Ніколи не читає сторінку, якщо власник не увімкнув дії на сторінці, а тоді читає стан (які
поля є, чи заповнені) — текст із поля виходить із браузера лише під перемикачем власника
page_read_values, а паролі, приховані поля і все підdata-sa-private— ніколи. Читання екрана. - Ніколи не вмикає мікрофон і не грає звук без натискання.
- Ніколи сам не переходить на інший origin; посилання кудись інде показує, а не відкриває.
- Ніколи не зберігає токен користувача, який ви передаєте через
Shukai.setUser; токен тримається в пам’яті й надсилається з кожним повідомленням. Ідентичність користувача.
Вихід на спільному пристрої
Shukai.clearUser() забуває переданий токен. Shukai.clearHistory() стирає всі розмови на
пристрої і запам’ятований режим. На спільному браузері викликайте обидва при виході — саме другий
не дає наступній людині побачити чати попереднього відвідувача.
JavaScript API.
Куди йдуть дані
Розмови зберігаються на серверах у ЄС стільки, скільки передбачає тариф сайту, потім
видаляються; IP-адреси не зберігаються; решту каже сторінка власника «Дані й контроль». Для
розробника важливий один факт: рантайм, із яким говорить віджет, — це data-agent-base у
фрагменті, і нічого більше.