Op sessie gebaseerde gesprekken met callbacks en geschiedenis en een chatbot bouwen zonder backend
De traditionele architectuur van een chatbot-toepassing bestaat uit drie lagen: een frontend waarop de gebruiker interactie heeft, een backend die de conversatiestatus en bedrijfslogica beheert, en een AI-service die antwoorden genereert. Het bouwen van alle drie lagen is een aanzienlijk engineeringproject. De frontend heeft een chatinterface nodig met berichtrendering, inputverwerking en real-time updates. De backend moet sessiebeheer, berichtopslag, gespreksthreading, snelheidsbeperking en authenticatie hebben. De AI-integratie moet promptconstructie, contextbeheer en antwoordanalyse hebben. Samen vertegenwoordigen deze componenten weken of maanden ontwikkelingswerk voor een team dat het project mogelijk is begonnen met de verwachting van iets eenvoudigers.
De ChatBot API elimineert de middelste laag volledig. De API beheert sessiebeheer, conversatiestatus, berichtgeschiedenis en AI-antwoordgeneratie als een gehoste service. De ontwikkelaar bouwt alleen de frontend, een chatinterface die berichten naar de API stuurt en antwoorden weergeeft. Er is geen backend om te bouwen, geen database om te beheren, geen sessieinfrastructuur om te onderhouden. De API is de backend, en het beheert alles tussen het bericht van de gebruiker en het antwoord van de chatbot zonder dat servercode van de ontwikkelaar vereist is.
Deze architectuur, soms "API-first" of "backend-as-a-service" genoemd, is principieel niet nieuw. Betalings-API's hebben de behoefte om betalingsbackends te bouwen geëlimineerd. Verificatie-API's hebben de behoefte om verificatiebackends te bouwen geëlimineerd. ChatBot API past hetzelfde principe toe op conversatie-AI: de complexe, stateful, infrastructuur-zware backend wordt als service geleverd, en de ontwikkelaar richt zich uitsluitend op de gebruikerservaring. Het resultaat is dat een ontwikkelaar die een webpagina kan bouwen, een chatbot kan bouwen, omdat het bouwen van een webpagina de enige vereiste vaardigheid is.
Sessies en hoe gesprekken context over berichten behouden
Een chatbot die niet kan onthouden wat drie berichten geleden is gezegd, voert geen gesprek. Het beantwoordt geïsoleerde vragen, wat een fundamenteel ander en veel minder nuttig interactiepatroon is. Het verschil tussen een Q&A-bot en een conversatieagent is context: het vermogen om naar eerdere berichten te verwijzen, voort te bouwen op gevestigde informatie en een coherente thread over meerdere uitwisselingen heen te handhaven. Deze context is wat gesprekken natuurlijk maakt en wat complexe multi-stap interacties mogelijk maakt, zoals probleemoplossingsflows, geleide configuratie en progressieve informatieverzameling.
Het sessiesysteem in de ChatBot API biedt deze context automatisch. Wanneer een gesprek begint, maakt de API een sessie aan die wordt geïdentificeerd door een uniek sessietoken. Elk daaropvolgend bericht dat met dat sessietoken wordt verzonden, wordt behandeld als onderdeel van hetzelfde gesprek. De API behoudt de volledige gespreksgeschiedenis in de sessie, en elk nieuw antwoord wordt gegenereerd met kennis van alles wat eerder is gezegd. De gebruiker kan een vraag stellen, een antwoord ontvangen, een vervolgvraag stellen die naar het vorige antwoord verwijst, en een samenhangend antwoord ontvangen dat voortbouwt op de gevestigde context zonder herhaling of verwarring.
Sessiebeheer aan de kant van de ontwikkelaar vereist het opslaan en doorgeven van het sessietoken bij elke API-aanroep. Het token wordt ontvangen wanneer het gesprek begint en is opgenomen in elk daaropvolgend bericht. Dit is het enige stukje toestand dat de frontend moet beheren. De gespreksgeschiedenis, het contextvenster, de promptconstructie en alle andere stateful-bewerkingen gebeuren aan de API-kant. De verantwoordelijkheid van de frontend is beperkt tot het weten tot welke sessie het behoort, wat een enkele stringwaarde is die in het geheugen of in de sessieopslag van de browser is opgeslagen.
Sessieduurzaamheid zorgt ervoor dat gesprekken paginavernieuwingen, tabulatorwisseling en zelfs apparaatwijzigingen overleven. Zolang het sessietoken wordt bewaard en met het volgende bericht wordt doorgegeven, gaat het gesprek precies waar het was gebleven. Een gebruiker die een ondersteuningsgesprek op het bureaublad start, de browser sluit en pagina's uren later opnieuw opent, kan het gesprek naadloos hervatten omdat de sessie en de volledige geschiedenis ervan aan de API-kant aanwezig zijn. Deze persistentie wordt volledig afgehandeld door de sessie-infrastructuur van de API en vereist geen database of opslag aan de kant van de ontwikkelaar.
Callbacks en ontvangen van antwoorden zonder polling
Chatbot-antwoorden kosten tijd om gegenereerd te worden. De AI moet de gesprekscontext verwerken, relevante kennis ophalen, een prompt construeren, een antwoord genereren en de uitvoer opmaken. Afhankelijk van de complexiteit van de vraag en de grootte van de kennisbank kan dit overal van één tot meerdere seconden duren. Ondertussen moet de frontend weten wanneer het antwoord gereed is, zodat het dit voor de gebruiker kan weergeven.
De eenvoudigste benadering is synchrone aanvraag-antwoord: de frontend stuurt een bericht en wacht totdat het antwoord in dezelfde HTTP-aanvraag terugkomt. Dit werkt maar creëert een gebruikerservaring waarbij de interface tijdens het genereren bevriest, zonder voortgangsaanduiding en zonder de mogelijkheid om te annuleren of om te leiden. Voor snelle antwoorden is dit aanvaardbaar. Voor antwoorden die meerdere seconden duren, voelt de bevroren interface voor de gebruiker kapot aan.
Callback-URL's bieden een asynchrone alternatief die een veel betere gebruikerservaring oplevert. Bij het verzenden van een bericht naar de API voegt de ontwikkelaar een callback-URL in die de API aanroept wanneer het antwoord gereed is. De frontend-aanvraag wordt onmiddellijk geretourneerd met een bevestiging, zodat de interface een "typen" indicator of ander voortgangsvoeding kan weergeven terwijl het antwoord op de achtergrond wordt gegenereerd. Wanneer het antwoord gereed is, stuurt de API dit naar de callback-URL, waardoor de frontend het voltooide bericht weergeeft. De gebruiker ziet een natuurlijk gespreksritme: hun bericht verschijnt, een korte typindicator speelt af en het antwoord komt aan, allemaal zonder zichtbaar wachten of interfacebevriezing.
Voor ontwikkelaars die zuiver client-side applicaties bouwen (single-page apps, statische sites of webbrowsergebaseerde tools), kunnen callback-URL's worden gecombineerd met server-sent events of WebSocket-verbindingen om antwoorden rechtstreeks naar de browser te sturen. De API stuurt het voltooide antwoord naar het callback-eindpunt, dat het vervolgens naar de verbonden browsersessie duwt. Dit patroon vereist een minimaal server-side onderdeel (alleen de callback-ontvanger en het push-mechanisme) maar houdt alle gesprekslogica en toestandsbeheer aan de API-kant. De server van de ontwikkelaar verwerkt routing, niet logica.
Het callback-mechanisme ondersteunt ook streaming-antwoorden, waarbij de AI-uitvoer stapsgewijs wordt geleverd naarmate deze wordt gegenereerd in plaats van alles in één keer wanneer dit voltooid is. Streaming veroorzaakt het karakteristieke "real-time typen" effect dat gebruikers van chatinterfaces verwachten. Elk token of zin komt aan naarmate het wordt gegenereerd, wat een natuurlijke stroom creëert die aanvoelt alsof de chatbot in real-time denkt en reageert in plaats van voor meerdere seconden te verdwijnen en vervolgens een volledig antwoord te dumpen. Dit streaminggedrag is vooral belangrijk voor langere antwoorden waarbij de totale generatietijd vijf of meer seconden kan zijn.
Gespreksgeschiedenis en het bouwen van functies op opgeslagen berichten
Elk bericht in elke sessie wordt opgeslagen en is toegankelijk via de geschiedenisendpoints van de API. Deze opgeslagen geschiedenis dient meerdere doeleinden die verder gaan dan het mogelijk maken van gesprekscontext in een sessie. Het biedt het grondstof voor analyse, kwaliteitsbewaking, trainingsgegevensverzameling en gebruikerservaring-functies die waarde toevoegen aan de chatbot-inzet.
Analyse op basis van gespreksgeschiedenis onthult patronen in gebruikersgedrag en chatbot-prestaties. Welke vragen worden het meest gesteld? Welke antwoorden leiden tot vervolgvragen (wat aangeeft dat het oorspronkelijke antwoord onvoldoende was)? Welke gesprekken eindigen met een positieve oplossing en welke eindigen met de gebruiker die de sessie verlaat? Deze patronen, zichtbaar in aggregaat over honderden of duizenden gesprekken, sturen de voortdurende verbetering van de kennisbank en use-case-definities. Zonder gespreksgeschiedenis is dit verbeteringsproces afhankelijk van anekdotische feedback in plaats van systematische analyse.
Kwaliteitsbewaking maakt gebruik van gespreksgeschiedenis om specifieke interacties te identificeren waarbij de chatbot-prestaties onder verwachtingen uitkwamen. Een revisor kan door gemarkeerde gesprekken bladeren, de specifieke kenniskloof of use-case-mismatch identificeren die het probleem veroorzaakte, en doelgerichte verbeteringen aanbrengen die hetzelfde probleem in toekomstige gesprekken voorkomen. Deze gerichte verfijning is veel efficiënter dan algemene kennisbankverlaging omdat het op specifieke, aangetoonde zwakke punten ingaat in plaats van hypothetische.
Gebruikersgerichte functies gebouwd op gespreksgeschiedenis verbeteren de chat-ervaring zelf. Een weergave "recente gesprekken" stelt gebruikers in staat om terug te gaan naar eerdere sessies en de informatie die zij ontvingen te controleren. Een zoekfunctie in de gespreksgeschiedenis stelt gebruikers in staat specifieke informatie te vinden zonder dezelfde vraag opnieuw te stellen. Een exportfunctie stelt gebruikers in staat belangrijke gesprekken op te slaan als referentiedocumenten. Elk van deze functies is volledig gebouwd op basis van de geschiedenisgegevens die door de API worden geleverd en vereist geen aanvullende opslag of gegevensbeheer aan de kant van de ontwikkelaar.
De volledige frontend en hoe een backend-loze chat-interface eruitziet
Een volledige chatbot-frontend gebouwd op de ChatBot API bestaat uit een berichtweergavegebied, een tekstinvoer, een verzendknop en JavaScript (of gelijkwaardige client-side code) die deze interfaceelementen met de API-eindpunten verbindt. Het berichtweergavegebied geeft de gespreksgeschiedenis weer als afwisselende gebruiker- en botberichten. De tekstinvoer legt het bericht van de gebruiker vast. De verzendknop activeert de API-aanroep die het bericht verzendt en antwoordgeneratie initieert. Wanneer het antwoord aankomt (synchroon of via callback), wordt het toegevoegd aan het berichtweergavegebied en is de interface klaar voor de volgende uitwisseling.
De styling, indeling en interactieontwerp van deze frontend staan volledig onder controle van de ontwikkelaar. De API legt geen beperkingen op de visuele presentatie van de chat-interface. Het kan een chat-applicatie op volledig scherm, een zijpaneel, een zwevende widget, een modaal dialoogvenster of een ander UI-patroon zijn dat past bij het ontwerp van de toepassing. De API biedt de gespreksmotor; de ontwikkelaar voorziet het gezicht. Deze scheiding betekent dat het uiterlijk van de chatbot alleen wordt beperkt door de ontwerpvaardigheden van de ontwikkelaar, niet door de beperkingen van een voorgebouwd widgetframework.
Voor ontwikkelaars die liever geen aangepaste interface bouwen, zijn de sessie- en berichtindelingen van de API compatibel met open-source chat-UI-componenten die met minimale aanpassingen kunnen worden aangepast. React, Vue en vanilla JavaScript chatcomponenten zijn beschikbaar in openbare repositories, en het aansluiten ervan op de ChatBot API vereist het vervangen van hun standaardberichtverwerking met API-aanroepen. De authenticatie gebruikt het plugin-geheim, de berichten gebruiken het sessietoken en de weergave gebruikt wat voor weergavelogica de gekozen component biedt. Aanpassing duurt meestal minder dan een uur voor een ontwikkelaar die bekend is met het componentframework.
De afwezigheid van een backend in deze architectuur is het meest aanzienlijke praktische voordeel. Er is geen server om in te richten, geen database om te beheren, geen sessie-archief om te onderhouden, geen schaalinfrastructuur om in te stellen. De API handelt alle server-side-problemen af en de frontend draait volledig in de browser van de gebruiker. Dit betekent dat de chatbot kan worden geïmplementeerd op een statisch hostingplatform, een GitHub Pages-site, een Netlify-implementatie of een ander hostingomgeving dat HTML en JavaScript serveert. De operationele kosten zijn nul, wat de chatbot duurzaam maakt, zelfs voor projecten zonder speciaal infrastructuurbudget of operationeel team.
Veelgestelde vragen
Hoe lang blijven sessies bestaan voordat ze verlopen
Sessies blijven actief voor een configureerbare duur die standaard is ingesteld op vierentwintig uur inactiviteit. Een sessie die een bericht binnen dit venster ontvangt, laat de verlooptimer opnieuw instellen, zodat actieve gesprekken oneindig aanhouden. Verlopen sessies en hun geschiednis blijven toegankelijk via de geschiednis-API, maar kunnen geen nieuwe berichten meer ontvangen.
Kan gespreksgeschiedenis voor privacy-compliance worden verwijderd
Ja. Gespreksgeschiedenis kan via de API per sessie of per gebruiker worden verwijderd. Dit ondersteunt naleving van privacyregels zoals GDPR die gebruikers het recht geven om verwijdering van hun gegevens aan te vragen. Verwijdering is permanent en verwijdert alle berichten en metagegevens die aan de opgegeven sessies zijn gekoppeld.
Wat gebeurt er als de callback-URL niet bereikbaar is wanneer het antwoord gereed is
De API probeert callback-levering opnieuw uit te voeren met exponentiële backoff voor een configureerbaar aantal pogingen. Als alle pogingen mislukken, is het antwoord nog steeds beschikbaar via het gespreksgeschiedenis-eindpunt, waardoor de frontend als fallback op gemiste antwoorden kan peilen. Dit herstelmechanisme zorgt ervoor dat voorbijgaande netwerkproblemen niet tot verloren antwoorden leiden.
Is er een snelheidsbeperking op berichten per sessie
Snelheidslimieten worden op accountniveau in plaats van sessieniveau toegepast, wat misbruik voorkomt terwijl legitiem groot volume gebruik mogelijk is. De standaard snelheidslimiet is genereus genoeg voor normale gespreksinteracties. Accounts die ongewoon grote berichtvolumes verwachten, kunnen limietaanpassingen aanvragen via de API-beheerinterface.
Kan de frontend detecteren wanneer de chatbot het antwoord niet kent
Het API-antwoord bevat metagegevens die het zelfvertrouwensniveau van het antwoord aangeven en of relevante kennis in de kennisbank is gevonden. De frontend kan deze metagegevens gebruiken om de presentatie ervan aan te passen, zoals het weergeven van een disclaimer wanneer het zelfvertrouwen laag is of de gebruiker suggereren om contact op te nemen met menselijke ondersteuning wanneer de kennisbank geen relevante informatie voor de query bevat.
Ondersteunt de API rijke berichtindelingen zoals afbeeldingen of knoppen
De API ondersteunt gestructureerde antwoordindelingen die tekst, voorgestelde vervolgvragen en actiekoppelingen bevatten. De frontend interpreteert deze gestructureerde elementen en geeft deze weer volgens zijn eigen ontwerpconventies. Dit maakt rijke interactieve ervaringen mogelijk, zoals klikbare suggesties, inlinekoppelingen en opmaak inhoud, zonder dat de API de specifieke weergavemogelijkheden van de frontend hoeft te begrijpen.