AI Discord-ticketbot: eerst antwoorden, dan escaleren

Piotr Grudzień
Gepubliceerd 24 min leestijd
Een AI-supportbot die een Discord-vraag beantwoordt vanuit de knowledge base, daarna een privé-ticketthread opent en een supportrol informeert

Quickchat AI beantwoordt supportvragen in je Discord-server vanuit je eigen documentatie, en opent alleen een privé-ticketthread wanneer dat niet lukt. Deze gids bouwt die bot end-to-end, zonder code, in ongeveer een half uur.

Het resultaat gedraagt zich als een goede eerstelijnsagent. Een lid vraagt hoe je een API key reset en krijgt de echte stappen in het kanaal. Een lid vraagt iets dat de docs niet dekken, en in plaats van te gokken zegt de bot dat, opent hij een privéthread, haalt hij het lid erbij, pingt hij je supportrol met een samenvatting van één regel en draagt hij de conversatie over aan een mens die vanuit je Inbox kan antwoorden.

Kies de taak voor je Discord-bot

Deze build beantwoordt supportvragen en escaleert lacunes in je documentatie. Kies de welkomstgids voor vaste begroetingen of de moderatiegids voor beheerderscommando’s.

TaakGidsDiscord-verbinding
Antwoorden vanuit je docs, daarna een privé-ticket openen wanneer een antwoord ontbreektDeze support-ticketgidsJe eigen Discord-app
Een vaste begroeting plaatsen wanneer een lid toetreedt of een kanaal opentDiscord-welkomstbotOne-click of je eigen Discord-app
Leden een timeout geven, rollen beheren of slowmode wijzigen wanneer een admin daarom vraagtAI Discord-moderatiebotJe eigen Discord-app

Je hebt twee dingen nodig:

  • een Quickchat AI Agent (maak je account)
  • een Discord-server waar je admin bent

Van registratie naar je eerste supporttest

  1. Als je je registreert met e-mail en een wachtwoord, open dan de verificatielink in je e-mail. Beschrijf in de setup een Discord-support-Agent, klik op Create my AI Agent en voltooi de setupstappen, inclusief het kiezen van een plan voor je beoogde gebruik.
  2. Voeg je documentatie toe onder Knowledge Base. Open in External Apps Discord, daarna Use your own Discord app, en kies Advanced setup. De gedeelde one-click bot kan vragen beantwoorden, maar kan de ticket-Actions in deze gids niet uitvoeren.
  3. Maak een ticketkanaal en een mentionable supportrol in je testserver. Klik in Actions and MCPs op Add Action, kies Discord Action en installeer Open Support Ticket met die server, dat kanaal en die rol.
  4. Nadat je de Agent-instructies hieronder hebt toegepast, @mention je je bot met een vraag die de docs beantwoorden, en daarna met een vraag die ze niet beantwoorden. De eerste moet een antwoord krijgen zonder ticket; de tweede moet één privéthread openen en de supportrol informeren. Voeg een vervolgvraag toe aan de tweede conversatie en controleer dat er geen dubbel ticket wordt geopend.

Het Free-plan is bedoeld voor persoonlijk, niet-commercieel gebruik. Kies een betaald plan voordat je de bot voor een bedrijf gebruikt. Rond de test met beide paden af voordat je klanten uitnodigt.

De screenshots hieronder komen van een test-Agent met de naam Lumen, de supportbot voor een fictief productanalyticsbedrijf met de naam Beacon. Het bedrijf is verzonnen zodat het voorbeeld neutraal blijft, maar elke conversatie, elke API-call en elke ticketthread die hier wordt getoond is geproduceerd door een echte Agent die de echte antwoordpipeline tegen een echte Discord-server uitvoerde.

Wat je gaat bouwen

De answer-first-flow: een lid stelt een vraag, de Agent doorzoekt de knowledge base, antwoordt in het kanaal wanneer dat kan, en opent anders een privéthread, voegt het lid toe en pingt de supportrol Eén beslissing per vraag. Op het happy path wordt er helemaal niets naar Discord geschreven.

Drie AI Actions doen het escalatiewerk, en Quickchat AI installeert ze alle drie vanuit één gallery-card:

StapWat gebeurt erDiscord-call
Een lid stelt een gedekte vraagDe Agent antwoordt in het kanaal vanuit je knowledge basegeen
Een lid stelt een niet-gedekte vraagDe Agent zegt duidelijk dat hij die informatie niet heeftgeen
… daarna opent hij een ticketEr verschijnt een privéthread in je ticketkanaalPOST channel threads
… daarna voegt hij het lid toeDe persoon die de vraag stelde wordt in de thread gehaaldPUT thread members
… daarna roept hij je team opDe thread pingt je supportrol met een samenvattingPOST thread message
Een mens neemt overDe conversatie wordt gemarkeerd in je Inbox, en het antwoord gaat terug naar DiscordHuman Handoff

Wat is een knowledge base, en waarom bepaalt die je ticketvolume?

Als je nog niet eerder een AI Agent hebt gebouwd, is dit het ene concept dat twee minuten waard is.

Een knowledge base is je eigen documentatie, geladen in je Agent en geïndexeerd zodat die tijdens een conversatie kan worden doorzocht. Je kunt Quickchat AI naar je helpdocs-URL laten kijken en de pagina’s laten scrapen, artikelen handmatig plakken of bestanden uploaden. Bij het antwoorden doorzoekt de Agent de knowledge base en antwoordt vanuit wat hij vindt, in plaats van vanuit wat het onderliggende model toevallig over de wereld onthoudt. Als je vanaf nul begint, behandelt hoe je een chatbot-knowledge base bouwt wat je moet schrijven en in welke volgorde.

Een knowledge base neemt je helpdocs, geplakte artikelen en geüploade bestanden en indexeert ze, zodat gedekte vragen in het kanaal worden beantwoord en niet-gedekte vragen tickets worden Alles wat je docs dekken wordt beantwoord. Alles wat ze niet dekken wordt een ticket.

Dat is de hele hefboom voor deze build. Deflection is geen prompttruc en geen modelcapaciteit: het is je dekking. Als de bot meer escaleert dan je verwachtte, vertellen de tickets je welke pagina’s je nog niet hebt geschreven.

