REDA One Centre d’aide
FR
Langue
English EN Español ES Português PT Italiano bientôt disponible Français FR Deutsch bientôt disponible العربية bientôt disponible
reda.one ↗
Accueil / REDA AI / Administration / Référence de l’API du widget externe

Référence de l’API du widget externe

Interface REST publique Cinq points de terminaison POST prennent en charge les conversations du widget externe. Le chargeur fourni les appelle pour vous. Cette page décrit leur fonctionnement pour les équipes qui créent un client personnalisé, intègrent une conversation à une application mobile ou appellent l’API depuis un autre système.

URL de base

L’API du widget est servie par votre site Salesforce sous le chemin /services/apexrest/redaai/chat/v1/ :

https://<your-org>.my.salesforce-sites.com/chat/services/apexrest/redaai/chat/v1/

L’hôte exact dépend du domaine de votre site. Retrouvez-le dans Configuration › Sites. Le chargeur intégré à votre site web utilise cette adresse dans l’attribut data-endpoint.

Authentification

Chaque requête nécessite une clé API. Transmettez-la dans un en-tête HTTP ou dans le corps de la requête ; l’API accepte ces deux emplacements :

Emplacement Nom
En-tête HTTP X-REDAAI-API-Key
Champ du corps clientKey

Le passage de la clé dans le corps offre une solution de remplacement lorsque les en-têtes personnalisés ne parviennent pas au service à travers l’infrastructure du site ou un proxy. Utilisez le format prévu par le chargeur fourni ou par votre client.

Après /init, chaque requête nécessite également le jeton de session renvoyé par /init :

Emplacement Nom
En-tête HTTP X-REDAAI-Session
Champ du corps sessionToken

Consultez Gestion des clés API pour créer, remplacer et révoquer les clés.

CORS

L’API ajoute l’en-tête Access-Control-Allow-Origin à ses réponses aux clients web. Le champ Origines autorisées de l’agent contient une liste d’origines séparées par des virgules. Vide, il ne restreint pas les origines ; renseigné, il entraîne le rejet d’une initialisation provenant d’une origine absente de la liste avec ORIGIN_NOT_ALLOWED.

Changement dans la version 1.13. L’origine provient de l’en-tête Origin de la requête, et non du corps. Une requête sans en-tête Origin est rejetée si Origines autorisées est renseigné. Ce contrôle vise les appels des navigateurs ; il ne constitue pas une authentification d’un serveur. Consultez POST /chat/v1/init.

Points de terminaison

Cinq points de terminaison, tous en POST. Pour un client interorigine personnalisé, vérifiez aussi le traitement des requêtes préalables OPTIONS par votre configuration Salesforce Sites et votre infrastructure.

Chemin Fonction
POST /chat/v1/initCréer une session de conversation et renvoyer son jeton.
POST /chat/v1/messageEnvoyer un message utilisateur et recevoir la réponse de l’agent.
POST /chat/v1/actionExécuter une action proposée et confirmée par votre interface.
POST /chat/v1/historyRécupérer les messages de la conversation associée à la session.
POST /chat/v1/continueDemander à l’agent de décrire le résultat des actions exécutées automatiquement au tour précédent, sans nouveau message utilisateur.

POST /chat/v1/init

Valide la clé API, vérifie l’origine et crée une session. Renvoie le jeton et les informations de l’agent nécessaires à l’écran d’accueil du widget.

Corps de la requête

{
  "clientKey": "<your api key>"
}

Changement dans la version 1.13. Le service lit désormais l’en-tête Origin défini par le navigateur, qu’un script de page ne peut pas remplacer. Un champ origin dans le corps reste accepté pour compatibilité mais est ignoré. Un ancien widget qui le transmet peut continuer à fonctionner. Un client serveur peut construire ses propres en-têtes : ce contrôle ne remplace donc pas une authentification serveur.

Une requête serveur qui n’envoie pas d’en-tête Origin est rejetée avec ORIGIN_NOT_ALLOWED si la liste des origines autorisées est renseignée. Pour une intégration depuis votre serveur, examinez les contrôles d’accès adaptés ; laisser cette liste vide supprime la restriction d’origine. Consultez Configurer les origines autorisées.

Réponse (200 OK)

