Documentatie

FAQ

Moeten gebruikers iets installeren?

Nee. Gebruikers plakken slechts één scripttag in hun HTML — geen npm-pakketten, geen buildstappen, geen afhankelijkheden. Extra functies laden automatisch vanaf dezelfde origin.

Botst het met mijn CSS?

Nee. De widget wordt gerenderd binnen een Shadow DOM en isoleert zijn stijlen volledig van je pagina.

Ondersteunt het single-page apps (React, Vue, Next.js)?

Ja. Het script laadt één keer en blijft behouden bij routewijzigingen. Plaats het script voor React/Next.js in je root-layout.

Next.js App Routertsx
// app/layout.tsx (App Router)
import Script from 'next/script';
import { ReactNode } from 'react';

export default function RootLayout({ children }: { children: ReactNode }) {
  return (
    <html lang="en">
      <body>
        {children}
        <Script id="respondo-init" strategy="afterInteractive">
          {`
            window.Respondo = window.Respondo || {};
            Respondo.init = Respondo.init || function(c) { window.RespondoAIConfig = c; };
            Respondo.q = Respondo.q || [];
            Respondo.identify = Respondo.identify || function(d) { Respondo.q.push(['identify', d]); };
            Respondo.init({
              agentId: 'YOUR_AGENT_ID',
              channelId: 'YOUR_CHANNEL_ID'
            });
          `}
        </Script>
        <Script src="https://api.respondo.ai/widget/widget.js" strategy="afterInteractive" />
      </body>
    </html>
  );
}

Wat gebeurt er wanneer een gesprek wordt afgehandeld?

Een nieuw bericht na afhandeling opent automatisch een vervolggesprek dat aan het vorige is gekoppeld (in je inbox getoond als "Continued from #N"). Context zoals de taal en het eerdere transcript gaat mee, en de bezoeker ziet één doorlopende chat. Als een teamlid het afgehandelde gesprek behandelde, wordt het vervolggesprek teruggeleid naar je team in plaats van naar de AI; anders pakt de AI het op.

Hoe wordt de widget geladen?

De widget wordt asynchroon geladen (async), zodat deze het renderen van de pagina nooit blokkeert. De kernbundel is ~180KB (~50KB gzipped); optionele functies (campagnes, producttours) laden als aparte lazy chunks nadat de widget is gemount, zodat de initiële paginarender nooit wordt geblokkeerd.

Hoe werkt escalatie?

Gebruikers kunnen op de knop "Talk to human" klikken, een zin typen waarin ze om een mens vragen, of de AI draagt zelf over wanneer hij niet vanuit je kennisbank kan antwoorden. Zodra er is geëscaleerd, stopt de AI met reageren en worden alle vervolgberichten doorgestuurd naar je supportteam. Zie de sectie Escalatie & overdracht voor details.

Kunnen gebruikers na escalatie blijven chatten met de AI?

Ja. De widget toont een knop "Continue with AI" waarmee de gebruiker de escalatie kan sluiten en het AI-gesprek kan hervatten.

Kennisbank & website-crawl#

Waarom is de crawl van mijn website geblokkeerd?

"Geblokkeerd" betekent dat de site — of de beveiligingslaag ervan (Cloudflare, een WAF, een anti-botplugin) — onze crawler heeft geweigerd: de startpagina of robots.txt antwoordde bij elke poging met een toegangsfout of een "uw browser wordt gecontroleerd"-uitdaging, of robots.txt verbiedt onze crawler expliciet. Eerder geïmporteerde pagina's blijven intact, en een re-sync mislukt op dezelfde manier totdat de site ons binnenlaat. Vraag de site-eigenaar om de User-Agent RespondoAI-Crawler (volledige string: Mozilla/5.0 (compatible; RespondoAI-Crawler/1.0; +https://respondo.ai/bot)) toe te staan in de beveiligingsinstellingen — bij Cloudflare is dat Security → WAF → Custom rules — en, als robots.txt de oorzaak is, een toestaan-regel toe te voegen voor User-agent: RespondoAI-Crawler. Respondo publiceert geen vast IP-adres van de crawler — sta toe op basis van User-Agent; als de fout bij de bron een IP noemt, sta dat dan ook toe. Kan de site niet worden aangepast, voeg dezelfde inhoud dan toe als bestanden of geplakte tekst.

De crawl is klaar, maar heeft maar een paar pagina's gevonden

We vinden pagina's via de sitemap van de site (de regel Sitemap: in robots.txt of gebruikelijke locaties zoals /sitemap.xml) en door links te volgen vanaf de start-URL — tot 10 linkniveaus diep en tot 5.000 pagina's per bron. Alleen pagina's op dezelfde site en onder het pad van de start-URL worden geïmporteerd: een crawl die start op https://example.com/help slaat /blog over, dus begin bij de root of voeg include-paden toe. Pagina's waar geen link of sitemap naar verwijst, pagina's die robots.txt verbiedt en pagina's achter een login worden niet gevonden. Bijna-duplicaten (printversies, varianten met trackingparameters) worden samengevoegd tot één. Pagina's waarvan de inhoud volledig door JavaScript wordt getekend, worden herkend en gerenderd met een browsergebaseerde terugvaloptie, dus een laag aantal pagina's wijst meestal op een scope- of sitemapprobleem, niet op rendering.

Hoe beperk ik de crawl tot één sectie van de site?

Open Advanced in het dialoogvenster voor het toevoegen van een website en vul Only crawl paths starting with (alleen paden crawlen die beginnen met) en/of Skip paths starting with (paden overslaan die beginnen met) in — één pad per regel, maximaal 50 per veld. Er wordt vergeleken op hele padsegmenten: /docs komt overeen met /docs en /docs/getting-started, maar niet met /docs-archive; een afsluitende slash wordt genegeerd en u kunt een volledige URL plakken — alleen het pad wordt gebruikt. Overslaan-regels gaan vóór include-regels. Dezelfde regels gelden voor de sitemap en voor elke latere re-sync van die bron.

Hoe vaak crawlt Respondo mijn website opnieuw?

Elke websitebron heeft een Auto-refresh-schema in het paginapaneel: Off (uit), Daily (elke 24 uur) of Weekly (elke 7 dagen). Een geplande crawl is incrementeel: pagina's waarvan de lastmod in de sitemap ouder is dan de vorige crawl worden overgeslagen, ongewijzigde pagina's worden niet opnieuw geïndexeerd, gewijzigde pagina's wel en verdwenen pagina's worden verwijderd. Wilt u direct verversen, gebruik dan Re-sync in het bronmenu of Re-sync all op de pagina Knowledge.

"We konden de site deze keer niet lezen" — wat is er gebeurd?

Dit is de algemene fout: de site reageerde niet op tijd, het domein kon niet worden opgelost, de server gaf een fout terug, de startpagina bevatte geen leesbare tekst of het adres is niet gevonden. Het detail staat bij de bron. Controleer of de URL opent in een privévenster van de browser, of er geen typefout in het domein zit en of de startpagina een echte inhoudspagina is en geen inlogscherm. Sociale netwerken en berichtenplatforms (Facebook, Instagram, LinkedIn, X, YouTube en vergelijkbare) kunnen helemaal niet worden geïmporteerd — ze worden geweigerd voordat een crawl start. Uw bestaande pagina's blijven behouden; een geplande bron probeert het bij de volgende run opnieuw, anders doet u een re-sync zodra de site weer bereikbaar is.

Wat betekenen "onze zoekindex is vol" en "we konden deze bron niet indexeren"?

Beide verschijnen nadat de inhoud met succes is gelezen. Index is vol betekent dat de zoekindex waarin deze bron wordt gekopieerd aan de kant van Respondo geen ruimte meer heeft — een limiet van Respondo, geen probleem met uw inhoud. De pagina's zijn opgeslagen, alles wat al geïndexeerd is blijft antwoorden, ons team wordt automatisch op de hoogte gebracht en de bron wordt geïndexeerd zodra er ruimte is; eerder re-syncen mislukt op dezelfde manier. We konden deze bron niet indexeren betekent dat het opbouwen van de zoekindex deze keer is mislukt — een tijdelijke fout aan onze kant; bestaande gegevens zijn intact en de taak wordt automatisch opnieuw geprobeerd. Blijft een van beide meldingen staan, gebruik dan "Copilot vragen" bij de fout.

