JS API-integration

FlowHunt JavaScript API Chatbot Integration

FlowHunt JS API giver dig fuld kontrol over, hvordan din chatbot integreres med din hjemmeside. Ved hjælp af v2-integrationskoden kan du integrere chatbotten, abonnere på livscyklus- og interaktionsevents, sende dynamiske data via flow-variabler, udløse Chat Hook-triggeren midt i en samtale med sendHook(), spore interaktioner med URL-parametre og programmatisk styre chatvinduet.

Denne vejledning dækker alle aspekter af JS API med kodeeksempler, du kan kopiere og tilpasse til dit projekt.

Integrationskode (v2)

Kopiér og indsæt nedenstående snippet i din HTML lige før den afsluttende </body>-tag. Erstat YOUR_CHATBOT_ID og YOUR_WORKSPACE_ID med værdierne fra dine FlowHunt-chatbotindstillinger.

<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’et i det globale variabelnavn (window.FHChatbot_YOUR_CHATBOT_ID) bruger underscores i stedet for bindestreger.

Tilsidesæt konfiguration med setConfig()

Før du kalder init(), kan du tilsidesætte standardindstillingerne for chatbotten ved hjælp af 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>

Tilgængelige konfigurationsindstillinger

OptionTypeBeskrivelse
headerTitlestringBrugerdefineret overskriftstekst
maxWindowWidthstringMaksimal bredde på chatvinduet (f.eks. "700px")
maxWindowHeightstringMaksimal højde på chatvinduet
inputPlaceholderstringPladsholdertekst til beskedindtastningsfeltet
showChatButtonbooleanVis eller skjul den flydende standardchatknap
openChatPanelbooleanÅbn chatpanelet automatisk ved sideindlæsning
flowVariablesobjectNøgle-værdi-par med brugerdefinerede data, der sendes til flowet. Værdier kan være enhver JSON-serialiserbar type (string, tal, boolean, object, array).
urlSuffixstringForespørgselsstreng tilføjet til alle chatbot-genererede URL’er
cookieConsentbooleanAktivér sessionspersistens via cookies
embeddedstringIndstil for at aktivere indlejret tilstand (ingen lukkeknap)
themestringTematilstand

Flow-variabler: Send dynamiske data

flowVariables flettes ind i hver session, chatbotten opretter. De bruges typisk som statisk kontekst (kendt ved sideindlæsning): brugerens ID, plan, aktuelle sprog osv.

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

Hvis brugeren navigerer, efter chatten er åbnet, bliver værdier sendt her forældede. For at opdatere dem midt i en samtale skal du kalde chatbotManager.sendHook() med options.flowVariables — se Kommunikation fra host til flow midt i samtalen nedenfor.

URL-suffix: Spor chatbot-interaktioner

Parameteren urlSuffix tilføjer en forespørgselsstreng til hver URL genereret af chatbotten. Dette er nyttigt til at spore chatbot-afledt trafik i analyseværktøjer:

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

Anvendelsesscenarier:

  • Spor konverteringer fra chatbot-interaktioner i Google Analytics.
  • Analysér brugeradfærd efter interaktion med chatbotten.
  • Tilskriv kampagner, der driver chatbot-engagement.

Logo

Klar til at vokse din virksomhed?

Start din gratis prøveperiode i dag og se resultater inden for få dage.

Kommunikation fra host til flow midt i samtalen

Tilføjet i april 2026 som en del af FlowHunt Chat Hook-funktionen.

I single-page-applikationer forbliver chatvinduet typisk åbent, mens brugeren navigerer mellem skærme. Når chatten først kører, bliver flowVariables sendt via setConfig() forældede, og der er ingen måde at give flowet et hint om noget, der er sket på host-siden. En enkelt manager-metode — sendHook(name, payload, options?) — dækker både “udløs en trigger”- og “opdatér blot konteksten”-scenarier:

  • Send et name og (valgfrit) en payload for at udløse flowets Chat Hook-trigger. Flow-forfatteren placerer én Chat Hook-node på canvas og forgrener på {ChatHook.hook_name} for at beslutte, hvad der skal gøres.
  • Send options.flowVariables for at flette session-variabler ind på samme tid — værdierne bevares, før triggeren udløses, og forbliver tilgængelige for resten af sessionen.
  • Hvis flowet ikke har en Chat Hook-trigger, er kaldet en lydløs 200 no-op: options.flowVariables flettes stadig ind, men ingen trigger kører, og ingen credits trækkes. Det betyder, at host-sider kan kalde sendHook() optimistisk uden at vide, om flow-forfatteren allerede har forbundet en trigger.

sendHook() er en sikker no-op, før sessionen findes (bufret internt og frigivet, når sessionen er oprettet) og kaster aldrig til host-siden — netværksfejl logges kun via console.warn.

