Comment vous aider ?

Décrivez brièvement votre demande : nous vous répondrons par e-mail.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
Vers la page d’accueil

Transport : WebSocket, repli HTTP et reconnexion

Les échanges entre le widget et le serveur de chat : adresses, sous-protocole rc.v1, format des trames, codes d’erreur et de fermeture, limites, reconnexion avec seq et déduplication, repli HTTP via SSE et interrogation longue.

Cette page décrit les échanges entre le widget du navigateur et le serveur de chat. Elle sert au dépannage (onglet Réseau des outils de développement), aux règles de proxy et de pare-feu et à votre Content Security Policy.

Important : le protocole de communication est l’interface entre notre widget et notre serveur. Les clients personnalisés utilisant directement ce protocole ne sont pas officiellement pris en charge ; des champs peuvent être ajoutés dans la version 1. Pour vos propres interfaces, utilisez l’API JavaScript ; pour les connexions serveur, les webhooks et l’API serveur.

Adresses

Comment le widget trouve l’adresse WebSocket :

  1. data-rc-ws-url sur la balise du chargeur, window.ReactiveChatSettings.wsUrl ou ReactiveChat('boot', { wsUrl }) : si définie, cette valeur s’applique.
  2. Sinon, elle est déduite de l’emplacement de loader.js : wss://ws. + les deux derniers segments du domaine + /rc_wss/. cdn.reactive.chat devient wss://ws.reactive.chat/rc_wss/.

Deux pièges en découlent :

La route WebSocket n’évalue aucun paramètre de requête.

Établissement de la connexion

Format des trames

Chaque message, dans les deux sens, a cette forme :

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

Les types et champs inconnus sont ignorés silencieusement ; les anciens widgets restent ainsi compatibles avec les nouveaux serveurs.

Vue d’ensemble des types de messages

Du widget vers le serveur :

Du serveur vers le widget :

Codes d’erreur

Une erreur arrive comme trame t: "error" avec d.code, d.message (en anglais, pour les développeurs uniquement), d.retry (no, immediate, backoff, after_reinit) et, si nécessaire, d.retry_after_ms et d.detail. La liste est fermée ; un code inconnu est traité comme internal.

Codes de fermeture

Limites par connexion

Le serveur envoie les valeurs applicables dans init_ok.limits et init_ok.features :

Reconnexion, ordre, doublons

Repli HTTP

Si un réseau ne laisse pas passer WebSocket, le chat continue via des requêtes HTTPS ordinaires, avec les mêmes trames et limites. Seul le widget l’utilise ; l’interface agents se connecte toujours via WebSocket. La version courte destinée aux rédacteurs figure dans Repli HTTP.

Quand il s’applique :

Sans fetch dans le navigateur, aucun repli n’est possible. Si une connexion WebSocket existante tombe, le widget se reconnecte via WebSocket. Après un repli, il vérifie discrètement une fois par page si WebSocket passe désormais ; si oui, il supprime rc_http et la page suivante utilise à nouveau WebSocket.

Les requêtes (sous https://ws.reactive.chat/rc_wss/h/) :

Le widget essaie SSE en premier ; si aucune première trame n’arrive en 5 secondes (par exemple à cause d’un proxy avec mise en tampon), il passe à l’interrogation longue. Il traite les erreurs comme 404 (unbekannt), 403, 413 ou 429 comme une connexion interrompue et réessaie après un délai. Après 60 secondes sans requête, le serveur ferme la connexion. CORS : Access-Control-Allow-Origin reprend l’origine, sans identifiants d’accès ; la vérification de l’origine a lieu dans init, comme pour WebSocket.

Exigences de votre côté :

Stockage dans le navigateur : uniquement l’entrée rc_http dans sessionStorage avec l’heure de la connexion HTTPS, sans données personnelles.

Quelle route est active

Dans l’onglet Réseau des outils de développement :

Suite : Limites et quotas · Dépannage

Dernière mise à jour: