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.
[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.
| Attribut | Valeur | Défaut | Rô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 |
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.
API JavaScript
Le script expose une fonction unique ChatbotFlow(action, données).
| Appel | Effet |
|---|---|
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 ?' });
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églage | Dé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 notification | activé |
| Réponses rapides | aucune — seules les entrées activées sont envoyées |
| Pages exclues | aucune |
| Déclencheurs | aucun |
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éclencheur | Valeur attendue | Défaut | Comportement |
|---|---|---|---|
delay_load | secondes | 15 | Ouvre après ce délai depuis le chargement. |
time_on_page | secondes | 30 | Compte le temps actif : le compteur se fige si le visiteur ne bouge ni ne fait défiler. |
scroll_percent | pourcentage | 50 | Ouvre quand cette proportion de la page a été parcourue. |
inactivity | secondes | 60 | Ouvre 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_selector | sélecteur CSS | — | Ouvre au clic sur les éléments correspondants. Ex. #aide, .btn-support |
url_pattern | motif 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_inactivity | secondes | 15 | Propose le formulaire de contact après ce délai sans réponse. |
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ôme | Cause la plus fréquente |
|---|---|
Rien ne s'affiche, data-api-key missing en console | Attribut absent ou mal orthographié sur la balise. |
Réponse 401 de l'API | Clé inconnue ou renouvelée : le script porte encore l'ancienne. |
Réponse 403 | Compte inactif, ou origine absente des domaines autorisés — pensez à la variante www. |
No 'Access-Control-Allow-Origin' header en console | Le 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 ligne | Le domaine de production n'a pas été ajouté à la liste. |
| Aucune ouverture automatique | Le visiteur a fermé la fenêtre, ou url_pattern exclut la page. |
| Le widget est absent de certaines pages | Ces 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.