JS API -integraatio

FlowHunt JavaScript API Chatbot Integration

FlowHunt JS API antaa sinulle tayden hallinnan chatbotin integroimiseen verkkosivustollesi. Kayttamalla v2-integrointikoodia voit upottaa chatbotin, tilata elinkaari- ja vuorovaikutustapahtumia, valittaa dynaamista dataa vuomuuttujien kautta, laukaista Chat Hook -triggerin keskella keskustelua sendHook()-metodilla, seurata vuorovaikutuksia URL-parametreilla ja hallita chat-ikkunaa ohjelmallisesti.

Tama opas kattaa kaikki JS API:n osa-alueet koodiesimerkein, joita voit kopioida ja mukauttaa projektiisi.

Integrointikoodi (v2)

Kopioi ja liita alla oleva koodinpatka HTML-koodiisi juuri ennen sulkevaa </body>-tagia. Korvaa YOUR_CHATBOT_ID ja YOUR_WORKSPACE_ID FlowHunt-chatbotin asetuksista loytyvilla arvoilla.

<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-tunnus globaalissa muuttujanimessa (window.FHChatbot_YOUR_CHATBOT_ID) kayttaa alaviivoita tavuviivojen sijaan.

Asetusten ylikirjoittaminen setConfig()-funktiolla

Ennen init()-kutsua voit ylikirjoittaa chatbotin oletusasetukset setConfig()-funktiolla:

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

Kaytettavissa olevat asetukset

AsetusTyyppiKuvaus
headerTitlestringMukautettu otsikkoteksti
maxWindowWidthstringChat-ikkunan enimmaisleveys (esim. "700px")
maxWindowHeightstringChat-ikkunan enimmaiskorkeus
inputPlaceholderstringViestikentan paikkamerkkiteksti
showChatButtonbooleanNayta tai piilota oletuskelluva chat-painike
openChatPanelbooleanAvaa chat-paneeli automaattisesti sivun latautuessa
flowVariablesobjectAvain-arvo-parit mukautetusta datasta, joka valitetaan vuohon. Arvot voivat olla mita tahansa JSON-serialisoitavaa tyyppia (string, number, boolean, object, array).
urlSuffixstringKyselymerkkijono, joka lisataan kaikkiin chatbotin luomiin URL-osoitteisiin
cookieConsentbooleanOta kayttoon istunnon sailyttaminen evasteiden avulla
embeddedstringAseta upotettu tila kayttoon (ei sulje-painiketta)
themestringTeematila

Vuomuuttujat: Valita dynaamista dataa

flowVariables yhdistetaan jokaiseen chatbotin luomaan istuntoon. Niita kaytetaan tyypillisesti staattisena kontekstina (tunnetaan sivun latautuessa): kayttajan tunnus, tilaus, nykyinen lokaali jne.

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

Jos kayttaja navigoi chatin avaamisen jalkeen, taalla valitetut arvot vanhenevat. Paivittaaksesi niita keskella keskustelua, kutsu chatbotManager.sendHook() parametrilla options.flowVariables — katso Kommunikointi isantasivulta vuoon kesken keskustelun alla.

URL-suffiksi: Seuraa chatbot-vuorovaikutuksia

urlSuffix-parametri lisaa kyselymerkkijonon jokaiseen chatbotin luomaan URL-osoitteeseen. Tama on hyodyllista chatbot-lahtoisen liikenteen seurannassa analytiikkatyokaluissa:

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

Kayttotapaukset:

  • Seuraa konversioita chatbot-vuorovaikutuksista Google Analyticsissa.
  • Analysoi kayttajakayttaytymista chatbotin kanssa tapahtuvan vuorovaikutuksen jalkeen.
  • Kohdista kampanjat, jotka ohjaavat chatbot-sitoutumista.

Logo

Valmis kasvattamaan liiketoimintaasi?

Aloita ilmainen kokeilujakso tänään ja näe tulokset muutamassa päivässä.

Kommunikointi isantasivulta vuoon kesken keskustelun

Lisatty huhtikuussa 2026 osana FlowHuntin Chat Hook -ominaisuutta.