Worden lange pagina's alleen vanaf het begin beantwoord?

Nee. Elke gecrawlde pagina wordt opgedeeld in overlappende stukken van ongeveer 1.600 tekens, elk apart geïndexeerd met de paginatitel erbij, zodat een antwoord uit elk deel van een lang artikel kan komen. Bronvermeldingen tonen nog steeds één link per pagina. Pagina's die vóór deze wijziging zijn geïmporteerd, worden bij hun volgende re-syncs opnieuw opgedeeld.

Hoe krijg ik hulp bij een crawlfout?

Elke crawl- of indexeerfout op de pagina Knowledge heeft een knop Copilot vragen. Die opent Copilot met de fout erbij, en Copilot antwoordt op basis van Respondo's eigen helpdocumentatie met concrete stappen voor uw situatie. Deze hulp is gratis — ze telt niet mee voor uw AI-verzoeken. Lossen de stappen het niet op, zeg dat dan — "dat hielp niet" is genoeg. Copilot biedt dan een kaart aan die het probleem overdraagt aan het Respondo-team: de kaart toont precies wat er wordt verstuurd, er gaat niets weg voordat u het bevestigt, en hun antwoord komt in dezelfde Copilot-thread binnen. Kan het probleem niet worden overgedragen, dan zegt Copilot dat duidelijk in plaats van te zwijgen.

Berichten die de klant niet bereiken#

Bij een antwoord staat "Not delivered" — wat betekent dat en wat doe ik als eerste?

Elk uitgaand bericht in de inbox heeft een bezorgindicator: Queued (antwoorden die kort na elkaar zijn geschreven worden samengevoegd en vertrekken binnen een paar minuten als één e-mail), Sending…, Sent, Delivered, of een rode mislukking. Mislukkingen komen in drie vormen: Not delivered — het kanaal weigerde het bericht; Bounced met het bounce-subtype ernaast — de mailserver van de ontvanger weigerde de e-mail; en Marked as spam — de ontvanger heeft het gemeld. Beweeg over het label of klik erop: de tooltip bevat de eigen woorden van de provider, inclusief de ruwe SMTP-diagnose bij een bounce. Ernaast staan maximaal twee acties — Retry / Send again, dat het bericht echt opnieuw verstuurt, en Ask Copilot, dat Copilot opent met de fout erbij. Ontbreekt de knop om opnieuw te versturen helemaal, dan is het adres geblokkeerd en zou een nieuwe poging op dezelfde manier mislukken. Staat er bij een Sent of Delivered ook N files not delivered, dan is de tekst wel aangekomen maar een bijlage niet — dat kanaal kon het bestand niet meenemen.

Waarom heeft mijn e-mail de klant niet bereikt?

Er zijn vier verschillende oorzaken, en het label houdt ze uit elkaar. Een permanente bounce betekent dat het adres niet bestaat of geen post aanneemt — er is geen knop om het opnieuw te proberen en het adres komt op de blokkeerlijst. Een tijdelijke bounce is een volle mailbox of een voorbijgaand probleem op de ontvangende server; Send again wordt aangeboden en werkt later meestal wel. Een bounce waarvan de diagnose SPF, DKIM, DMARC of 5.7.515 noemt, is iets anders: het mailsysteem van de ontvanger heeft het bericht geweigerd omdat uw verzenddomein zakte voor de authenticatiecontrole. Een nieuw antwoord bouncet op precies dezelfde manier totdat het domein is hersteld, dus antwoord ondertussen via een ander kanaal en repareer de DNS-records op het e-mailkanaal in Settings → Channels. Tot slot betekent Marked as spam dat de ontvanger op "spam melden" heeft gedrukt: het adres wordt geblokkeerd en wij sturen er niets meer naartoe. Een campagnerapport kan daarnaast The email provider rejected this message tonen — een definitieve weigering nog voordat de e-mail vertrok, meestal een niet-geverifieerd verzenddomein of een ongeldig adres — en The email provider rejected our credentials, wat een instellingsprobleem van de werkruimte is en niets zegt over die ene contactpersoon.