{
  "sessionToken":     "<opaque session token>",
  "agentName":        "support-assistant",
  "displayName":      "Support Assistant",
  "welcomeMessage":   "Hi! How can I help today?",
  "mascotImage":      "https://…/mascot.png",
  "maxMessageLength": 2000
}
  • sessionToken : à transmettre dans toutes les requêtes suivantes.
  • agentName : identifiant de l’agent, utile pour vos analyses côté client.
  • displayName : nom lisible à afficher dans l’en-tête et l’accueil du widget.
  • welcomeMessage : message de bienvenue externe configuré sur l’agent ; chaîne vide s’il n’est pas renseigné.
  • mascotImage : URL de la mascotte si elle est configurée ; chaîne vide sinon.
  • maxMessageLength : nombre maximal de caractères d’un message utilisateur.

POST /chat/v1/message

Transmet un message à l’agent et renvoie sa réponse à la fin du traitement de ce tour.

Corps de la requête

{
  "clientKey":    "<your api key>",
  "sessionToken": "<from /init>",
  "message":      "What's open on the Acme account?"
}

Un message dépassant maxMessageLength, renvoyé par /init, est rejeté avec INVALID_INPUT.

Réponse (200 OK)

{
  "response":            "<agent reply text>",
  "creditsUsed":         1.42,
  "conversationId":      "a0Q…",
  "pendingActions":      [],
  "continuationPending": true,
  "continuationDepth":   0
}
  • response : réponse de l’agent, y compris les éventuels marqueurs SUGGESTIONS ou ACTION interprétés par le widget.
  • creditsUsed : crédits consommés pour ce tour.
  • conversationId : identifiant Salesforce de la conversation, permettant de retrouver sa transcription dans Salesforce.
  • pendingActions : champ de résultat lié aux actions en attente de confirmation. Le widget externe n’utilise pas les cartes de confirmation internes ; traitez un résultat vide ou nul sans afficher de carte. Consultez Référence de l’API du widget externe ci-dessous.
  • continuationPending vaut true lorsque des actions ont été exécutées et que l’agent doit encore en décrire le résultat. Appelez /chat/v1/continue pour obtenir ce compte rendu.
  • continuationDepth : nombre de tours de continuation déjà effectués. Renvoyez cette valeur dans le prochain appel /continue.

POST /chat/v1/action

Exécute un outil d’action demandé par le client. Le service vérifie l’existence de l’outil actif et son admissibilité au canal du widget externe ; votre intégration doit respecter la configuration des outils de l’agent.

Le widget externe n’utilise pas les cartes de confirmation du canal interne. Lorsqu’une action est autorisée par le fonctionnement conversationnel du canal, REDA AI peut l’exécuter automatiquement, conserver le résultat réel et renvoyer continuationPending pour que l’agent le décrive lors de l’appel /continue. Aucune carte interne ne bloque l’exécution dans l’attente d’un clic.

Ce point de terminaison sert notamment aux clients qui proposent leurs propres boutons ou étapes de confirmation pour déclencher un outil précis. Il ne constitue pas, à lui seul, une preuve qu’une personne a confirmé l’action.

Choisissez avec soin les outils d’action d’un agent public. Leur exécution ne passe pas par les cartes de confirmation internes. N’exposez que les actions adaptées aux visiteurs et vérifiez leurs contrôles d’accès.

Corps de la requête

{
  "clientKey":    "<your api key>",
  "sessionToken": "<from /init>",
  "actionTool":   "create_record",
  "params": {
    "object_name":  "Case",
    "field_values": { "Subject": "Issue with login", "…": "…" }
  }
}

Réponse (200 OK)

{
  "success": true,
  "result":  "<tool execution result, JSON-serialised>"
}

La structure de result dépend de l’outil. Les outils d’action intégrés peuvent renvoyer un résultat structuré comportant success, message et, lorsque cela s’applique, recordId.

POST /chat/v1/continue

Demande à l’agent de décrire le résultat des actions exécutées lors du tour /message précédent, sans nouveau message utilisateur. Appelez ce point de terminaison si la réponse indique continuationPending: true.

Corps de la requête

{
  "clientKey":         "<your api key>",
  "sessionToken":      "<from /init>",
  "continuationDepth": 0
}

Réponse (200 OK)

{
  "response":            "<agent narration of what happened>",
  "creditsUsed":         0.68,
  "conversationId":      "a0Q…",
  "continuationPending": false,
  "continuationDepth":   1
}

Le champ continuationPending reste à true si l’agent a enchaîné une nouvelle action. Continuez à appeler /continue en retransmettant continuationDepth jusqu’à recevoir false, en traitant aussi les erreurs. Le paramètre Profondeur max. de continuation encadre cet enchaînement ; votre client doit respecter la profondeur renvoyée.