Yhden sivun sovelluksissa (SPA) chat-ikkuna pysyy yleensa avoinna, kun kayttaja navigoi naytoilta toisille. Kun chat on kaynnissa, setConfig()-kautta valitetut flowVariables vanhenevat, eika ole tapaa kertoa vuolle isantasivulla tapahtuneista asioista. Yksi hallitsijan metodi — sendHook(name, payload, options?) — kattaa seka “laukaise trigger”- etta “vain paivita kontekstia” -kayttotapaukset:

  • Anna name ja (valinnaisesti) payload laukaistaksesi vuon Chat Hook -triggerin. Vuon tekija pudottaa yhden Chat Hook -noden kankaalle ja haarauttaa {ChatHook.hook_name}-arvon perusteella paattaakseen, mita tehdaan.
  • Anna options.flowVariables yhdistaaksesi istuntomuuttujat samalla — arvot sailytetaan ennen triggerin laukeamista ja ne pysyvat kaytettavissa muulle istunnolle.
  • Jos vuolla ei ole Chat Hook -triggeria, kutsu on hiljainen 200 no-op: options.flowVariables yhdistetaan silti, mutta yhtaan triggeria ei suoriteta eika krediitteja veloiteta. Tama tarkoittaa, etta isantasivut voivat kutsua sendHook()-metodia optimistisesti tietamatta, onko vuon tekija jo kytkenyt triggerin.

sendHook() on turvallinen no-op ennen istunnon olemassaoloa (puskuroidaan sisaisesti ja huuhdellaan, kun istunto luodaan) eika koskaan heita poikkeusta isantasivulle — verkkovirheet kirjataan vain console.warn-kutsulla.

Syoterajat

Palvelin- ja asiakaspuolen rajoitukset, jotka koskevat sendHook()-metodia. Niiden rikkominen ei kaada — backend palauttaa HTTP 422 ja hallitsija lokittaa console.warn-kutsulla heittamatta.

RajoiteRajaMissa pakotetaanRikkoessa
sendHook name -pituus1–256 merkkiaBackend (Pydantic)HTTP 422, trigger ei laukea
Avainten maara options.flowVariables-objektissa≤ 64Backend (Pydantic)HTTP 422, mitaan ei sailyteta
Kunkin avaimen pituus options.flowVariables-objektissa≤ 128 merkkiaBackend (Pydantic)HTTP 422, mitaan ei sailyteta
Esiistuntokutsut hallitsijan puskurissa50Widget (selaimessa)Vanhin jonossa oleva kutsu pudotetaan ja console.warn lokitetaan

Esiistuntopuskurin yliraja merkitsee vain sivuilla, joilla istunnon luonti epaonnistuu loputtomiin (esim. pysyva verkkovirhe). Normaaleissa olosuhteissa jono huuhdellaan heti, kun onFHChatbotSessionCreated laukeaa.

1. Chat Hook -triggerin lisaaminen (vuon tekijan puoli)

  1. Avaa chatbottiin liittyva vuo FlowHunt-editorissa.
  2. Vedä Chat Hook -trigger-node kankaalle. Editori sallii vain yhden triggerin per vuo — useita ei sallita.
  3. (Valinnainen) Ota kayttoon Validate Payload Schema ja maarita JSON Schema, johon saapuvan payloadin tulee sopia. Validointi suoritetaan vaiheen sisalla — tay­mattomyys nakyy vuon virhe-eventina (endpoint palauttaa silti 200; virhe on havaittavissa onFHError-tapahtumalla).
  4. Kytke triggerin lahdot (hook_name, payload, flow_variables) niihin alavirran vaiheisiin, jotka haluat laukaista (Generator, Chat Output, Tool Calls, ehdolliset haarat hook_name-arvon perusteella jne.).
  5. Julkaise vuo.

2. Haarautuminen eri hook-nimien perusteella vuon sisalla

name, jonka isantasivu valittaa sendHook()-metodille, on etiketti, jonka perusteella vuosi haarautuu, ei reititysavain — backend ei vertaa nimia node-nimiin. Sen sijaan vuon yksi Chat Hook -trigger laukeaa ja paljastaa nimen muodossa {ChatHook.hook_name}, johon viittaat vuon logiikassa paattaaksesi, mita tehda.

Esimerkki system-promptista:

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.

Monimutkaisempaa reititysta varten kytke ehdollinen vaihe {ChatHook.hook_name}-arvolle ja haaraudu useisiin alavirran polkuihin.

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

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

Argumentit

ArgumenttiTyyppiPakollinenKuvaus
namestringkyllaEtiketti, joka valitetaan vuolle muodossa {ChatHook.hook_name}. Trigger laukeaa arvosta riippumatta; vuon logiikkasi haarautuu sen perusteella.
payloadobjecteiJSON-payload, joka valitetaan triggerille muodossa {ChatHook.payload}. Validoidaan noden skeemaa vasten, jos kaytossa. Oletus {}.
options.flowVariablesobjecteiIstuntomuuttujat yhdistettavaksi ennen triggerin laukeamista. Kaytettavissa alavirran vaiheille ja tuleville kayttajaviesteille.