Wat is de blokkeerlijst en hoe komt een adres er weer af?

Het is een lijst, privé voor uw werkruimte, met e-mailadressen waarnaar Respondo weigert te versturen. Een adres belandt erop wanneer een bericht hard bouncet (een definitieve weigering), wanneer iemand een van uw e-mails als spam meldt, of wanneer het handmatig wordt geblokkeerd. Soft bounces blokkeren nooit een adres. Zolang de blokkade actief is, worden campagnebezorgingen naar dat adres overgeslagen met This address is blocked after an earlier bounce or complaint, en wordt een antwoord in de inbox geweigerd voordat het vertrekt. Alleen de echte ontvanger van het bericht wordt geblokkeerd — een bouncemelding kan geen willekeurig adres op de lijst zetten. Er is geen scherm voor deze lijst in het dashboard: een eigenaar of beheerder kan hem opvragen met GET https://api.respondo.ai/api/v1/integrations/email/suppressions en één vermelding opheffen met DELETE https://api.respondo.ai/api/v1/integrations/email/suppressions/<email>, of de support van Respondo vragen dat te doen. Hef een harde bounce alleen op als u weet dat de mailbox echt is hersteld — opnieuw versturen naar een dood adres schaadt de reputatie van uw domein.

WhatsApp accepteert mijn antwoord niet — het venster van 24 uur

WhatsApp laat een bedrijf alleen vrije berichten sturen binnen 24 uur na het laatste bericht van de klant; alles daarna weigert Meta met fout 131047. Respondo houdt dat venster per persoon bij en stopt het antwoord vóór verzending zodra het weet dat het venster verlopen is. Heeft Respondo helemaal geen registratie van een venster — een geïmporteerde contactpersoon, of een nummer dat u nooit heeft geschreven — dan blokkeert het niet: het bericht gaat naar Meta en Meta beslist. Er zijn precies twee wegen vooruit. Wacht tot de klant opnieuw schrijft — hun bericht opent het venster weer voor 24 uur en uw antwoord komt dan door — of stuur een door Meta goedgekeurde template. Templates kunnen niet vanuit het gespreksvenster worden verstuurd. Beheer ze in Outbound → WhatsApp templates: Sync haalt op wat al op uw nummer is geregistreerd, New template dient er een in bij Meta, waarvan de beoordeling een dag of langer duurt. Stuur een goedgekeurde template daarna via een outbound-campagne gericht op die contactpersoon. Een template bereikt mensen binnen én buiten het venster, maar alleen zolang de status approved is.

"Dat kanaal is losgekoppeld" / "Dat kanaal is niet verbonden"

Disconnected betekent dat de integratie bestaat maar niet meer actief is — het toegangstoken is ingetrokken of verlopen, of iemand heeft de koppeling verbroken. Not connected betekent dat er achter het eindpunt van de contactpersoon helemaal geen integratie zit. Beide lost u op in Settings → Channels, waar losgekoppelde kanalen onder een eigen kop staan met op elke kaart een knop Reconnect; koppel opnieuw en probeer het bericht daarna nog eens. Twee aangrenzende gevallen lijken hierop maar zijn iets anders: een e-mailkanaal waarvan het verzenddomein niet is geverifieerd kan niet op Live worden gezet en verstuurt niets totdat DKIM en SPF zijn bevestigd, en een kanaal dat alleen ontvangt weigert uitgaande berichten per definitie, dus Retry lukt daar nooit.

"Geen kanaal om deze persoon te bereiken" / "Geen e-mailadres bij deze contactpersoon"

