
interactive-mcp
Zintegruj FlowHunt z interactive-mcp, aby umożliwić bezpieczną, interaktywną komunikację w czasie rzeczywistym między dużymi modelami językowymi a użytkownikami...

Kompletna dokumentacja integracji FlowHunt JS API v2. Osadz chatbota, subskrybuj wszystkie 11 zdarzen, uzywaj zmiennych przeplywu, uruchamiaj wyzwalacz Chat Hook w trakcie rozmowy za pomoca sendHook(), sledz interakcje za pomoca parametrow URL i programowo steruj oknem czatu.
FlowHunt JS API daje pelna kontrole nad sposobem integracji chatbota z Twoja strona internetowa. Korzystajac z kodu integracyjnego v2, mozesz osadzic chatbota, subskrybowac zdarzenia cyklu zycia i interakcji, przekazywac dynamiczne dane za pomoca zmiennych przeplywu, uruchamiac wyzwalacz Chat Hook w trakcie rozmowy za pomoca sendHook(), sledzic interakcje za pomoca parametrow URL i programowo sterowac oknem czatu.
Ten przewodnik obejmuje kazdy aspekt JS API z przykladami kodu, ktore mozesz skopiowac i dostosowac do swojego projektu.
Skopiuj i wklej ponizszy fragment do swojego HTML tuz przed zamykajacym tagiem </body>. Zastap YOUR_CHATBOT_ID i YOUR_WORKSPACE_ID wartosciami z ustawien chatbota 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>
Identyfikator chatbota w nazwie zmiennej globalnej (window.FHChatbot_YOUR_CHATBOT_ID) uzywa podkreslnikow zamiast myslnikow.
setConfig()Przed wywolaniem init() mozesz nadpisac domyslne ustawienia chatbota za pomoca 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>
| Opcja | Typ | Opis |
|---|---|---|
headerTitle | string | Niestandardowy tekst naglowka |
maxWindowWidth | string | Maksymalna szerokosc okna czatu (np. "700px") |
maxWindowHeight | string | Maksymalna wysokosc okna czatu |
inputPlaceholder | string | Tekst zastepczy pola wiadomosci |
showChatButton | boolean | Pokaz lub ukryj domyslny plywajacy przycisk czatu |
openChatPanel | boolean | Automatycznie otworz panel czatu przy ladowaniu strony |
flowVariables | object | Pary klucz-wartosc z niestandardowymi danymi przekazywanymi do przeplywu. Wartosci moga byc dowolnym typem mozliwym do serializacji do JSON (string, liczba, boolean, obiekt, tablica). |
urlSuffix | string | Ciag zapytania dolaczany do wszystkich URL-i generowanych przez chatbota |
cookieConsent | boolean | Wlacz trwalosc sesji za pomoca plikow cookie |
embedded | string | Ustaw, aby wlaczyc tryb osadzony (bez przycisku zamykania) |
theme | string | Tryb motywu |
flowVariables sa scalane do kazdej sesji tworzonej przez chatbota. Sa zazwyczaj uzywane jako statyczny kontekst (znany w momencie ladowania strony): identyfikator uzytkownika, plan, biezacy jezyk itp.
window.FHChatbot_YOUR_CHATBOT_ID.setConfig({
flowVariables: {
userId: getCurrentUserId(),
userEmail: getCurrentUserEmail(),
currentPage: window.location.pathname,
plan: 'enterprise',
},
});
Jesli uzytkownik nawiguje po otwarciu czatu, wartosci przekazane tutaj staja sie nieaktualne. Aby zaktualizowac je w trakcie rozmowy, wywolaj
chatbotManager.sendHook()zoptions.flowVariables— patrz Komunikacja host → przeplyw w trakcie rozmowy ponizej.
Parametr urlSuffix dolacza ciag zapytania do kazdego URL-a generowanego przez chatbota. Jest to przydatne do sledzenia ruchu generowanego przez chatbota w narzedziach analitycznych:
window.FHChatbot_YOUR_CHATBOT_ID.setConfig({
urlSuffix: '?utm_source=chatbot&utm_medium=widget',
});
Przypadki uzycia:
Dodane w kwietniu 2026 jako czesc funkcji FlowHunt Chat Hook.
W aplikacjach jednostronicowych (SPA) okno czatu zwykle pozostaje otwarte, gdy uzytkownik nawiguje miedzy ekranami. Po uruchomieniu czatu wartosci flowVariables przekazane przez setConfig() staja sie nieaktualne i nie ma sposobu, aby zasygnalizowac przeplywowi cos, co wydarzylo sie na stronie hosta. Pojedyncza metoda menedzera — sendHook(name, payload, options?) — pokrywa zarowno przypadki “uruchom wyzwalacz”, jak i “po prostu zaktualizuj kontekst”:
name i (opcjonalnie) payload, aby uruchomic wyzwalacz Chat Hook przeplywu. Autor przeplywu umieszcza jeden wezel Chat Hook na kanwie i rozgalezia logike na podstawie {ChatHook.hook_name}, aby zdecydowac, co zrobic.options.flowVariables, aby jednoczesnie scalic zmienne sesji — wartosci sa utrwalane przed uruchomieniem wyzwalacza i pozostaja dostepne dla reszty sesji.options.flowVariables nadal jest scalane, ale zaden wyzwalacz nie dziala i nie sa pobierane zadne kredyty. Oznacza to, ze strony hosta moga wywolywac sendHook() optymistycznie, nie wiedzac, czy autor przeplywu juz podlaczyl wyzwalacz.sendHook() jest bezpiecznym no-op przed istnieniem sesji (wewnetrznie buforowane i wysylane, gdy sesja zostanie utworzona) i nigdy nie rzuca wyjatku do strony hosta — bledy sieci sa logowane wylacznie przez console.warn.
Ograniczenia po stronie serwera i klienta dotyczace sendHook(). Ich naruszenie nie powoduje awarii — backend zwraca HTTP 422, a menedzer loguje przez console.warn bez rzucania wyjatku.
| Ograniczenie | Limit | Gdzie egzekwowane | Przy naruszeniu |
|---|---|---|---|
Dlugosc name w sendHook | 1–256 znakow | Backend (Pydantic) | HTTP 422, wyzwalacz nie uruchamia sie |
Liczba kluczy w options.flowVariables | ≤ 64 | Backend (Pydantic) | HTTP 422, nic nie jest utrwalane |
Dlugosc kazdego klucza w options.flowVariables | ≤ 128 znakow | Backend (Pydantic) | HTTP 422, nic nie jest utrwalane |
| Wywolania przed sesja buforowane przez menedzera | 50 | Widget (w przegladarce) | Najstarsze wywolanie w kolejce jest odrzucane i logowane przez console.warn |
Limit bufora przed sesja ma znaczenie tylko na stronach, gdzie tworzenie sesji nie powodzi sie w nieskonczonosc (np. trwaly blad sieci). W normalnych warunkach kolejka jest oprozniana, gdy tylko uruchomi sie onFHChatbotSessionCreated.
onFHError).hook_name, payload, flow_variables) do dowolnych dalszych krokow, ktore chcesz uruchomic (Generator, Chat Output, Tool Calls, galezie warunkowe na hook_name itd.).name przekazywane przez strone hosta do sendHook() jest etykieta dla Twojego przeplywu, na ktorej rozgaleziasz logike, a nie kluczem routingu — backend nie dopasowuje nazw do wezlow. Zamiast tego pojedynczy wyzwalacz Chat Hook przeplywu uruchamia sie i udostepnia nazwe jako {ChatHook.hook_name}, do ktorej odwolujesz sie w logice swojego przeplywu, aby zdecydowac, co zrobic.
Przykladowy prompt systemowy:
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.
Dla bardziej zlozonego routingu podlacz krok warunkowy do {ChatHook.hook_name} i rozgaleziaj na wiele dalszych sciezek.
chatbotManager.sendHook(name, payload, options?)chatbotManager.sendHook(
name: string,
payload?: Record<string, unknown>,
options?: { flowVariables?: Record<string, unknown> }
): Promise<void>;
Argumenty
| Argument | Typ | Wymagany | Opis |
|---|---|---|---|
name | string | tak | Etykieta przekazywana do przeplywu jako {ChatHook.hook_name}. Wyzwalacz uruchamia sie niezaleznie od wartosci; logika Twojego przeplywu rozgalezia na jej podstawie. |
payload | object | nie | Payload JSON przekazywany do wyzwalacza jako {ChatHook.payload}. Walidowany wzgledem schematu wezla, jesli jest wlaczony. Domyslnie {}. |
options.flowVariables | object | nie | Zmienne sesji do scalenia przed uruchomieniem wyzwalacza. Dostepne dla dalszych krokow i przyszlych wiadomosci uzytkownika. |
Zachowanie
onFHChatbotSessionCreated jest bezpieczne; wywolanie jest buforowane i wysylane, gdy sesja zaczyna istniec. Bufor ma limit — patrz Limity wejsciowe powyzej.sendHook() optymistycznie, zanim autor przeplywu podlaczy wyzwalacz. options.flowVariables jest nadal utrwalane nawet w tym przypadku, wiec to samo wywolanie sluzy jako aktualizacja samego kontekstu.onFHError).name i options.flowVariables sa ograniczone — patrz Limity wejsciowe powyzej. Naruszenia zwracaja HTTP 422 i nic nie jest utrwalane.onFHChatbotFlowVariablesUpdate, jesli dostarczono options.flowVariables (patrz Dokumentacja zdarzen).console.warn.Przyklad — proaktywna sugestia przy nawigacji w SPA
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 },
});
});
});
Przyklad — aktualizacja samego kontekstu (brak podlaczonego Chat Hook)
Jesli przeplyw nie ma wyzwalacza Chat Hook, wywolanie jest cichym 200 — wiec to samo API moze utrzymywac flow_variables w synchronizacji bez uruchamiania czegokolwiek:
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} i {ChatHook.payload.foo} — wartosci przekazane przez sendHook('x', { foo: 1 }) sa udostepniane na sciezce wykonania wyzwalacza Chat Hook. Tylko dostepne na sciezce uruchomionej przez wywolanie hooka.{flow_variables.foo} — wartosci przekazane przez options.flowVariables sa scalane do worka zmiennych sesji przed uruchomieniem wyzwalacza. Kazda sciezka wykonania (wlacznie z normalnymi wiadomosciami uzytkownika uruchamianymi przez Chat Input) moze je odczytywac.Jesli chcesz, aby nastepna wiadomosc uzytkownika widziala nowa wartosc, umiesc ja w options.flowVariables — sam payload wplywa tylko na uruchomienie wykonania zainicjowane przez ten hook.
FlowHunt JS API wysyla 11 niestandardowych zdarzen na obiekcie window. Wszystkie zdarzenia uzywaja API CustomEvent
z ustawieniami bubbles: true i composed: true.
onFHChatbotReadyUruchamiane, gdy widget chatbota zostal w pelni wyrenderowany i jest gotowy do uzycia.
onFHChatbotSessionCreatedUruchamiane, gdy na serwerze tworzona jest nowa sesja czatu.
event.detail.sessionId — identyfikator nowo utworzonej sesji.onFHChatbotWindowOpenedUruchamiane, gdy uzytkownik otwiera okno czatu. Nie uruchamiane w trybie osadzonym.
onFHChatbotWindowClosedUruchamiane, gdy uzytkownik zamyka okno czatu. Nie uruchamiane w trybie osadzonym.
onFHMessageSentUruchamiane, gdy uzytkownik wysyla wiadomosc.
event.detail.metadata = {
content: 'Hello, I need help with...',
createdAt: '2026-02-19T10:30:00.000Z',
};
onFHMessageReceivedUruchamiane, gdy chatbot odbiera i wyswietla odpowiedz.
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 jest opcjonalne i wystepuje tylko wtedy, gdy zaangazowany jest ludzki agent.
onFHFormDataSentUruchamiane, gdy uzytkownik przesyla dane formularza przez chatbota.
event.detail.metadata = {
objectData: { name: 'John', email: 'john@example.com' },
createdAt: '2026-02-19T10:31:00.000Z',
};
onFHFeedbackUruchamiane, gdy uzytkownik daje ocene kciuk w gore / kciuk w dol na wiadomosc chatbota.
event.detail.metadata = {
message_id: 'msg_456',
content: 'Optional feedback text',
feedback: 'P', // 'P' = positive, 'N' = negative
};
onFHToolCallUruchamiane, gdy narzedzie lub akcja jest wykonywana podczas przetwarzania przeplywu. Uruchamiane tylko w trybach flowAssistant i flowAssistantV3.
event.detail.metadata = {
metadata: {
flow_id: 'abc123',
message_id: 'msg_789',
message: 'Calling search API...',
},
createdAt: '2026-02-19T10:32:00.000Z',
};
onFHErrorUruchamiane, gdy podczas dzialania chatbota wystapi blad.
event.detail.metadata = {
metadata: {
flow_id: 'abc123',
message_id: 'msg_err',
message: 'Flow execution failed',
},
createdAt: '2026-02-19T10:33:00.000Z',
};
onFHChatbotFlowVariablesUpdateDodane w kwietniu 2026.
Uruchamiane po udanym wywolaniu chatbotManager.sendHook(...), ktore dostarczylo options.flowVariables. Nie uruchamiane dla wywolan sendHook() pomijajacych flowVariables.
event.detail = {
variables: {
current_page_url: 'https://example.com/products',
screen_name: 'products',
},
};
Uzyj go do obserwacji scalonych zmiennych (np. do synchronizacji wlasnego stanu po stronie hosta, do debugowania lub do ponownego renderowania elementu UI zaleznego od tych samych danych).
Istnieja dwa sposoby subskrybowania zdarzen chatbota.
Uzyj window.addEventListener w dowolnym miejscu swojej strony. Dziala to nawet przed zaladowaniem chatbota:
<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>
Aby usunac nasluchiwacz, zachowaj referencje do funkcji obslugi:
var handleMessage = function (event) {
console.log(event.detail.metadata);
};
window.addEventListener('onFHMessageReceived', handleMessage);
// Later …
window.removeEventListener('onFHMessageReceived', handleMessage);
Wewnatrz callbacku init() uzyj wbudowanych metod menedzera chatbota:
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);
});
});
| Metoda | Parametry | Opis |
|---|---|---|
onSessionCreated(fn) | fn: () => void | Nasluchuj tworzenia sesji |
onWindowOpened(fn) | fn: () => void | Nasluchuj otwierania okna |
onWindowClosed(fn) | fn: () => void | Nasluchuj zamykania okna |
onMessageSent(fn) | fn: (event) => void | Nasluchuj wiadomosci uzytkownika |
onMessageReceived(fn) | fn: (event) => void | Nasluchuj odpowiedzi bota |
onFormDataSent(fn) | fn: (event) => void | Nasluchuj wysylania formularzy |
onFeedback(fn) | fn: (event) => void | Nasluchuj opinii uzytkownikow |
onToolCall(fn) | fn: (event) => void | Nasluchuj wykonan narzedzi |
onError(fn) | fn: (event) => void | Nasluchuj bledow |
openChat() | — | Otwiera panel czatu |
closeChat() | — | Zamyka panel czatu |
sendHook(name, payload?, options?) (nowe) | name: string, payload?: object, options?: { flowVariables?: object } | Uruchamia wyzwalacz Chat Hook w dzialajacym przeplywie (lub po cichu scala options.flowVariables, jesli zaden wyzwalacz nie jest podlaczony) |
Aby w pelni kontrolowac, kiedy chatbot sie pojawia, ukryj domyslny plywajacy przycisk i otworz czat programowo — na przyklad z wlasnego niestandardowego przycisku.
<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>
Mozesz polaczyc ukryta aktywacje z nasluchiwaczami zdarzen, aby tworzyc zaawansowane interakcje:
<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>
Pelny dzialajacy przyklad demonstrujacy nadpisywanie konfiguracji, sledzenie zdarzen, niestandardowa aktywacje czatu i nowa metode sendHook() razem:
<!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>

Zintegruj FlowHunt z interactive-mcp, aby umożliwić bezpieczną, interaktywną komunikację w czasie rzeczywistym między dużymi modelami językowymi a użytkownikami...

Dowiedz się, jak umożliwić chatbotowi FlowHunt odpowiadanie na pytania klientów dotyczące dostępności produktów i statusu dostawy zamówień poprzez integrację z ...

Techniczny przewodnik po zaawansowanej integracji FlowHunt z LiveAgent, obejmujący targetowanie językowe, wyłączanie markdown, filtrowanie spamu, wersjonowanie ...
Zgoda na Pliki Cookie
Używamy plików cookie, aby poprawić jakość przeglądania i analizować nasz ruch. See our privacy policy.