Référence développeur

Documentation technique

Tous les paramètres du script d'intégration, leurs valeurs par défaut et leur comportement exact.

Installation

Une seule balise, à placer juste avant la fermeture de </body>. Aucune dépendance, aucune étape de compilation.

<script src="https://api.chatbot-flow.com/widget.js"
        data-api-key="cf_live_votre_cle" defer></script>

Votre clé figure dans votre espace, section Intégration. Elle est publique par nature — elle apparaît dans le code source de vos pages. Ce qui protège votre compte n'est pas son secret, mais la liste des domaines autorisés décrite plus bas.

Le script est chargé, mais rien ne s'affiche ? Ouvrez la console du navigateur. En l'absence de clé, le widget écrit [ChatbotFlow] data-api-key missing et s'arrête sans autre effet.

Attributs du script

Tous se placent sur la balise <script> elle-même.

AttributValeurDéfautRôle
data-api-key chaîne requis Identifie votre compte. Sans lui, le widget ne démarre pas.
data-api-base URL https://api.chatbot-flow.com Serveur d'API. À ne modifier qu'en environnement dédié. Une barre oblique finale est retirée automatiquement.
data-position left ou right right Côté d'affichage de la bulle. Toute valeur autre que left est traitée comme right.
data-lang code BCP 47 déduit Langue de réponse de l'agent. Voir « Langue ».
data-page-context texte libre vide Contexte transmis au modèle à chaque message. Voir « Contexte de page ».
data-user-email email vide Pré-remplit le formulaire de contact. Voir « Identifier le visiteur ».
data-user-name texte vide Idem.
data-user-phone téléphone vide Idem.

Identifier le visiteur

Quand vous savez déjà qui consulte la page — espace client, tunnel de commande — vous pouvez éviter au visiteur de ressaisir ses coordonnées. Trois écritures, par ordre de priorité décroissante :

<!-- 1. attributs, si les valeurs sont connues au rendu -->
<script src="https://api.chatbot-flow.com/widget.js"
        data-api-key="cf_live_votre_cle"
        data-user-email="client@exemple.fr"
        data-user-name="Camille Roux" defer></script>

<!-- 2. variable globale, avant le chargement du script -->
<script>
  window.ChatbotFlowUser = { email: 'client@exemple.fr', name: 'Camille Roux', phone: '' };
</script>

<!-- 3. appel dynamique, à tout moment -->
<script>ChatbotFlow('user', { email: 'client@exemple.fr', name: 'Camille Roux' });</script>

Ces coordonnées sont transmises à l'agent et enregistrées sur la conversation : vous retrouvez donc un visiteur identifié dans votre espace, sans qu'il ait eu à remplir le formulaire de contact. Une adresse invalide est ignorée plutôt que stockée, et un appel ultérieur sans identité n'efface pas ce qui était déjà connu.

Les attributs l'emportent sur window.ChatbotFlowUser. Si aucun des deux n'est présent, le widget détecte de lui-même une adresse ou un téléphone saisis dans la conversation et s'en sert pour pré-remplir le formulaire, même si l'information a été donnée plusieurs tours plus tôt.

Contexte de page

Texte libre joint à chaque message pour situer la conversation. Il n'est pas affiché au visiteur.

<script>window.ChatbotFlowPageContext = 'Fiche produit — Chaise Lina, 149 €, en stock';</script>

Ou dynamiquement, utile sur une application à navigation interne :

ChatbotFlow('pageContext', 'Étape 3 du tunnel, panier 89 €');

L'attribut data-page-context l'emporte sur la variable globale.

Langue

L'agent répond dans la langue de la page. Elle est déterminée dans cet ordre, du plus explicite au plus implicite :

1. data-lang="fr"                    sur la balise du script
2. window.ChatbotFlowLang = 'fr'     variable globale
3. <html lang="fr">                 la balise de votre page
4. la langue du navigateur du visiteur

La plupart des sites multilingues renseignent déjà <html lang> : dans ce cas il n'y a rien à ajouter au snippet, la langue suit automatiquement la page consultée. Sur une application à navigation interne, où le changement de langue ne recharge pas la page :

ChatbotFlow('lang', 'en');

Les codes acceptés sont de la forme fr ou fr-FR — la casse et le séparateur sont normalisés, pt_br devient pt-BR. Toute autre valeur est ignorée : l'agent s'en remet alors au réglage de langue de votre compte.

Sites WordPress. Le plugin traduit déjà l'interface du widget selon la langue du site — libellés, boutons, invitations. La langue de réponse de l'agent, elle, suivra la locale WordPress à partir de la prochaine version du plugin ; d'ici là elle reste celle configurée sur votre compte.
Cette langue prime sur le réglage de votre espace. Le réglage du compte s'applique à tous vos sites à la fois : il ne peut pas suivre un site multilingue. La valeur transmise par la page, quand elle existe, l'emporte donc.

API JavaScript

Le script expose une fonction unique ChatbotFlow(action, données).

AppelEffet
ChatbotFlow('open')Ouvre la fenêtre de conversation.
ChatbotFlow('open', 'phrase')L'ouvre en affichant une phrase d'introduction. Voir « Ouvrir depuis votre page ».
ChatbotFlow('close')La referme.
ChatbotFlow('user', { email, name, phone })Renseigne l'identité du visiteur.
ChatbotFlow('pageContext', 'texte')Met à jour le contexte de page.
ChatbotFlow('lang', 'fr')Change la langue de réponse.
ChatbotFlow('boot', { user, pageContext, lang })Les deux en un seul appel.
ChatbotFlow('reset')Efface identité et contexte. La langue, propriété de la page, est conservée. À appeler à la déconnexion.