Une continuation est un véritable appel au modèle. Elle consomme des crédits et vérifie, comme /message, l’activation du service, la clé, la session, les limites de débit et le plafond quotidien. Elle peut renvoyer 429 avec RATE_LIMITED ou CREDIT_LIMIT. Une continuation réussie actualise également la dernière activité de la session.

POST /chat/v1/history

Renvoie jusqu’à 100 messages de la conversation, du plus ancien au plus récent, par exemple pour réafficher l’échange après le rechargement du widget.

Corps de la requête

{
  "clientKey":    "<your api key>",
  "sessionToken": "<from /init>"
}

Réponse (200 OK)

{
  "messages": [
    { "role": "user",      "content": "…", "timestamp": "2026-04-25T08:55:12.000Z" },
    { "role": "assistant", "content": "…", "timestamp": "2026-04-25T08:55:14.000Z" }
  ]
}

Réponses d’erreur

Les erreurs utilisent la structure suivante :

{
  "error": "<localised user-facing message>",
  "code":  "<machine-readable code>"
}

Utilisez code pour le traitement programmatique et affichez error à l’utilisateur.

HTTP Code Signification
403DISABLEDL’activation globale du bot externe est désactivée.
401INVALID_API_KEYClé API manquante, incorrecte ou révoquée.
403ORIGIN_NOT_ALLOWEDL’origine de l’appelant n’est pas autorisée lors de l’initialisation.
401SESSION_EXPIREDJeton invalide ou session expirée selon le délai d’inactivité configuré.
429RATE_LIMITEDLimite de débit par session ou par agent dépassée.
429MAX_MESSAGESNombre maximal de messages atteint pour la conversation.
429CREDIT_LIMITPlafond quotidien du bot externe atteint ou budget de licence épuisé.
400INVALID_INPUTParamètre manquant, message trop long ou outil d’action inconnu.
404GENERIC_ERRORChemin inconnu sous /chat/v1/.
500GENERIC_ERRORErreur inattendue. Le service prévoit l’enregistrement des détails dans le journal d’incidents ; la réponse les masque.

Limites de débit

Les appels concernés passent par plusieurs contrôles. Les limites de débit et de messages sont définies par agent ; le plafond quotidien de crédits concerne l’ensemble des agents externes de l’organisation. Un bot très sollicité peut donc atteindre le plafond utilisé par tous les autres. La valeur 0 désactive ce plafond : évaluez ce choix avant de l’utiliser pour un widget public. Le budget global de licence reste applicable.

Limite Source Valeur par défaut
Par session et par minute Définition de l’agent › Limite de débit par session (msg/min) 10 appels par minute
Par heure Définition de l’agent › Rate_Limit_Per_Hour__c, limite horaire des appels 500 appels par agent et par heure
Plafond quotidien de crédits Paramètres de la plateforme › Plafond de crédit quotidien pour les bots externes 500 crédits par jour
Nombre maximal de messages par conversation Définition de l’agent › Messages de session maximum 50 messages

Consultez la Référence des paramètres de la plateforme pour les plafonds quotidiens.

Cycle de vie d’une session

  • Création : /init crée une session pour l’agent et conserve l’adresse IP et l’origine reçues. Leur conservation ne signifie pas qu’elles sont revérifiées comme facteurs d’authentification à chaque appel.
  • Activité : les réponses réussies de /message actualisent la dernière activité ; la continuation le fait également. Ne comptez pas sur /action ou /history pour prolonger le délai d’inactivité.
  • Expiration : une session inactive expire selon le Délai d'expiration de la session (minute, dont la valeur de secours est 30 minutes. Un jeton expiré entraîne SESSION_EXPIRED ; le widget doit rappeler /init.
  • Limite de messages : lorsque Messages de session maximum est atteint, les nouveaux messages soumis à ce contrôle sont rejetés avec MAX_MESSAGES. Créez une nouvelle session pour démarrer une nouvelle conversation.

Configuration requise sur l’agent

Plusieurs champs de la définition d’agent déterminent le comportement du widget :