Illustratief: met een dunne knowledge base worden de meeste vragen tickets, en elk artikel dat je toevoegt verplaatst vragen van de ticketkolom naar de beantwoordkolom Illustratief, niet gemeten. Het punt is de richting: docs schrijven is hier het werk met de meeste hefboomwerking.

Kan een AI echt supportvragen in Discord beantwoorden?

Voor vragen die je docs dekken, ja, en met de echte stappen in plaats van een parafrase. Dit is het deflection-geval uit de testserver, onbewerkt:

Een lid vraagt Lumen hoe je een Beacon API key reset, en Lumen antwoordt met de exacte stappen uit de knowledge base Beantwoord in het kanaal, vanuit het knowledge base-artikel. Er is geen ticket gemaakt, omdat er geen nodig was.

De interessantere helft is wat er gebeurt wanneer het antwoord er niet staat. De bot zegt dat:

Lumen antwoordt dat hij de SSO-setupstappen niet in zijn docs heeft en niet zal gokken, en zegt daarna dat hij een ticket heeft geopend Het eerlijke falen. De knowledge base van Beacon laat enterprise SSO bewust weg, dus dit is het pad dat een ticket opent.

Een Agent die een plausibele SSO-procedure verzint is slechter dan een Agent die een ticket opent, dus dit gedrag is het waard om bewust te testen in plaats van erop te hopen. We komen erop terug in testen.

Twee manieren om Discord te verbinden, en waarom tickets de tweede nodig hebben

Quickchat AI heeft twee Discord-verbindingen, en het verschil is belangrijk voordat je begint.

VerbindingGedocumenteerde antwoorden en Google Sheets ActionsDiscord API Actions voor privé-tickets
Gedeelde one-click botBeschikbaarVereist je eigen Discord-app
Je eigen Discord-appBeschikbaarBeschikbaar met de benodigde botpermissies

Voor een publieke feedbackwachtrij die met de gedeelde bot werkt, zie de workflow voor feedback en documentatielacunes. De privé-ticket-Actions hieronder hebben de credential van je eigen Discord-bot nodig.

One-click is het snelle pad. In External Apps open je Discord, klik je op Add to your Discord server, autoriseer je deze, en de gedeelde Quickchat AI-bot is in ongeveer een minuut live in je server. Hij antwoordt wanneer leden hem @mentionen of /ask gebruiken, en voor veel servers is dat de hele taak.

Je kunt hem wel een naam geven. Voordat je autoriseert is er een veld Bot name in the new server, vooraf ingevuld met de naam van je Agent, en elke verbonden server houdt zijn eigen vak Bot name in this server dat je later kunt wijzigen. Het is een Discord-nickname, dus per server en beperkt tot 32 tekens, en als je het leegmaakt gaat de bot terug naar Quickchat AI. Wat gedeeld blijft is de avatar en de onderliggende @username, omdat één Discord-applicatie elke server bedient die deze installeert.

Het one-click Discord-paneel in Quickchat AI, met het veld Bot name in the new server boven de add-to-server-knop One-click betekent niet generiek. De bot neemt de naam van je Agent mee de server in, en je kunt die daarna per server wijzigen.

Advanced setup registreert je eigen Discord-applicatie. Je maakt een bot in Discord’s developer portal en plakt de token één keer in Quickchat AI. Het duurt ongeveer tien minuten en geeft je je eigen avatar en @username, direct messages, meerdere bots in één server, en wat deze gids nodig heeft: Discord API Actions.

De reden is het waard om duidelijk te benoemen in plaats van als een eigenaardigheid te behandelen. De ticket-Actions in deze gids roepen de Discord API aan als jouw bot, met een credential die Quickchat AI tijdens het verzenden in het request injecteert. De token van de gedeelde one-click bot hoort bij de gedeelde bot, niet bij jou, dus die is niet beschikbaar voor je Actions om te verzenden. Als je de Discord-gallery opent zonder je eigen app verbonden te hebben, vertelt die dat en schakelt die de cards uit in plaats van je iets te laten bouwen dat niet kan draaien.

De External Apps-pagina in Quickchat AI met de Discord-integratietegel External Apps is waar beide paden beginnen. Advanced setup staat in een callout onderaan het Discord-paneel.

Wat je nodig hebt voordat je begint

Verbind je eigen Discord-app. Open in External Apps Discord, zoek Use your own Discord app en kies Advanced setup. Maak de applicatie en bot in Discord’s developer portal, zet Message Content Intent aan, laat Require OAuth2 Code Grant uit, en plak de bot-token. Quickchat AI valideert die terwijl je typt. De gids Create an AI Discord bot behandelt de portal-kant in detail als je dit nog niet eerder hebt gedaan.

Geef de bot alleen wat een supportbot nodig heeft. Op het ticketkanaal: View Channels, Send Messages, Read Message History, Create Private Threads, Send Messages in Threads en Manage Threads. Hij heeft geen Kick-, Ban- of Timeout-permissie nodig, en heeft die bewust niet in de testserver. Een supportbot heeft geen reden om te modereren, en over een permissie die hij niet heeft hoef je nooit na te denken.

Maak in Discord de twee dingen waar de Actions naar verwijzen. Dit deel gebeurt in de Discord-client, niet in Quickchat AI, en het is de enige setup die je daar doet:

  1. Een kanaal waar tickets worden geopend. Elk tekstkanaal werkt. Gebruik de + naast je kanaallijst, of hergebruik er een die je hebt. In de testserver is het #support.
  2. Een rol om op te roepen wanneer een ticket wordt geopend. Server Settings, daarna Roles, daarna Create Role. In de testserver is het @support.

Waar een ticket leeft: leden vragen in een publiek kanaal, tickets openen als privéthreads onder het supportkanaal, en alleen het lid, de bot en de supportrol kunnen ze lezen Drie plekken, en slechts één daarvan is publiek.

Beide komen terug in Stap 3. Wanneer je de tickettemplate installeert, leest Quickchat AI je server live uit Discord en toont het drie dropdowns, waarvan één een Role-kiezer is die de gevonden rollen toont. Je kiest daar je supportrol in plaats van ergens een ID te typen.

