La FlowHunt JS API vous donne un contrôle total sur la façon dont votre chatbot s’intègre à votre site web. En utilisant le code d’intégration v2, vous pouvez intégrer le chatbot, vous abonner aux événements de cycle de vie et d’interaction, transmettre des données dynamiques via des variables de flux, suivre les interactions avec des paramètres URL et contrôler la fenêtre de chat par programmation.
Ce guide couvre tous les aspects de la JS API avec des exemples de code que vous pouvez copier et adapter à votre projet.
Code d’intégration (v2)
Lorsque vous créez un chatbot dans FlowHunt, vous obtenez un extrait de code d’intégration. Copiez-le et collez-le dans votre HTML juste avant la balise fermante </body> :
<script id="fh-chatbot-script-YOUR_CHATBOT_ID">
var currentScript = document.currentScript
|| document.getElementById('fh-chatbot-script-YOUR_CHATBOT_ID');
var script = document.createElement('script');
script.async = true;
script.src = 'https://app.flowhunt.io/api/chatbot/YOUR_CHATBOT_ID'
+ '?workspace_id=YOUR_WORKSPACE_ID&v=2';
script.onload = function() {
window.FHChatbot_YOUR_CHATBOT_ID.init(function(chatbotManager) {
// The chatbot is ready — use chatbotManager here
});
};
if (currentScript && currentScript.parentNode) {
currentScript.parentNode.insertBefore(script, currentScript.nextSibling);
} else {
document.head.appendChild(script);
}
</script>
Remplacez YOUR_CHATBOT_ID et YOUR_WORKSPACE_ID par les valeurs de votre tableau de bord FlowHunt. L’ID du chatbot dans le nom de la variable globale (window.FHChatbot_YOUR_CHATBOT_ID) utilise des underscores au lieu de tirets.
Remplacer la configuration avec setConfig()
Avant d’appeler init(), vous pouvez remplacer les paramètres par défaut du chatbot en utilisant setConfig() :
<script id="fh-chatbot-script-YOUR_CHATBOT_ID">
var currentScript = document.currentScript
|| document.getElementById('fh-chatbot-script-YOUR_CHATBOT_ID');
var script = document.createElement('script');
script.async = true;
script.src = 'https://app.flowhunt.io/api/chatbot/YOUR_CHATBOT_ID'
+ '?workspace_id=YOUR_WORKSPACE_ID&v=2';
script.onload = function() {
window.FHChatbot_YOUR_CHATBOT_ID.setConfig({
headerTitle: 'Support Assistant',
maxWindowWidth: '700px',
showChatButton: false,
flowVariables: {
userId: '12345',
plan: 'enterprise'
},
urlSuffix: '?utm_source=chatbot'
});
window.FHChatbot_YOUR_CHATBOT_ID.init(function(chatbotManager) {
// Chatbot initialized with custom config
});
};
if (currentScript && currentScript.parentNode) {
currentScript.parentNode.insertBefore(script, currentScript.nextSibling);
} else {
document.head.appendChild(script);
}
</script>
Options de configuration disponibles
| Option | Type | Description |
|---|---|---|
headerTitle | string | Texte personnalisé du titre de l’en-tête |
maxWindowWidth | string | Largeur maximale de la fenêtre de chat (par exemple, '700px') |
maxWindowHeight | string | Hauteur maximale de la fenêtre de chat |
inputPlaceholder | string | Texte d’espace réservé pour le champ de saisie des messages |
showChatButton | boolean | Afficher ou masquer le bouton de chat flottant par défaut |
openChatPanel | boolean | Ouvrir automatiquement le panneau de chat au chargement de la page |
flowVariables | object | Paires clé-valeur de données personnalisées transmises au flux |
urlSuffix | string | Chaîne de requête ajoutée à toutes les URL générées par le chatbot |
cookieConsent | boolean | Activer la persistance de session via les cookies |
embedded | string | Activer le mode intégré (pas de bouton de fermeture) |
theme | string | Mode de thème |
Variables de flux : Transmettre des données dynamiques
Les variables de flux vous permettent d’envoyer des données personnalisées depuis votre site web vers le flux du chatbot. Cela permet des conversations personnalisées en fonction du contexte utilisateur.
window.FHChatbot_YOUR_CHATBOT_ID.setConfig({
flowVariables: {
userId: getCurrentUserId(),
userEmail: getCurrentUserEmail(),
currentPage: window.location.pathname,
plan: 'enterprise'
}
});
Une fois définies, ces variables sont accessibles dans la logique du flux de votre chatbot, vous permettant de personnaliser les réponses, d’orienter les conversations ou de transmettre du contexte aux agents IA.
Suffixe URL : Suivre les interactions du chatbot
Le paramètre urlSuffix ajoute une chaîne de requête à chaque URL générée par le chatbot. Ceci est utile pour suivre le trafic provenant du chatbot dans les outils d’analyse :
window.FHChatbot_YOUR_CHATBOT_ID.setConfig({
urlSuffix: '?utm_source=chatbot&utm_medium=widget'
});
Cas d’utilisation :
- Suivre les conversions des interactions du chatbot dans Google Analytics.
- Analyser le comportement des utilisateurs après leur engagement avec le chatbot.
- Attribuer les campagnes qui stimulent l’engagement du chatbot.
Référence des événements
La FlowHunt JS API envoie 10 événements personnalisés sur l’objet window. Tous les événements utilisent l’API CustomEvent
avec bubbles: true et composed: true.
onFHChatbotReady
Déclenché lorsque le widget du chatbot est entièrement rendu et prêt à être utilisé.
- Données de l’événement : Aucune
- Quand : Après que le DOM du widget est monté et le bouton de chat est visible.
onFHChatbotSessionCreated
Déclenché lorsqu’une nouvelle session de chat est créée sur le serveur. Se déclenche également lors du redémarrage de la session.
- Données de l’événement : Aucune
- Quand : Après un appel API réussi de création de session.
onFHChatbotWindowOpened
Déclenché lorsque l’utilisateur ouvre la fenêtre de chat.
- Données de l’événement : Aucune
- Quand : Le panneau de chat devient visible.
- Note : Non déclenché en mode intégré.
onFHChatbotWindowClosed
Déclenché lorsque l’utilisateur ferme la fenêtre de chat.
- Données de l’événement : Aucune
- Quand : Le panneau de chat est masqué.
- Note : Non déclenché en mode intégré.
onFHMessageSent
Déclenché lorsque l’utilisateur envoie un message.
- Données de l’événement (
event.detail.metadata) :
{
"content": "Hello, I need help with...",
"createdAt": "2026-02-19T10:30:00.000Z"
}
onFHMessageReceived
Déclenché lorsque le chatbot reçoit et affiche une réponse.
- Données de l’événement (
event.detail.metadata) :
{
"flow_id": "abc123",
"message_id": "msg_456",
"message": "Sure, I can help you with that!",
"sender": {
"sender_name": "Support Agent",
"sender_avatar": "https://example.com/avatar.png"
}
}
Le champ sender est optionnel et n’est présent que lorsqu’un agent humain est impliqué.
onFHFormDataSent
Déclenché lorsque l’utilisateur soumet des données de formulaire via le chatbot.
- Données de l’événement (
event.detail.metadata) :
{
"objectData": { "name": "John", "email": "john@example.com" },
"createdAt": "2026-02-19T10:31:00.000Z"
}
onFHFeedback
Déclenché lorsqu’un utilisateur donne un avis positif ou négatif sur un message du chatbot.
- Données de l’événement (
event.detail.metadata) :
{
"message_id": "msg_456",
"content": "Optional feedback text",
"feedback": "P"
}
La valeur de feedback est "P" pour positif (pouce en haut) ou "N" pour négatif (pouce en bas).
onFHToolCall
Déclenché lorsqu’un outil ou une action est exécuté pendant le traitement du flux.
- Données de l’événement (
event.detail.metadata) :
{
"metadata": {
"flow_id": "abc123",
"message_id": "msg_789",
"message": "Calling search API..."
},
"createdAt": "2026-02-19T10:32:00.000Z"
}
Note : Déclenché uniquement dans les modes flowAssistant et flowAssistantV3, pas en mode chatbot standard.
onFHError
Déclenché lorsqu’une erreur survient pendant le fonctionnement du chatbot.
- Données de l’événement (
event.detail.metadata) :
{
"metadata": {
"flow_id": "abc123",
"message_id": "msg_err",
"message": "Flow execution failed"
},
"createdAt": "2026-02-19T10:33:00.000Z"
}
S’abonner aux événements
Il existe deux façons de s’abonner aux événements du chatbot.
Méthode 1 : Écouteurs d’événements Window
Utilisez window.addEventListener n’importe où dans votre page. Cela fonctionne même avant le chargement du chatbot :
<script>
document.addEventListener('DOMContentLoaded', function() {
// Chatbot lifecycle events
window.addEventListener('onFHChatbotReady', function(event) {
console.log('Chatbot is ready');
});
window.addEventListener('onFHChatbotSessionCreated', function(event) {
console.log('Session created');
});
window.addEventListener('onFHChatbotWindowOpened', function(event) {
console.log('Chat window opened');
});
window.addEventListener('onFHChatbotWindowClosed', function(event) {
console.log('Chat window closed');
});
// Message events
window.addEventListener('onFHMessageSent', function(event) {
console.log('User sent:', event.detail.metadata.content);
});
window.addEventListener('onFHMessageReceived', function(event) {
console.log('Bot replied:', event.detail.metadata.message);
});
window.addEventListener('onFHFormDataSent', function(event) {
console.log('Form submitted:', event.detail.metadata.objectData);
});
// Feedback
window.addEventListener('onFHFeedback', function(event) {
var feedback = event.detail.metadata;
console.log('Feedback on message', feedback.message_id, ':',
feedback.feedback);
});
// Tool calls (flowAssistant modes only)
window.addEventListener('onFHToolCall', function(event) {
console.log('Tool called:', event.detail.metadata);
});
// Errors
window.addEventListener('onFHError', function(event) {
console.error('Chatbot error:', event.detail.metadata);
});
});
</script>
Pour cesser d’écouter un événement, utilisez removeEventListener avec la même référence de fonction :
var handleMessage = function(event) {
console.log(event.detail.metadata);
};
window.addEventListener('onFHMessageReceived', handleMessage);
// Later, when you want to stop listening:
window.removeEventListener('onFHMessageReceived', handleMessage);
Méthode 2 : Méthodes de callback du gestionnaire
À l’intérieur du callback init(), utilisez les méthodes intégrées du gestionnaire de chatbot :
window.FHChatbot_YOUR_CHATBOT_ID.init(function(chatbotManager) {
chatbotManager.onSessionCreated(function() {
console.log('Session created');
});
chatbotManager.onWindowOpened(function() {
console.log('Window opened');
});
chatbotManager.onWindowClosed(function() {
console.log('Window closed');
});
chatbotManager.onMessageSent(function(event) {
console.log('User sent:', event.metadata);
});
chatbotManager.onMessageReceived(function(event) {
console.log('Bot replied:', event.metadata);
});
chatbotManager.onFormDataSent(function(event) {
console.log('Form data:', event.metadata);
});
chatbotManager.onFeedback(function(event) {
console.log('Feedback:', event.metadata);
});
chatbotManager.onToolCall(function(event) {
console.log('Tool call:', event.metadata);
});
chatbotManager.onError(function(event) {
console.error('Error:', event.metadata);
});
});
Référence des méthodes du gestionnaire
| Method | Parameters | Description |
|---|---|---|
onSessionCreated(fn) | fn: () => void | Écouter la création de session |
onWindowOpened(fn) | fn: () => void | Écouter l’ouverture de la fenêtre |
onWindowClosed(fn) | fn: () => void | Écouter la fermeture de la fenêtre |
onMessageSent(fn) | fn: (event) => void | Écouter les messages de l’utilisateur |
onMessageReceived(fn) | fn: (event) => void | Écouter les réponses du bot |
onFormDataSent(fn) | fn: (event) => void | Écouter les soumissions de formulaires |
onFeedback(fn) | fn: (event) => void | Écouter les retours de l’utilisateur |
onToolCall(fn) | fn: (event) => void | Écouter les exécutions d’outils |
onError(fn) | fn: (event) => void | Écouter les erreurs |
openChat() | — | Ouvre le panneau de chat |
closeChat() | — | Ferme le panneau de chat |
Activation personnalisée du chat : Masquer le bouton et ouvrir au clic
Pour contrôler entièrement quand le chatbot apparaît, masquez le bouton flottant par défaut et ouvrez le chat par programmation — par exemple, depuis votre propre bouton personnalisé.
Exemple complet
<!-- Your custom chat button -->
<button id="my-chat-button">Chat with us</button>
<!-- FlowHunt integration with hidden default button -->
<script id="fh-chatbot-script-YOUR_CHATBOT_ID">
var currentScript = document.currentScript
|| document.getElementById('fh-chatbot-script-YOUR_CHATBOT_ID');
var script = document.createElement('script');
script.async = true;
script.src = 'https://app.flowhunt.io/api/chatbot/YOUR_CHATBOT_ID'
+ '?workspace_id=YOUR_WORKSPACE_ID&v=2';
script.onload = function() {
window.FHChatbot_YOUR_CHATBOT_ID.setConfig({
showChatButton: false
});
window.FHChatbot_YOUR_CHATBOT_ID.init(function(chatbotManager) {
// Open chat when your custom button is clicked
document.getElementById('my-chat-button')
.addEventListener('click', function() {
chatbotManager.openChat();
});
});
};
if (currentScript && currentScript.parentNode) {
currentScript.parentNode.insertBefore(script, currentScript.nextSibling);
} else {
document.head.appendChild(script);
}
</script>
Afficher un bouton personnalisé uniquement lorsque le chatbot est prêt
Vous pouvez combiner l’activation masquée avec des écouteurs d’événements pour créer des interactions avancées :
<button id="open-chat" style="display:none;">Need help?</button>
<script>
// Show a custom button only when the chatbot is ready
window.addEventListener('onFHChatbotReady', function() {
document.getElementById('open-chat').style.display = 'block';
});
</script>
<!-- FlowHunt integration -->
<script id="fh-chatbot-script-YOUR_CHATBOT_ID">
var currentScript = document.currentScript
|| document.getElementById('fh-chatbot-script-YOUR_CHATBOT_ID');
var script = document.createElement('script');
script.async = true;
script.src = 'https://app.flowhunt.io/api/chatbot/YOUR_CHATBOT_ID'
+ '?workspace_id=YOUR_WORKSPACE_ID&v=2';
script.onload = function() {
window.FHChatbot_YOUR_CHATBOT_ID.setConfig({
showChatButton: false
});
window.FHChatbot_YOUR_CHATBOT_ID.init(function(chatbotManager) {
document.getElementById('open-chat')
.addEventListener('click', function() {
chatbotManager.openChat();
});
});
};
if (currentScript && currentScript.parentNode) {
currentScript.parentNode.insertBefore(script, currentScript.nextSibling);
} else {
document.head.appendChild(script);
}
</script>
Exemple d’intégration complet
Un exemple fonctionnel complet qui démontre les remplacements de configuration, le suivi des événements et l’activation personnalisée du chat ensemble :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>FlowHunt Chatbot Integration</title>
</head>
<body>
<h1>My Website</h1>
<button id="open-chat-btn">Talk to our AI assistant</button>
<button id="close-chat-btn">Close chat</button>
<!-- Subscribe to events before the chatbot loads -->
<script>
document.addEventListener('DOMContentLoaded', function() {
window.addEventListener('onFHChatbotReady', function() {
console.log('Chatbot widget is ready');
});
window.addEventListener('onFHChatbotSessionCreated', function() {
console.log('New chat session started');
});
window.addEventListener('onFHMessageSent', function(event) {
console.log('User message:', event.detail.metadata.content);
});
window.addEventListener('onFHMessageReceived', function(event) {
console.log('Bot response:', event.detail.metadata.message);
});
window.addEventListener('onFHFeedback', function(event) {
var fb = event.detail.metadata;
if (fb.feedback === 'P') {
console.log('Positive feedback on message', fb.message_id);
} else {
console.log('Negative feedback on message', fb.message_id);
}
});
window.addEventListener('onFHError', function(event) {
console.error('Chatbot error:', event.detail.metadata);
});
});
</script>
<!-- FlowHunt integration -->
<script id="fh-chatbot-script-YOUR_CHATBOT_ID">
var currentScript = document.currentScript
|| document.getElementById('fh-chatbot-script-YOUR_CHATBOT_ID');
var script = document.createElement('script');
script.async = true;
script.src = 'https://app.flowhunt.io/api/chatbot/YOUR_CHATBOT_ID'
+ '?workspace_id=YOUR_WORKSPACE_ID&v=2';
script.onload = function() {
window.FHChatbot_YOUR_CHATBOT_ID.setConfig({
showChatButton: false,
headerTitle: 'AI Assistant',
maxWindowWidth: '600px',
flowVariables: {
source: 'website',
page: window.location.pathname
},
urlSuffix: '?utm_source=chatbot'
});
window.FHChatbot_YOUR_CHATBOT_ID.init(function(chatbotManager) {
document.getElementById('open-chat-btn')
.addEventListener('click', function() {
chatbotManager.openChat();
});
document.getElementById('close-chat-btn')
.addEventListener('click', function() {
chatbotManager.closeChat();
});
});
};
if (currentScript && currentScript.parentNode) {
currentScript.parentNode.insertBefore(script, currentScript.nextSibling);
} else {
document.head.appendChild(script);
}
</script>
</body>
</html>

