
Hvordan koble FlowHunt-chatboter til sanntids-API-er for lager og levering
Lær hvordan du gjør det mulig for FlowHunt-chatboten din å svare på kundespørsmål om produktets tilgjengelighet og ordrestatus ved å integrere med sanntids-API-...

Komplett referanse for FlowHunt JS API v2-integrasjonen. Bygg inn chatboten, abonner på alle 11 hendelser, bruk flow-variabler, utløs Chat Hook-triggeren midt i samtalen med sendHook(), spor interaksjoner med URL-parametere og styr chatvinduet programmatisk.
FlowHunt JS API gir deg full kontroll over hvordan chatboten din integreres med nettstedet ditt. Ved hjelp av v2-integrasjonskoden kan du bygge inn chatboten, abonnere på livssyklus- og interaksjonshendelser, sende dynamiske data via flow-variabler, utløse Chat Hook-triggeren midt i samtalen med sendHook(), spore interaksjoner med URL-parametere og programmatisk styre chatvinduet.
Denne guiden dekker alle aspekter av JS API med kodeeksempler du kan kopiere og tilpasse til prosjektet ditt.
Kopier og lim inn snippet-en nedenfor i HTML-en din like før den avsluttende </body>-taggen. Erstatt YOUR_CHATBOT_ID og YOUR_WORKSPACE_ID med verdiene fra chatbot-innstillingene dine i FlowHunt.
<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>
Chatbot-ID-en i det globale variabelnavnet (window.FHChatbot_YOUR_CHATBOT_ID) bruker underscores i stedet for bindestreker.
setConfig()Før du kaller init(), kan du overstyre standardinnstillingene for chatboten ved hjelp av 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 initialised with custom config
});
};
if (currentScript && currentScript.parentNode) {
currentScript.parentNode.insertBefore(script, currentScript.nextSibling);
} else {
document.head.appendChild(script);
}
</script>
| Alternativ | Type | Beskrivelse |
|---|---|---|
headerTitle | string | Tilpasset overskriftstekst |
maxWindowWidth | string | Maksimal bredde på chatvinduet (f.eks. "700px") |
maxWindowHeight | string | Maksimal høyde på chatvinduet |
inputPlaceholder | string | Plassholdertekst for meldingsinntastingsfeltet |
showChatButton | boolean | Vis eller skjul den flytende standard chatknappen |
openChatPanel | boolean | Åpne chatpanelet automatisk ved sideinnlasting |
flowVariables | object | Nøkkel-verdi-par med tilpassede data som sendes til flowen. Verdier kan være enhver JSON-serialiserbar type (string, number, boolean, object, array). |
urlSuffix | string | Spørringsstreng som legges til alle chatbot-genererte URL-er |
cookieConsent | boolean | Aktiver sesjonspersistens via informasjonskapsler |
embedded | string | Angi for å aktivere innebygd modus (ingen lukkeknapp) |
theme | string | Temamodus |
flowVariables slås sammen med hver økt chatboten oppretter. De brukes typisk som statisk kontekst (kjent ved sideinnlasting): brukerens ID, abonnement, gjeldende språk osv.
window.FHChatbot_YOUR_CHATBOT_ID.setConfig({
flowVariables: {
userId: getCurrentUserId(),
userEmail: getCurrentUserEmail(),
currentPage: window.location.pathname,
plan: 'enterprise',
},
});
Hvis brukeren navigerer etter at chatten er åpnet, blir verdier sendt her foreldede. For å oppdatere dem midt i samtalen, kall
chatbotManager.sendHook()medoptions.flowVariables— se Vert → flow-kommunikasjon midt i samtalen nedenfor.
Parameteren urlSuffix legger til en spørringsstreng til hver URL generert av chatboten. Dette er nyttig for å spore chatbot-avledet trafikk i analyseverktøy:
window.FHChatbot_YOUR_CHATBOT_ID.setConfig({
urlSuffix: '?utm_source=chatbot&utm_medium=widget',
});
Bruksscenarier:
Lagt til i april 2026 som en del av FlowHunt Chat Hook-funksjonen.
I single-page-applikasjoner forblir chatvinduet vanligvis åpent mens brukeren navigerer mellom skjermbilder. Når chatten er i gang, blir flowVariables sendt via setConfig() foreldede, og det finnes ingen måte å varsle flowen om noe som har skjedd på vertssiden. En enkelt manager-metode — sendHook(name, payload, options?) — dekker både “utløs en trigger” og “bare oppdater kontekst”-bruksscenarier:
name og (valgfritt) en payload for å utløse flowens Chat Hook-trigger. Flow-forfatteren legger inn én Chat Hook-node på lerretet og forgrener på {ChatHook.hook_name} for å avgjøre hva som skal skje.options.flowVariables for å slå sammen øktvariabler samtidig — verdiene lagres før triggeren utløses og forblir tilgjengelige for resten av økten.options.flowVariables slås likevel sammen, men ingen trigger kjøres og ingen kreditter belastes. Dette betyr at vertssider kan kalle sendHook() optimistisk uten å vite om flow-forfatteren har koblet inn en trigger ennå.sendHook() er en trygg no-op før økten finnes (bufres internt og tømmes når økten er opprettet) og kaster aldri unntak til vertssiden — nettverksfeil logges kun via console.warn.
Server- og klientsidegrenser som gjelder for sendHook(). Brudd på dem er ikke en krasj — backend-en returnerer HTTP 422 og manageren logger via console.warn uten å kaste unntak.
| Begrensning | Grense | Hvor håndhevet | Ved brudd |
|---|---|---|---|
Lengde på sendHook name | 1–256 tegn | Backend (Pydantic) | HTTP 422, trigger utløses ikke |
Antall nøkler i options.flowVariables | ≤ 64 | Backend (Pydantic) | HTTP 422, ingenting lagres |
Lengde på hver nøkkel i options.flowVariables | ≤ 128 tegn | Backend (Pydantic) | HTTP 422, ingenting lagres |
| Pre-økt-kall bufret av manageren | 50 | Widget (i nettleseren) | Eldste kall i køen droppes og en console.warn logges |
Grensen for pre-økt-bufferen har kun betydning på sider der øktoppretting feiler permanent (f.eks. en vedvarende nettverksfeil). Under normale forhold tømmes køen så snart onFHChatbotSessionCreated utløses.
onFHError).hook_name, payload, flow_variables) til hvilke som helst nedstrøms steg du vil skal utløses (Generator, Chat Output, Tool Calls, betingede grener på hook_name osv.).name som vertssiden sender til sendHook() er en etikett som flowen din kan forgrene på, ikke en rutingnøkkel — backend-en samsvarer ikke navn med noder. I stedet utløses flowens enkelte Chat Hook-trigger og eksponerer navnet som {ChatHook.hook_name}, som du refererer til i flow-logikken din for å avgjøre hva som skal skje.
Eksempel på systemprompt:
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.
For mer kompleks ruting kan du koble til et betinget steg på {ChatHook.hook_name} og forgrene til flere nedstrøms-stier.
chatbotManager.sendHook(name, payload, options?)chatbotManager.sendHook(
name: string,
payload?: Record<string, unknown>,
options?: { flowVariables?: Record<string, unknown> }
): Promise<void>;
Argumenter
| Argument | Type | Påkrevd | Beskrivelse |
|---|---|---|---|
name | string | ja | Etikett som videresendes til flowen som {ChatHook.hook_name}. Triggeren utløses uavhengig av verdien; flow-logikken din forgrener på den. |
payload | object | nei | JSON-payload som overleveres til triggeren som {ChatHook.payload}. Valideres mot nodens schema hvis aktivert. Standard {}. |
options.flowVariables | object | nei | Øktvariabler som skal slås sammen før triggeren utløses. Tilgjengelig for nedstrøms steg og fremtidige brukermeldinger. |
Atferd
onFHChatbotSessionCreated; kallet bufres og tømmes når økten finnes. Bufferen har en grense — se Inputgrenser ovenfor.sendHook() optimistisk før flow-forfatteren har koblet inn en trigger. options.flowVariables lagres likevel selv i det tilfellet, så det samme kallet fungerer som en kontekst-bare-oppdatering.onFHError).name og options.flowVariables har grenser — se Inputgrenser ovenfor. Brudd returnerer HTTP 422 og ingenting lagres.onFHChatbotFlowVariablesUpdate-hendelse hvis options.flowVariables ble oppgitt (se Hendelsesreferanse).console.warn.Eksempel — proaktivt forslag ved SPA-navigasjon
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 },
});
});
});
Eksempel — kontekst-bare-oppdatering (ingen Chat Hook koblet)
Hvis flowen ikke har en Chat Hook-trigger, er kallet en stille 200 — så det samme API-et kan holde flow_variables synkronisert uten å utløse noe:
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} og {ChatHook.payload.foo} — verdier sendt via sendHook('x', { foo: 1 }) eksponeres på utførelsesstien til Chat Hook-triggeren. Kun tilgjengelig på stien som ble startet av hook-utløsningen.{flow_variables.foo} — verdier sendt via options.flowVariables slås sammen i øktens variabelpose før triggeren utløses. Hver utførelsessti (inkludert vanlige Chat Input–utløste brukermeldinger) kan lese dem.Hvis du vil at den neste brukermeldingen skal se en ny verdi, legg den i options.flowVariables — payload alene påvirker bare utførelseskjøringen som ble startet av den hooken.
FlowHunt JS API sender ut 11 tilpassede hendelser på window-objektet. Alle hendelser bruker CustomEvent
API med bubbles: true og composed: true.
onFHChatbotReadyUtløses når chatbot-widgeten er fullt gjengitt og klar til bruk.
onFHChatbotSessionCreatedUtløses når en ny chatøkt opprettes på serveren.
event.detail.sessionId — ID-en til den nyopprettede økten.onFHChatbotWindowOpenedUtløses når brukeren åpner chatvinduet. Utløses ikke i innebygd modus.
onFHChatbotWindowClosedUtløses når brukeren lukker chatvinduet. Utløses ikke i innebygd modus.
onFHMessageSentUtløses når brukeren sender en melding.
event.detail.metadata = {
content: 'Hello, I need help with...',
createdAt: '2026-02-19T10:30:00.000Z',
};
onFHMessageReceivedUtløses når chatboten mottar og viser et svar.
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 er valgfritt og kun til stede når en menneskelig agent er involvert.
onFHFormDataSentUtløses når brukeren sender inn skjemadata via chatboten.
event.detail.metadata = {
objectData: { name: 'John', email: 'john@example.com' },
createdAt: '2026-02-19T10:31:00.000Z',
};
onFHFeedbackUtløses når en bruker gir tommel opp / tommel ned tilbakemelding på en chatbot-melding.
event.detail.metadata = {
message_id: 'msg_456',
content: 'Optional feedback text',
feedback: 'P', // 'P' = positive, 'N' = negative
};
onFHToolCallUtløses når et verktøy eller en handling utføres under flow-behandling. Utløses kun i flowAssistant- og flowAssistantV3-moduser.
event.detail.metadata = {
metadata: {
flow_id: 'abc123',
message_id: 'msg_789',
message: 'Calling search API...',
},
createdAt: '2026-02-19T10:32:00.000Z',
};
onFHErrorUtløses når det oppstår en feil under chatbot-drift.
event.detail.metadata = {
metadata: {
flow_id: 'abc123',
message_id: 'msg_err',
message: 'Flow execution failed',
},
createdAt: '2026-02-19T10:33:00.000Z',
};
onFHChatbotFlowVariablesUpdateLagt til i april 2026.
Utløses etter et vellykket chatbotManager.sendHook(...)-kall som inneholdt options.flowVariables. Utløses ikke for sendHook()-kall som utelater flowVariables.
event.detail = {
variables: {
current_page_url: 'https://example.com/products',
screen_name: 'products',
},
};
Bruk den til å observere sammenslåtte variabler (f.eks. for å synkronisere din egen tilstand på vertssiden, for feilsøking, eller for å re-rendre et UI-element som er avhengig av samme data).
Det finnes to måter å abonnere på chatbot-hendelser.
Bruk window.addEventListener hvor som helst på siden din. Dette fungerer selv før chatboten er lastet:
<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>
For å fjerne en lytter, hold på handler-referansen:
var handleMessage = function (event) {
console.log(event.detail.metadata);
};
window.addEventListener('onFHMessageReceived', handleMessage);
// Later …
window.removeEventListener('onFHMessageReceived', handleMessage);
Inne i init()-callbacken bruker du chatbot managerens innebygde metoder:
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);
});
});
| Metode | Parametere | Beskrivelse |
|---|---|---|
onSessionCreated(fn) | fn: () => void | Lytt etter øktoppretting |
onWindowOpened(fn) | fn: () => void | Lytt etter åpning av vinduet |
onWindowClosed(fn) | fn: () => void | Lytt etter lukking av vinduet |
onMessageSent(fn) | fn: (event) => void | Lytt etter brukermeldinger |
onMessageReceived(fn) | fn: (event) => void | Lytt etter bot-svar |
onFormDataSent(fn) | fn: (event) => void | Lytt etter skjemainnsendinger |
onFeedback(fn) | fn: (event) => void | Lytt etter brukertilbakemeldinger |
onToolCall(fn) | fn: (event) => void | Lytt etter verktøyutførelser |
onError(fn) | fn: (event) => void | Lytt etter feil |
openChat() | — | Åpner chatpanelet |
closeChat() | — | Lukker chatpanelet |
sendHook(name, payload?, options?) (ny) | name: string, payload?: object, options?: { flowVariables?: object } | Utløs Chat Hook-triggeren i den kjørende flowen (eller slå sammen options.flowVariables stille hvis ingen trigger er koblet til) |
For å ha full kontroll over når chatboten vises, skjul den flytende standardknappen og åpne chatten programmatisk — for eksempel fra din egen tilpassede knapp.
<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>
Du kan kombinere skjult aktivering med event listeners for å skape avanserte interaksjoner:
<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>
Et fullt fungerende eksempel som demonstrerer konfigurasjonsoverstyrelser, hendelsessporing, tilpasset chat-aktivering og den nye sendHook()-metoden sammen:
<!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>

Lær hvordan du gjør det mulig for FlowHunt-chatboten din å svare på kundespørsmål om produktets tilgjengelighet og ordrestatus ved å integrere med sanntids-API-...

En teknisk veiledning for å mestre avansert FlowHunt-integrasjon med LiveAgent, inkludert målretting av språk, undertrykking av markdown, spamfiltrering, API-ve...

Integrer FlowHunt AI-chatbots med Tawk.to for intelligent menneskelig overføring. La AI håndtere rutineforespørsler og overføre brukere sømløst til live-agenter...
Informasjonskapselsamtykke
Vi bruker informasjonskapsler for å forbedre din surfeopplevelse og analysere vår trafikk. See our privacy policy.