Champ Fonction
CanalDoit inclure Widget externe pour un agent accessible depuis un site public.
Clé API externeClé transmise par le widget dans clientKey. Générez-la depuis l’administration REDA AI.
Origines autoriséesListe séparée par des virgules, par exemple https://www.example.com. Une valeur vide autorise toutes les origines à l’initialisation.
Longueur maximale du messageLongueur maximale d’un message utilisateur, en caractères.
Délai d'expiration de la session (minuteDélai d’inactivité en minutes. Le libellé français du champ est tronqué dans le package.
Limite de débit par session (msg/min)Nombre maximal d’appels par minute pour une session.
Limite de tarif horaire (total des agentNombre maximal d’appels par heure pour l’agent, toutes sessions confondues. Malgré le mot « tarif » dans ce libellé tronqué, il ne s’agit pas d’un prix.
Messages de session maximumNombre maximal de messages par conversation.
Message de bienvenue externeRenvoyé par /init dans welcomeMessage.
Image de mascotteRenvoyé par /init dans mascotImage.

Modèle de sécurité

  • Contexte de l’utilisateur invité. Le widget public utilise le contexte invité du site Salesforce. Les chemins standard appliquent les contrôles prévus pour ce contexte ; vérifiez les droits d’objet et de champ, le partage et la sécurité des outils personnalisés avant l’exposition publique.
  • Une clé par agent. Chaque agent externe possède sa propre clé. Sa génération ou sa révocation concerne cet agent.
  • Une restriction d’origine pour les navigateurs. Renseignez Origines autorisées sur les agents publics afin de limiter l’utilisation depuis d’autres sites. Ce contrôle ne remplace pas une authentification serveur et une valeur vide le désactive.
  • Des erreurs génériques pour les clients. Les détails internes sont destinés au journal d’incidents et à l’examen par les administrateurs.
  • Un plafond quotidien commun aux bots externes. Il permet de limiter leur consommation collective. Il ne réserve pas de crédits et s’ajoute au budget global de licence.

Bonnes pratiques

Utilisez le chargeur fourni lorsque son fonctionnement vous convient. Il prend en charge le chargement des versions, les formats d’authentification, les erreurs et les attributs décrits dans Personnaliser l’interface du widget. Un client personnalisé doit gérer explicitement ces aspects.

Basez votre traitement sur code. Le texte error est destiné aux utilisateurs, peut être traduit et évoluer selon les versions. Le champ code sert au traitement programmatique.

Recréez une session pour SESSION_EXPIRED, pas pour toute erreur. Attendez avant de réessayer après RATE_LIMITED. Une erreur CREDIT_LIMIT nécessite de vérifier le budget ou les plafonds avec un administrateur.

Configurez les origines des agents publics. Laisser la liste vide retire ce niveau de protection des appels de navigateur.

Surveillez le plafond quotidien. Ajustez-le après observation du trafic et de la consommation réels.

Changements inclus dans 1.16000

La limite horaire par agent s’applique aussi pendant la dernière heure UTC de la journée. Les API externe et Communauté utilisent un code stable de limite de crédits pour que la réponse HTTP 429 ne dépende plus du message traduit.

Liste de mise à niveau client

Questions fréquentes

Non. Vous pouvez créer un client web, mobile ou autre avec les cinq points de terminaison documentés, en prenant en charge le cycle de conversation et les contrôles nécessaires.

Évitez-le. Les échanges sont conçus pour être séquentiels. Des appels simultanés peuvent entrer en conflit sur les contrôles de débit et la conversation. Attendez la réponse de chaque /message avant d’envoyer le suivant.

Le délai d’inactivité est configuré sur l’agent, avec une valeur de secours de 30 minutes. Les messages et continuations réussis actualisent l’activité. La limite de messages est un contrôle distinct : ne supposez pas qu’un appel d’historique prolonge la session.

Le corps offre une solution de remplacement lorsque des en-têtes personnalisés ne sont pas transmis à travers l’infrastructure du site ou un proxy. Choisissez le format adapté à votre client et vérifiez son fonctionnement.

Les cinq points de terminaison de cette page couvrent la conversation ; ils ne définissent pas un point de terminaison d’importation de fichier. Ne déduisez pas de la présence d’un paramètre d’agent que votre widget prend en charge l’importation. Consultez Importer des fichiers pour les canaux et mécanismes documentés.

L’enregistrement reste conservé dans Salesforce selon les règles d’archivage. Une nouvelle session crée une nouvelle conversation ; les sessions invitées ne sont pas automatiquement regroupées pour une même personne.

Coordonnez la génération de la nouvelle clé et sa mise à jour dans le widget. L’agent ne conserve qu’une clé active : la génération remplace la précédente. Les appels utilisant l’ancienne clé échouent avec INVALID_API_KEY, y compris pour une session déjà ouverte. Ne révoquez pas ensuite l’agent comme s’il conservait une ancienne clé distincte. Consultez Gestion des clés API.

Étapes suivantes

Consultez Gestion des clés API pour les clés, ou la Référence de l’API Experience Cloud pour le portail authentifié.