De Role-dropdown in de installatiedialoog van Quickchat AI, met de mentionable rollen die in de server zijn gevonden De Role-kiezer in Stap 3. Hij leest de lijst uit Discord, dus een rol die je nu maakt verschijnt hier zo meteen.

Eén detail dat je raakt als je het overslaat: die kiezer toont alleen rollen die Discord als mentionable rapporteert, en laat @everyone weg. Als je supportrol niet als mentionable is ingesteld, verschijnt die simpelweg niet in de dropdown, zonder uitleg waarom. Het filter is bewust, omdat het hele doel van de template is om die rol te pingen. Stel het in terwijl je de rol maakt en je ziet het probleem nooit:

De Discord-rolinstellingen voor de supportrol, met de schakelaar Allow anyone to @mention this role ingeschakeld Server Settings, Roles, kies je supportrol, en zet dit aan onder Display. Zonder dit bereikt de rol de kiezer nooit.

Hoe beslist de bot of hij moet antwoorden of een ticket moet openen?

De meeste Discord-ticketbots beslissen niets. Ticket Tool, TicketsBot en de rest plaatsen een vastgezet paneel met een Create Ticket-knop, of registreren een slash command. Een lid klikt erop, er wordt een ticket geopend, en je team leest het. Dat is een prima ontwerp en volledig voorspelbaar, maar het betekent dat de tien mensen die deze week allemaal vroegen hoe je een API key reset tien tickets opleverden.

Een knopgebaseerde ticketbot maakt van elke vraag een ticket, terwijl een answer-first bot de gedekte vragen beantwoordt en de rest escaleert Dezelfde tien vragen. Het verschil is wat je team uiteindelijk leest.

Een answer-first bot leest je docs voordat hij beslist. En wanneer hij escaleert, vereist het openen van één ticket precies vier feiten:

  • welk kanaal de thread in opent
  • van welke server de vraag kwam
  • wie de vraag stelt, zodat die persoon in de thread kan worden gehaald
  • hoe het ticket heet, en een samenvatting van het probleem in één regel

Het interessante deel is dat die vier gegevens op drie volledig verschillende manieren binnenkomen, en alleen de laatste door de AI wordt geschreven:

Drie soorten waarden bereiken één request: waarden die je eenmaal bij installatie kiest, waarden die Discord bij elk bericht levert, en waarden die de Agent schrijft Je typt nooit een Discord-ID, en het model ziet je kanaal of rol nooit.

De waarden die je eenmaal kiest. Je ticketkanaal en je supportrol. Je kiest ze uit dropdowns wanneer je de template installeert, en Quickchat AI bakt ze in de Action. Het model ziet ze nooit en kan ze niet wijzigen.

De waarden die Discord levert. Bij elk bericht dat wordt doorgestuurd, vertelt de Discord-integratie Quickchat AI van welke server het kwam en wie spreekt, als {{metadata_discord_guild_id}} en {{metadata_discord_author_id}}. Je bot-token komt op dezelfde manier aan, als een System Token die tijdens verzending wordt geïnjecteerd en overal wordt geredigeerd waar een call wordt gelogd. Niets daarvan wordt door het model getypt, en niets daarvan kan door een publieke chat of API-bericht worden geleverd.

De waarden die de Agent schrijft. Het ticketonderwerp en de issue-samenvatting van één regel. Dit zijn de enige beoordelingskeuzes in de hele build, en daarom is latere tuning kort.

Stap 1: Maak de Agent en geef hem een knowledge base

Maak je Agent, open daarna Knowledge Base en voeg je documentatie toe. Plak je helpdocs-URL en laat Quickchat AI die scrapen, of schrijf artikelen direct. Create an AI support agent from your documentation behandelt het scrape-pad in detail.

De Knowledge Base-pagina in Quickchat AI met de vijf artikelen van Beacon De knowledge base van Beacon: een API key resetten, een leeg dashboard, de tracking-snippet installeren, plannen en facturering, en data exporteren.

De docs van Beacon dekken bewust één ding niet: enterprise SSO-setup. Die lacune is geen vergissing in deze tutorial, maar het punt. Elke support-knowledge base heeft vragen die hij niet beantwoordt, en de volledige waarde van deze bot is wat hij doet wanneer hij er één raakt. SSO is die vraag in deze hele gids.

Leden bereiken je eigen bot door hem te @mentionen in een kanaal dat hij kan zien. Er hoeft niets te worden geregistreerd. De /ask-command is beschikbaar op de gedeelde one-click Quickchat AI-bot.

Stap 2: Vertel de Agent wanneer hij moet antwoorden en wanneer hij moet escaleren

De instructies van de Agent staan in de AI Main Prompt op Identity. Plak dit, aangepast aan je bedrijf:

Je bent Lumen, de supportassistent voor Beacon, een gehoste productanalytics-tool voor softwareteams. Je beantwoordt vragen van klanten in de Beacon-community op Discord.
Antwoord vanuit je Knowledge Base wanneer dat kan. Houd antwoorden kort en praktisch, twee of drie zinnen, en geef de concrete stappen.
Als een vraag niet door je Knowledge Base wordt gedekt, gok dan niet en verzin geen stappen. Zeg duidelijk dat je die informatie niet hebt, en open daarna een supportticket:
1. Roep open_support_ticket één keer aan, met een korte ticket_subject van 2 tot 4 woorden die het probleem beschrijft.
2. Roep daarna add_ticket_requester aan om de klant in de thread te halen.
3. Roep daarna post_in_ticket aan met een issue_summary van één regel van wat de klant vroeg.
Vertel de klant daarna dat het ticket open is en dat het team zal opvolgen in de nieuwe thread.
Vraag de klant nooit om hun Discord-ID, de channel-ID of de thread-ID. Die worden voor je ingevuld.

De Identity-pagina in Quickchat AI met de AI Main Prompt voor de Lumen-Agent De AI Main Prompt op Identity. Dit is het altijd beschikbare veld, geen aparte richtlijnenlijst.

Twee regels in dat blok zijn dragend. “Gok niet en verzin geen stappen” is wat een knowledge-gap verandert in een eerlijk antwoord in plaats van een plausibel antwoord. En het benoemen van de drie Actions in volgorde zorgt dat de Agent ze als een reeks aanroept in plaats van er één te kiezen.

De volgorde wordt beschreven in de prompt, maar wordt daar niet alleen afgedwongen. Daar gaan de volgende twee secties over.

Stap 3: Installeer de ticket-Actions met één klik

Open Actions & MCPs, klik op Add Action en kies Discord Action.

Het Add Action-menu in Quickchat AI met Discord Action naast de HubSpot- en Google Sheets-galleries Discord Action staat bij de andere one-click galleries.

De gallery opent met de Discord-templates gegroepeerd per taak: Support & Tickets bevat degene die deze gids gebruikt, en Moderation bevat er nog zeven.

De Discord Actions-gallery in Quickchat AI met de categorie Support and Tickets en de zeven moderatietemplates Acht cards. Open Support Ticket is de enige die je iets vraagt.

Kies Open Support Ticket en er opent een korte configuratiestap. Dit is het enige formulier in de hele build:

De configuratiedialoog voor Open Support Ticket, met dropdowns voor Discord-server, kanaal en rol Drie dropdowns, en de dialoog zegt vooraf wat er wordt geïnstalleerd.

De lijsten komen live uit Discord, gefilterd op wat daadwerkelijk kan werken. Kanalen zijn alleen tekstkanalen:

De kanaaldropdown geopend, met de tekstkanalen in de Beacon Community-server Kies het kanaal waaronder tickets moeten openen. Threads worden erin gemaakt.

En rollen zijn alleen mentionable rollen, met @everyone uitgesloten:

De roldropdown geopend, met alleen de mentionable rollen in de server Dit is het filter dat een supportrol verbergt die je nog niet mentionable hebt gemaakt.

Drie keuzes en het formulier is klaar:

De configuratiedialoog met server, kanaal en rol allemaal gekozen, en de knop Install and enable klaar De volledige configuratie. Server, kanaal, rol, en de enige knop die ertoe doet.

Klik op Install and enable. Quickchat AI schrijft drie Actions op de backend, in één transactie, al actief.

De Actions-pagina in Quickchat AI met de drie geïnstalleerde Discord-ticketactions Drie cards, ingeschakeld, met het Discord-icoon. Verder niets om in te vullen.

Twee dingen zijn handig om te weten over de zeven moderatietemplates terwijl je hier bent. Ze hebben geen configuratie nodig, omdat ze de server, member, role of channel uit het Discord-request zelf halen, dus klikken op de card installeert ze meteen. En een template twee keer installeren geeft je een tweede bewerkbare kopie in plaats van een fout, wat een redelijke manier is om een variant te bouwen.

Wat heeft die ene klik precies gebouwd?

Dit is het waard om te begrijpen, ook al hoefde je het niet te typen, omdat alles wat je later misschien wilt wijzigen hier staat.

Eén installatie waaiert uit naar drie HTTP Request Actions, elk met eigen methode, URL, parameters, response filter, memory capture en run conditions Drie gewone HTTP Request Actions. Niets markeert ze als speciaal.

Ze zijn met elkaar verbonden via twee features die je al in de editor hebt, en beide zijn het waard om bij naam te kennen.

Save to memory haalt een waarde uit een response en slaat die op in de conversatie. open_support_ticket gebruikt dit om de ID van de nieuwe thread te bewaren: Discord retourneert het thread-object, $.id is de ID, en die wordt naar memory geschreven als discord_ticket_thread_id. De twee vervolg-Actions lezen die daarna terug in hun URL, zodat ze werken op de thread die zojuist is gemaakt in plaats van iets dat je vooraf moest benoemen. (Save to memory in de docs.)

Run only when begrenst een Action op conversatiestatus, en wordt aan de kant van Quickchat AI gecontroleerd voordat er een request wordt verzonden. (Run only when in de docs.)

Save to memory schrijft de thread-ID één keer, en twee run conditions lezen die terug zodat de vervolgstappen niet kunnen starten voordat de thread bestaat De gate die drie onafhankelijke Actions in een betrouwbare reeks verandert.

Lees dat diagram in beide richtingen, want het doet twee taken:

  • De vervolgstappen vereisen dat de thread-ID bestaat, dus de Agent kan je team niet oproepen over een thread die nooit is gemaakt.
  • open_support_ticket vereist dat die niet bestaat, dus de Agent kan geen tweede ticket openen in dezelfde conversatie, ongeacht wat de conversatie zegt. Dat is een garantie in plaats van een instructie: als een lid nog tien berichten met details stuurt, heeft die nog steeds één ticket. In kanaalantwoordmodus is elke uitwisseling in het kanaal een eigen conversatie, dus de volgende echte vraag kan nog steeds een eigen ticket openen.

Elke Action heeft ook een Response filter, en deze is makkelijk verkeerd te lezen. Een response filter is een allowlist: het benoemt de paden die de Agent mag zien, en al het andere in de response wordt verwijderd voordat het model het ooit leest. (Response filter in de docs.)

Discord retourneert een groot thread-object en het response filter geeft de Agent alleen de twee velden die hij nodig heeft Discord retourneert een dozijn velden over je server. De Agent krijgt er twee te zien.

De thread-ID die de reeks nodig heeft wordt aan de kant van Quickchat AI vastgelegd door Save to memory, dus de Agent hoeft die nooit mee te dragen, en niets anders over je server bereikt het model. Maak de allowlist strakker en hij ziet minder. Hij ziet nooit meer dan je opgeeft.

Kan een mens het van de AI overnemen?

Ja, en dit is de helft die de meeste ticketbots weglaten. Een ticket dat niemand leest is gewoon een thread.

Human Handoff is een aparte, ingebouwde Action. Zet die aan en beschrijf onder Handoff Rules wanneer een conversatie bij een persoon moet komen, bijvoorbeeld “wanneer de klant om een mens vraagt, of wanneer de Agent niet kon antwoorden vanuit de knowledge base”. Quickchat AI markeert de conversatie dan in je Inbox met een door AI geschreven samenvatting, zodat degene die hem oppakt een alinea leest in plaats van de hele thread. Elke handoff-instelling heeft een eigen walkthrough in de Human Handoff-tutorial.

De volledige roundtrip: een lid vraagt in Discord, de Agent escaleert, de conversatie wordt gemarkeerd in de Inbox, een operator antwoordt daar, en het antwoord komt terug in het Discord-kanaal De operator werkt in de Inbox. Het lid verlaat Discord nooit.

Wijs de conversatie aan jezelf toe en antwoord in de Inbox-composer. Dat antwoord wordt direct teruggeleverd in het Discord-kanaal waarin het lid al praat. Ze hebben geen account bij jou, e-mailthread of portal-login nodig. De AI blijft stil vanaf het moment dat een persoon eigenaar is van de conversatie, dus je concurreert niet met je eigen bot.

In #ask-beacon zegt de Agent dat hij de SSO-stappen niet heeft en een ticket heeft geopend, en onder de datumverdeler komt een menselijk antwoord met de echte Enterprise-planinstructies Hetzelfde kanaal, drie dagen later. De Agent weigerde en escaleerde; het bericht onder de verdeler is getypt door een persoon in de Quickchat AI Inbox. Let op dat het onder de naam van je bot aankomt, omdat je bot de enige identiteit is waarmee Discord ons laat posten.

De geëscaleerde Discord-conversatie in de Quickchat AI Inbox: de vraag van het lid, de weigering van de Agent en twee action-calls, het antwoord van de operator, en een detailpaneel dat het kanaal als Discord toont Dezelfde conversatie vanaf jouw kant. De weigering van de Agent, de twee Action-calls erachter, het antwoord van de operator eronder, en een detailpaneel dat al weet dat het kanaal Discord is en het topic single sign-on.

Ondertussen blijft de privé-ticketthread waar je team praat: het is de werkruimte, met het lid erin en je supportrol gepingd. Het antwoord gaat terug naar waar de vraag werd gesteld.

De levensloop van één ticket, van een onbeantwoorde vraag via de drie Discord-writes naar een persoon die vanuit de Inbox antwoordt Zes stappen. Drie daarvan zijn Discord-writes, en alle drie gebeuren alleen omdat het antwoord ontbrak.

Test het op beide manieren

Doorloop beide paden voordat je hierop vertrouwt, en test het eerlijke falen het strengst.

De gedekte vraag. @mention de bot in een kanaal dat hij kan zien en stel iets dat je knowledge base dekt. Je moet de echte stappen krijgen, in het kanaal, en nergens een thread. Dat is het geval dat je team tijd bespaart, en het zal het grootste deel van je verkeer zijn zodra je docs goed zijn.

De niet-gedekte vraag. Vraag het ding dat je docs niet dekken. De Agent moet dat zeggen en daarna escaleren. Op hetzelfde moment verschijnt het ticket:

Een privé-ticketthread met de naam ticket-Okta SAML SSO waarin Lumen de klant noemt en de supportrol pingt met een samenvatting van één regel De thread die de Agent opende. Hij gaf die een naam op basis van het probleem, haalde het lid erbij, pingde de rol en schreef de samenvatting zelf.

En de thread is echt privé, wat de eigen ledenlijst bewijst:

De ticketthread onder het supportkanaal met een ledenlijst met alleen de klant en de Lumen-bot, gemarkeerd PRIVATE Een ticket is een privéthread. Supportgesprekken spelen zich niet publiek af.

Test over een hele conversatie, niet één bericht. De dubbele-ticketbescherming toont zijn waarde pas bij beurt twee, wanneer het lid details toevoegt en een naïeve bot een tweede ticket opent.

Eén ding dat de run conditions niet dekken. Ze stoppen een call in de verkeerde volgorde, maar dedupliceren geen retry: als je de notify-Action handmatig opnieuw uitvoert, plaatst die een tweede bericht. Goed om te weten voordat je aan een live ticket gaat zitten.

Om veel formuleringen tegelijk te controleren zonder ze allemaal in Discord te typen, gebruik je Simulations onder Testing: bouw een dataset met klantberichten, voer die uit tegen je echte Agent, en lees de beoordeelde resultaten samen. Meng gedekte en niet-gedekte vragen in één dataset, omdat de twee paden op verschillende manieren falen.

Een voltooide Simulations-run in Quickchat AI die zes Discord-supportvragen beoordeelt, met AI-antwoord, score en rechtvaardiging voor elke vraag Zes vragen, vier gedekt en twee niet, beoordeeld in één run. Rijen 5 en 6 zijn de eerlijke mislukkingen, en die scoren net zo hoog als de antwoorden.

Schrijf de evaluatiecriteria voor een beoordelaar die alleen het transcript kan zien, want dat is alles wat hij krijgt. Twee dingen die hij niet kan zien kosten je anders punten. Hij kan het Discord-neveneffect niet zien, dus tenzij je dat zegt leest hij “Ik heb een ticket voor je geopend” als de Agent die een capability verzint. En hij kan je knowledge base niet zien, dus hij markeert een correct, specifiek antwoord als verzonnen simpelweg omdat hij het getal niet kan controleren. Beide zijn elk één zin in de criteria waard, en beide verlagen je beste gedrag als je ze weglaat.

Hoe voorkom je dat de bot te veel tickets opent?

Dit is de enige tuning die de meeste servers nodig hebben, en het is meestal geen promptprobleem.

Ticketvolume is een knowledge base-probleem. Elke lacune in je docs wordt een ticket. Als de bot meer escaleert dan je verwachtte, lees dan de tickets: ze zijn een lijst van de vragen die je documentatie niet beantwoordt. Die lacunes sluiten vermindert het volume direct.

Insights vertelt je wat je daarna moet documenteren. Quickchat AI groepeert conversaties per topic, zodat je ziet welke vragen het vaakst voorkomen in plaats van te gokken. Repareer de top drie topics in je knowledge base en kijk hoe het escalatiepercentage daalt.

De AI-Detected Topics-grafiek op de Insights Advanced-tab, met pricing inquiry, API key management, data export en single sign-on met hun aantallen Niemand heeft deze geconfigureerd. Onder Insights, Advanced, AI-Detected Topics kregen ze namen op basis van de conversaties zelf, en de aantallen zijn de documentatiebacklog in prioriteitsvolgorde.