Ouvrir depuis votre page, avec une phrase d'introduction

Un bouton de votre site peut ouvrir la conversation et l'amorcer par une phrase de votre choix. Utile sur une fiche produit, une page tarifs ou une étape de tunnel, où la question du visiteur est prévisible.

<button onclick="ChatbotFlow('open', 'Bonjour ! Vous regardez la Chaise Lina. Que puis-je vous dire ?')">
  Poser une question sur ce produit
</button>

La phrase s'affiche comme un message de l'assistant, à la place du message d'accueil habituel. L'écriture objet est également acceptée, pour rester extensible :

ChatbotFlow('open', { intro: 'Une question sur nos tarifs ?' });
Appelable plusieurs fois. Si la fenêtre est déjà ouverte, la phrase s'ajoute à la suite au lieu d'être ignorée — un second bouton peut donc amorcer un nouveau sujet sans que le visiteur ait à refermer. Cette phrase vient de votre site, pas du modèle : elle ne porte pas de boutons de notation et n'est pas comptée dans l'historique envoyé à l'agent.

Appeler l'API avant le chargement

Le script étant différé, vos appels peuvent le précéder. Déclarez une file d'attente : les appels y sont empilés puis rejoués dès que le widget est prêt.

<script>
  window.ChatbotFlow = window.ChatbotFlow || function () {
    (window.ChatbotFlow.q = window.ChatbotFlow.q || []).push(arguments);
  };
  ChatbotFlow('user', { email: 'client@exemple.fr' });
</script>
<script async src="https://api.chatbot-flow.com/widget.js"
        data-api-key="cf_live_votre_cle"></script>

Réglages venant de votre espace

Au premier affichage, le widget interroge /api/public/config et applique votre configuration. Ces valeurs ne se règlent pas dans le code : elles se modifient depuis la page Configuration, et s'appliquent à tous vos sites sans redéploiement.

RéglageDéfaut si non renseigné
Couleur du widget#4F46E5
Message d'accueil« Bonjour ! Comment puis-je vous aider ? »
Infobulle de la bulle« Besoin d'aide ? »
Titre de l'en-tête« Assistant »
Son de notificationactivé
Réponses rapidesaucune — seules les entrées activées sont envoyées
Pages excluesaucune
Déclencheursaucun

Déclencheurs

Ils décident du moment où la conversation s'ouvre d'elle-même. Ils se configurent depuis votre espace ; la colonne « valeur » indique ce que le champ attend.

DéclencheurValeur attendueDéfautComportement
delay_loadsecondes15Ouvre après ce délai depuis le chargement.
time_on_pagesecondes30Compte le temps actif : le compteur se fige si le visiteur ne bouge ni ne fait défiler.
scroll_percentpourcentage50Ouvre quand cette proportion de la page a été parcourue.
inactivitysecondes60Ouvre après ce délai sans interaction. Le compteur repart à chaque action.
exit_intent——Ouvre quand le curseur quitte la page vers le haut.
click_selectorsélecteur CSS—Ouvre au clic sur les éléments correspondants. Ex. #aide, .btn-support
url_patternmotif d'URL—Filtre global : hors des URL correspondantes, aucune ouverture automatique n'a lieu.
first_visit_only——Modificateur : restreint les ouvertures automatiques à la première visite.
lead_form_inactivitysecondes15Propose le formulaire de contact après ce délai sans réponse.
Une fermeture manuelle fait autorité. Si le visiteur ferme la fenêtre, plus aucun déclencheur automatique ne s'active pour cette page. click_selector continue de fonctionner : c'est une action explicite du visiteur.

Domaines autorisés

Chaque appel du widget est vérifié : l'en-tête Origin du navigateur doit figurer dans la liste des domaines déclarés sur votre page Configuration. Un domaine par ligne.

exemple.fr
www.exemple.fr
preprod.exemple.fr
localhost

Ce réglage gouverne aussi l'accès depuis le navigateur : l'en-tête Access-Control-Allow-Origin renvoyé par l'API en découle directement. Un domaine non déclaré se traduit donc par une erreur CORS dans la console, avant même que la requête ne soit examinée.

Pour intégrer le widget avant mise en ligne, déclarez localhost : le port est ignoré, une même ligne couvre donc localhost:3000 comme localhost:4200. Pensez à la retirer une fois en production.

Deux points comptent en pratique. D'abord, exemple.fr et www.exemple.fr sont deux origines distinctes : si votre site répond sur les deux, déclarez les deux, sinon le widget sera refusé sur l'une des versions. Ensuite, une liste vide désactive entièrement le contrôle — votre clé est alors acceptée depuis n'importe quel site. C'est pratique le temps d'une mise en place, mais cela laisse un tiers utiliser votre quota.

Diagnostic

SymptômeCause la plus fréquente
Rien ne s'affiche, data-api-key missing en consoleAttribut absent ou mal orthographié sur la balise.
Réponse 401 de l'APIClé inconnue ou renouvelée : le script porte encore l'ancienne.
Réponse 403Compte inactif, ou origine absente des domaines autorisés — pensez à la variante www.
No 'Access-Control-Allow-Origin' header en consoleLe domaine d'où part la requête n'est pas déclaré dans « Domaines autorisés ». C'est la cause de la quasi-totalité des erreurs CORS sur cette API.
Le widget fonctionne en local mais pas en ligneLe domaine de production n'a pas été ajouté à la liste.
Aucune ouverture automatiqueLe visiteur a fermé la fenêtre, ou url_pattern exclut la page.
Le widget est absent de certaines pagesCes URL figurent dans les pages exclues de votre configuration.

Une question que cette page ne couvre pas ? Écrivez-nous — les réponses utiles finissent ici.