Koppelen
Slash-opdrachten
Problemen met kanalen oplossen
Snel instellen
Maak een Discord-applicatie met een bot, voeg de bot toe aan je server en koppel deze aan OpenClaw. Gebruik indien mogelijk een privéserver; maak er zo nodig eerst een (Create My Own > For me and my friends).Een Discord-applicatie en bot maken
Bevoorrechte intents inschakelen
- Message Content Intent (vereist)
- Server Members Intent (aanbevolen; vereist voor roltoelatingslijsten, het koppelen van namen aan ID’s en toegangsgroepen voor het kanaalpubliek)
- Presence Intent (optioneel; alleen voor aanwezigheidsupdates)
Je bottoken kopiëren
Een uitnodigings-URL genereren en de bot aan je server toevoegen
botapplications.commands
- View Channels
- Send Messages
- Read Message History
- Embed Links
- Attach Files
- Add Reactions (optioneel)
Developer Mode inschakelen en je ID's verzamelen
- User Settings (tandwielpictogram) → Developer → schakel Developer Mode in (op mobiel: App Settings → Advanced)
- Klik met de rechtermuisknop op je serverpictogram → Copy Server ID
- Klik met de rechtermuisknop op je eigen avatar → Copy User ID
DM's van serverleden toestaan
Je bottoken veilig instellen (stuur het niet via de chat)
openclaw gateway run te stoppen en opnieuw te starten.
Voer voor beheerde service-installaties openclaw gateway install uit vanuit een shell waarin DISCORD_BOT_TOKEN is ingesteld, of sla de variabele op in ~/.openclaw/.env, zodat de service na het opnieuw starten de SecretRef uit de omgeving kan omzetten.
Als je host wordt geblokkeerd of beperkt door Discords opzoekactie voor de applicatie bij het opstarten, stel je de applicatie-/client-ID uit de Developer Portal in, zodat die REST-aanroep bij het opstarten kan worden overgeslagen: channels.discord.applicationId voor het standaardaccount of channels.discord.accounts.<accountId>.applicationId per bot.OpenClaw configureren en koppelen
- Vraag het je agent
- CLI / configuratie
“Ik heb mijn Discord-bottoken al in de configuratie ingesteld. Rond de Discord-configuratie af met User ID<user_id>en Server ID<server_id>.”
De eerste DM-koppeling goedkeuren
- Vraag het je agent
- CLI
“Keur deze Discord-koppelcode goed: <CODE>”
DISCORD_BOT_TOKEN wordt alleen voor het standaardaccount gebruikt.
Als twee ingeschakelde Discord-accounts hetzelfde bottoken opleveren, start OpenClaw slechts één gatewaymonitor voor dat token: een token uit de configuratie heeft voorrang op de terugval via de omgevingsvariabele; anders krijgt het eerste ingeschakelde account voorrang en wordt het dubbele account als uitgeschakeld gemeld met reden duplicate bot token.
Voor geavanceerde uitgaande aanroepen (berichttool/kanaalacties) wordt een expliciete token per aanroep voor die aanroep gebruikt. Dit geldt voor verzendacties en acties in de stijl van lezen/controleren (lezen/zoeken/ophalen/thread/vastgemaakte berichten/machtigingen). Het accountbeleid en de instellingen voor nieuwe pogingen zijn nog steeds afkomstig van het geselecteerde account in de actieve runtime-snapshot.Aanbevolen: een guildwerkruimte instellen
Zodra DM’s werken, kun je je server omvormen tot een volledige werkruimte waarin elk kanaal een eigen agentsessie met een eigen context krijgt. Aanbevolen voor privéservers waarop alleen jij en je bot aanwezig zijn.Je server aan de guildtoelatingslijst toevoegen
- Vraag het je agent
- Configuratie
“Voeg mijn Discord Server ID <server_id> toe aan de guildtoelatingslijst”
Antwoorden zonder @vermelding toestaan
messages.groupChat.visibleReplies: "message_tool" in, zodat de agent kan meelezen en alleen een bericht plaatst wanneer deze besluit dat een antwoord in het kanaal nuttig is. Dit werkt het beste met modellen van de nieuwste generatie die betrouwbaar met tools omgaan, zoals GPT-5.6 Sol. Omgevingsgebeurtenissen in ruimtes blijven stil tenzij de tool iets verzendt. Zie Omgevingsgebeurtenissen in ruimtes voor de volledige configuratie van de meeleesmodus.Als Discord aangeeft dat er wordt getypt en de logboeken tokengebruik tonen, maar er geen bericht wordt geplaatst, controleer dan of de beurt als omgevingsgebeurtenis in een ruimte was geconfigureerd of was ingesteld op zichtbare antwoorden via de berichttool.- Vraag het je agent
- Configuratie
“Sta toe dat mijn agent op deze server antwoordt zonder dat deze met een @vermelding hoeft te worden genoemd”
Geheugen voor guildkanalen plannen
- Vraag het je agent
- Handmatig
“Wanneer ik vragen stel in Discord-kanalen, gebruik je memory_search of memory_get als je langetermijncontext uit MEMORY.md nodig hebt.”
#coding, #home, #research in, of wat er maar bij je workflow past.
Runtimemodel
- Gateway beheert de Discord-verbinding.
- De routering van antwoorden is deterministisch: inkomende Discord-berichten worden op Discord beantwoord.
- Metadata van Discord-guilds en -kanalen wordt als niet-vertrouwde context aan de modelprompt toegevoegd, niet als een voor de gebruiker zichtbaar antwoordvoorvoegsel. Als een model die envelop terugkopieert, verwijdert OpenClaw de gekopieerde metadata uit uitgaande antwoorden en uit toekomstige herhalingscontext.
- Standaard (
session.dmScope=main) delen directe chats de hoofdsessie van de agent (agent:main:main). - Guildkanalen hebben geïsoleerde sessiesleutels (
agent:<agentId>:discord:channel:<channelId>). - Groeps-DM’s worden standaard genegeerd (
channels.discord.dm.groupEnabled=false). - Native slash-opdrachten worden uitgevoerd in geïsoleerde opdrachtsessies (
agent:<agentId>:discord:slash:<userId>), waarbijCommandTargetSessionKeynog steeds wordt doorgegeven aan de gerouteerde gesprekssessie. - De levering van aankondigingen van Cron/Heartbeat met alleen tekst aan Discord wordt samengevoegd tot het uiteindelijke, voor de assistent zichtbare antwoord en eenmaal verzonden. Media en gestructureerde componentpayloads blijven uit meerdere berichten bestaan wanneer de agent meerdere leverbare payloads produceert.
Forumkanalen
Discord-forum- en mediakanalen accepteren alleen berichten in threads. OpenClaw ondersteunt twee manieren om deze te maken:- Stuur een bericht naar het bovenliggende forumkanaal (
channel:<forumId>) om automatisch een thread te maken. De threadtitel is de eerste niet-lege regel van het bericht (afgekapt op Discords limiet van 100 tekens voor threadnamen). - Gebruik
openclaw message thread createom rechtstreeks een thread te maken. Geef--message-idniet door voor forumkanalen.
channel:<threadId>).
Interactieve componenten
OpenClaw ondersteunt containers met Discord-componenten v2 voor agentberichten. Gebruik de berichttool met eencomponents-payload. Interactieresultaten worden als normale inkomende berichten teruggestuurd naar de agent en volgen de bestaande Discord-instellingen voor replyToMode.
Ondersteunde blokken:
text,section,separator,actions,media-gallery,file- Actierijen staan maximaal 5 knoppen of één keuzemenu toe
- Selectietypen:
string,user,role,mentionable,channel
components.reusable=true in om knoppen, keuzemenu’s en formulieren meerdere keren te kunnen gebruiken totdat ze verlopen.
Om te beperken wie op een knop kan klikken, stel je allowedUsers in voor die knop (Discord-gebruikers-ID’s, tags of *). Niet-overeenkomende gebruikers ontvangen een tijdelijke weigering die alleen voor hen zichtbaar is.
Componentcallbacks verlopen standaard na 30 minuten. Stel channels.discord.agentComponents.ttlMs in om de levensduur van het callbackregister voor het standaardaccount te wijzigen, of channels.discord.accounts.<accountId>.agentComponents.ttlMs per account. De waarde is in milliseconden, moet een positief geheel getal zijn en is begrensd op 86400000 (24 uur). Langere TTL’s zijn geschikt voor review- en goedkeuringsworkflows waarin knoppen bruikbaar moeten blijven, maar verlengen de periode waarin een oud Discord-bericht nog een actie kan activeren. Gebruik bij voorkeur de kortste passende TTL en behoud de standaardwaarde wanneer verouderde callbacks onverwacht zouden zijn.
De slash-opdrachten /model en /models openen een interactieve modelkiezer met vervolgkeuzelijsten voor provider, model en compatibele runtime, plus een verzendstap. /models add is verouderd en retourneert een afschaffingsbericht in plaats van modellen vanuit de chat te registreren. Het antwoord van de kiezer is tijdelijk, alleen zichtbaar voor de gebruiker die deze heeft aangeroepen en alleen door die gebruiker te gebruiken. Discord-keuzemenu’s zijn beperkt tot 25 opties. Voeg daarom provider/*-vermeldingen toe aan agents.defaults.modelPolicy.allow als je wilt dat de kiezer dynamisch ontdekte modellen alleen toont voor geselecteerde providers, zoals openai of vllm.
Bestandsbijlagen:
file-blokken moeten naar een bijlageverwijzing wijzen (attachment://<filename>)- Lever de bijlage via
media/path/filePath(één bestand); gebruikmedia-galleryvoor meerdere bestanden - Gebruik
filenameom de uploadnaam te overschrijven wanneer deze met de bijlageverwijzing moet overeenkomen
- Voeg
components.modaltoe met maximaal 5 velden - Veldtypen:
text,checkbox,radio,select,role-select,user-select - OpenClaw voegt automatisch een activeringsknop toe
Toegangsbeheer en routering
- DM-beleid
- Toegangsgroepen
- Serverbeleid
- Vermeldingen en groeps-DM's
channels.discord.dmPolicy beheert DM-toegang. channels.discord.allowFrom is de canonieke DM-toelatingslijst.pairing(standaard)allowlist(vereist ten minste éénallowFrom-afzender)open(vereist datchannels.discord.allowFrom"*"bevat)disabled
pairing).Voorrangsregels voor meerdere accounts:channels.discord.accounts.default.allowFromgeldt alleen voor het accountdefault.- Voor één account heeft
allowFromvoorrang op de verouderdedm.allowFrom. - Benoemde accounts nemen
channels.discord.allowFromover wanneer hun eigenallowFromen de verouderdedm.allowFromniet zijn ingesteld. - Benoemde accounts nemen
channels.discord.accounts.default.allowFromniet over.
channels.discord.dm.policy en channels.discord.dm.allowFrom worden voor compatibiliteit nog steeds gelezen. openclaw doctor --fix migreert deze naar dmPolicy en allowFrom wanneer dat mogelijk is zonder de toegang te wijzigen.DM-doelindeling voor bezorging:user:<id><@id>-vermelding
allowFrom van het account worden voor compatibiliteit behandeld als DM-doelen voor gebruikers.Agentroutering op basis van rollen
Gebruikbindings[].match.roles om leden van Discord-servers op basis van hun rol-ID naar verschillende agents te routeren. Rolgebaseerde bindingen accepteren alleen rol-ID’s en worden geëvalueerd na peer- of bovenliggende-peerbindingen en vóór bindingen die alleen voor een server gelden. Als een binding ook andere overeenkomstvelden instelt (bijvoorbeeld peer + guildId + roles), moeten alle geconfigureerde velden overeenkomen.
Systeemeigen opdrachten en opdrachtauthenticatie
commands.nativeis standaard"auto"en is ingeschakeld voor Discord.- Overschrijving per kanaal:
channels.discord.commands.native. commands.native=falseslaat de registratie en opschoning van Discord-slashopdrachten tijdens het opstarten over. Eerder geregistreerde opdrachten kunnen zichtbaar blijven in Discord totdat je ze uit de Discord-app verwijdert.- Authenticatie van systeemeigen opdrachten gebruikt dezelfde Discord-toelatingslijsten en hetzelfde beleid als normale berichtverwerking.
- Opdrachten kunnen in de Discord-interface nog steeds zichtbaar zijn voor onbevoegde gebruikers; bij uitvoering wordt OpenClaw-authenticatie afgedwongen en wordt “niet geautoriseerd” geantwoord.
- Standaardinstellingen voor slashopdrachten:
ephemeral: true(channels.discord.slashCommand.ephemeral).
Functiedetails
Linkvoorbeelden
Linkvoorbeelden
channels.discord.accounts.<id>.suppressEmbeds in om dit voor één account te overschrijven. Verzendingen via de berichtentool van de agent kunnen ook suppressEmbeds: false doorgeven voor één bericht. Expliciete Discord-embeds-payloads worden niet onderdrukt door de standaardinstelling voor linkvoorbeelden.Livestreamvoorbeeld
Livestreamvoorbeeld
channels.discord.streaming.mode accepteert off | partial | block | progress (standaard wanneer geen streaming- of verouderde streamMode-sleutel is ingesteld). streamMode is een verouderde alias; voer openclaw doctor --fix uit om opgeslagen configuratie te herschrijven naar de canonieke geneste streaming-structuur.offschakelt bewerkingen van Discord-voorbeelden uit.partialbewerkt één voorbeeldbericht naarmate tokens binnenkomen.blockproduceert brokken ter grootte van een concept; stel de grootte en afbreekpunten af metstreaming.preview.chunk(minChars,maxChars,breakPreference), begrensd optextChunkLimit. Wanneer blokstreaming expliciet is ingeschakeld, slaat OpenClaw de voorbeeldstream over om dubbel streamen te voorkomen.progressbehoudt één bewerkbaar statusconcept tot de definitieve levering. Standaard toont het één regel met de recentste inleiding of toelichting van de agent, zonder gegenereerd label, witregel of toolrijen.- Media, fouten en definitieve expliciete antwoorden annuleren wachtende voorbeeldbewerkingen.
streaming.preview.toolProgressis standaardtruein de moduspartial/block. De voortgangsmodus van Discord toont standaard geen toolrijen; stelstreaming.progress.toolProgress: truein om ze in te schakelen.- Stel
streaming.progress.toolProgress: truein om compacte tool-/voortgangsrijen toe te voegen, zoals🛠️ Bash: run testsof🔎 Web Search: for "query". Voor compatibiliteit behoudt een bestaandeprogress.label- ofprogress.labels-configuratie de eerdere standaard voor toolrijen; steltoolProgress: falsein voor een aangepast label zonder rijen. streaming.progress.commentary(standaardfalse) schakelt onbewerkte assistenttoelichting in het tijdelijke voortgangsconcept in. De standaardstatusregel met inleiding/toelichting staat los van deze optie. Toelichting wordt vóór weergave opgeschoond, blijft tijdelijk en verandert de levering van het definitieve antwoord niet.streaming.progress.maxLineCharsbepaalt het budget per regel voor het voortgangsvoorbeeld. Proza wordt op woordgrenzen ingekort; details van opdrachten en paden behouden nuttige achtervoegsels.streaming.preview.commandText/streaming.progress.commandTextbepaalt de details van opdrachten/uitvoering in compacte voortgangsregels:raw(standaard) ofstatus(alleen het toollabel).
Geschiedenis, context en threadgedrag
Geschiedenis, context en threadgedrag
channels.discord.historyLimitstandaard20- terugval:
messages.groupChat.historyLimit 0schakelt dit uit
channels.discord.dmHistoryLimitchannels.discord.dms["<user_id>"].historyLimit
- Discord-threads worden gerouteerd als kanaalsessies en nemen de configuratie van het bovenliggende kanaal over, tenzij deze wordt overschreven.
- Threadsessies nemen de
/model-selectie op sessieniveau van het bovenliggende kanaal over als terugval die alleen voor het model geldt; threadlokale/model-selecties hebben voorrang en de transcriptgeschiedenis van het bovenliggende kanaal wordt alleen gekopieerd als transcriptovererving is ingeschakeld. channels.discord.thread.inheritParent(standaardfalse) laat nieuwe automatische threads beginnen met gegevens uit het bovenliggende transcript. Overschrijving per account:channels.discord.accounts.<id>.thread.inheritParent.- Reacties van de berichtentool kunnen
user:<id>-DM-doelen herleiden. guilds.<guild>.channels.<channel>.requireMention: falseblijft behouden tijdens terugval bij activering van de antwoordfase.
Aan threads gekoppelde sessies voor subagents
Aan threads gekoppelde sessies voor subagents
/focus <target>koppelt de huidige/nieuwe thread aan een subagent-/sessiedoel/unfocusverwijdert de huidige threadkoppeling/agentstoont actieve uitvoeringen en de koppelingsstatus/session idle <duration|off>bekijkt/wijzigt het automatisch opheffen van de focus na inactiviteit voor gefocuste koppelingen/session max-age <duration|off>bekijkt/wijzigt de harde maximumleeftijd voor gefocuste koppelingen
session.threadBindings.*is het canonieke beleid voor Discord en Telegram.spawnSessionsbepaalt het automatisch maken/koppelen van threads voorsessions_spawn({ thread: true })en ACP-threadstarts. Standaard:true.defaultSpawnContextbepaalt de systeemeigen subagentcontext voor aan threads gekoppelde starts. Standaard:"fork".- Verouderde
spawnSubagentSessions-/spawnAcpSessions-sleutels worden gemigreerd dooropenclaw doctor --fix. - Als threadkoppelingen zijn uitgeschakeld, zijn
/focusen gerelateerde bewerkingen niet beschikbaar.
Voortgang van subagents in het bronbericht
Voortgang van subagents in het bronbericht
channels.discord.subagentProgress: true in om activiteit van onderliggende processen op de achtergrond weer te geven bij het Discord-bericht dat de bovenliggende uitvoering heeft gestart.1️⃣ tot en met 🔟) wanneer het aantal gelijktijdige uitvoeringen verandert; 🔟 staat ook voor 10 of meer. De telreactie wordt verwijderd nadat het laatste onderliggende proces is beëindigd. Een mislukt, verlopen of afgebroken onderliggend proces laat een 🔴-reactie achter.Dit is optioneel en gebruikt vaste interne standaardwaarden voor timing en emoji. De bot heeft de machtiging Add Reactions nodig voor feedback via reacties. channels.discord.accounts.<id>.subagentProgress op accountniveau overschrijft de waarde op het hoogste niveau.Permanente ACP-kanaalkoppelingen
Permanente ACP-kanaalkoppelingen
bindings[] met type: "acp" en match.channel: "discord"./acp spawn codex --bind herekoppelt het huidige kanaal of de huidige thread ter plaatse en houdt toekomstige berichten in dezelfde ACP-sessie. Threadberichten nemen de koppeling van het bovenliggende kanaal over.- In een gekoppeld kanaal of een gekoppelde thread stellen
/newen/resetdezelfde ACP-sessie ter plaatse opnieuw in. Tijdelijke threadkoppelingen kunnen de doelbepaling overschrijven zolang ze actief zijn. spawnSessionsbeheert het maken/koppelen van onderliggende threads via--thread auto|here.
Reactiemeldingen
Reactiemeldingen
guilds.<id>.reactionNotifications):offown(standaard)allallowlist(gebruiktguilds.<id>.users)
Online-aanwezigheidsgebeurtenissen
Online-aanwezigheidsgebeurtenissen
presenceEvents vereist dat Heartbeat is ingeschakeld voor de gerouteerde agent en dat de bevoorrechte Presence Intent is ingeschakeld op de Bot-pagina van de toepassing in het Discord Developer Portal. OpenClaw vult de huidige online leden vanuit elke volledige GUILD_CREATE-momentopname, routeert waargenomen overgangen van offline naar online en beschouwt ook een later eerste onlinesignaal voor een niet eerder waargenomen lid als nieuw beschikbaar. Dat lid kan online zijn gekomen of na de momentopname zijn toegetreden, waardoor de gebeurtenis geen exacte eerdere status aangeeft. Alleen mensen die channelId kunnen bekijken, komen in aanmerking: voor kanalen en openbare threads is View Channel vereist voor het kanaal of bovenliggende kanaal, terwijl voor privéthreads daarnaast lidmaatschap of Manage Threads vereist is. users kan die doelgroep verder beperken. OpenClaw negeert bots en ongewijzigde onlinestatussen en bewaart een afkoelperiode van acht uur per gebruiker tussen herstarts van de Gateway. Wanneer Discord een nieuwe Gateway-sessie tot stand brengt en READY verzendt, onderdrukt OpenClaw van aanwezigheid afgeleide gebeurtenissen gedurende reconnectSuppressSeconds (standaard 300, 0 schakelt dit uit) terwijl de aanwezigheidsstatus van de guild opnieuw wordt opgebouwd, zodat opnieuw waargenomen leden de agent niet één voor één kunnen activeren. Daarnaast beperkt het systeem het aantal succesvol in de wachtrij geplaatste gebeurtenissen per guild tot burstLimit gebeurtenissen (standaard 8) per voortschrijdend venster van burstWindowSeconds (standaard 60), waarbij elke onderdrukkingsperiode van een guild eenmaal wordt geregistreerd. Een hervatte sessie wordt niet als een nieuwe sessie behandeld. Discord beperkt momentopnamen voor guilds met meer dan 75.000 leden; daar vereist OpenClaw een expliciete offline-update voordat een begroeting wordt verstuurd. De systeemgebeurtenis bevat onveranderlijke gebruikers-, guild- en kanaal-ID’s zonder veranderlijke weergavenamen op te nemen. De agent beslist of en hoe er wordt begroet.Bevestigingsreacties
Bevestigingsreacties
ackReaction verzendt een bevestigingsemoji terwijl OpenClaw een inkomend bericht verwerkt.Volgorde van bepaling:channels.discord.accounts.<accountId>.ackReactionchannels.discord.ackReactionmessages.ackReaction- terugval op de identiteitsemoji van de agent (
agents.entries.*.identity.emoji, anders ”👀”)
- Discord accepteert Unicode-emoji of namen van aangepaste emoji.
- Gebruik
""om de reactie voor een kanaal of account uit te schakelen.
messages.ackReactionScope):Waarden: "all" (DM’s + groepen, inclusief omgevingsgebeurtenissen in ruimtes), "direct" (alleen DM’s), "group-all" (elk groepsbericht behalve omgevingsgebeurtenissen in ruimtes, geen DM’s), "group-mentions" (groepen wanneer de bot wordt vermeld; geen DM’s, standaard), "off" / "none" (uitgeschakeld)."group-mentions") activeert geen bevestigingsreacties in directe berichten of bij omgevingsgebeurtenissen in ruimtes. Stel messages.ackReactionScope in op "all" om een bevestigingsreactie te krijgen bij inkomende Discord-DM’s en stille ruimtegebeurtenissen.Configuratie schrijven
Configuratie schrijven
/config set|unset-flows (wanneer opdrachtfuncties zijn ingeschakeld).Uitschakelen:Gateway-proxy
Gateway-proxy
channels.discord.proxy.
Proxygebruik voor Discord Gateway-WebSockets is expliciet; WebSocket-verbindingen nemen geen proxyomgevingsvariabelen over uit het Gateway-proces. REST-opzoekacties bij het opstarten gebruiken deze proxy wanneer channels.discord.proxy is geconfigureerd.PluralKit-ondersteuning
PluralKit-ondersteuning
- toelatingslijsten kunnen
pk:<memberId>gebruiken - weergavenamen van leden worden alleen op naam/slug vergeleken wanneer
channels.discord.dangerouslyAllowNameMatching: true - opzoekacties raadplegen de PluralKit-API met het oorspronkelijke bericht-ID
- als de opzoekactie mislukt, worden proxyberichten als botberichten behandeld en verwijderd, tenzij
allowBotsze doorlaat
Aliassen voor uitgaande vermeldingen
Aliassen voor uitgaande vermeldingen
mentionAliases wanneer agents deterministische uitgaande vermeldingen voor bekende Discord-gebruikers nodig hebben. Sleutels zijn handles zonder de voorafgaande @; waarden zijn Discord-gebruikers-ID’s. Onbekende handles, @everyone, @here en vermeldingen binnen Markdown-codefragmenten blijven ongewijzigd.Aanwezigheidsconfiguratie
Aanwezigheidsconfiguratie
activity is ingesteld):- 0: Spelen
- 1: Streamen (vereist
activityUrl;activityUrlvereist op zijn beurtactivityType: 1) - 2: Luisteren
- 3: Kijken
- 4: Aangepast (gebruikt de activiteitstekst als statustekst; emoji is optioneel)
- 5: Deelnemen aan een wedstrijd
intervalMs 30000, minUpdateIntervalMs 15000 (moet kleiner dan of gelijk aan intervalMs zijn). Optionele tekstoverschrijvingen:autoPresence.healthyTextautoPresence.degradedTextautoPresence.exhaustedText(ondersteunt de tijdelijke aanduiding{reason})
Goedkeuringen in Discord
Goedkeuringen in Discord
channels.discord.execApprovals.enabledchannels.discord.execApprovals.approvers(optioneel; valt waar mogelijk terug opcommands.ownerAllowFrom)channels.discord.execApprovals.target(dm|channel|both, standaard:dm)agentFilter,sessionFilter,cleanupAfterResolve
enabled niet is ingesteld of "auto" is en ten minste één goedkeurder kan worden bepaald, hetzij via execApprovals.approvers, hetzij via commands.ownerAllowFrom. Discord leidt uitvoeringsgoedkeurders niet af uit kanaal-allowFrom, verouderde dm.allowFrom of directe-bericht-defaultTo. Stel enabled: false in om Discord expliciet uit te schakelen als native goedkeuringsclient.Voor gevoelige groepsopdrachten die uitsluitend voor eigenaren bestemd zijn, zoals /diagnostics en /export-trajectory, verzendt OpenClaw goedkeuringsverzoeken en eindresultaten privé. Eerst wordt een Discord-DM geprobeerd wanneer de eigenaar die de opdracht aanroept een Discord-eigenaarsroute heeft; anders wordt teruggevallen op de eerste beschikbare eigenaarsroute uit commands.ownerAllowFrom, zoals Telegram.Wanneer target channel of both is, is het goedkeuringsverzoek zichtbaar in het kanaal. Alleen bepaalde goedkeurders kunnen de knoppen gebruiken; andere gebruikers ontvangen een tijdelijke afwijzing die alleen voor hen zichtbaar is. Goedkeuringsverzoeken bevatten de opdrachttekst, dus schakel bezorging in het kanaal alleen in voor vertrouwde kanalen. Als het kanaal-ID niet uit de sessiesleutel kan worden afgeleid, valt OpenClaw terug op bezorging via DM.Discord geeft de gedeelde goedkeuringsknoppen weer die ook door andere chatkanalen worden gebruikt; de native Discord-adapter voegt hoofdzakelijk DM-routering voor goedkeurders en verspreiding naar kanalen toe. Wanneer die knoppen aanwezig zijn, vormen ze de primaire gebruikerservaring voor goedkeuringen; OpenClaw mag alleen een handmatige /approve-opdracht opnemen wanneer het toolresultaat aangeeft dat chatgoedkeuringen niet beschikbaar zijn of handmatige goedkeuring de enige mogelijkheid is. Als de native Discord-runtime voor goedkeuringen niet actief is, houdt OpenClaw de lokale deterministische /approve <id> <decision>-prompt zichtbaar. Als de runtime actief is maar een native kaart niet bij een doel kan worden bezorgd, verzendt OpenClaw in dezelfde chat een terugvalmelding met de exacte /approve-opdracht uit de wachtende goedkeuring.Gateway-authenticatie en bepaling van goedkeuringen volgen het gedeelde contract van de Gateway-client (plugin:-ID’s worden bepaald via plugin.approval.resolve; andere ID’s via exec.approval.resolve). Goedkeuringen verlopen standaard na 30 minuten.Zie Uitvoeringsgoedkeuringen.Tools en actiepoorten
Discord-berichtacties omvatten berichten, kanaalbeheer, moderatie, aanwezigheid en metagegevens. Kernvoorbeelden:- berichten:
sendMessage,readMessages,editMessage,deleteMessage,threadReply - reacties:
react,reactions,emojiList - moderatie:
timeout,kick,ban - aanwezigheid:
setPresence
event-create accepteert een optionele parameter image (URL of lokaal bestandspad) om de omslagafbeelding voor de geplande gebeurtenis in te stellen.
Actiepoorten bevinden zich onder channels.discord.actions.*.
Standaardgedrag van poorten:
UI met Components v2
OpenClaw gebruikt Discord Components v2 voor uitvoeringsgoedkeuringen en contextoverschrijdende markeringen. Discord-berichtacties kunnen ookcomponents accepteren voor een aangepaste UI (geavanceerd; hiervoor moet via de discord-tool een componentpayload worden samengesteld), terwijl verouderde embeds beschikbaar blijven, maar niet worden aanbevolen.
channels.discord.ui.components.accentColorstelt de accentkleur in die door Discord-componentcontainers wordt gebruikt (hex). Per account:channels.discord.accounts.<id>.ui.components.accentColor.channels.discord.agentComponents.ttlMsbepaalt hoelang callbacks van verzonden Discord-componenten geregistreerd blijven (standaard1800000, maximaal86400000). Per account:channels.discord.accounts.<id>.agentComponents.ttlMs.embedsworden genegeerd wanneer Components v2 aanwezig zijn.- Voorvertoningen van gewone URL’s worden standaard onderdrukt. Stel
suppressEmbeds: falsein voor een berichtactie wanneer één uitgaande link moet worden uitgevouwen.
Spraak
Discord heeft twee afzonderlijke spraakoppervlakken: realtime spraakkanalen (doorlopende gesprekken) en spraakberichtbijlagen (de indeling met golfvormvoorvertoning). De Gateway ondersteunt beide.Spraakkanalen
Controlelijst voor de configuratie:- Schakel Message Content Intent in de Discord Developer Portal in.
- Schakel Server Members Intent in wanneer toelatingslijsten voor rollen/gebruikers worden gebruikt.
- Nodig de bot uit met de scopes
botenapplications.commands. - Verleen Connect, Speak, Send Messages en Read Message History in het doelspraakkanaal.
- Schakel native opdrachten in (
commands.nativeofchannels.discord.commands.native). - Configureer
channels.discord.voice.
/vc join|leave|status om sessies te beheren. De opdracht gebruikt de standaardagent van het account en volgt dezelfde regels voor toelatingslijsten en groepsbeleid als andere Discord-opdrachten.
- Discord-spraak is opt-in voor configuraties met alleen tekst; stel
channels.discord.voice.enabled=truein (of behoud een bestaandchannels.discord.voice-blok) om/vc-opdrachten, de spraakruntime en deGuildVoiceStates-gatewayintentie in te schakelen.channels.discord.intents.voiceStateskan het intentieabonnement expliciet overschrijven; laat dit oningesteld om de effectieve inschakeling van spraak te volgen. voice.modebepaalt het gesprekspad. De standaard isagent-proxy: een realtime spraakfrontend verwerkt de timing van gespreksbeurten, onderbrekingen en het afspelen, delegeert inhoudelijk werk viaopenclaw_agent_consultaan de gerouteerde OpenClaw-agent en behandelt het resultaat alsof het een getypte Discord-prompt van die spreker is.stt-ttsbehoudt de oudere batchflow met STT plus TTS. Metbidikan het realtimemodel rechtstreeks converseren, terwijlopenclaw_agent_consultbeschikbaar wordt gesteld voor het OpenClaw-brein.voice.agentSessionbepaalt welk OpenClaw-gesprek spraakbeurten ontvangt. Laat dit oningesteld voor de eigen sessie van het spraakkanaal, of stel{ mode: "target", target: "channel:<text-channel-id>" }in om het spraakkanaal te laten fungeren als microfoon-/luidsprekeruitbreiding van een bestaande Discord-tekstkanaalsessie, zoals#maintainers.voice.modeloverschrijft het OpenClaw-agentbrein voor Discord-spraakantwoorden en realtime raadplegingen. Laat dit oningesteld om het gerouteerde agentmodel over te nemen. Dit staat los vanvoice.realtime.model.- Met
voice.followUserskan de bot zich bij geselecteerde gebruikers aansluiten bij Discord-spraak, met hen meeverhuizen en het spraakkanaal verlaten. Zie Gebruikers volgen in spraak. agent-proxyrouteert spraak viadiscord-voice, waarbij de normale autorisatie van de eigenaar en tools voor de spreker en doelsessie behouden blijft, maar de agenttoolttswordt verborgen omdat Discord-spraak het afspelen beheert. Standaard geeftagent-proxyde raadpleging volledige, aan de eigenaar gelijkwaardige tooltoegang voor sprekers die eigenaar zijn (voice.realtime.toolPolicy: "owner") en wordt sterk de voorkeur gegeven aan het raadplegen van de OpenClaw-agent vóór inhoudelijke antwoorden (voice.realtime.consultPolicy: "always"). In die standaardmodusalwaysspreekt de realtimelaag niet automatisch opvultekst uit vóór het antwoord van de raadpleging; de laag legt spraak vast en transcribeert deze, en spreekt vervolgens het gerouteerde OpenClaw-antwoord uit. Als meerdere afgedwongen raadpleegantwoorden worden voltooid terwijl Discord het eerste antwoord nog afspeelt, worden latere antwoorden met exacte spraak in de wachtrij geplaatst totdat het afspelen inactief is, in plaats van spraak halverwege een zin te vervangen.- In de modus
stt-ttsgebruikt STTtools.media.audio;voice.modelheeft geen invloed op de transcriptie. - In realtimemodi configureren
voice.realtime.provider,voice.realtime.modelenvoice.realtime.speakerVoicede realtime audiosessie. Gebruik voor OpenAI Realtime 2.1 plus het Codex-breinvoice.realtime.model: "gpt-realtime-2.1"envoice.model: "openai/gpt-5.6-sol". - Realtimespraakmodi nemen standaard kleine profielbestanden
IDENTITY.md,USER.mdenSOUL.mdop in de instructies voor de realtimeprovider, zodat snelle rechtstreekse beurten dezelfde identiteit, gebruikerscontext en persona behouden als de gerouteerde OpenClaw-agent. Stelvoice.realtime.bootstrapContextFilesin op een subset om dit aan te passen, of[]om dit uit te schakelen. Alleen die profielbestanden worden ondersteund;AGENTS.mdblijft in de normale agentcontext. De geïnjecteerde profielcontext vervangtopenclaw_agent_consultniet voor werk in de werkruimte, actuele feiten, het opzoeken van geheugen of door tools ondersteunde acties. - In de realtime OpenAI-modus
agent-proxypast de activering op weknaam zich standaard aan de ruimte aan: één persoon kan natuurlijk spreken zonder weknaam, terwijl twee of meer personen een beurt met een weknaam moeten beginnen of eindigen. Andere bots tellen niet als personen. Stelvoice.realtime.requireWakeName: truein om altijd een weknaam te vereisen offalseom er nooit een te vereisen. Geconfigureerde weknamen moeten uit één of twee woorden bestaan. Alsvoice.realtime.wakeNamesniet is ingesteld, gebruikt OpenClaw denamevan de gerouteerde agent plusOpenClaw, met als terugval de agent-id plusOpenClaw. Een actieve weknaamcontrole schakelt automatische antwoorden van de realtimeprovider uit, routeert geaccepteerde beurten via het raadpleegpad van de OpenClaw-agent en geeft een korte gesproken bevestiging wanneer een weknaam aan het begin wordt herkend uit een gedeeltelijke transcriptie voordat het definitieve transcript binnenkomt. Het beleid volgt live deelnemers die binnenkomen en vertrekken zonder opnieuw verbinding met spraak te maken. - De realtimeprovider van OpenAI accepteert huidige Realtime 2-gebeurtenisnamen en verouderde Codex-compatibele aliassen voor uitvoeraudio- en transcriptgebeurtenissen, zodat compatibele providersnapshots kunnen afwijken zonder assistentaudio weg te laten.
voice.realtime.bargeInbepaalt of Discord-gebeurtenissen voor het begin van spreken het actieve realtime afspelen onderbreken. Als dit niet is ingesteld, volgt het de instelling van de realtimeprovider voor onderbreking door invoeraudio.voice.realtime.minBargeInAudioEndMsbepaalt de minimale afspeelduur van de assistent voordat een onderbreking in OpenAI-realtime de audio afkapt. Standaard:250. Stel0in voor onmiddellijke onderbreking in ruimtes met weinig echo, of verhoog dit voor luidsprekeropstellingen met veel echo.voice.ttsoverschrijftttsalleen voor het afspelen vanstt-tts-spraak; realtimemodi gebruiken in plaats daarvanvoice.realtime.speakerVoice. Stel voor een OpenAI-stem bij afspelen via Discordvoice.tts.provider: "openai"in en kies een Text-to-speech-stem ondervoice.tts.providers.openai.speakerVoice.cedaris een goede mannelijk klinkende keuze voor het huidige OpenAI TTS-model.- Discord-overschrijvingen per kanaal in
systemPromptzijn van toepassing op spraaktranscriptiebeurten voor dat spraakkanaal. - Wanneer OpenClaw zich bij een spraakkanaal aansluit, ontvangt de gerouteerde agentsessie een stille systeemgebeurtenis met de huidige deelnemerslijst. Latere deelnemers die binnenkomen en vertrekken werken die sessie bij zonder een ongevraagd gesproken antwoord te activeren; Discord-weergavenamen worden behandeld als niet-vertrouwde labels. Geautoriseerde spraakbeurten ontvangen ook een actuele momentopname van de deelnemerslijst.
- Spraaktranscriptiebeurten en
/vc-opdrachten gebruiken Discord-vermeldingen incommands.ownerAllowFromvoor de eigenaarsstatus. Wanneer er geen eigenaar voor Discord-opdrachten is geconfigureerd, kan deallowFrom(of verouderdedm.allowFrom) van het geselecteerde Discord-account nog steeds spraaktoegang autoriseren zonder eigenaarsstatus toe te kennen. De zichtbaarheid van agenttools volgt het geconfigureerde toolbeleid voor de gerouteerde sessie. - Als
voice.autoJoinmeerdere vermeldingen voor dezelfde guild bevat, sluit OpenClaw zich aan bij het laatst geconfigureerde kanaal voor die guild. voice.allowedChannelsis een optionele toelatingslijst voor verblijf. Laat dit oningesteld om/vc joinin elk geautoriseerd Discord-spraakkanaal toe te staan. Wanneer dit is ingesteld, worden/vc join, automatisch aansluiten bij het opstarten en verplaatsingen van de spraakstatus van de bot beperkt tot de vermelde{ guildId, channelId }-vermeldingen. Stel dit in op een lege array om alle aansluitingen bij Discord-spraak te weigeren. Als Discord de bot buiten de toelatingslijst verplaatst, verlaat OpenClaw dat kanaal en sluit het zich opnieuw aan bij het geconfigureerde doel voor automatisch aansluiten wanneer er een beschikbaar is.voice.daveEncryptionenvoice.decryptionFailureToleranceworden doorgegeven aan de aansluitopties van@discordjs/voice; de bovenliggende standaardwaarden zijndaveEncryption=trueendecryptionFailureTolerance=24.- OpenClaw gebruikt de meegeleverde
libopus-wasm-codec voor de ontvangst van Discord-spraak en het realtime afspelen van onbewerkte PCM. Deze wordt geleverd met een vastgezette libopus-WebAssembly-build en vereist geen native opus-add-ons. voice.connectTimeoutMsbepaalt de initiële wachttijd op@discordjs/voiceReady voor/vc joinen pogingen om automatisch aan te sluiten. Standaard:30000.voice.reconnectGraceMsbepaalt hoelang OpenClaw wacht totdat een verbroken spraaksessie opnieuw verbinding begint te maken voordat de sessie wordt vernietigd. Standaard:15000.- In de modus
stt-ttsstopt het afspelen van spraak niet alleen omdat een andere gebruiker begint te spreken. Om feedbacklussen te voorkomen, negeert OpenClaw nieuwe spraakopname terwijl TTS wordt afgespeeld; spreek nadat het afspelen is voltooid voor de volgende beurt. Realtimemodi sturen het begin van spreken door als onderbrekingssignalen naar de realtimeprovider. - In realtimemodi kan echo van luidsprekers naar een open microfoon op een onderbreking lijken en het afspelen onderbreken. Stel voor Discord-ruimtes met veel echo
voice.realtime.providers.openai.interruptResponseOnInputAudio: falsein om te voorkomen dat OpenAI automatisch onderbreekt bij invoeraudio. Voegvoice.realtime.bargeIn: truetoe als je nog steeds wilt dat Discord-gebeurtenissen voor het begin van spreken het actieve afspelen onderbreken. De OpenAI-realtimebridge negeert afkappingen van het afspelen die korter zijn danvoice.realtime.minBargeInAudioEndMsals waarschijnlijke echo/ruis en registreert ze als overgeslagen in plaats van het afspelen via Discord te wissen. voice.captureSilenceGraceMsbepaalt hoelang OpenClaw wacht nadat Discord meldt dat een spreker is gestopt voordat dat audiosegment voor STT wordt afgerond. Standaard:2000; verhoog dit als Discord normale pauzes opsplitst in hakkelende gedeeltelijke transcripties.- Wanneer ElevenLabs de geselecteerde TTS-provider is, gebruikt het afspelen van Discord-spraak streaming-TTS en begint het vanuit de antwoordstream van de provider. Providers zonder ondersteuning voor streaming vallen terug op het pad met een gesynthetiseerd tijdelijk bestand.
- OpenClaw bewaakt fouten bij het ontsleutelen van ontvangen gegevens en herstelt automatisch door het spraakkanaal te verlaten en er opnieuw aan deel te nemen na herhaalde fouten binnen een kort tijdsvenster.
- Als ontvangstlogboeken na een update herhaaldelijk
DecryptionFailed(UnencryptedWhenPassthroughDisabled)tonen, verzamel dan een afhankelijkheidsrapport en logboeken. De meegeleverde@discordjs/voice-regel bevat de bovenliggende opvullingscorrectie uit discord.js-PR #11449, waarmee discord.js-issue #11419 werd gesloten. The operation was aborted-ontvangstgebeurtenissen worden verwacht wanneer OpenClaw een vastgelegd sprekersegment afrondt; het zijn uitgebreide diagnostische meldingen, geen waarschuwingen.- Uitgebreide Discord-spraaklogboeken bevatten voor elk geaccepteerd sprekersegment een begrensd STT-transcriptievoorbeeld van één regel, zodat bij foutopsporing zowel de gebruikerszijde als de antwoordzijde van de agent zichtbaar is zonder onbeperkte transcriptietekst te dumpen.
- In de modus
agent-proxyslaat de terugval voor afgedwongen raadpleging waarschijnlijk onvolledige transcriptiefragmenten over, zoals tekst die eindigt op...of een afsluitend verbindingswoord zoals “en”, evenals duidelijk niet-uitvoerbare afsluitingen zoals “ben zo terug” of “dag”. Logboeken tonenforced agent consult skipped reason=...wanneer dit een verouderd antwoord in de wachtrij voorkomt.
Gebruikers volgen in spraak
Gebruikvoice.followUsers wanneer je wilt dat de Discord-spraakbot bij een of meer bekende Discord-gebruikers blijft, in plaats van zich bij het opstarten bij een vast kanaal aan te sluiten of op /vc join te wachten.
followUsersaccepteert onbewerkte Discord-gebruikers-ID’s endiscord:<id>-waarden. OpenClaw normaliseert beide vormen voordat spraakstatusgebeurtenissen worden vergeleken.followUsersEnabledwordt standaard ingesteld optruewanneerfollowUsersis geconfigureerd. Stel dit in opfalseom de opgeslagen lijst te behouden, maar het automatisch volgen van spraak te stoppen.followUsersregelt alleen de aanwezigheid in spraakkanalen. Het verleent geen toegang als spreker of eigenaarsbevoegdheid; configureercommands.ownerAllowFromen gebruikers en rollen voor de server of het kanaal afzonderlijk.- Wanneer een gevolgde gebruiker deelneemt aan een toegestaan spraakkanaal, neemt OpenClaw deel aan dat kanaal. Wanneer de gebruiker zich verplaatst, verplaatst OpenClaw zich mee. Wanneer de actief gevolgde gebruiker de verbinding verbreekt, verlaat OpenClaw het kanaal.
- Als meerdere gevolgde gebruikers zich op dezelfde server bevinden en de actief gevolgde gebruiker vertrekt, verplaatst OpenClaw zich naar het kanaal van een andere bijgehouden gevolgde gebruiker voordat de server wordt verlaten. Als meerdere gevolgde gebruikers zich tegelijk verplaatsen, is de laatst waargenomen spraakstatusgebeurtenis bepalend.
allowedChannelsblijft van toepassing. Een gevolgde gebruiker in een niet-toegestaan kanaal wordt genegeerd en een sessie die door volgen wordt beheerd, verplaatst zich naar een andere gevolgde gebruiker of vertrekt.- OpenClaw reconcilieert gemiste spraakstatusgebeurtenissen bij het opstarten en met een begrensd interval. Bij reconciliatie worden geconfigureerde servers steekproefsgewijs gecontroleerd en wordt het aantal REST-opzoekacties per uitvoering begrensd. Daardoor kan het bij zeer grote
followUsers-lijsten meer dan één interval duren voordat de status overeenkomt. - Als Discord of een beheerder de bot verplaatst terwijl deze een gebruiker volgt, bouwt OpenClaw de spraaksessie opnieuw op en blijft het volgen de sessie beheren als de bestemming is toegestaan. Als de bot buiten
allowedChannelswordt verplaatst, vertrekt OpenClaw en neemt het opnieuw deel aan het geconfigureerde doel wanneer dat bestaat. - Bij DAVE-ontvangstherstel kan hetzelfde kanaal na herhaalde ontsleutelingsfouten worden verlaten en opnieuw worden betreden. Sessies die door volgen worden beheerd, blijven tijdens dat herstelpad door volgen beheerd, zodat het kanaal alsnog wordt verlaten wanneer een gevolgde gebruiker later de verbinding verbreekt.
- Gebruik
followUsersvoor persoonlijke configuraties of operatorconfiguraties waarbij de bot automatisch in het spraakkanaal aanwezig moet zijn wanneer jij dat bent. - Gebruik
autoJoinvoor bots in een vaste ruimte die aanwezig moeten zijn, zelfs wanneer geen bijgehouden gebruiker in een spraakkanaal aanwezig is. - Gebruik
/vc joinvoor eenmalige deelnames of ruimtes waar automatische aanwezigheid in een spraakkanaal onverwacht zou zijn.
- Logboeken voor spraakontvangst tonen
discord voice: opus decoder: libopus-wasm. - Realtime afspelen codeert onbewerkte 48 kHz stereo-PCM naar Opus met hetzelfde meegeleverde
libopus-wasm-pakket voordat pakketten aan@discordjs/voiceworden doorgegeven. - Bij het afspelen van bestanden en providerstreams wordt met ffmpeg getranscodeerd naar onbewerkte 48 kHz stereo-PCM. Vervolgens wordt
libopus-wasmgebruikt voor de Opus-pakketstream die naar Discord wordt verzonden.
- De Discord-PCM-opname wordt omgezet in een tijdelijk WAV-bestand.
tools.media.audioverwerkt STT, bijvoorbeeldopenai/gpt-4o-mini-transcribe.- Het transcript wordt via de Discord-ingang en routering verzonden, terwijl het LLM voor het antwoord wordt uitgevoerd met een beleid voor spraakuitvoer dat het
tts-hulpmiddel van de agent verbergt en om geretourneerde tekst vraagt, omdat Discord-spraak het uiteindelijke TTS-afspelen beheert. voice.modeloverschrijft, wanneer ingesteld, alleen het LLM voor het antwoord tijdens deze beurt in het spraakkanaal.voice.ttswordt overttssamengevoegd; providers die streaming ondersteunen, leveren rechtstreeks aan de speler. Anders wordt het resulterende audiobestand in het kanaal afgespeeld waaraan is deelgenomen.
voice.agentSession-blok krijgt elk spraakkanaal een eigen gerouteerde OpenClaw-sessie. /vc join channel:234567890123456789 communiceert bijvoorbeeld met de sessie voor dat Discord-spraakkanaal. Het realtime model is alleen de spraakfrontend; inhoudelijke verzoeken worden doorgegeven aan de geconfigureerde OpenClaw-agent. Als het realtime model een definitief transcript produceert zonder het consultatiehulpmiddel aan te roepen, dwingt OpenClaw als terugval de consultatie af, zodat de standaardwerking nog steeds overeenkomt met praten met de agent.
Voorbeeld van verouderde STT plus TTS:
agent-proxy neemt de bot deel aan het geconfigureerde spraakkanaal, maar gebruiken OpenClaw-agentbeurten de normale gerouteerde sessie en agent van het doelkanaal. De realtime spraaksessie spreekt het geretourneerde resultaat weer uit in het spraakkanaal. De supervisoragent kan volgens het eigen hulpmiddelenbeleid nog steeds normale berichthulpmiddelen gebruiken, waaronder het verzenden van een afzonderlijk Discord-bericht als dat de juiste actie is.
Terwijl een gedelegeerde OpenClaw-uitvoering actief is, worden nieuwe Discord-spraaktranscripten verwerkt als live besturing van de uitvoering voordat een nieuwe agentbeurt wordt gestart. Zinnen zoals “status”, “annuleer dat”, “gebruik de kleinere oplossing” of “controleer ook de tests wanneer je klaar bent” worden geclassificeerd als status-, annulerings-, bijsturings- of vervolginvoer voor de actieve sessie. Resultaten van status, annulering, geaccepteerde bijsturing en vervolgacties worden uitgesproken in het spraakkanaal, zodat de beller weet of OpenClaw het verzoek heeft verwerkt.
Nuttige doelvormen:
target: "channel:123456789012345678"routeert via een Discord-tekstkanaalsessie.target: "123456789012345678"wordt als kanaaldoel behandeld.target: "dm:123456789012345678"oftarget: "user:123456789012345678"routeert via die privéberichtsessie.
bargeIn: true ervoor zorgt dat Discord-gebeurtenissen voor het begin van een spreker en reeds actieve sprekeraudio actieve realtime antwoorden kunnen annuleren voordat de volgende opgenomen beurt OpenAI bereikt. Zeer vroege onderbrekingssignalen waarbij audioEndMs lager is dan minBargeInAudioEndMs, worden als waarschijnlijke echo of ruis beschouwd en genegeerd, zodat het model niet al bij het eerste afspeelframe wordt afgebroken.
Verwachte spraaklogboeken:
- Bij deelname:
discord voice: joining ... voiceSession=... supervisorSession=... agentSessionMode=... voiceModel=... realtimeModel=... - Bij het starten van realtime:
discord voice: realtime bridge starting ... autoRespond=false interruptResponse=false bargeIn=false minBargeInAudioEndMs=... - Bij sprekeraudio:
discord voice: realtime speaker turn opened ...,discord voice: realtime input audio started ... outputAudioMs=... outputActive=...endiscord voice: realtime speaker turn closed ... chunks=... discordBytes=... realtimeBytes=... interruptedPlayback=... - Bij overgeslagen verouderde spraak:
discord voice: realtime forced agent consult skipped reason=incomplete-transcript ...ofreason=non-actionable-closing ... - Bij voltooiing van een realtime antwoord:
discord voice: realtime audio playback finishing reason=response.done ... audioMs=... chunks=... - Bij stoppen/herstellen van het afspelen:
discord voice: realtime audio playback stopped reason=... audioMs=... elapsedMs=... chunks=... - Bij realtime consultatie:
discord voice: realtime consult requested ... voiceSession=... supervisorSession=... question=... - Bij antwoord van de agent:
discord voice: agent turn answer ... - Bij exact in de wachtrij geplaatste spraak:
discord voice: realtime exact speech queued ... queued=... outputAudioMs=... outputActive=..., gevolgd doordiscord voice: realtime exact speech dequeued reason=player-idle ... - Bij detectie van een onderbreking:
discord voice: realtime barge-in detected source=speaker-start ...ofdiscord voice: realtime barge-in detected source=active-speaker-audio ..., gevolgd doordiscord voice: realtime barge-in requested reason=... outputAudioMs=... outputActive=... - Bij realtime onderbreking:
discord voice: realtime model interrupt requested client:response.cancel reason=barge-in, gevolgd doordiscord voice: realtime model audio truncated client:conversation.item.truncate reason=barge-in audioEndMs=...ofdiscord voice: realtime model interrupt confirmed server:response.done status=cancelled ... - Bij genegeerde echo/ruis:
discord voice: realtime model interrupt ignored client:conversation.item.truncate.skipped reason=barge-in audioEndMs=0 minAudioEndMs=250 - Bij uitgeschakelde onderbreking:
discord voice: realtime capture ignored during playback (barge-in disabled) ... - Bij inactief afspelen:
discord voice: realtime barge-in ignored reason=... outputActive=false ... playbackChunks=0
realtime audio playback startedbetekent dat Discord is begonnen met het afspelen van assistentaudio. Vanaf dit punt begint de bridge assistentuitvoerblokken, Discord-PCM-bytes, realtime providerbytes en de duur van gesynthetiseerde audio te tellen.realtime speaker turn openedmarkeert dat een Discord-spreker actief wordt. Als het afspelen al actief is enbargeInis ingeschakeld, kan dit worden gevolgd doorbarge-in detected source=speaker-start.realtime input audio startedmarkeert het eerste daadwerkelijk ontvangen audioframe voor die sprekerbeurt.outputActive=trueof een niet-nulwaarde vooroutputAudioMsbetekent hier dat de microfoon invoer verzendt terwijl het afspelen van de assistent nog actief is.barge-in detected source=active-speaker-audiobetekent dat OpenClaw live sprekeraudio heeft waargenomen terwijl het afspelen van de assistent actief was. Dit is nuttig om een echte onderbreking te onderscheiden van een Discord-gebeurtenis voor het begin van een spreker zonder bruikbare audio.barge-in requested reason=...betekent dat OpenClaw de realtime provider heeft gevraagd het actieve antwoord te annuleren of af te kappen. Het bevatoutputAudioMs,outputActiveenplaybackChunks, zodat je kunt zien hoeveel assistentaudio daadwerkelijk was afgespeeld vóór de onderbreking.realtime audio playback stopped reason=...is het lokale herstelpunt voor het afspelen in Discord. De reden geeft aan wie het afspelen heeft gestopt:barge-in,player-idle,provider-clear-audio,forced-agent-consult,stream-closeofsession-close.realtime speaker turn closedvat de opgenomen invoerbeurt samen.chunks=0ofhasAudio=falsebetekent dat de sprekerbeurt is geopend, maar dat geen bruikbare audio de realtime bridge heeft bereikt.interruptedPlayback=truebetekent dat die invoerbeurt de uitvoer van de assistent overlapte en de onderbrekingslogica activeerde.
outputAudioMs: duur van de assistentaudio die vóór de logregel door de realtime provider is gegenereerd.audioMs: duur van de assistentaudio die OpenClaw heeft geteld voordat het afspelen stopte.elapsedMs: verstreken kloktijd tussen het openen en sluiten van de afspeelstream of sprekerbeurt.discordBytes: 48 kHz stereo-PCM-bytes die naar Discord-spraak zijn verzonden of daarvan zijn ontvangen.realtimeBytes: PCM-bytes in providerindeling die naar de realtime provider zijn verzonden of daarvan zijn ontvangen.playbackChunks: assistentaudioblokken die voor het actieve antwoord naar Discord zijn doorgestuurd.sinceLastAudioMs: tijdsverschil tussen het laatste opgenomen sprekeraudioframe en het sluiten van de sprekerbeurt.
- Onmiddellijk afbreken met
source=active-speaker-audio, een kleineoutputAudioMsen dezelfde gebruiker in de buurt wijst meestal op luidsprekerecho die de microfoon binnenkomt. Verhoogvoice.realtime.minBargeInAudioEndMs, verlaag het luidsprekervolume, gebruik een hoofdtelefoon of stelvoice.realtime.providers.openai.interruptResponseOnInputAudio: falsein. source=speaker-startgevolgd doorspeaker turn closed ... hasAudio=falsebetekent dat Discord meldde dat een spreker begon, maar dat OpenClaw geen audio ontving. Dit kan een tijdelijke Discord-spraakgebeurtenis zijn, gedrag van de ruispoort of een client die de microfoon kort activeert.audio playback stopped reason=stream-closezonder een nabijgelegen onderbreking ofprovider-clear-audiobetekent dat de lokale Discord-afspeelstream onverwacht is beëindigd. Controleer de voorafgaande logboeken van de provider en de Discord-speler.capture ignored during playback (barge-in disabled)betekent dat OpenClaw invoer opzettelijk heeft genegeerd terwijl assistentaudio actief was. Schakelvoice.realtime.bargeInin als je wilt dat spraak het afspelen onderbreekt.barge-in ignored ... outputActive=falsebetekent dat Discord of de VAD van de provider spraak heeft gemeld, maar OpenClaw geen actieve afspeelsessie had om te onderbreken. Hierdoor mag audio niet worden afgebroken.
voice.model, STT-authenticatie voor tools.media.audio, TTS-authenticatie voor tts/voice.tts en realtime providerauthenticatie voor voice.realtime.providers of de normale authenticatieconfiguratie van de provider.
Spraakberichten
Discord-spraakberichten tonen een golfvormvoorbeeld en vereisen OGG/Opus-audio. OpenClaw genereert de golfvorm automatisch, maar heeftffmpeg en ffprobe op de Gateway-host nodig om de audio te inspecteren en te converteren.
- Geef een lokaal bestandspad op (URL’s worden geweigerd).
- Laat tekstinhoud weg (Discord weigert tekst en een spraakbericht in dezelfde payload).
- Elke audio-indeling wordt geaccepteerd; OpenClaw converteert zo nodig naar OGG/Opus.
Problemen oplossen
Niet-toegestane intents gebruikt of bot ziet geen serverberichten
Niet-toegestane intents gebruikt of bot ziet geen serverberichten
- schakel Message Content Intent in
- schakel Server Members Intent in wanneer je afhankelijk bent van gebruikers-/ledenresolutie
- start de Gateway opnieuw nadat je intents hebt gewijzigd
Serverberichten onverwacht geblokkeerd
Serverberichten onverwacht geblokkeerd
- controleer
groupPolicy - controleer de servertoestaanlijst onder
channels.discord.guilds - als er een
channels-toewijzing voor een server bestaat, zijn alleen de vermelde kanalen toegestaan - controleer het gedrag van
requireMentionen de vermeldingspatronen
Vermelding niet vereist, maar toch geblokkeerd
Vermelding niet vereist, maar toch geblokkeerd
groupPolicy="allowlist"zonder overeenkomende server-/kanaaltoestaanlijstrequireMentionop de verkeerde plaats geconfigureerd (moet onderchannels.discord.guildsof een kanaalvermelding staan)- afzender geblokkeerd door de
users-toestaanlijst van de server of het kanaal
Langdurige Discord-beurten of dubbele antwoorden
Langdurige Discord-beurten of dubbele antwoorden
Slow listener detected ...stuck session: sessionKey=agent:...:discord:... state=processing ...
Waarschuwingen over time-outs bij het opzoeken van Gateway-metadata
Waarschuwingen over time-outs bij het opzoeken van Gateway-metadata
/gateway/bot-metadata op. Bij tijdelijke fouten wordt teruggevallen op de standaard-Gateway-URL van Discord en wordt het aantal logboekvermeldingen beperkt.De standaardtime-out voor metadata is 30 seconden. OPENCLAW_DISCORD_GATEWAY_INFO_TIMEOUT_MS kan deze voor ongebruikelijke hostomgevingen overschrijven.Herstarts door time-out van Gateway READY
Herstarts door time-out van Gateway READY
READY van Discord. Configuraties met meerdere accounts en gespreid opstarten kunnen een langer READY-venster bij het opstarten nodig hebben dan de standaardwaarde.Bij het opstarten wordt 15 seconden gewacht en bij runtimeherverbindingen 30 seconden. OPENCLAW_DISCORD_READY_TIMEOUT_MS en OPENCLAW_DISCORD_RUNTIME_READY_TIMEOUT_MS blijven beschikbaar voor ongebruikelijke hostomgevingen.Afwijkingen bij de controle van machtigingen
Afwijkingen bij de controle van machtigingen
channels status --probe werken alleen met numerieke kanaal-ID’s.Als je slug-sleutels gebruikt, kan runtimekoppeling nog steeds werken, maar kan de probe de machtigingen niet volledig verifiëren.Problemen met privéberichten en koppeling
Problemen met privéberichten en koppeling
- privéberichten uitgeschakeld:
channels.discord.dm.enabled=false - beleid voor privéberichten uitgeschakeld:
channels.discord.dmPolicy="disabled"(verouderd:channels.discord.dm.policy) - wacht op goedkeuring van de koppeling in de modus
pairing
Lussen tussen bots
Lussen tussen bots
channels.discord.allowBots=true instelt, gebruik dan strikte regels voor vermeldingen en toestaanlijsten om lusgedrag te voorkomen.
Geef de voorkeur aan channels.discord.allowBots="mentions" om alleen botberichten te accepteren waarin de bot wordt vermeld.OpenClaw bevat ook gedeelde bescherming tegen botlussen. Wanneer allowBots berichten van bots doorlaat naar de dispatch, wijst Discord de inkomende gebeurtenis toe aan (account, channel, bot pair)-feiten en onderdrukt de generieke paarbeveiliging het paar nadat het geconfigureerde gebeurtenissenbudget is overschreden. De beveiliging voorkomt onbeheersbare lussen tussen twee bots die voorheen door Discord-snelheidslimieten moesten worden gestopt; deze heeft geen invloed op implementaties met één bot of eenmalige botantwoorden die onder het budget blijven.Standaardinstellingen (actief wanneer allowBots is ingesteld):maxEventsPerWindow: 20— het botpaar kan binnen het schuivende venster 20 berichten uitwisselenwindowSeconds: 60— lengte van het schuivende venstercooldownSeconds: 60— zodra het budget wordt overschreden, wordt elk volgend bericht tussen bots in beide richtingen gedurende één minuut genegeerd
channels.defaults.botLoopProtection en overschrijf deze vervolgens voor Discord wanneer een legitieme workflow meer ruimte nodig heeft. De prioriteitsvolgorde is:channels.discord.accounts.<account>.botLoopProtectionchannels.discord.botLoopProtectionchannels.defaults.botLoopProtection- ingebouwde standaardwaarden
maxEventsPerWindow, windowSeconds en cooldownSeconds.Spraak-STT valt weg met DecryptionFailed(...)
Spraak-STT valt weg met DecryptionFailed(...)
- houd OpenClaw actueel (
openclaw update), zodat de herstellogica voor de ontvangst van Discord-spraak aanwezig is - bevestig
channels.discord.voice.daveEncryption=true(standaard) - begin met
channels.discord.voice.decryptionFailureTolerance=24(standaard van upstream) en pas dit alleen aan als dat nodig is - controleer de logboeken op:
discord voice: DAVE decrypt failures detecteddiscord voice: repeated decrypt failures; attempting rejoin
- als de fouten na automatisch opnieuw deelnemen aanhouden, verzamel dan logboeken en vergelijk ze met de upstream DAVE-ontvangstgeschiedenis in discord.js #11419 en discord.js #11449
Configuratiereferentie
Primaire referentie: Configuratiereferentie - Discord.Belangrijkste Discord-velden
Belangrijkste Discord-velden
- opstarten/authenticatie:
enabled,token,applicationId,accounts.*,allowBots - beleid:
groupPolicy,dmPolicy,allowFrom,dm.*,guilds.*,guilds.*.channels.* - opdracht:
commands.native,commands.useAccessGroups(globaal),configWrites,slashCommand.ephemeral - Gateway:
proxy - antwoord/geschiedenis:
replyToMode,historyLimit,dmHistoryLimit,dms.*.historyLimit - levering:
textChunkLimit(standaard2000),maxLinesPerMessage(standaard17) - streaming:
streaming.mode,streaming.chunkMode,streaming.preview.*,streaming.progress.*,streaming.block.*(verouderde platte sleutelsstreamMode,draftChunk,blockStreaming,blockStreamingCoalesce,chunkModeworden dooropenclaw doctor --fixnaarstreaming.*gemigreerd) - media:
mediaMaxMb(beperkt uitgaande Discord-uploads, standaard100) - acties:
actions.* - aanwezigheid:
activity,status,activityType,activityUrl,autoPresence.* - UI:
ui.components.accentColor - functies:
threadBindings,bindings[]op het hoogste niveau (type: "acp"),pluralkit,execApprovals,intents,agentComponents.enabled,agentComponents.ttlMs,activities,heartbeat,responsePrefix
Discord Activities
Stelchannels.discord.activities in zodat agents zelfstandige HTML-widgets kunnen plaatsen die in Discord worden geopend. Het blok is optioneel; wanneer het ontbreekt, registreert OpenClaw geen Activity-routes, tool of interactiehandler. Zie Discord Activities voor de configuratie van het Developer Portal, de tunnel, beveiliging en probleemoplossing.
activities.clientSecret: OAuth2-clientgeheim voor de Discord-applicatie; valt terug opDISCORD_CLIENT_SECRETactivities.applicationId: optionele Activity-applicatie-ID; standaard de botapplicatie-ID die bij het opstarten van de Gateway wordt verkregen
Veiligheid en beheer
- Behandel bottokens als geheimen (
DISCORD_BOT_TOKENheeft de voorkeur in bewaakte omgevingen). - Verleen Discord-machtigingen volgens het principe van minimale rechten.
- Als de implementatie of status van opdrachten verouderd is, start je de Gateway opnieuw en controleer je dit nogmaals met
openclaw channels status --probe.