Устранение неполадок и проверочный список
Частые проблемы встраивания reactive.chat: нет кнопки или подключения, источник отклонён, личность не подтверждена, не приходят вебхуки и данные клиентов. Причины, проверка и список перед запуском.
Инструменты
- Инструменты разработчика → Сеть:
loader.js,core.<hash>.js, WebSocket-подключение (вкладка «Сообщения» или «Кадры» показываетinit,init_ok,error) либо запросы резервного канала HTTP (h/auf,…/sse,…/tx). - Включить диагностику:
data-rc-debug="true"в теге загрузчика илиlocalStorage.setItem('rc_debug','1')в консоли, затем перезагрузите страницу. - Консоль:
ReactiveChat('getSession'),ReactiveChat('getEndpoint'),ReactiveChat('isOpen'),ReactiveChat.version.
Кнопка чата не видна
- Ключ сайта отсутствует или неверен. Загрузчик молча прекращает работу. Проверьте
data-rc-site-key(8–64 символа изA–Z a–z 0–9 _ -) в выполненном теге: менеджеры тегов и вспомогательные компоненты фреймворков иногда теряют атрибуты. type="module"в теге скрипта: загрузчик не может найти свой тег. Встраивайте как классический скрипт.data-rc-hide-launcher="true"либо в аккаунте выбран режим «Только через собственные ссылки (без значка чата)».- Нет фирменного цвета в коде: без корректного цвета
data-rc-brandкнопка появляется только после подключения. Снова скопируйте код из аккаунта. - Проект приостановлен или ключ сайта неизвестен: сервер отвечает
unknown_site_key(закрытие 4002); в этой вкладке виджет не повторяет попытки десять минут. - Ядро не загружается: консоль показывает
[reactive.chat] core.js …. Часто адрес блокируетscript-srcили блокировщик рекламы; см. Собственный домен.
Кнопка есть, но сообщения не доходят
- Собственный
loader.jsбезdata-rc-ws-url: виджет ищет сервер чата на вашем домене. Во вкладке сети видны безуспешные попытки подключения кwss://ws.<your-domain>/rc_wss/. Решение:data-rc-ws-url="wss://ws.reactive.chat/rc_wss/". origin_denied, закрытие 1008: домен страницы отсутствует в Разрешённых источниках. Укажите домен сайта, а не поддомен чата.- Блокировка CSP: консоль показывает сообщение CSP об адресе
wss://…илиhttps://…/rc_wss/h/auf. Добавьте обе формы вconnect-src. - Корпоративная сеть без WebSocket: после двух неудачных попыток виджет переключается на резервный канал HTTP. Если и он не работает, проверьте, не обрывают ли прокси запросы раньше 30 секунд и не буферизуют ли ответы (Транспорт).
- Блокировка защитой от злоупотреблений (закрытие 1008
blocked): типично за собственным прокси без действительного ключа, потому что у всех посетителей тогда один адрес. - Сообщение слишком длинное: виджет не отправляет тексты сверх лимита тарифа (1000 или 4000 символов).
Вошедший пользователь считается анонимным
Кадр error содержит auth_failed с detail.reason:
- no_hash — в
identifyотсутствуетuserHash. - no_secret — в проекте не настроен секрет.
- bad_exp —
expзадан в миллисекундах вместо секунд или не целым числом. - expired — страница давно открыта или часы сервера неверны; вычисляйте свежий хеш при загрузке страницы.
- exp_too_far — более 24 часов вперёд.
- bad_hash — не совпадают секрет, порядок (
userId + "." + exp) или кодировка; секрет — ключ как строка, а не декодированные байты. При наличии электронной почты она должна быть подписана в точности в передаваемом виде.
Подробнее: Идентификация посетителей.
Данные клиентов не приходят
- Ассистент просит пользователя войти, хотя тот вошёл:
expотсутствует или истёк; безexpданных клиентов нет. - Проверить соединение в аккаунте называет причину (
http_401,zeitueberschreitung,umleitung,adresse_privat…). Подписываемая строка —X-RC-Zeit + "." + raw body; проверяйте по полученным байтам, а не по перекодированному JSON. - В ответе ассистента нет поля: оно не включено в аккаунте или входит в список полей, которые никогда не принимаются.
Подробнее: Конечная точка данных клиентов.
Вебхуки не приходят
- Включена ли интеграция, выбрано ли событие (ничего не выбрано — все)? После включения подождите до 15 секунд.
- Конечная точка отвечает дольше 10 секунд или перенаправляет.
- Конечная точка однажды ответила 410 — это отключает интеграцию. Включите её снова.
- Подпись не совпадает: вычисляйте по сырому телу и
X-RC-Timestamp + "." + body, учитывайте префиксsha256=. - В
dataне хватает содержимого: поля каждого события перечислены в Вебхуках; невыбранное событие вообще не приходит.
Серверный API
- 401
auth_failed: ключ отозван, введён неверно или создавший его человек больше не администратор. - 403
insufficient_scope: недостаточно прав;required_scopeназывает требуемые. - 429: превышены 120 запросов в минуту; соблюдайте
Retry-After. - 415/413: нет
Content-Type: application/jsonили тело больше 64 КиБ.
Текст о конфиденциальности не появляется
- На странице нет загрузчика или его блокирует платформа согласия: подключите
datenschutz.jsнапрямую. - Сайт не указан как домен в проекте или проект приостановлен.
data-rc-privacy-state="error"на элементе означает неудачный запрос.
Проверочный список перед запуском
- Все домены сайта указаны в Разрешённых источниках.
- Неизменённый код из аккаунта размещён на всех нужных страницах, включая политику конфиденциальности.
- CSP:
script-srcс адресом доставки,connect-srcсwss://иhttps://,img-srcдля изображений. - Согласие: проверен
data-rc-consentили платформа согласия (TCF v2 / consented.eu), проведены тесты с согласием и без него. - Политика конфиденциальности дополнена (
<div data-rc-privacy>или текстовый блок). - Идентификация:
userHashсexpвычислен на сервере, секрет только в серверном окружении,init_ok.identity.verifiedравноtrue. - Участки с конфиденциальным текстом помечены
data-rc-private. - При собственном домене: все пять шагов проверки «OK», ключ прокси только в конфигурации прокси,
/rc_wss/h/не попадает в журнал доступа. - Вебхуки: подпись и время проверяются, дубликаты распознаются по
X-RC-Delivery, быстрый ответ 2xx. - Резервный канал HTTP один раз проверен с
data-rc-transport="http". - Проверены мобильный вид (при ширине менее 480 пикселей чат открывается на весь экран) и управление с клавиатуры.
Обновлено: