
HubSpot-Chatbot
Stärken Sie Ihren HubSpot-Chatbot mit FlowHunt. Erhalten Sie bessere Kontrolle über Antworten, Datenquellen und Gesprächsabläufe.

Vollständige Referenz für die FlowHunt JS API v2-Integration. Betten Sie den Chatbot ein, abonnieren Sie alle 11 Events, verwenden Sie Flow-Variablen, lösen Sie den Chat-Hook-Trigger mitten im Gespräch mit sendHook() aus, verfolgen Sie Interaktionen mit URL-Parametern und steuern Sie das Chat-Fenster programmatisch.
Die FlowHunt JS API gibt Ihnen die volle Kontrolle darüber, wie sich Ihr Chatbot in Ihre Website integriert. Mit dem v2-Integrationscode können Sie den Chatbot einbetten, Lebenszyklus- und Interaktions-Events abonnieren, dynamische Daten über Flow-Variablen übergeben, den Chat-Hook-Trigger mitten im Gespräch mit sendHook() auslösen, Interaktionen mit URL-Parametern verfolgen und das Chat-Fenster programmatisch steuern.
Dieser Leitfaden behandelt jeden Aspekt der JS API mit Codebeispielen, die Sie kopieren und an Ihr Projekt anpassen können.
Kopieren Sie das untenstehende Snippet und fügen Sie es in Ihr HTML direkt vor dem schließenden </body>-Tag ein. Ersetzen Sie YOUR_CHATBOT_ID und YOUR_WORKSPACE_ID durch die Werte aus Ihren FlowHunt-Chatbot-Einstellungen.
<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>
Die Chatbot-ID im globalen Variablennamen (window.FHChatbot_YOUR_CHATBOT_ID) verwendet Unterstriche anstelle von Bindestrichen.
setConfig() überschreibenBevor Sie init() aufrufen, können Sie die Standard-Chatbot-Einstellungen mit setConfig() überschreiben:
<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 initialised with custom config
});
};
if (currentScript && currentScript.parentNode) {
currentScript.parentNode.insertBefore(script, currentScript.nextSibling);
} else {
document.head.appendChild(script);
}
</script>
| Option | Type | Beschreibung |
|---|---|---|
headerTitle | string | Benutzerdefinierter Header-Titeltext |
maxWindowWidth | string | Maximale Breite des Chat-Fensters (z. B. "700px") |
maxWindowHeight | string | Maximale Höhe des Chat-Fensters |
inputPlaceholder | string | Platzhaltertext für das Nachrichteneingabefeld |
showChatButton | boolean | Standard-Schwebenden-Chat-Button anzeigen oder ausblenden |
openChatPanel | boolean | Chat-Panel beim Seitenaufruf automatisch öffnen |
flowVariables | object | Schlüssel-Wert-Paare mit benutzerdefinierten Daten, die an den Flow übergeben werden. Werte können beliebige JSON-serialisierbare Typen sein (string, number, boolean, object, array). |
urlSuffix | string | Abfragezeichenfolge, die an alle vom Chatbot generierten URLs angehängt wird |
cookieConsent | boolean | Sitzungspersistenz über Cookies aktivieren |
embedded | string | Eingebetteten Modus aktivieren (kein Schließen-Button) |
theme | string | Designmodus |
flowVariables werden in jede Sitzung zusammengeführt, die der Chatbot erstellt. Sie werden typischerweise als statischer Kontext verwendet (bekannt beim Seitenaufruf): Benutzer-ID, Plan, aktuelle Sprache usw.
window.FHChatbot_YOUR_CHATBOT_ID.setConfig({
flowVariables: {
userId: getCurrentUserId(),
userEmail: getCurrentUserEmail(),
currentPage: window.location.pathname,
plan: 'enterprise',
},
});
Wenn der Benutzer navigiert, nachdem der Chat geöffnet wurde, werden hier übergebene Werte veraltet. Um sie mitten im Gespräch zu aktualisieren, rufen Sie
chatbotManager.sendHook()mitoptions.flowVariablesauf — siehe Host → Flow-Kommunikation mitten im Gespräch unten.
Der Parameter urlSuffix hängt eine Abfragezeichenfolge an jede vom Chatbot generierte URL an. Dies ist nützlich, um chatbot-bezogenen Traffic in Analysetools zu verfolgen:
window.FHChatbot_YOUR_CHATBOT_ID.setConfig({
urlSuffix: '?utm_source=chatbot&utm_medium=widget',
});
Anwendungsfälle:
Im April 2026 als Teil der FlowHunt-Chat-Hook-Funktion hinzugefügt.
In Single-Page-Anwendungen bleibt das Chat-Fenster typischerweise geöffnet, während der Benutzer zwischen Bildschirmen navigiert. Sobald der Chat läuft, werden die über setConfig() übergebenen flowVariables veraltet, und es gibt keine Möglichkeit, den Flow über etwas zu informieren, das auf der Host-Seite passiert ist. Eine einzelne Manager-Methode — sendHook(name, payload, options?) — deckt sowohl die Anwendungsfälle „Trigger auslösen" als auch „nur Kontext aktualisieren" ab:
name und (optional) einen payload, um den Chat-Hook-Trigger des Flows auszulösen. Der Flow-Autor platziert einen einzelnen Chat-Hook-Knoten auf dem Canvas und verzweigt anhand von {ChatHook.hook_name}, um zu entscheiden, was zu tun ist.options.flowVariables, um gleichzeitig Sitzungsvariablen zusammenzuführen — die Werte werden persistiert, bevor der Trigger ausgelöst wird, und bleiben für den Rest der Sitzung verfügbar.options.flowVariables wird trotzdem zusammengeführt, aber kein Trigger läuft und es werden keine Credits berechnet. Das bedeutet, dass Host-Seiten sendHook() optimistisch aufrufen können, ohne zu wissen, ob der Flow-Autor bereits einen Trigger verdrahtet hat.sendHook() ist ein sicherer No-Op, bevor die Sitzung existiert (intern gepuffert und abgearbeitet, sobald die Sitzung erstellt ist) und wirft niemals eine Ausnahme an die Host-Seite — Netzwerkfehler werden nur über console.warn protokolliert.
Server- und clientseitige Grenzen, die für sendHook() gelten. Eine Verletzung führt nicht zu einem Absturz — das Backend gibt HTTP 422 zurück und der Manager protokolliert über console.warn, ohne eine Ausnahme zu werfen.
| Einschränkung | Limit | Wo durchgesetzt | Bei Verletzung |
|---|---|---|---|
sendHook name-Länge | 1–256 Zeichen | Backend (Pydantic) | HTTP 422, Trigger wird nicht ausgelöst |
Anzahl der Schlüssel in options.flowVariables | ≤ 64 | Backend (Pydantic) | HTTP 422, nichts persistiert |
Länge jedes Schlüssels in options.flowVariables | ≤ 128 Zeichen | Backend (Pydantic) | HTTP 422, nichts persistiert |
| Vom Manager gepufferte Aufrufe vor Sitzungsstart | 50 | Widget (im Browser) | Ältester Aufruf in der Warteschlange wird verworfen und ein console.warn wird protokolliert |
Das Pre-Session-Puffer-Limit ist nur auf Seiten relevant, auf denen die Sitzungserstellung dauerhaft fehlschlägt (z. B. ein permanenter Netzwerkfehler). Unter normalen Bedingungen wird die Warteschlange abgearbeitet, sobald onFHChatbotSessionCreated ausgelöst wird.
onFHError sichtbar).hook_name, payload, flow_variables) mit den nachgelagerten Schritten, die ausgelöst werden sollen (Generator, Chat Output, Tool Calls, bedingte Verzweigungen auf hook_name usw.).Der name, den die Host-Seite an sendHook() übergibt, ist ein Label, anhand dessen Ihr Flow verzweigen kann, kein Routing-Schlüssel — das Backend gleicht Namen nicht mit Knoten ab. Stattdessen wird der einzelne Chat-Hook-Trigger des Flows ausgelöst und stellt den Namen als {ChatHook.hook_name} bereit, auf den Sie in Ihrer Flow-Logik verweisen, um zu entscheiden, was zu tun ist.
Beispiel-System-Prompt:
If {ChatHook.hook_name} is "screen_changed", briefly summarise the page at
{ChatHook.payload.url}. If it is "user_action", acknowledge the action and
update memory. Otherwise, continue the conversation normally.
Für komplexeres Routing verbinden Sie einen bedingten Schritt mit {ChatHook.hook_name} und verzweigen Sie in mehrere nachgelagerte Pfade.
chatbotManager.sendHook(name, payload, options?)chatbotManager.sendHook(
name: string,
payload?: Record<string, unknown>,
options?: { flowVariables?: Record<string, unknown> }
): Promise<void>;
Argumente
| Argument | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
name | string | ja | Label, das an den Flow als {ChatHook.hook_name} weitergegeben wird. Der Trigger wird unabhängig vom Wert ausgelöst; Ihre Flow-Logik verzweigt darauf. |
payload | object | nein | JSON-Payload, der dem Trigger als {ChatHook.payload} übergeben wird. Wird gegen das Schema des Knotens validiert, falls aktiviert. Standard {}. |
options.flowVariables | object | nein | Sitzungsvariablen, die zusammengeführt werden, bevor der Trigger ausgelöst wird. Verfügbar für nachgelagerte Schritte und zukünftige Benutzernachrichten. |
Verhalten
onFHChatbotSessionCreated ist sicher; der Aufruf wird gepuffert und abgearbeitet, sobald die Sitzung existiert. Der Puffer ist begrenzt — siehe Eingabelimits oben.sendHook() optimistisch aufrufen können, bevor der Flow-Autor einen Trigger verdrahtet hat. options.flowVariables wird auch in diesem Fall persistiert, sodass derselbe Aufruf als reine Kontext-Aktualisierung dient.onFHError).name und options.flowVariables sind begrenzt — siehe Eingabelimits oben. Verstöße geben HTTP 422 zurück und es wird nichts persistiert.onFHChatbotFlowVariablesUpdate-Event aus, falls options.flowVariables übergeben wurde (siehe Event-Referenz).console.warn protokolliert.Beispiel — proaktiver Vorschlag bei SPA-Navigation
window.FHChatbot_YOUR_CHATBOT_ID.init(function (chatbotManager) {
window.addEventListener('hashchange', function () {
chatbotManager.sendHook('screen_changed', {
url: window.location.href,
screen_name: getScreenName(),
}, {
flowVariables: { current_page_url: window.location.href },
});
});
});
Beispiel — reine Kontext-Aktualisierung (kein Chat-Hook verdrahtet)
Wenn der Flow keinen Chat-Hook-Trigger besitzt, ist der Aufruf ein stiller 200 — dieselbe API kann also flow_variables synchron halten, ohne irgendetwas auszulösen:
window.FHChatbot_YOUR_CHATBOT_ID.init(function (chatbotManager) {
window.addEventListener('hashchange', function () {
chatbotManager.sendHook('navigate', {}, {
flowVariables: {
current_page_url: window.location.href,
screen_name: getScreenName(),
},
});
});
});
{ChatHook.hook_name} und {ChatHook.payload.foo} — Werte, die über sendHook('x', { foo: 1 }) übergeben werden, sind auf dem Ausführungspfad des Chat-Hook-Triggers verfügbar. Nur auf dem Pfad verfügbar, der durch das Auslösen des Hooks gestartet wurde.{flow_variables.foo} — Werte, die über options.flowVariables übergeben werden, werden in den Variablen-Container der Sitzung zusammengeführt, bevor der Trigger ausgelöst wird. Jeder Ausführungspfad (einschließlich normaler durch Chat Input ausgelöster Benutzernachrichten) kann sie lesen.Wenn die nächste Benutzernachricht einen neuen Wert sehen soll, legen Sie ihn in options.flowVariables ab — der payload allein wirkt sich nur auf den Ausführungslauf aus, der von diesem Hook gestartet wurde.
Die FlowHunt JS API löst 11 benutzerdefinierte Events auf dem window-Objekt aus. Alle Events verwenden die CustomEvent
-API mit bubbles: true und composed: true.
onFHChatbotReadyWird ausgelöst, wenn das Chatbot-Widget vollständig gerendert und einsatzbereit ist.
onFHChatbotSessionCreatedWird ausgelöst, wenn eine neue Chat-Sitzung auf dem Server erstellt wird.
event.detail.sessionId — die ID der neu erstellten Sitzung.onFHChatbotWindowOpenedWird ausgelöst, wenn der Benutzer das Chat-Fenster öffnet. Wird im eingebetteten Modus nicht ausgelöst.
onFHChatbotWindowClosedWird ausgelöst, wenn der Benutzer das Chat-Fenster schließt. Wird im eingebetteten Modus nicht ausgelöst.
onFHMessageSentWird ausgelöst, wenn der Benutzer eine Nachricht sendet.
event.detail.metadata = {
content: 'Hello, I need help with...',
createdAt: '2026-02-19T10:30:00.000Z',
};
onFHMessageReceivedWird ausgelöst, wenn der Chatbot eine Antwort empfängt und anzeigt.
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',
},
};
sender ist optional und nur vorhanden, wenn ein menschlicher Agent beteiligt ist.
onFHFormDataSentWird ausgelöst, wenn der Benutzer Formulardaten über den Chatbot übermittelt.
event.detail.metadata = {
objectData: { name: 'John', email: 'john@example.com' },
createdAt: '2026-02-19T10:31:00.000Z',
};
onFHFeedbackWird ausgelöst, wenn ein Benutzer eine Daumen-hoch- oder Daumen-runter-Bewertung zu einer Chatbot-Nachricht abgibt.
event.detail.metadata = {
message_id: 'msg_456',
content: 'Optional feedback text',
feedback: 'P', // 'P' = positive, 'N' = negative
};
onFHToolCallWird ausgelöst, wenn ein Tool oder eine Aktion während der Flow-Verarbeitung ausgeführt wird. Wird nur in den Modi flowAssistant und flowAssistantV3 ausgelöst.
event.detail.metadata = {
metadata: {
flow_id: 'abc123',
message_id: 'msg_789',
message: 'Calling search API...',
},
createdAt: '2026-02-19T10:32:00.000Z',
};
onFHErrorWird ausgelöst, wenn während des Chatbot-Betriebs ein Fehler auftritt.
event.detail.metadata = {
metadata: {
flow_id: 'abc123',
message_id: 'msg_err',
message: 'Flow execution failed',
},
createdAt: '2026-02-19T10:33:00.000Z',
};
onFHChatbotFlowVariablesUpdateIm April 2026 hinzugefügt.
Wird nach einem erfolgreichen Aufruf von chatbotManager.sendHook(...) ausgelöst, der options.flowVariables übergeben hat. Wird nicht für sendHook()-Aufrufe ausgelöst, die flowVariables weglassen.
event.detail = {
variables: {
current_page_url: 'https://example.com/products',
screen_name: 'products',
},
};
Verwenden Sie es, um zusammengeführte Variablen zu beobachten (z. B. um Ihren eigenen hostseitigen Zustand zu synchronisieren, zur Fehlersuche oder um ein UI-Element neu zu rendern, das von denselben Daten abhängt).
Es gibt zwei Möglichkeiten, Chatbot-Events zu abonnieren.
Verwenden Sie window.addEventListener überall auf Ihrer Seite. Dies funktioniert auch, bevor der Chatbot geladen wurde:
<script>
document.addEventListener('DOMContentLoaded', function () {
window.addEventListener('onFHChatbotReady', function () {
console.log('Chatbot is ready');
});
window.addEventListener('onFHChatbotSessionCreated', function (event) {
console.log('Session created:', event.detail.sessionId);
});
window.addEventListener('onFHChatbotWindowOpened', function () {
console.log('Chat window opened');
});
window.addEventListener('onFHChatbotWindowClosed', function () {
console.log('Chat window closed');
});
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);
});
window.addEventListener('onFHFeedback', function (event) {
var fb = event.detail.metadata;
console.log('Feedback on message', fb.message_id, ':', fb.feedback);
});
window.addEventListener('onFHToolCall', function (event) {
console.log('Tool called:', event.detail.metadata);
});
window.addEventListener('onFHError', function (event) {
console.error('Chatbot error:', event.detail.metadata);
});
window.addEventListener('onFHChatbotFlowVariablesUpdate', function (event) {
console.log('Variables merged:', event.detail.variables);
});
});
</script>
Um einen Listener zu entfernen, halten Sie die Handler-Referenz fest:
var handleMessage = function (event) {
console.log(event.detail.metadata);
};
window.addEventListener('onFHMessageReceived', handleMessage);
// Later …
window.removeEventListener('onFHMessageReceived', handleMessage);
Innerhalb des init()-Callbacks verwenden Sie die integrierten Methoden des Chatbot-Managers:
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);
});
});
| Methode | Parameter | Beschreibung |
|---|---|---|
onSessionCreated(fn) | fn: () => void | Auf Sitzungserstellung lauschen |
onWindowOpened(fn) | fn: () => void | Auf Fensteröffnung lauschen |
onWindowClosed(fn) | fn: () => void | Auf Fensterschließung lauschen |
onMessageSent(fn) | fn: (event) => void | Auf Benutzernachrichten lauschen |
onMessageReceived(fn) | fn: (event) => void | Auf Bot-Antworten lauschen |
onFormDataSent(fn) | fn: (event) => void | Auf Formularübermittlungen lauschen |
onFeedback(fn) | fn: (event) => void | Auf Benutzerfeedback lauschen |
onToolCall(fn) | fn: (event) => void | Auf Tool-Ausführungen lauschen |
onError(fn) | fn: (event) => void | Auf Fehler lauschen |
openChat() | — | Öffnet das Chat-Panel |
closeChat() | — | Schließt das Chat-Panel |
sendHook(name, payload?, options?) (neu) | name: string, payload?: object, options?: { flowVariables?: object } | Löst den Chat-Hook-Trigger im laufenden Flow aus (oder führt options.flowVariables still zusammen, wenn kein Trigger verdrahtet ist) |
Um vollständig zu kontrollieren, wann der Chatbot erscheint, blenden Sie den standardmäßigen schwebenden Button aus und öffnen Sie den Chat programmatisch — zum Beispiel über Ihren eigenen benutzerdefinierten Button.
<button id="my-chat-button">Chat with us</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) {
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>
Sie können die versteckte Aktivierung mit Event-Listenern kombinieren, um erweiterte Interaktionen zu erstellen:
<button id="open-chat" style="display:none;">Need help?</button>
<script>
window.addEventListener('onFHChatbotReady', function () {
document.getElementById('open-chat').style.display = 'block';
});
</script>
<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>
Ein vollständiges Arbeitsbeispiel, das Konfigurationsüberschreibungen, Event-Tracking, benutzerdefinierte Chat-Aktivierung und die neue sendHook()-Methode zusammen demonstriert:
<!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 (event) {
console.log('New chat session started:', event.detail.sessionId);
});
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('onFHChatbotFlowVariablesUpdate', function (event) {
console.log('Context updated:', event.detail.variables);
});
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',
current_page_url: window.location.href,
},
urlSuffix: '?utm_source=chatbot',
});
window.FHChatbot_YOUR_CHATBOT_ID.init(function (chatbotManager) {
// Open / close from custom buttons
document.getElementById('open-chat-btn')
.addEventListener('click', function () {
chatbotManager.openChat();
});
document.getElementById('close-chat-btn')
.addEventListener('click', function () {
chatbotManager.closeChat();
});
// Keep the flow's context in sync with SPA navigation and
// optionally fire the Chat Hook trigger (if the flow has one wired).
// If the flow has no Chat Hook, the call is a silent 200 — the
// flow_variables still get merged, so the same line covers both
// "notify the flow" and "just update context".
window.addEventListener('hashchange', function () {
chatbotManager.sendHook('screen_changed', {
url: window.location.href,
}, {
flowVariables: { current_page_url: window.location.href },
});
});
});
};
if (currentScript && currentScript.parentNode) {
currentScript.parentNode.insertBefore(script, currentScript.nextSibling);
} else {
document.head.appendChild(script);
}
</script>
</body>
</html>

Stärken Sie Ihren HubSpot-Chatbot mit FlowHunt. Erhalten Sie bessere Kontrolle über Antworten, Datenquellen und Gesprächsabläufe.

Schritt-für-Schritt-Anleitung zur Integration von FlowHunt mit Shopify, Einrichten eines Shopify-Chatbots aus der Flow-Bibliothek, Veröffentlichen und Einbetten...

Erfahren Sie, ob FlowHunt-Chatbots die Webseiten-URL erkennen können, von der ein Kunde einen Chat startet, warum dies nicht nativ ist, wie Sie Kontextübermittl...
Cookie-Zustimmung
Wir verwenden Cookies, um Ihr Surferlebnis zu verbessern und unseren Datenverkehr zu analysieren. See our privacy policy.