Tillor
Platform ModulesInbox

Website chat

Live chat-widget op je eigen site koppelen aan de Tillor inbox

Met Website chat plaats je een chatknop op je eigen website. Bezoekers sturen berichten via het widget; uw team antwoordt in de Tillor inbox naast WhatsApp, Messenger en Instagram.

Integratie installeren

  1. Ga naar Instellingen > Integraties (sidebar onder Ondersteuning)
  2. Open Website chat in de lijst
  3. Klik Installeren (geen OAuth - Tillor maakt direct een widget-sleutel aan)
  4. Stel onder Instellingen de widget in (welkomstbericht, accentkleur, optioneel toegestane domeinen)
  5. Kopieer het Embed-snippet onder Embedden op je website en plak het vóór </body> op elke pagina waar de chatknop moet verschijnen

Chat op Tillor view-pagina's

Staat Website chat geïnstalleerd, is Widget ingeschakeld aan en staat Tonen op publieke Tillor-pagina's aan, dan verschijnt de chatknop op publieke Tillor-pagina's van uw organisatie. U hoeft daar geen embed-snippet te plaatsen.

Voorbeelden:

  • Toegangspas (/view/access-methods/...)
  • Openstaande factuur (/view/invoices/...)
  • NFC-tag (/view/nfc-tags/...)
  • Organisatiegegevens (/view/organization)
  • Publieke kaart (/view/map)

Toegestane domeinen geldt voor uw eigen website. Tillor view-pagina's werken wanneer het widget aan staat, ook als alleen externe hostnamen in de lijst staan.

Zet u Widget ingeschakeld uit, dan verdwijnt de knop overal (eigen site en Tillor). Zet u alleen Tonen op publieke Tillor-pagina's uit, dan blijft het widget wel op uw eigen website werken via het embed-snippet.

Op view-pagina's gebruikt Tillor de Accentkleur uit Instellingen (via data-accent-color op het script). Zet u daar een andere kleur op uw eigen site via het embed-snippet, dan geldt die alleen op die site.

Widget-sleutel

De sleutel in het snippet is publiek zichtbaar, net als bij andere chatproducten. Beperk misbruik door Toegestane domeinen in te vullen (kommagescheiden hostnamen, bijv. voorbeeld.nl, www.voorbeeld.nl). Laat u het veld leeg, dan accepteert Tillor verzoeken van elke origin.

Widget instellen