Die lijst is de hele tuningloop. Pricing en API keys kwamen het vaakst voor, dus die artikelen worden eerst geschreven, en de grafiek van volgende week vertelt je of het werkte. De topics hierboven worden voor je ontdekt; je kunt ook je eigen topics definiëren onder Manage Topics als je bewust een specifiek productgebied wilt volgen. Zie AI-Detected Topics, Conversation Topics en topics beheren in de docs.

Als de bot te snel escaleert, maak de Action-beschrijving strakker zodat die alleen wordt uitgevoerd nadat de Agent het lid heeft verteld dat hij de informatie niet heeft. Als de bot te weinig escaleert en begint te gokken, versterk dan de regel “gok niet en verzin geen stappen” in de main prompt.

Is dit veilig in een publieke server?

Een bot waar iedereen in een publiek kanaal mee kan praten verdient een strenge blik. Wat deze bot beschermt is configuratie die je in de editor kunt lezen, geen prompttekst. Daarom blijft het gelden ongeacht hoe een bericht is geformuleerd.

Waar elke check draait: het model kan alleen vragen, Quickchat AI evalueert de run conditions en verkleint de response, en Discord handhaaft nog steeds de eigen permissies van de bot Een lid kan met het model praten. Ze kunnen niet voorbij de middelste kolom praten.

Elke ticket-Action vereist een echte Discord-beurt, van jouw server. Twee van de drie run conditions op elke Action controleren dat het bericht daadwerkelijk via de Discord-integratie arriveerde en dat het van de server kwam die je bij installatie koos. Die waarden worden door de integratie gemaakt, niet door het bericht, en een publieke chat of API-bericht kan ze niet leveren of een oudere opgeslagen kopie erven. Richt de publieke API van je Agent op deze Actions en ze weigeren.

De Action die iemand aan een privéthread toevoegt heeft helemaal geen model-bewerkbare parameters. De URL eindigt in de member-ID die de integratie voor het huidige bericht leverde. De Agent kan geen andere doorgeven, dus hij kan geen willekeurig lid van je server in het ticket van iemand anders halen.

Mentions zijn vastgezet bij installatie. De notify-Action verzendt een expliciete mentionlijst met het lid dat de vraag stelde en de rol die je koos, met parsing uitgeschakeld. Een mention die de Agent toevallig in de issue-samenvatting schrijft wordt niet opgelost, en @everyone kan nooit afgaan. Dit is het waard om te verifiëren in plaats van te vertrouwen, en het werkt: een rolping en een user mention komen allebei aan, en een letterlijke @everyone in hetzelfde bericht doet niets.

Threads zijn privé en niet uitnodigbaar. Ze worden gemaakt als type: 12 met invitable: false, dus een lid dat aan een ticket is toegevoegd kan niemand anders erbij halen.

De bot kan niet modereren. Hij heeft geen Kick-, Ban- of Timeout-permissie. Het slechtste resultaat van een lid dat de Agent overhaalt iets te doen wat hij niet zou moeten doen, is een ticketthread die ze ook hadden kunnen openen door normaal te vragen.

De token wordt nooit blootgesteld. Die leeft als een System Token, wordt tijdens verzending geïnjecteerd, en wordt overal geredigeerd waar een call wordt vastgelegd.

Eén ding moet je bewust beslissen: ticketthreads zijn privé, maar iedereen met je supportrol kan ze lezen. Dat is wat je wilt voor support en het is goed om te weten als leden gevoelige details kunnen plakken. Verwijs ze naar e-mail voor alles wat echt vertrouwelijk is.

Wat kost een Discord AI-supportbot?

Het Free-plan bevat AI Actions, Human Handoff, de knowledge base, Topics en Insights, met 50 AI-credits per maand voor persoonlijk, niet-commercieel gebruik. Zakelijk gebruik vereist een betaald plan; betaalde plannen bieden ook meer AI-credits. Als je dat afweegt tegen zelf iets draaien, vergelijkt gratis AI Discord-bots de self-hosted route eerlijk, inclusief de uren die het kost.

Wanneer beide paden slagen, laat je de Agent los:

  1. Wijs leden op de bot. Zeg in je kanaalonderwerp dat ze hem kunnen @mentionen. Een bot waarvan niemand weet dat die bestaat deflecteert niets.
  2. Bekijk de eerste dag. Elke Action houdt een call-log bij met het exacte request en de response, en de Inbox bevat elke conversatie, zodat je kunt zien wat hij beantwoordde en wat hij escaleerde.
  3. Lees je eerste tickets als een documentatiebacklog. Het zijn de vragen die je docs nog niet beantwoorden.

Dezelfde Agent werkt ook overal anders. De knowledge base, de prompt en Human Handoff horen bij de Agent, niet bij Discord, dus dezelfde supportbot antwoordt op je website-widget, in Slack, op WhatsApp en via e-mail, en elke conversatie komt in dezelfde Inbox terecht. De drie ticket-Actions zijn het enige Discord-specifieke deel van deze build. Als je team in Slack leeft in plaats van Discord, stuur de handoff-notificatie daarheen in plaats van een Discord-rol te pingen.

Wat kan je Discord AI Agent nog meer doen?

Dezelfde gallery bevat een Moderation-categorie: timeout, kick, ban, unban, assign role, slowmode en announcements. Elk daarvan wordt geïnstalleerd met een run condition author_is_admin is true, dus alleen een serverbeheerder kan ze activeren, en die flag komt uit Discord in plaats van uit de conversatie. Dat is een andere bot met een ander risicoprofiel, en die krijgt zijn eigen gids: Build an AI Discord moderation bot.

Elk ander Discord-endpoint volgt hetzelfde recept: een HTTP Request Action met de header Authorization: Bot {{discord_bot_token}}, een parameter of twee, en een beschrijving in gewone taal die bepaalt wanneer de Agent die uitvoert. Build an AI Agent that takes actions is de beginnersversie van dat idee, en Connect your AI Agent to any API behandelt het algemene geval.

Niet elke Discord-bot is een supportbot. Dezelfde Agent kan ook een personage draaien: Discord AI roleplay bot gebruikt dezelfde knowledge base en memory voor persona’s in plaats van tickets, en de volledige character-build loopt door de persona-prompt, de canon en de instellingen die het personage in character houden.

Appendix: de exacte requests