Inputgrænser

Server- og klientsidegrænser, der gælder for sendHook(). Overtrædelse er ikke et nedbrud — backend returnerer HTTP 422, og manageren logger via console.warn uden at kaste.

BegrænsningGrænseHvor håndhævetVed overtrædelse
sendHook name-længde1–256 tegnBackend (Pydantic)HTTP 422, trigger udløses ikke
Antal nøgler i options.flowVariables≤ 64Backend (Pydantic)HTTP 422, intet bevares
Længde af hver nøgle i options.flowVariables≤ 128 tegnBackend (Pydantic)HTTP 422, intet bevares
Pre-session-kald bufret af manageren50Widget (i browseren)Ældste kø-kald droppes, og en console.warn logges

Pre-session-bufferens loft har kun betydning på sider, hvor sessionsoprettelse mislykkes på ubestemt tid (f.eks. en permanent netværksfejl). Under normale forhold tømmes køen, så snart onFHChatbotSessionCreated udløses.

1. Tilføj en Chat Hook-trigger (på flow-forfatterens side)

  1. Åbn det flow, der er knyttet til din chatbot, i FlowHunt-editoren.
  2. Træk en Chat Hook-trigger-node ind på canvas. Editoren håndhæver en enkelt trigger pr. flow — flere er ikke tilladt.
  3. (Valgfrit) Aktivér Validate Payload Schema, og definér et JSON Schema, som den indkommende payload skal matche. Validering kører inde i trinnet — et mismatch fremkommer som en flow-fejlbegivenhed (endpointet returnerer stadig 200; fejlen er synlig via onFHError).
  4. Forbind triggerens outputs (hook_name, payload, flow_variables) til de downstream-trin, du vil udløse (Generator, Chat Output, Tool Calls, betingede grene på hook_name osv.).
  5. Publicér flowet.

2. Forgrening på forskellige hook-navne inde i flowet

Det name, host-siden sender til sendHook(), er en etiket, dit flow kan forgrene på, ikke en routing-nøgle — backend matcher ikke navne mod noder. I stedet udløses flowets enkelte Chat Hook-trigger og eksponerer navnet som {ChatHook.hook_name}, som du refererer i din flow-logik for at beslutte, hvad der skal gøres.

Eksempel på 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.

For mere kompleks routing kan du forbinde et betinget trin til {ChatHook.hook_name} og forgrene til flere downstream-stier.

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

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

Argumenter

ArgumentTypePåkrævetBeskrivelse
namestringjaEtiket videresendt til flowet som {ChatHook.hook_name}. Triggeren udløses uanset værdien; din flow-logik forgrener på den.
payloadobjectnejJSON-payload givet til triggeren som {ChatHook.payload}. Valideret mod nodens schema, hvis aktiveret. Standard {}.
options.flowVariablesobjectnejSession-variabler, der flettes før triggeren udløses. Tilgængelige for downstream-trin og fremtidige brugerbeskeder.

Adfærd

  • Det er sikkert at kalde før onFHChatbotSessionCreated; kaldet bufres og frigives, når sessionen findes. Bufferen har en grænse — se Inputgrænser ovenfor.
  • Hvis flowet ikke har en Chat Hook-trigger, er forespørgslen en lydløs 200 no-op — så host-sider kan kalde sendHook() optimistisk, før flow-forfatteren forbinder en trigger. options.flowVariables bevares stadig i dette tilfælde, så det samme kald fungerer som en kontekstopdatering alene.
  • Hvis Chat Hook-triggeren har schema-validering aktiveret, og payload’en fejler den, kører valideringen inde i trinnet — endpointet returnerer 200, men flowet udsender en trin-fejlbegivenhed (kan observeres via onFHError).
  • name og options.flowVariables har grænser — se Inputgrænser ovenfor. Overtrædelser returnerer HTTP 422, og intet bevares.
  • Vellykkede kald udsender en onFHChatbotFlowVariablesUpdate-event, hvis options.flowVariables blev leveret (se Event-reference).
  • Kaster aldrig. Netværksfejl og non-2xx-svar logges via console.warn.

Eksempel — proaktivt forslag ved 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 },
    });
  });
});

Eksempel — kontekstopdatering alene (ingen Chat Hook forbundet)

Hvis flowet ikke har en Chat Hook-trigger, er kaldet en lydløs 200 — så det samme API kan holde flow_variables synkroniseret uden at udløse noget:

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. Hvordan flow-forfatteren forbruger disse værdier

  • {ChatHook.hook_name} og {ChatHook.payload.foo} — værdier sendt via sendHook('x', { foo: 1 }) eksponeres på Chat Hook-triggerens udførelsessti. Kun tilgængelige på den sti, der startes af hook-udløsningen.
  • {flow_variables.foo} — værdier sendt via options.flowVariables flettes ind i sessionens variabel-bag, før triggeren udløses. Hver udførelsessti (inklusive normale Chat Input-udløste brugerbeskeder) kan læse dem.