VeldWat doet het?
Widget ingeschakeldZet de chat op uw site uit zonder te de-installeren
Tonen op publieke Tillor-pagina'sChatknop op Tillor view-pagina's (toegangspas, factuur, kaart, …); uw eigen site gebruikt het embed-snippet
WelkomstberichtEerste chatbubbel van uw team wanneer het gesprek nog leeg is
Tooltip launcherLabel voor de zwevende knop (voor screenreaders)
AccentkleurKleur voor de chatknop en uitgaande bubbels (kleurkiezer of hex, bijv. #2563eb)
OrganisatielogoHet logo uit uw Tillor-organisatieprofiel verschijnt in de chatheader en bij teamberichten van medewerkers
AI-assistent icoonBerichten van de inbox-AI tonen een roboticoon in plaats van het organisatielogo; er wordt geen medewerker getoond
Toegestane domeinenAlleen deze sites mogen de widget laden
Bezoekers e-mailen over ongelezen antwoordenStuurt de bezoeker een e-mail met een link om de chat te heropenen wanneer hij weg is en uw antwoord nog niet heeft gelezen (standaard aan)
BezoekersformulierStandaardvelden (naam, e-mail, telefoon) en extra velden vóór het eerste bericht

Bezoekersformulier

Onder Instellingen bij Website chat stelt u in welke velden bezoekers invullen vóór het eerste bericht. Zijn er verplichte velden, dan verschijnen die samen met het berichtveld in één scherm. De bezoeker vult alles in en stuurt met Versturen - geen aparte tussenstap.

Standaardvelden

Vink per veld aan of het verplicht is:

VeldOpmerking
NaamWordt opgeslagen bij het gesprek
E-mailWordt opgeslagen bij het gesprek
TelefoonNormaliseert naar E.164 en helpt bij koppeling met oproepen en klanten

U kunt elk veld apart aan- of uitzetten. Alleen telefoon aan? Dan verschijnt alleen het telefoonveld.

Extra velden

Klik Veld toevoegen voor eigen vragen (max. 8). Per veld stelt u in:

OptieUitleg
LabelWat de bezoeker ziet in het widget
TypeTekst of e-mail
VerplichtBezoeker moet het invullen vóór het eerste bericht
PlaceholderOptionele hint in het invoerveld

Waarden van extra velden staan in de inbox onder het gesprek, naast kanaal en bezoeker-id.

Bezoekers e-mailen over ongelezen antwoorden

Bezoekers verlaten vaak de pagina voordat uw team of Tillie reageert. Met Bezoekers e-mailen over ongelezen antwoorden (standaard aan) krijgt de bezoeker een e-mail zodra er een antwoord klaarstaat dat hij nog niet heeft gelezen en hij niet meer actief is. De e-mail bevat een knop Gesprek voortzetten die de chat weer opent, zodat het gesprek doorloopt.

  • De bezoeker moet een e-mailadres hebben opgegeven (via het bezoekersformulier of vooraf ingevuld). Zonder e-mailadres wordt er niets verstuurd.
  • We sturen kort nadat de bezoeker weg is één e-mail per reeks ongelezen antwoorden. Komt de bezoeker terug, dan kan een volgende reeks weer een e-mail opleveren.
  • De link opent de chat in dezelfde browser waar het gesprek begon, zodat de bezoeker zijn eigen gesprek terugziet. Opent hij de link op een ander apparaat, dan start een nieuw gesprek.
  • De bezoeker kan ook gewoon rechtstreeks op de e-mail antwoorden. Dat antwoord komt automatisch terug in hetzelfde gesprek in de inbox. Berichten die via e-mail binnenkomen, herkent u aan een klein envelop-icoon bij het bericht.

Zet de schakelaar uit onder Instellingen > Integraties > Website chat als u deze e-mails niet wilt versturen.

Geldt ook voor Tillie

Zowel antwoorden van uw medewerkers als van de AI-assistent tellen mee voor deze e-mail.

AI-assistent (Tillie)

Tillie is de standaardnaam van de inbox-AI. Ze werkt op alle kanalen (website chat, WhatsApp, Messenger, Instagram), niet alleen op het widget.

Installeer Inbox AI-assistent apart onder Instellingen > Integraties. Volledige uitleg over installatie, bedoelingen (reservatie, verkoop, overig), kennisbank en per-gesprek instellingen staat op Inbox AI-assistent (Tillie).

Onder Website chat kunt u AI-assistent icoon aanvinken zodat berichten van Tillie een roboticoon tonen in plaats van het organisatielogo.

Embed-opties

Naast data-org-id en data-widget-key kunt u optionele attributen op het script zetten:

AttribuutBeschrijving
data-localeTaal van de widget: en, nl, de of fr, of een BCP 47-tag zoals en-US of nl-BE (standaard en). De taal bepaalt knoppen, placeholders en standaard welkomstbericht/launcher als u die niet in Instellingen hebt ingevuld; een regio (bijv. US) wordt gebruikt voor datum- en tijdnotatie
data-accent-colorAccentkleur overschrijven (6-cijferige hex, bijv. #2563eb). Wint van de kleur in Instellingen; handig op een pagina met eigen huisstijl
data-messagesJSON-object om losse teksten te overschrijven, bijv. {"send":"Versturen","messagePlaceholder":"Typ uw bericht…"}
data-debugZet op true voor [Tillor inbox widget] logs in de browserconsole (handig op productie)
data-soundsGeluidseffecten aan (true, standaard) of uit (false) bij nieuwe teamreacties en bij verzenden
data-visitorJSON-object om naam, e-mail en telefoon vooraf in te vullen, bijv. {"name":"Jan","email":"jan@voorbeeld.nl","phone":"+32470123456"}
data-visitor-nameAlleen de naam vooraf invullen (alternatief voor losse velden)
data-visitor-emailAlleen het e-mailadres vooraf invullen
data-visitor-phoneAlleen het telefoonnummer vooraf invullen

Script-attributen vullen alleen lege velden aan. Heeft de bezoeker al gegevens ingevuld in deze browsersessie, dan blijven die staan.

Spambeveiliging

Het widget gebruikt geen aparte captcha op de bezoekerssite. Tillor beschermt verzenden via:

  • Widget-sleutel (data-key / X-Tillor-Inbox-Widget-Key) - alleen geïnstalleerde chats accepteren verzoeken met de juiste sleutel
  • Toegestane domeinen (optioneel) - Tillor controleert de Origin-header; alleen hostnamen uit uw lijst mogen berichten sturen

Vul Toegestane domeinen in wanneer het widget op een vaste klantensite staat (bijv. recreatiepark-het-meer.be, www.recreatiepark-het-meer.be). Laat u het veld leeg, dan werkt het widget op elk domein waar u het snippet plaatst.

Contactformulier vervangen

Vervangt u een contactformulier door TillorInbox.send()? U kunt uw eigen captcha op de pagina laten staan als extra laag, maar het Tillor-widget vereist geen hCaptcha of Turnstile op de klantensite.

JavaScript-SDK (window.TillorInbox)

Na het laden van het widget-script kunt u contactgegevens vanaf uw eigen formulier doorgeven (contactpagina, verkoopdetail, offerte-aanvraag). Alle methodes wachten tot de widget-config geladen is.

MethodeBeschrijving
ready()Promise die klaar is zodra het widget geladen is
getVisitor()Leest opgeslagen contactgegevens uit localStorage en ingevulde widgetvelden; synchroon, geen netwerk
setVisitor({ name?, firstName?, lastName?, email?, phone?, message?, customFields? }, options?)Vult chatvelden in zonder te versturen
open()Opent het chatvenster
close()Sluit het chatvenster
toggle()Opent of sluit het chatvenster
send({ body, name?, firstName?, lastName?, email?, phone?, message?, customFields?, open?, silent?, markSubmitted? })Verstuurt een bericht met contactgegevens

getVisitor() geeft dit object terug:

VeldBeschrijving
visitorIdId van deze bezoeker in deze browser (localStorage)
nameVolledige naam (één veld in het widget)
firstName / lastNameAfgeleid uit name (eerste woord / rest)
email, phoneContactgegevens
customFieldsExtra velden uit uw widget-instellingen
messageConcept in het berichtveld
detailsSubmittedOf het bezoekersformulier als ingevuld geldt

Gebruik getVisitor() om een eigen formulier te prefilling vanuit localStorage (zelfde browser, ook na een pagina-verversing).

Opties voor setVisitor (tweede argument):

OptieStandaardUitleg
openfalseChatvenster direct openen
markSubmittedfalseVerberg het bezoekersformulier als alle verplichte velden ingevuld zijn
onlyEmptyfalseAlleen lege velden overschrijven
persistfalseGegevens in localStorage bewaren (zelfde browser, ook na een nieuw tabblad)

Opties voor send:

OptieStandaardUitleg
openfalseChatvenster openen vóór het versturen
silenttrue als open false isGeen geluid, geen foutmelding in het widget; gebruik de Promise voor succes of fout
markSubmittedtrueContactgegevens hoeven daarna niet opnieuw in het widget
metadata-Optionele hints voor Tillie (niet zichtbaar in het chatvenster); zie hieronder

Met open: false (standaard) blijft de chatknop dicht. Het bericht gaat wel naar Tillor; uw eigen formulier kan bedanken of een fout tonen. Met open: true opent het chatvenster en ziet de bezoeker het normale verzendgedrag (geluid, vinkjes, eventuele widget-fouten).

metadata (boekingsformulier)

Gebruik metadata wanneer u een eigen formulier op de website hebt en Tillie alleen een bevestiging moet sturen, zonder vervolgvragen (bijv. het tabblad sluit daarna).

SleutelTypeUitleg
forceHandoverbooleanBevestigingsbericht + overdracht aan een collega; geen intake-vragen. Negeert ook de AI-pauze na een teambericht (zie ignoreAiPause).
ignoreAiPausebooleanTillie antwoordt ook wanneer ze in Automatisch-modus gepauzeerd is na een teambericht (30 minuten). Handig voor stille formulierverzending; combineer met forceHandover of laat Tillie normaal intake doen.
handoverIntent"reservation" | "caravan_rental" | "sale" | "other"Optioneel: flow voor de overdracht (standaard: automatisch afleiden uit het bericht)
sourcestringOptioneel integratielabel voor uw team (kleine letters, cijfers, -, _; max. 64 tekens)
await TillorInbox.send({
  name: "Jan Janssens",
  email: "jan@voorbeeld.be",
  phone: "+32 3 779 81 64",
  body: structuredBookingMessage,
  silent: true,
  metadata: {
    forceHandover: true,
    handoverIntent: "reservation",
    source: "website_booking_form",
  },
});

Contactformulier vervangen (stille verzending)

Gebruik dit wanneer u het bestaande contactformulier wilt houden, maar berichten via Tillor wilt laten lopen zonder het chatvenster te openen:

<form id="site-contact-form">
  <input name="name" type="text" required />
  <input name="email" type="email" required />
  <input name="phone" type="tel" />
  <textarea name="message" required></textarea>
  <button type="submit">Verstuur</button>
  <p id="contact-status" hidden></p>
</form>

<script>
  document.getElementById("site-contact-form").addEventListener("submit", async (event) => {
    event.preventDefault();
    const form = event.currentTarget;
    const status = document.getElementById("contact-status");
    const data = new FormData(form);

    try {
      await TillorInbox.send({
        name: String(data.get("name") ?? ""),
        email: String(data.get("email") ?? ""),
        phone: String(data.get("phone") ?? ""),
        body: String(data.get("message") ?? ""),
      });
      status.textContent = "Bedankt, we nemen snel contact op.";
      status.hidden = false;
      form.reset();
    } catch (error) {
      status.textContent = error instanceof Error ? error.message : "Versturen mislukt.";
      status.hidden = false;
    }
  });
</script>

open en silent hoeft u niet te zetten: zonder open: true blijft het venster dicht en behandelt Tillor de aanroep als stille verzending.

Contactformulier koppelen (chat openen)

Voorbeeld: velden doorgeven en het chatvenster openen zodat de bezoeker het gesprek ziet:

<form id="site-contact-form">
  <input name="name" type="text" required />
  <input name="email" type="email" required />
  <input name="phone" type="tel" />
  <textarea name="message" required></textarea>
  <button type="submit">Verstuur</button>
</form>

<script>
  document.getElementById("site-contact-form").addEventListener("submit", (event) => {
    event.preventDefault();
    const form = event.currentTarget;
    const data = new FormData(form);
    void TillorInbox.send({
      name: String(data.get("name") ?? ""),
      email: String(data.get("email") ?? ""),
      phone: String(data.get("phone") ?? ""),
      body: String(data.get("message") ?? ""),
      open: true,
    });
  });
</script>

Of alleen velden invullen en het venster openen (zonder meteen te versturen):

void TillorInbox.setVisitor(
  {
    name: "Jan Janssens",
    email: "jan@voorbeeld.be",
    phone: "+32 3 779 81 64",
    message: "Ik heb een vraag over de stacaravan te koop.",
  },
  { markSubmitted: true, open: true },
);

Verkooppagina met direct versturen en chat openen:

void TillorInbox.send({
  name: "Jan Janssens",
  email: "jan@voorbeeld.be",
  phone: "+32 3 779 81 64",
  body: "Ik heb interesse in deze stacaravan.",
  open: true,
});

Live synchroniseren terwijl iemand typt (optioneel):

const form = document.getElementById("site-contact-form");
form.addEventListener("input", () => {
  void TillorInbox.setVisitor({
    name: form.name.value,
    email: form.email.value,
    phone: form.phone.value,
    message: form.message.value,
  });
});

Vroeg aanroepen (vóór het widget-script)

<script>
  window.TillorInbox = window.TillorInbox || { q: [] };
  window.TillorInbox.q.push([
    "setVisitor",
    { name: "Jan", email: "jan@voorbeeld.be" },
    { open: true },
  ]);
</script>
<script src="https://tillor.eu/inbox-widget.js" data-org-id="org_abc123" data-widget-key="iwk_xxx" async defer></script>

Voorbeeld met Nederlandse teksten:

<link rel="preload" href="https://tillor.eu/inbox-widget.css" as="style" />
<script
  src="https://tillor.eu/inbox-widget.js"
  data-org-id="org_abc123"
  data-widget-key="iwk_xxx"
  data-locale="nl"
  data-debug="true"
  async
  defer
></script>

U kunt debug ook aanzetten zonder het snippet te wijzigen: in de browserconsole localStorage.setItem('tillor-inbox-debug', '1') en de pagina verversen.

Onder het berichtveld ziet de bezoeker een korte mededeling dat verzenden akkoord is met de websitechat-voorwaarden (GDPR/AVG, Belgisch recht). De link opent in een nieuw tabblad en volgt de taal van data-locale.

Eerste bericht

Zodra de bezoeker in het berichtveld typt, kan uw team Typen… zien in de inbox. Het eerste bericht gaat pas bij Versturen; contactgegevens worden dan meegestuurd.

Typen (beide kanten)

Typen werkt in beide richtingen:

RichtingWat de bezoeker zietWat uw team ziet in de inbox
Bezoeker typt-Typen… onder het gesprek (realtime)
Medewerker typtTypen… in het widget-

Het ingebouwde widget stuurt automatisch typ-signalen terwijl de bezoeker in het berichtveld typt. Uw team ziet dat in de inbox zodra het gesprek openstaat (ook vóór het eerste verzonden bericht).

Bouwt u een eigen chat-UI in plaats van het widget? Roep dan de website-chat-API aan (zie OpenAPI, tag inbox):

POST /api/orgs/{orgId}/inbox/website/typing
X-Tillor-Inbox-Widget-Key: iwk_xxx
Content-Type: application/json

{
  "visitorId": "vis_…",
  "active": true,
  "visitorName": "Jan",
  "visitorEmail": "jan@voorbeeld.nl",
  "visitorPhone": "+32470123456"
}
  • active: true wanneer de bezoeker typt; false wanneer het veld leeg is of de bezoeker stopt (het widget stuurt false na ongeveer 4 seconden zonder input)
  • visitorName / visitorEmail / visitorPhone zijn optioneel, maar helpen bij het koppelen vóór het eerste bericht
  • Gebruik hetzelfde visitorId als bij POST …/inbox/website/messages en GET …/inbox/website/messages

Realtime (SSE)

Voor live updates opent u een langlopende stream:

GET /api/orgs/{orgId}/inbox/website/subscribe?visitorId=vis_…
X-Tillor-Inbox-Widget-Key: iwk_xxx
Accept: text/event-stream

Event keys:

EventWanneer
inbox:website:message-createdNieuw team- of AI-bericht in het gesprek
inbox:website:message-updatedTeam- of AI-bericht is gewijzigd of verwijderd
inbox:website:typing-changeddata.staffTyping of data.staffOutboundSenderType verandert

Payload-formaat is hetzelfde als org-SSE (event, data, timestamp, traceId). Herverbind na verbreking; er is geen resumption.

Het officiële widget gebruikt SSE als primaire laag en pollt GET …/messages elke 5 seconden als fallback (elke 1 seconde met open paneel wanneer SSE even wegvalt). Daardoor worden uw antwoorden als afgeleverd gemarkeerd zodra de bezoeker nog op de pagina is, ook zonder het paneel te openen.

Bezoekersactiviteit (alleen in de inbox)

Na het eerste bericht stuurt het widget info-regels naar Tillor (chat openen of sluiten, tab wisselen, pagina verlaten, navigatie). Uw team ziet die als grijze tekst in het gesprek; de bezoeker ziet ze niet in het widget. Vóór dat eerste bericht verschijnt er nog geen gesprek in de inbox.

GebeurtenisTekst in de inbox (volgt uw taal in Tillor)
Chat sluitenGebruiker sloot de chat
Tab wisselen of venster minimaliserenGebruiker wisselde van tabblad of minimaliseerde de browser
Navigeren naar een andere paginaGebruiker navigeerde naar de opgegeven pagina-URL

Navigatie werkt bij gewone websites (elke pagina laadt opnieuw), bij een nieuw tabblad op dezelfde site, en bij single-page apps (history API). Het widget stuurt de huidige pagina-URL mee in elke heartbeat (elke 20 seconden) en bij pagina-wissels; in het zijpaneel ziet u daardoor steeds de laatste pagina waar de bezoeker actief was. Info-regels verhogen geen ongelezen teller en geven geen pushmelding.

Eigen UI? Roep POST /api/orgs/{orgId}/inbox/website/events aan met event: chat_closed, tab_hidden of navigation (bij navigatie ook url).

In de inbox

  • Gesprekken verschijnen als kanaal Website chat
  • Tillor onthoudt bezoekers via een id in localStorage op hun browser (zelfde apparaat = zelfde thread)
  • Naam, e-mail en telefoon uit het bezoekersformulier worden na het eerste verzonden bericht eveneens in localStorage bewaard, zodat bezoekers die later terugkomen (nieuw tabblad of nieuwe sessie) het formulier niet opnieuw hoeven in te vullen
  • Is localStorage leeg (andere browser, opgeschoond geheugen)? Bij het ophalen van berichten vult het widget contactgegevens aan vanuit het bestaande gesprek op de server
  • Extra velden verschijnen in de inbox bij het gesprek
  • Antwoorden vanuit Tillor komen terug in het widget (bezoeker moet het chatvenster open hebben of later opnieuw openen; het widget ververst berichten automatisch)
  • Wanneer u typt in de inbox, ziet de bezoeker Typen… in het widget
  • Wanneer de bezoeker typt op uw site, ziet u Typen… in het gesprek
  • Bezoekers zien vinkjes op hun eigen berichten: één vinkje na verzenden, twee grijze vinkjes zodra uw team het gesprek opent en de berichten laadt, blauwe dubbele vinkjes zodra uw team het gesprek als gelezen markeert. In de inbox ziet u vinkjes op uw eigen antwoorden: één vinkje na verzenden, twee grijze vinkjes zodra de bezoeker op de pagina is en berichten ophaalt (ook met gesloten chat), blauw zodra de bezoeker het chatvenster open heeft
  • Boven het gesprek ziet u Online (groene stip) wanneer de bezoeker op uw site actief is, of Laatst gezien met een relatieve tijd wanneer niet. Het widget stuurt elke 20 seconden een heartbeat zolang het browsertabblad zichtbaar is; berichten ophalen, typen en lezen tellen ook mee als activiteit

Berichten zijn tekst tot 4096 tekens. Afbeeldingen en bestanden worden in deze versie niet ondersteund.

Gerelateerd

On this page