Чем мы можем помочь?

Кратко опишите вопрос; мы ответим по электронной почте.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
На главную

Транспорт: WebSocket, резервный HTTP и переподключение

Как виджет общается с сервером чата: адреса, подпротокол rc.v1, формат кадров, коды ошибок и закрытия, лимиты, переподключение с seq и удалением дубликатов, резервный HTTP через SSE и длинный опрос.

Эта страница описывает обмен между виджетом в браузере и сервером чата. Она нужна для устранения неполадок (вкладка сети инструментов разработчика), правил прокси и межсетевых экранов и Content Security Policy.

Важно: сетевой протокол — интерфейс между нашим виджетом и нашим сервером. Собственные клиенты, использующие протокол напрямую, официально не поддерживаются; поля могут расширяться в версии 1. Для собственных интерфейсов используйте JavaScript API, для серверных подключений — вебхуки и серверный API.

Адреса

Как виджет находит адрес WebSocket:

  1. data-rc-ws-url в теге загрузчика, window.ReactiveChatSettings.wsUrl или ReactiveChat('boot', { wsUrl }): если задано, используется это значение.
  2. Иначе выводится из расположения loader.js: wss://ws. + последние две части домена + /rc_wss/. cdn.reactive.chat превращается в wss://ws.reactive.chat/rc_wss/.

Отсюда две ловушки:

Маршрут WebSocket не обрабатывает параметры запроса.

Установление подключения

Формат кадра

Каждое сообщение в обе стороны имеет вид:

{ "v": 1, "t": "msg", "id": "01JAB3C4D5E6F7G8H9JKMNPQRS", "ts": 1792500000000, "d": { } }

Неизвестные типы и поля молча игнорируются: старые виджеты остаются совместимы с новыми серверами.

Обзор типов сообщений

От виджета серверу:

От сервера виджету:

Коды ошибок

Ошибка приходит кадром t: "error" с d.code, d.message (английский, только для разработчиков), d.retry (no, immediate, backoff, after_reinit) и при необходимости d.retry_after_ms, d.detail. Список закрытый; неизвестный код трактуется как internal.

Коды закрытия

Ограничения подключения

Сервер передаёт обязательные значения в init_ok.limits и init_ok.features:

Переподключение, порядок, дубликаты

Резервный канал HTTP

Если сеть не пропускает WebSocket, чат работает через обычные HTTPS-запросы, с теми же кадрами и ограничениями. Только виджет; интерфейс операторов всегда использует WebSocket. Короткая версия для редакторов — Резервный канал HTTP.

Когда включается:

Без fetch в браузере резервного режима нет. При обрыве существующего WebSocket виджет снова использует WebSocket. После резервного режима он один раз на страницу незаметно проверяет WebSocket; если доступен, удаляет rc_http, и следующая страница снова использует WebSocket.

Запросы (под https://ws.reactive.chat/rc_wss/h/):

Сначала виджет пробует SSE; если за 5 секунд не пришёл первый кадр (например, из-за буферизации прокси), переключается на длинный опрос. Ошибки вроде 404 (unbekannt), 403, 413 или 429 трактует как обрыв и повторяет с задержкой. После 60 секунд без запроса сервер закрывает соединение. CORS: Access-Control-Allow-Origin повторяет источник без учётных данных; проверка источника — в init, как для WebSocket.

Требования на вашей стороне:

Хранится в браузере: только запись rc_http в sessionStorage со временем HTTPS-подключения, без персональных данных.

Какой маршрут активен

Во вкладке сети инструментов разработчика:

Далее: Ограничения и квоты · Устранение неполадок

Обновлено: