POST/api/public/widget/message

Envoie un message de chat du visiteur au chatbot et renvoie sa réponse — l'endpoint central du Widget de chat.

`POST /api/public/widget/message` envoie le message d’un visiteur au chatbot et retourne la réponse disponible pour cette étape de conversation. C’est l’endpoint principal du widget. Il exige le jeton d’intégration dans l’en-tête `X-Widget-Token` et vérifie l’origine du site par rapport à la liste autorisée. Le corps contient notamment le `widget_code`, le message, l’identifiant du visiteur et les informations de session. L’opération n’est pas idempotente. Deux requêtes identiques peuvent créer deux messages utilisateur et deux réponses du bot. L’interface doit donc bloquer les doubles clics pendant le traitement. Une relance automatique après un délai d’attente ne doit être effectuée qu’après avoir établi que la première requête n’a pas atteint le serveur. Avant l’envoi, le widget doit avoir chargé sa configuration publique et préparé le contexte de session. Un message vide ou composé uniquement d’espaces doit être rejeté côté client. Les erreurs courantes comprennent un jeton absent, un code inconnu, des identifiants de session invalides ou une origine non autorisée. Il faut distinguer ces erreurs permanentes d’une indisponibilité temporaire du backend. Le jeton d’intégration est affiché en clair une seule fois lors du provisionnement et doit rester secret. Il ne doit pas être placé dans une URL, dans les événements analytiques ou dans des journaux accessibles au public. Lorsque le serveur renvoie `WIDGET_ORIGIN_DENIED`, la correction consiste à faire mettre à jour l’autorisation de domaine par Zentor ; il n’existe pas d’interface tenant en libre-service pour cette modification. Un flux réaliste charge la configuration, restaure ou crée la session, transmet le texte par `message`, affiche la réponse puis utilise `poll` si un collaborateur reprend la conversation. Le handover fonctionne avec un polling toutes les huit secondes et ne dispose pas d’une logique automatique d’équipes ou de files d’attente. Cette route ne doit pas être utilisée comme une API développeur générique ni appelée depuis des domaines non approuvés.

Authentification et sécurité

Jeton d'intégration du widget (en-tête X-Widget-Token) + liste d'origines autorisées

Idempotent: Non

Paramètres

widget_code(body, string, requis)
message(body, string, requis)
visitor_id(body, string, requis)ID visiteur persistant généré côté client
session_id(body, string)null lors du premier appel d'une nouvelle conversation

Exemple de requête

{"widget_code":"...","message":"Bonjour, que peut faire Zentor App ?","visitor_id":"<UUID ou ID générée côté client>"}

Exemple de réponse

{"ok":true,"data":{"session_id":"31b1096c-a366-4418-b4be-bd999ff98134","response":"...","buttons":[],"state":"idle","products":[]}}

Codes d'erreur

401 WIDGET_TOKEN_MISSINGL'en-tête X-Widget-Token est manquant.
401 WIDGET_TOKEN_INVALIDToken invalide ou origine absente de la liste d'autorisation du Widget.
400 VISITOR_ID_REQUIREDvisitor_id est manquant.

Preuve de test en direct

Succès (200, réponse chatbot réellement générée) et plusieurs cas négatifs (token manquant/invalide, visitor_id manquant) vérifiés en direct.

Widget de chat