JS API Integratie

FlowHunt JavaScript API Chatbot Integration

De FlowHunt JS API geeft u volledige controle over hoe uw chatbot integreert met uw website. Met de v2-integratiecode kunt u de chatbot insluiten, zich abonneren op levenscyclus- en interactie-events, dynamische gegevens doorgeven via flow-variabelen, de Chat Hook trigger midden in een gesprek activeren met sendHook(), interacties bijhouden met URL-parameters en het chatvenster programmatisch besturen.

Deze gids behandelt elk aspect van de JS API met codevoorbeelden die u kunt kopiëren en aanpassen aan uw project.

Integratiecode (v2)

Kopieer en plak het onderstaande fragment in uw HTML vlak voor de afsluitende </body>-tag. Vervang YOUR_CHATBOT_ID en YOUR_WORKSPACE_ID door de waarden uit uw FlowHunt-chatbotinstellingen.

<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>

Het chatbot-ID in de globale variabelenaam (window.FHChatbot_YOUR_CHATBOT_ID) gebruikt underscores in plaats van koppeltekens.

Configuratie Overschrijven met setConfig()

Voordat u init() aanroept, kunt u de standaard chatbot-instellingen overschrijven met 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>

Beschikbare Configuratieopties

OptieTypeBeschrijving
headerTitlestringAangepaste koptekst
maxWindowWidthstringMaximale breedte van het chatvenster (bijv. "700px")
maxWindowHeightstringMaximale hoogte van het chatvenster
inputPlaceholderstringPlaatsaanduidingstekst voor het berichtinvoerveld
showChatButtonbooleanDe standaard zwevende chatknop tonen of verbergen
openChatPanelbooleanHet chatpaneel automatisch openen bij het laden van de pagina
flowVariablesobjectSleutel-waardeparen van aangepaste gegevens die aan de flow worden doorgegeven. Waarden mogen elk JSON-serialiseerbaar type zijn (string, number, boolean, object, array).
urlSuffixstringQuerystring die wordt toegevoegd aan alle door de chatbot gegenereerde URL’s
cookieConsentbooleanSessiepersistentie via cookies inschakelen
embeddedstringInstellen om de ingesloten modus in te schakelen (geen sluitknop)
themestringThemamodus

Flow-variabelen: Dynamische Gegevens Doorgeven

flowVariables worden samengevoegd in elke sessie die de chatbot aanmaakt. Ze worden doorgaans gebruikt als statische context (bekend bij het laden van de pagina): de gebruikers-ID, het abonnement, de huidige locale, enz.

window.FHChatbot_YOUR_CHATBOT_ID.setConfig({
  flowVariables: {
    userId: getCurrentUserId(),
    userEmail: getCurrentUserEmail(),
    currentPage: window.location.pathname,
    plan: 'enterprise',
  },
});

Als de gebruiker navigeert nadat de chat is geopend, worden de hier doorgegeven waarden verouderd. Om ze midden in een gesprek bij te werken, roept u chatbotManager.sendHook() aan met options.flowVariables — zie Communicatie van host → flow midden in gesprek hieronder.

URL Suffix: Chatbot-interacties Bijhouden

De parameter urlSuffix voegt een querystring toe aan elke URL die door de chatbot wordt gegenereerd. Dit is handig om chatbot-afkomstig verkeer bij te houden in analysetools:

window.FHChatbot_YOUR_CHATBOT_ID.setConfig({
  urlSuffix: '?utm_source=chatbot&utm_medium=widget',
});

Gebruiksscenario’s:

  • Conversies bijhouden van chatbot-interacties in Google Analytics.
  • Gebruikersgedrag analyseren na interactie met de chatbot.
  • Campagnes toewijzen die chatbot-betrokkenheid stimuleren.

Logo

Klaar om uw bedrijf te laten groeien?

Start vandaag uw gratis proefperiode en zie binnen enkele dagen resultaten.

Communicatie van host → flow midden in gesprek

Toegevoegd in april 2026 als onderdeel van de FlowHunt Chat Hook-functie.

In single-page applicaties blijft het chatvenster doorgaans open terwijl de gebruiker tussen schermen navigeert. Zodra de chat actief is, worden flowVariables die via setConfig() zijn doorgegeven verouderd, en is er geen manier om de flow op de hoogte te stellen van iets dat is gebeurd op de hostpagina. Eén enkele manager-methode — sendHook(name, payload, options?) — dekt zowel de “trigger activeren”- als de “alleen context bijwerken”-gebruiksscenario’s:

  • Geef een name en (optioneel) een payload door om de Chat Hook-trigger van de flow te activeren. De flow-auteur plaatst één Chat Hook-node op het canvas en vertakt op {ChatHook.hook_name} om te beslissen wat te doen.
  • Geef options.flowVariables door om sessievariabelen tegelijkertijd samen te voegen — de waarden worden bewaard voordat de trigger wordt geactiveerd en blijven beschikbaar voor de rest van de sessie.
  • Als de flow geen Chat Hook-trigger heeft, is de aanroep een stille 200 no-op: options.flowVariables wordt nog steeds samengevoegd, maar er wordt geen trigger uitgevoerd en er worden geen credits in rekening gebracht. Dit betekent dat hostpagina’s sendHook() optimistisch kunnen aanroepen zonder te weten of de flow-auteur al een trigger heeft aangesloten.