Kayttaytyminen

  • Kutsuminen ennen onFHChatbotSessionCreated-tapahtumaa on turvallista; kutsu puskuroidaan ja huuhdellaan, kun istunto on olemassa. Puskurilla on yliraja — katso Syoterajat ylla.
  • Jos vuolla ei ole Chat Hook -triggeria, pyynto on hiljainen 200 no-op — joten isantasivut voivat kutsua sendHook()-metodia optimistisesti ennen kuin vuon tekija on kytkenyt triggerin. options.flowVariables sailytetaan silti tassakin tapauksessa, joten sama kutsu toimii myos pelkkana kontekstipaivityksena.
  • Jos Chat Hook -triggerilla on skeemavalidointi kaytossa ja payload ei lapaise sita, validointi suoritetaan vaiheen sisalla — endpoint palauttaa 200, mutta vuo lahettaa vaihevirhe-tapahtuman (havaittavissa onFHError-tapahtumalla).
  • name ja options.flowVariables ovat rajoitettuja — katso Syoterajat ylla. Rikkomukset palauttavat HTTP 422, eika mitaan sailyteta.
  • Onnistuneet kutsut lahettavat onFHChatbotFlowVariablesUpdate-tapahtuman, jos options.flowVariables annettiin (katso Tapahtumaviite).
  • Ei koskaan heita poikkeusta. Verkkovirheet ja ei-2xx-vastaukset kirjataan console.warn-kutsulla.

Esimerkki — proaktiivinen ehdotus SPA-navigoinnissa

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

Esimerkki — pelkka kontekstipaivitys (Chat Hook ei ole kytketty)

Jos vuolla ei ole Chat Hook -triggeria, kutsu on hiljainen 200 — joten sama API voi pitaa flow_variables-arvot synkassa laukaisematta mitaan:

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. Miten vuon tekija kayttaa naita arvoja

  • {ChatHook.hook_name} ja {ChatHook.payload.foo}sendHook('x', { foo: 1 })-kutsulla valitetut arvot paljastetaan Chat Hook -triggerin suorituspolulla. Vain kaytettavissa polulla, jonka hook-laukaisu kaynnistaa.
  • {flow_variables.foo}options.flowVariables-kautta valitetut arvot yhdistetaan istunnon muuttujapankkiin ennen triggerin laukeamista. Jokainen suorituspolku (mukaan lukien tavalliset Chat Input -laukaisemat kayttajaviestit) voi lukea ne.

Jos haluat seuraavan kayttajaviestin nakevan uuden arvon, laita se options.flowVariables-kenttaan — pelkka payload vaikuttaa vain siihen suoritusajoon, jonka kyseinen hook kaynnistaa.


Tapahtumaviite

FlowHunt JS API lahettaa 11 mukautettua tapahtumaa window-objektille. Kaikki tapahtumat kayttavat CustomEvent -API:a asetuksilla bubbles: true ja composed: true.

onFHChatbotReady

Laukeaa, kun chatbot-widget on taydellisesti renderoitu ja valmis kaytettavaksi.

  • Tapahtumadata: ei mitaan.
  • Milloin: kun widgetin DOM on asennettu ja chat-painike on nakyvissa.

onFHChatbotSessionCreated

Laukeaa, kun uusi chat-istunto luodaan palvelimella.

  • Tapahtumadata: event.detail.sessionId — juuri luodun istunnon tunnus.
  • Milloin: onnistuneen istunnonluonti-API-kutsun jalkeen.

onFHChatbotWindowOpened

Laukeaa, kun kayttaja avaa chat-ikkunan. Ei laukea upotetussa tilassa.

onFHChatbotWindowClosed

Laukeaa, kun kayttaja sulkee chat-ikkunan. Ei laukea upotetussa tilassa.

onFHMessageSent

Laukeaa, kun kayttaja lahettaa viestin.

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

onFHMessageReceived

Laukeaa, kun chatbot vastaanottaa ja nayttaa vastauksen.

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 on valinnainen ja esiintyy vain, kun ihmisagentti on mukana.

onFHFormDataSent

Laukeaa, kun kayttaja lahettaa lomakedataa chatbotin kautta.

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

onFHFeedback

Laukeaa, kun kayttaja antaa peukku ylos- tai peukku alas -palautteen chatbot-viestista.

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

onFHToolCall

Laukeaa, kun tyokalu tai toiminto suoritetaan vuon kasittelyn aikana. Laukeaa vain flowAssistant- ja flowAssistantV3-tiloissa.

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