Hvis du vil have, at den næste brugerbesked ser en ny værdi, skal du lægge den i options.flowVariablespayload alene påvirker kun udførelseskørslen, der startes af det hook.


Event-reference

FlowHunt JS API afsender 11 brugerdefinerede events på window-objektet. Alle events bruger CustomEvent API med bubbles: true og composed: true.

onFHChatbotReady

Udløses, når chatbot-widgetten er fuldt renderet og klar til brug.

  • Event-data: ingen.
  • Hvornår: efter widget-DOM’en er monteret, og chatknappen er synlig.

onFHChatbotSessionCreated

Udløses, når en ny chatsession oprettes på serveren.

  • Event-data: event.detail.sessionId — den nyoprettede sessions ID.
  • Hvornår: efter et vellykket API-kald til sessionsoprettelse.

onFHChatbotWindowOpened

Udløses, når brugeren åbner chatvinduet. Udløses ikke i indlejret tilstand.

onFHChatbotWindowClosed

Udløses, når brugeren lukker chatvinduet. Udløses ikke i indlejret tilstand.

onFHMessageSent

Udløses, når brugeren sender en besked.

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

onFHMessageReceived

Udløses, når chatbotten modtager 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 valgfrit og kun til stede, når en menneskelig agent er involveret.

onFHFormDataSent

Udløses, når brugeren indsender formulardata via chatbotten.

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

onFHFeedback

Udløses, når en bruger giver tommelfinger op / tommelfinger ned-feedback på en chatbot-besked.

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

onFHToolCall

Udløses, når et værktøj eller en handling udføres under flow-behandling. Udløses kun i flowAssistant- og flowAssistantV3-tilstande.

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

onFHError

Udløses, når der opstår en fejl 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',
};

onFHChatbotFlowVariablesUpdate

Tilføjet i april 2026.

Udløses efter et vellykket chatbotManager.sendHook(...)-kald, der leverede options.flowVariables. Udløses ikke for sendHook()-kald, der udelader flowVariables.

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

Brug det til at observere flettede variabler (f.eks. til at synkronisere din egen host-side-tilstand, til debugging eller til at gen-rendere et UI-element, der afhænger af de samme data).


Abonnér på events

Der er to måder at abonnere på chatbot-events.

Metode 1: Window Event Listeners

Brug window.addEventListener hvor som helst på din side. Dette virker selv før chatbotten er indlæst:

<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 at fjerne en lytter skal du holde fast i handler-referencen:

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

Metode 2: Manager Callback-metoder

Inden i init()-callbacken bruger du chatbot managerens indbyggede 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);
  });
});

Reference for manager-metoder

MetodeParametreBeskrivelse
onSessionCreated(fn)fn: () => voidLyt efter sessionsoprettelse
onWindowOpened(fn)fn: () => voidLyt efter åbning af vinduet
onWindowClosed(fn)fn: () => voidLyt efter lukning af vinduet
onMessageSent(fn)fn: (event) => voidLyt efter brugerbeskeder
onMessageReceived(fn)fn: (event) => voidLyt efter bot-svar
onFormDataSent(fn)fn: (event) => voidLyt efter formularindsendelser
onFeedback(fn)fn: (event) => voidLyt efter brugerfeedback
onToolCall(fn)fn: (event) => voidLyt efter værktøjsudførelser
onError(fn)fn: (event) => voidLyt efter fejl
openChat()Åbn chatpanelet
closeChat()Luk chatpanelet
sendHook(name, payload?, options?) (ny)name: string, payload?: object, options?: { flowVariables?: object }Udløs Chat Hook-triggeren i det kørende flow (eller flet options.flowVariables lydløst, hvis ingen trigger er forbundet)

Brugerdefineret chat-aktivering: Skjul knappen og åbn ved klik

For at have fuld kontrol over, hvornår chatbotten vises, skjul den flydende standardknap og åbn chatten programmatisk — for eksempel fra din egen brugerdefinerede knap.

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

Vis en brugerdefineret knap kun når chatbotten er klar

Du kan kombinere skjult aktivering med event listeners for at skabe avancerede interaktioner:

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

Komplet integrationseksempel

Et fuldt fungerende eksempel, der demonstrerer konfigurationstilsidesættelser, event-sporing, brugerdefineret chat-aktivering og den nye sendHook()-metode 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>

Ofte stillede spørgsmål

Lær mere

LiveChat
LiveChat

LiveChat

Integrer FlowHunt med LiveChat for at aktivere smart AI-til-menneske-eskalering. Implementer AI-chatbots, der automatisk overfører samtaler til LiveChat-agenter...

4 min læsning
AI LiveChat +4