sendHook() is een veilige no-op voordat de sessie bestaat (intern gebufferd en doorgestuurd zodra de sessie is aangemaakt) en gooit nooit een fout naar de hostpagina — netwerkfouten worden alleen gelogd via console.warn.

Invoerlimieten

Server- en clientzijdige grenzen die van toepassing zijn op sendHook(). Het overtreden ervan is geen crash — de backend retourneert HTTP 422 en de manager logt via console.warn zonder een fout te gooien.

BeperkingLimietWaar afgedwongenBij overtreding
Lengte van sendHook name1–256 tekensBackend (Pydantic)HTTP 422, trigger wordt niet geactiveerd
Aantal sleutels in options.flowVariables≤ 64Backend (Pydantic)HTTP 422, niets wordt bewaard
Lengte van elke sleutel in options.flowVariables≤ 128 tekensBackend (Pydantic)HTTP 422, niets wordt bewaard
Pre-sessie aanroepen gebufferd door de manager50Widget (in browser)Oudste wachtende aanroep wordt verwijderd en een console.warn wordt gelogd

De pre-sessie buffer-limiet is alleen relevant op pagina’s waar het aanmaken van een sessie voor onbepaalde tijd mislukt (bijv. een permanente netwerkfout). Onder normale omstandigheden wordt de wachtrij doorgestuurd zodra onFHChatbotSessionCreated wordt geactiveerd.

1. Een Chat Hook-trigger toevoegen (kant van de flow-auteur)

  1. Open de flow die bij uw chatbot hoort in de FlowHunt-editor.
  2. Sleep een Chat Hook-trigger-node naar het canvas. De editor handhaaft één enkele trigger per flow — meerdere zijn niet toegestaan.
  3. (Optioneel) Schakel Validate Payload Schema in en definieer een JSON Schema waaraan de inkomende payload moet voldoen. Validatie wordt binnen de stap uitgevoerd — een mismatch verschijnt als een flow-fout-event (het endpoint retourneert nog steeds 200; de fout is zichtbaar via onFHError).
  4. Verbind de outputs van de trigger (hook_name, payload, flow_variables) met de downstream-stappen die u wilt activeren (Generator, Chat Output, Tool Calls, conditionele vertakkingen op hook_name, enz.).
  5. Publiceer de flow.

2. Vertakken op verschillende hook-namen binnen de flow

De name die de hostpagina doorgeeft aan sendHook() is een label voor uw flow om op te vertakken, geen routeringssleutel — de backend vergelijkt namen niet met nodes. In plaats daarvan wordt de enkele Chat Hook-trigger van de flow geactiveerd en stelt de naam beschikbaar als {ChatHook.hook_name}, waarnaar u in uw flow-logica verwijst om te beslissen wat te doen.

Voorbeeld systeemprompt:

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.

Voor complexere routering kunt u een conditionele stap aansluiten op {ChatHook.hook_name} en vertakken naar meerdere downstream-paden.

3. chatbotManager.sendHook(name, payload, options?)

chatbotManager.sendHook(
  name: string,
  payload?: Record<string, unknown>,
  options?: { flowVariables?: Record<string, unknown> }
): Promise<void>;

Argumenten

ArgumentTypeVereistBeschrijving
namestringjaLabel dat aan de flow wordt doorgegeven als {ChatHook.hook_name}. De trigger wordt ongeacht de waarde geactiveerd; uw flow-logica vertakt erop.
payloadobjectneeJSON-payload die aan de trigger wordt overhandigd als {ChatHook.payload}. Wordt gevalideerd tegen het schema van de node indien ingeschakeld. Standaard {}.
options.flowVariablesobjectneeSessievariabelen die voor het activeren van de trigger worden samengevoegd. Beschikbaar voor downstream-stappen en toekomstige gebruikersberichten.