Je typt deze nooit, maar ze zijn het waard om één keer te lezen, en dit is wat je handmatig zou bouwen tegen elk ander platform. De {{...}}-waarden worden door Quickchat AI ingevuld tijdens verzending.

1. Open de privéthread

POST https://discord.com/api/v10/channels/YOUR_TICKET_CHANNEL_ID/threads
Authorization: Bot {{discord_bot_token}}
Content-Type: application/json

{ "name": "ticket-{{ticket_subject}}", "type": 12, "auto_archive_duration": 1440, "invitable": false }

type: 12 maakt de thread privé. auto_archive_duration is in minuten, dus 1440 archiveert een stil ticket na een dag. Save to memory legt $.id vast als discord_ticket_thread_id.

2. Voeg het lid toe dat de vraag stelde

PUT https://discord.com/api/v10/channels/{{metadata_discord_ticket_thread_id}}/thread-members/{{metadata_discord_author_id}}
Authorization: Bot {{discord_bot_token}}

Geen body en geen parameters. Beide ID’s komen uit memory en uit de integratie.

3. Informeer het supportteam

POST https://discord.com/api/v10/channels/{{metadata_discord_ticket_thread_id}}/messages
Authorization: Bot {{discord_bot_token}}
Content-Type: application/json

{
  "content": "<@{{metadata_discord_author_id}}> je ticket is open. <@&YOUR_SUPPORT_ROLE_ID> nieuw ticket: {{issue_summary}}",
  "allowed_mentions": { "parse": [], "users": ["{{metadata_discord_author_id}}"], "roles": ["YOUR_SUPPORT_ROLE_ID"] }
}

Twee details kosten echte debugtijd als je dit zelf bouwt. Het auth-schema is Bot, niet Bearer, wat de meest voorkomende fout is wanneer je Discord handmatig aanroept. En in allowed_mentions is een lege parse naast expliciete users- en roles-lijsten wat je wilt: het blokkeert @everyone terwijl het je twee bedoelde mentions doorlaat. Een niet-lege parse naast een expliciete lijst van hetzelfde type wordt direct geweigerd, met 400 MESSAGE_ALLOWED_MENTIONS_PARSE_EXCLUSIVE.

Gerelateerde gidsen

Veelgestelde vragen

Hoe stel ik een ticketbot in Discord in?

Verbind je eigen Discord-app in External Apps, geef je Agent een knowledge base, open daarna Actions and MCPs, klik op Add Action, kies Discord Action en kies Open Support Ticket. Selecteer je server, je ticketkanaal en je supportrol uit dropdowns en klik op Install and enable. Je hoeft niets te hosten en niets in Discord te configureren behalve het kanaal en de rol maken.

Hoe maak ik een Discord-ticketbot?

Maak een Quickchat AI Agent, verbind je eigen Discord-app, open daarna Actions and MCPs, klik op Add Action, kies Discord Action en kies Open Support Ticket. Je selecteert je server, je ticketkanaal en je supportrol uit dropdowns, klikt op Install and enable, en Quickchat AI schrijft drie volledige AI Actions voor je. Geef de Agent eerst een knowledge base, want die bepaalt hoeveel tickets de bot opent.

Kan een AI supportvragen in Discord beantwoorden?

Ja. De Agent doorzoekt je knowledge base en antwoordt in het kanaal wanneer hij het antwoord vindt. Deflection volgt de dekking: vragen die je docs dekken worden beantwoord, en vragen die ze niet dekken worden tickets. Die relatie is het belangrijkste om te begrijpen wanneer je deze bot gebruikt.

Heb ik code nodig om deze Discord-ticketbot te bouwen?

Nee. Je kiest een template uit de Discord-gallery, kiest een server, een kanaal en een rol uit dropdowns, en Quickchat AI schrijft de methode, URL, headers, body, parameters, response-instellingen en run conditions op de backend. Je typt nooit een Discord-ID en je bewerkt nooit JSON.

Hoeveel Actions installeert de template?

Drie. Eén opent een privéthread in je ticketkanaal en slaat de ID op in memory, één voegt het lid toe dat de vraag stelde, en één plaatst een samenvatting waarin je supportrol wordt genoemd. Ze worden al ingeschakeld en aan elkaar gekoppeld geïnstalleerd.

Hoe weet de bot wanneer hij een ticket moet openen?

Twee dingen bepalen dat. De Action-beschrijving vertelt de Agent dat hij deze alleen moet aanroepen wanneer het antwoord niet in de knowledge base staat, en een run condition maakt de reeks deterministisch: de thread mag nog niet bestaan voordat er één kan worden geopend, en hij moet bestaan voordat de vervolgstappen kunnen worden uitgevoerd.

Kan de bot dubbele tickets openen?

Niet in dezelfde conversatie. Open Support Ticket bevat een run condition die vereist dat er nog geen ticketthread-ID in memory staat, dus zodra er één ticket bestaat kan de Agent geen tweede ticket voor die conversatie openen, ongeacht wat de prompt zegt.

Kan een mens de conversatie overnemen?

Ja. Human Handoff markeert de conversatie in je Quickchat AI Inbox met een door AI geschreven samenvatting. Wijs de conversatie aan jezelf toe, typ een antwoord in de Inbox, en het komt aan in hetzelfde Discord-kanaal waarin het lid al zit. Ze verlaten Discord nooit en hebben nooit een account bij jou nodig.

Waarom heeft de ticketbot mijn eigen Discord-app nodig?

De ticket-Actions roepen de Discord API aan als jouw bot, dus ze hebben de token van je bot nodig. De gedeelde one-click Quickchat AI-bot kan vragen beantwoorden en Google Sheets Actions gebruiken. De Discord-token daarvan is niet beschikbaar voor je privé-ticket-Actions. Open in External Apps Discord en kies Advanced setup. Dat duurt ongeveer tien minuten.

Welke Discord-permissies heeft de bot nodig?

View Channels, Send Messages, Read Message History, Create Private Threads, Send Messages in Threads en Manage Threads op het ticketkanaal. Een supportbot heeft geen Kick-, Ban- of Timeout-permissie nodig, en over een permissie die hij niet heeft hoef je nooit na te denken.