Beide verschijnen in het bezorgrapport van een campagne en niet in de inbox. Het eerste betekent dat geen enkel eindpunt van de contactpersoon overeenkwam met de kanalen waarop de campagne verstuurt; ligt hun enige eindpunt op een kanaal dat alleen ontvangt, dan wordt dat apart gemeld als een bewuste overslag. Het tweede betekent dat de campagne e-mail verstuurt terwijl er geen adres bij de contactpersoon bekend is. Telegram heeft een eigen variant: heeft de persoon nooit naar uw bot geschreven, dan is er geen chat om in te schrijven, want de Bot API verbiedt een bot om als eerste te berichten — zij moeten het eerste bericht sturen. Los dit op door het ontbrekende adres bij de contactpersoon toe te voegen, door de kanalen van de campagne te verbreden, of door haar op e-mail te laten terugvallen.

De contactpersoon heeft zich afgemeld — wat kan ik nog sturen?

They had already unsubscribed betekent dat de contactpersoon een algemene opt-out draagt — ingesteld via de afmeldlink in een van uw e-mails, meegekomen met een import, of omgezet door een teamgenoot. Campagnes en series slaan zulke contactpersonen op elk kanaal over, niet alleen e-mail, en de bezorging wordt genoteerd als een overslag en niet als een mislukking. Een persoonlijk antwoord van een teamgenoot binnen een gesprek wordt er bewust niet door geblokkeerd: een opt-out gaat over massaberichten, en antwoorden op iemand die u schrijft is een menselijke afweging. De status staat bij de contactpersoon als Outbound: Subscribed / Unsubscribed, de contactenlijst is erop te filteren, en de knop Re-subscribe bij de contactpersoon draait het terug — gebruik die alleen als de persoon er zelf om vraagt.

Hoe vaak proberen jullie het opnieuw, en is Retry indrukken veilig?

Een antwoord uit de inbox gaat naar een wachtrij die maximaal vijf pogingen doet, met ongeveer 3, 10, 30 en 30 minuten ertussen. Alleen tijdelijke storingen worden herhaald — time-outs, geweigerde verbindingen, rate limits, serverfouten bij de provider zelf. Een definitieve weigering (onbekend adres, niet-geverifieerd verzenddomein, afgewezen inloggegevens) wordt meteen als mislukt gemarkeerd, want een herhaling levert hetzelfde antwoord op. Campagnebezorgingen draaien op hun eigen wachtrij met maximaal zes pogingen en kortere wachttijden — 5 seconden, 30 seconden, 2 minuten, 10 minuten; zijn die op, dan wordt de bezorging afgesloten met Delivery kept failing and was stopped after several attempts in plaats van eeuwig in "queued" te blijven hangen. Retry met de hand indrukken is veilig. Het werkt alleen op een bericht dat echt in de mislukte staat staat, en voor e-mail vraagt het eerst bij de provider na wat er met het origineel is gebeurd: is die e-mail wel degelijk vertrokken, dan springt de regel op bezorgd in plaats van dat er een tweede kopie uitgaat, en een echte hersending vertrekt onder een nieuwe idempotency-sleutel. Waar een tweede kopie verkeerd zou zijn — een harde bounce, een spamklacht, een verzending die nog onderweg is — ontbreekt de knop of wordt de poging geweigerd met de reden erbij.

De oorzaak is nog steeds niet duidelijk — hoe krijg ik hulp?

Bij elk mislukt bericht staat een knop Ask Copilot. Die opent Copilot met de fout, het kanaal en het gesprek erbij, en Copilot antwoordt vanuit de eigen helpdocumentatie van Respondo met stappen voor precies die storing. Deze hulp is gratis — ze telt niet mee voor uw AI-verzoeken. Lossen de stappen het niet op, zeg dat dan — "dat hielp niet" is genoeg. Copilot biedt dan een kaart aan die het probleem overdraagt aan het Respondo-team: de kaart toont precies wat er wordt verstuurd, er gaat niets weg voordat u het bevestigt, en hun antwoord komt in dezelfde Copilot-thread binnen. Kan het probleem niet worden overgedragen, dan zegt Copilot dat duidelijk in plaats van te zwijgen.