Gedrag

  • Aanroepen vóór onFHChatbotSessionCreated is veilig; de aanroep wordt gebufferd en doorgestuurd zodra de sessie bestaat. De buffer is begrensd — zie Invoerlimieten hierboven.
  • Als de flow geen Chat Hook-trigger heeft, is het verzoek een stille 200 no-op — zodat hostpagina’s sendHook() optimistisch kunnen aanroepen voordat de flow-auteur een trigger heeft aangesloten. options.flowVariables wordt zelfs in dat geval bewaard, dus dezelfde aanroep dient als een alleen-context-update.
  • Als de Chat Hook-trigger schemavalidatie heeft ingeschakeld en de payload deze niet doorstaat, wordt de validatie binnen de stap uitgevoerd — het endpoint retourneert 200 maar de flow zendt een stap-fout-event uit (waarneembaar via onFHError).
  • name en options.flowVariables zijn begrensd — zie Invoerlimieten hierboven. Overtredingen retourneren HTTP 422 en niets wordt bewaard.
  • Succesvolle aanroepen zenden een onFHChatbotFlowVariablesUpdate-event uit als options.flowVariables is meegegeven (zie Event-referentie).
  • Gooit nooit een fout. Netwerkstoringen en niet-2xx-antwoorden worden gelogd via console.warn.

Voorbeeld — proactieve suggestie bij SPA-navigatie

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 },
    });
  });
});

Voorbeeld — alleen-context-update (geen Chat Hook aangesloten)

Als de flow geen Chat Hook-trigger heeft, is de aanroep een stille 200 — dus dezelfde API kan flow_variables synchroon houden zonder iets te activeren:

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(),
      },
    });
  });
});

4. Hoe de flow-auteur deze waarden gebruikt

  • {ChatHook.hook_name} en {ChatHook.payload.foo} — waarden die zijn doorgegeven via sendHook('x', { foo: 1 }) worden weergegeven op het uitvoeringspad van de Chat Hook-trigger. Alleen beschikbaar op het pad dat door de hook-activering is gestart.
  • {flow_variables.foo} — waarden die zijn doorgegeven via options.flowVariables worden samengevoegd in de variabelenset van de sessie voordat de trigger wordt geactiveerd. Elk uitvoeringspad (inclusief normale Chat Input-getriggerde gebruikersberichten) kan ze lezen.

Als u wilt dat het volgende gebruikersbericht een nieuwe waarde ziet, plaats deze dan in options.flowVariables — alleen de payload heeft alleen invloed op de uitvoeringsrun die door die hook is gestart.


Event-referentie

De FlowHunt JS API verzendt 11 aangepaste events op het window-object. Alle events gebruiken de CustomEvent API met bubbles: true en composed: true.

onFHChatbotReady

Wordt geactiveerd wanneer de chatbot-widget volledig is weergegeven en klaar is voor gebruik.

  • Event-gegevens: geen.
  • Wanneer: nadat het widget-DOM is gemount en de chatknop zichtbaar is.

onFHChatbotSessionCreated

Wordt geactiveerd wanneer een nieuwe chatsessie op de server wordt aangemaakt.

  • Event-gegevens: event.detail.sessionId — het ID van de zojuist aangemaakte sessie.
  • Wanneer: na een succesvolle API-aanroep voor het aanmaken van een sessie.

onFHChatbotWindowOpened

Wordt geactiveerd wanneer de gebruiker het chatvenster opent. Wordt niet geactiveerd in de ingesloten modus.

onFHChatbotWindowClosed

Wordt geactiveerd wanneer de gebruiker het chatvenster sluit. Wordt niet geactiveerd in de ingesloten modus.

onFHMessageSent

Wordt geactiveerd wanneer de gebruiker een bericht verzendt.

event.detail.metadata = {
  content: 'Hello, I need help with...',
  createdAt: '2026-02-19T10:30:00.000Z',
};

onFHMessageReceived

Wordt geactiveerd wanneer de chatbot een antwoord ontvangt en weergeeft.

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 is optioneel en alleen aanwezig wanneer een menselijke agent betrokken is.

onFHFormDataSent

Wordt geactiveerd wanneer de gebruiker formuliergegevens indient via de chatbot.

event.detail.metadata = {
  objectData: { name: 'John', email: 'john@example.com' },
  createdAt: '2026-02-19T10:31:00.000Z',
};

onFHFeedback

Wordt geactiveerd wanneer een gebruiker duim-omhoog of duim-omlaag feedback geeft op een chatbot-bericht.

event.detail.metadata = {
  message_id: 'msg_456',
  content: 'Optional feedback text',
  feedback: 'P', // 'P' = positive, 'N' = negative
};

onFHToolCall

Wordt geactiveerd wanneer een tool of actie wordt uitgevoerd tijdens de verwerking van de flow. Wordt alleen geactiveerd in de modi flowAssistant en flowAssistantV3.

event.detail.metadata = {
  metadata: {
    flow_id: 'abc123',
    message_id: 'msg_789',
    message: 'Calling search API...',
  },
  createdAt: '2026-02-19T10:32:00.000Z',
};