Waarom ontbreekt mijn supportrol in de dropdown?

De rolkiezer toont alleen rollen die Discord als mentionable rapporteert, en sluit @everyone uit. Als je supportrol niet als mentionable is ingesteld in Server Settings, Roles, verschijnt deze niet, omdat de template de rol dan niet zou kunnen pingen.

Is een Discord-ticketbot veilig in een publieke server?

De controles zijn configuratie in plaats van prompttekst, dus ze blijven gelden ongeacht hoe een bericht is geformuleerd. Elke ticket-Action vereist dat de beurt daadwerkelijk uit Discord kwam en van de server die je hebt gekozen, de Action die iemand aan een privéthread toevoegt heeft helemaal geen model-bewerkbare parameters, mentions zijn vastgezet op het lid dat de vraag stelde en de rol die je koos, en threads zijn privé en niet uitnodigbaar. Run conditions worden gecontroleerd voordat een request Quickchat AI verlaat.

Wat kost een Discord AI-supportbot?

Het Free-plan bevat 50 AI-credits per maand voor persoonlijk, niet-commercieel gebruik. AI Actions, Human Handoff, de knowledge base, Topics en Insights zijn inbegrepen. Zakelijk gebruik vereist een betaald plan; betaalde plannen bieden ook meer AI-credits.

Wat is het verschil tussen dit en Ticket Tool of TicketsBot?

Die zijn rule-based. Een lid klikt op een Create Ticket-knop op een vastgezet paneel en er wordt altijd een ticket geopend, ook voor een vraag die je docs al beantwoorden. Deze bot antwoordt eerst en escaleert alleen wat hij echt niet kan oplossen, zodat je team de vragen leest waarvoor daadwerkelijk een persoon nodig is.

Kunnen ChatGPT, Claude of Gemini een Discord-ticketbot uitvoeren?

Ja, via Quickchat AI. Je Agent draait op de nieuwste modellen en roept de Discord API aan met deze AI Actions, zodat hij antwoordt vanuit je knowledge base en echte privéthreads opent. Jij bepaalt welke Actions bestaan en wat de bot mag doen.

Kan dezelfde Agent werken op andere kanalen dan Discord?

Ja. De knowledge base, de prompt en Human Handoff horen bij de Agent, niet bij Discord, dus dezelfde supportbot antwoordt op je website-widget, in Slack, op WhatsApp en via e-mail. De drie ticket-Actions zijn het enige Discord-specifieke deel van deze build.

Hoe starten leden een conversatie met de bot?

De ticketbot in deze gids gebruikt je eigen Discord-app, dus leden starten door de bot te @mentionen in een kanaal dat hij kan zien. De Agent antwoordt in hetzelfde kanaal en opent alleen een ticketthread wanneer hij niet kan antwoorden. De /ask-command hoort bij de gedeelde one-click Quickchat AI-bot.

Hoe voorkom ik dat de bot te veel tickets opent?

Verbeter eerst de dekking van je knowledge base, want elke lacune wordt een ticket. Lees je eerste tickets als een documentatiebacklog en gebruik Insights om te zien welke topics het vaakst voorkomen, zodat je weet wat je daarna moet schrijven. Pas daarna de Action-beschrijving strakker aan.

Elk veld. Het zijn gewone HTTP Request Actions zonder iets dat ze als speciaal markeert: geen lock, geen badge, geen aparte policy-laag. Wijzig de URL, de body, de beschrijving of de run conditions, of installeer een tweede kopie en bewerk die.

Kan ik een Discord-ticketsysteem gebruiken zonder helpdesk?

Ja. Het ticket is een privé-Discord-thread en de wachtrij is je Quickchat AI Inbox, dus er zit geen Zendesk, Intercom of Jira tussen en er hoeft niets te worden gemigreerd. Als je al een helpdesk gebruikt, kun je die behouden: dezelfde Agent kan daar ook een ticket maken met een andere AI Action, en de HubSpot-gallery doet precies dat.

Kan de bot antwoorden vanuit onze helpcenter-content?

Daar is hij op gebouwd. Plak je helpcenter-URL en Quickchat AI scrapt de pagina’s naar een knowledge base, of upload bestanden en plak artikelen direct. De Agent doorzoekt die artikelen bij elke vraag en antwoordt in het kanaal wanneer hij het antwoord vindt, zodat je bestaande documentatie de bot wordt zonder herschreven te worden. Create an AI support agent from your documentation loopt door die helft afzonderlijk.

Kan de bot het lid begroeten wanneer het ticketkanaal opent?

Ja, met een aparte feature. Een ticketbot zoals Ticket Tool maakt het kanaal, en de New channel automated message van Quickchat AI plaatst er een paar seconden later een vaste begroeting in, zodat het lid meteen ziet dat er iets is om mee te praten. Dit kost geen credits omdat er geen model wordt aangeroepen. Begroet leden, threads en ticketkanalen zet het op.

Hoe meet ik ticketdeflection?

Deflection is het aandeel vragen dat zonder ticket wordt beantwoord, dus in deze build is dat conversaties zonder ticketthread gedeeld door alle conversaties. Elke Action houdt een call-log bij, dus door de calls naar open_support_ticket te tellen krijg je direct het geëscaleerde deel, en Insights groepeert de rest per topic. Volg dit per topic in plaats van als één getal: een dalend percentage op één topic is een documentatielacune die je kunt sluiten. Chatbot analytics behandelt de bredere set metrics.

Samenvatting

Met een knowledge base en één klik wordt een Quickchat AI Agent een eerstelijns-supportbot voor je Discord-server: hij beantwoordt de vragen die je docs dekken, geeft toe wanneer dat niet zo is, opent een privé-ticketthread voor de rest, haalt het lid erbij, roept je supportrol op met een samenvatting die hij zelf schreef, en draagt de conversatie over aan een mens die vanuit je Inbox antwoordt zonder dat het lid Discord ooit verlaat. De gallery schrijft de drie Actions, de dropdowns betekenen dat je nooit een Discord-ID typt, en de run conditions betekenen dat de reeks blijft werken, ook wanneer de conversatie niet volgens plan verloopt. Wat overblijft is het werk dat alleen jij kunt doen: een knowledge base die het waard is om uit te antwoorden.