onFHError

Laukeaa, kun chatbotin toiminnan aikana tapahtuu virhe.

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

onFHChatbotFlowVariablesUpdate

Lisatty huhtikuussa 2026.

Laukeaa onnistuneen chatbotManager.sendHook(...)-kutsun jalkeen, joka antoi options.flowVariables-arvon. Ei laukea sendHook()-kutsuille, joista flowVariables puuttuu.

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

Kayta sita havainnoidaksesi yhdistettyja muuttujia (esim. synkronoidaksesi oman isantasivun tilan, debuggausta varten tai paivittaaksesi UI-elementin, joka riippuu samasta datasta).


Tapahtumien tilaaminen

Chatbot-tapahtumien tilaamiseen on kaksi tapaa.

Tapa 1: Ikkunatapahtumakuuntelijat

Kayta window.addEventListener-menetelmaa missa tahansa sivullasi. Tama toimii jopa ennen chatbotin latautumista:

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

Poistaaksesi kuuntelijan, sailyta kasittelijaviite:

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

Tapa 2: Hallitsijan callback-metodit

init()-callbackin sisalla kayta chatbot-hallitsijan sisaanrakennettuja metodeja:

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

Hallitsijametodien viite

MetodiParametritKuvaus
onSessionCreated(fn)fn: () => voidKuuntele istunnon luontia
onWindowOpened(fn)fn: () => voidKuuntele ikkunan avaamista
onWindowClosed(fn)fn: () => voidKuuntele ikkunan sulkemista
onMessageSent(fn)fn: (event) => voidKuuntele kayttajaviesteja
onMessageReceived(fn)fn: (event) => voidKuuntele bottivastauksia
onFormDataSent(fn)fn: (event) => voidKuuntele lomakelahetyksia
onFeedback(fn)fn: (event) => voidKuuntele kayttajapalautetta
onToolCall(fn)fn: (event) => voidKuuntele tyokalujen suorituksia
onError(fn)fn: (event) => voidKuuntele virheita
openChat()Avaa chat-paneelin
closeChat()Sulkee chat-paneelin
sendHook(name, payload?, options?) (uusi)name: string, payload?: object, options?: { flowVariables?: object }Laukaisee Chat Hook -triggerin kaynnissa olevassa vuossa (tai yhdistaa options.flowVariables-arvot hiljaa, jos triggeria ei ole kytketty)

Mukautettu chat-aktivointi: Piilota painike ja avaa klikkauksella

Hallitaksesi taydellisesti chatbotin nayttamista, piilota oletuskelluva painike ja avaa chat ohjelmallisesti — esimerkiksi omasta mukautetusta painikkeestasi.

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

Nayta mukautettu painike vasta kun chatbot on valmis

Voit yhdistaa piilotetun aktivoinnin tapahtumakuuntelijoihin luodaksesi edistyneita vuorovaikutuksia:

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

Taydellinen integrointiesimerkki

Taydellinen toimiva esimerkki, joka esittelee asetusten ylikirjoituksia, tapahtumien seurantaa, mukautettua chat-aktivointia ja uutta sendHook()-metodia yhdessa:

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

Usein kysytyt kysymykset

Lue lisää

Kuinka luoda FlowHunt AI Chatbot Shopifylle
Kuinka luoda FlowHunt AI Chatbot Shopifylle

Kuinka luoda FlowHunt AI Chatbot Shopifylle

Vaiheittainen opas FlowHuntin integrointiin Shopifyhin, Shopify-chatbotin lisäämiseen Flow-kirjastosta, sen julkaisemiseen ja upottamiseen Shopify-verkkokauppaa...

3 min lukuaika
Shopify Chatbot +2
FlowHunt 2.6.12: Slack-integraatio, aieluokittelu ja paljon muuta
FlowHunt 2.6.12: Slack-integraatio, aieluokittelu ja paljon muuta

FlowHunt 2.6.12: Slack-integraatio, aieluokittelu ja paljon muuta

FlowHunt 2.6.12 tuo mukanaan Slack-integraation, aieluokittelun ja Gemini-mallin, parantaen AI-chatbotin toiminnallisuutta, asiakasymmärrystä ja tiimin työnkulk...

2 min lukuaika
FlowHunt AI Chatbot +5
Tawk
Tawk

Tawk

Integroi FlowHunt AI -chatbotit Tawk.to-palveluun älykkäällä ihmisen siirtämisellä. Anna tekoälyn käsitellä rutiinikyselyt ja siirrä käyttäjät saumattomasti liv...

4 min lukuaika
AI Tawk +4