onFHError

Wordt geactiveerd wanneer er een fout optreedt tijdens de werking van de chatbot.

event.detail.metadata = {
  metadata: {
    flow_id: 'abc123',
    message_id: 'msg_err',
    message: 'Flow execution failed',
  },
  createdAt: '2026-02-19T10:33:00.000Z',
};

onFHChatbotFlowVariablesUpdate

Toegevoegd in april 2026.

Wordt geactiveerd na een succesvolle chatbotManager.sendHook(...)-aanroep waarbij options.flowVariables werd meegegeven. Wordt niet geactiveerd voor sendHook()-aanroepen die flowVariables weglaten.

event.detail = {
  variables: {
    current_page_url: 'https://example.com/products',
    screen_name: 'products',
  },
};

Gebruik het om samengevoegde variabelen te observeren (bijv. om uw eigen host-side state te synchroniseren, voor debugging, of om een UI-element opnieuw te renderen dat afhankelijk is van dezelfde gegevens).


Abonneren op Events

Er zijn twee manieren om u te abonneren op chatbot-events.

Methode 1: Window Event Listeners

Gebruik window.addEventListener overal op uw pagina. Dit werkt zelfs voordat de chatbot is geladen:

<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>

Om een listener te verwijderen, houdt u de handler-referentie vast:

var handleMessage = function (event) {
  console.log(event.detail.metadata);
};
window.addEventListener('onFHMessageReceived', handleMessage);
// Later …
window.removeEventListener('onFHMessageReceived', handleMessage);

Methode 2: Manager Callback-methoden

Binnen de init()-callback gebruikt u de ingebouwde methoden van de chatbot manager:

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);
  });
});

Referentie Manager-methoden

MethodeParametersBeschrijving
onSessionCreated(fn)fn: () => voidLuisteren naar sessie-aanmaak
onWindowOpened(fn)fn: () => voidLuisteren naar het openen van het venster
onWindowClosed(fn)fn: () => voidLuisteren naar het sluiten van het venster
onMessageSent(fn)fn: (event) => voidLuisteren naar gebruikersberichten
onMessageReceived(fn)fn: (event) => voidLuisteren naar bot-antwoorden
onFormDataSent(fn)fn: (event) => voidLuisteren naar formulierinzendingen
onFeedback(fn)fn: (event) => voidLuisteren naar gebruikersfeedback
onToolCall(fn)fn: (event) => voidLuisteren naar tool-uitvoeringen
onError(fn)fn: (event) => voidLuisteren naar fouten
openChat()Het chatpaneel openen
closeChat()Het chatpaneel sluiten
sendHook(name, payload?, options?) (nieuw)name: string, payload?: object, options?: { flowVariables?: object }De Chat Hook-trigger in de actieve flow activeren (of options.flowVariables stilletjes samenvoegen als geen trigger is aangesloten)

Aangepaste Chat-activering: Knop Verbergen en Openen bij Klik

Om volledig te bepalen wanneer de chatbot verschijnt, verbergt u de standaard zwevende knop en opent u de chat programmatisch — bijvoorbeeld via uw eigen aangepaste knop.

<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>

Een Aangepaste Knop Alleen Tonen Wanneer de Chatbot Gereed Is

U kunt verborgen activering combineren met event listeners om geavanceerde interacties te creëren:

<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>

Volledig Integratievoorbeeld

Een volledig werkend voorbeeld dat configuratie-overschrijvingen, event-tracking, aangepaste chat-activering en de nieuwe sendHook()-methode samen demonstreert:

<!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>

Veelgestelde vragen

Meer informatie

interactive-mcp
interactive-mcp

interactive-mcp

Integreer FlowHunt met interactive-mcp om veilige, realtime communicatie mogelijk te maken tussen grote taalmodellen en gebruikers op lokale machines. Leg gebru...

4 min lezen
AI interactive-mcp +7
Tawk
Tawk

Tawk

Integreer FlowHunt AI-chatbots met Tawk.to voor intelligente overdracht naar mensen. Laat AI routinevragen afhandelen en draag gebruikers naadloos over naar liv...

5 min lezen
AI Tawk +4
FlowHunt 2.6.12: Slack-integratie, Intentieclassificatie en meer
FlowHunt 2.6.12: Slack-integratie, Intentieclassificatie en meer

FlowHunt 2.6.12: Slack-integratie, Intentieclassificatie en meer

FlowHunt 2.6.12 introduceert de Slack-integratie, intentieclassificatie en het Gemini-model, waarmee de functionaliteit van AI-chatbots, klantinzichten en teamw...

3 min lezen
FlowHunt AI Chatbot +5