Koppelen
Slash-commando's
Kanaalproblemen oplossen
Snelle installatie
Je moet een nieuwe applicatie met een bot maken, de bot aan je server toevoegen en deze aan OpenClaw koppelen. We raden aan je bot aan je eigen privéserver toe te voegen. Als je die nog niet hebt, maak er dan eerst een (kies Create My Own > For me and my friends).Maak een Discord-applicatie en bot
Schakel privileged intents in
- Message Content Intent (vereist)
- Server Members Intent (aanbevolen; vereist voor rol-allowlists en naam-naar-ID-matching)
- Presence Intent (optioneel; alleen nodig voor aanwezigheidsupdates)
Kopieer je bot-token
Genereer een uitnodigings-URL en voeg de bot toe aan je server
botapplications.commands
- View Channels
- Send Messages
- Read Message History
- Embed Links
- Attach Files
- Add Reactions (optioneel)
Schakel Developer Mode in en verzamel je ID's
- Klik op User Settings (tandwielpictogram naast je avatar) → scrol naar Developer in de zijbalk → zet Developer Mode aan (Opmerking: in de mobiele Discord-app staat Developer Mode onder App Settings → Advanced)
- Klik met de rechtermuisknop op je serverpictogram in de zijbalk → Copy Server ID
- Klik met de rechtermuisknop op je eigen avatar → Copy User ID
Sta DM's van serverleden toe
Stel je bot-token veilig in (stuur het niet in chat)
openclaw gateway run te stoppen en opnieuw te starten.
Voor installaties als beheerde service voer je openclaw gateway install uit vanuit een shell waarin DISCORD_BOT_TOKEN aanwezig is, of sla je de variabele op in ~/.openclaw/.env, zodat de service de env SecretRef na een herstart kan oplossen.
Als je host wordt geblokkeerd of geratelimiteerd door Discord’s applicatie-opzoeking bij het opstarten, stel dan de Discord-applicatie-/client-ID in vanuit de Developer Portal zodat het opstarten die REST-call kan overslaan. Gebruik channels.discord.applicationId voor het standaardaccount, of channels.discord.accounts.<accountId>.applicationId wanneer je meerdere Discord-bots draait.Configureer OpenClaw en koppel
- Vraag het je agent
- CLI / config
“Ik heb mijn Discord-bot-token al ingesteld in de config. Rond de Discord-installatie af met User ID<user_id>en Server ID<server_id>.”
Keur de eerste DM-koppeling goed
- Vraag het je agent
- CLI
“Keur deze Discord-koppelcode goed: <CODE>”
DISCORD_BOT_TOKEN wordt alleen gebruikt voor het standaardaccount.
Als twee ingeschakelde Discord-accounts naar hetzelfde bot-token verwijzen, start OpenClaw slechts één Gateway-monitor voor dat token. Een token uit de config wint van de standaard env-fallback; anders wint het eerste ingeschakelde account en wordt het dubbele account als uitgeschakeld gerapporteerd.
Voor geavanceerde uitgaande calls (berichttool/kanaalacties) wordt een expliciete per-call token voor die call gebruikt. Dit geldt voor verzend- en lees-/probe-achtige acties (bijvoorbeeld lezen/zoeken/ophalen/thread/pins/machtigingen). Accountbeleid en retry-instellingen komen nog steeds uit het geselecteerde account in de actieve runtimesnapshot.Aanbevolen: stel een guild-werkruimte in
Zodra DM’s werken, kun je je Discord-server instellen als een volledige werkruimte waarin elk kanaal zijn eigen agentsessie met eigen context krijgt. Dit wordt aanbevolen voor privéservers waar alleen jij en je bot actief zijn.Voeg je server toe aan de guild-allowlist
- Vraag het je agent
- Config
“Voeg mijn Discord Server ID <server_id> toe aan de guild-allowlist”
Sta reacties zonder @mention toe
messages.groupChat.visibleReplies: "message_tool" zodat de agent kan meelezen en alleen post wanneer hij besluit dat een kanaalantwoord nuttig is. Dit werkt het beste met modellen van de nieuwste generatie die betrouwbaar met tools omgaan, zoals GPT 5.5. Omgevingsgebeurtenissen in ruimtes blijven stil tenzij de tool verzendt. Zie Omgevingsgebeurtenissen in ruimtes voor de volledige lurk-mode-configuratie.Als Discord typen toont en de logs tokengebruik tonen maar er geen bericht is geplaatst, controleer dan of de turn was geconfigureerd als een omgevingsgebeurtenis in een ruimte of was ingesteld op zichtbare antwoorden via de berichttool.- Vraag het je agent
- Config
“Sta mijn agent toe op deze server te reageren zonder dat hij @mentioned hoeft te worden”
Plan voor geheugen in guildkanalen
- Vraag het je agent
- Handmatig
“Wanneer ik vragen stel in Discord-kanalen, gebruik memory_search of memory_get als je langetermijncontext uit MEMORY.md nodig hebt.”
#coding, #home, #research of iets anders dat bij je workflow past kunt instellen.
Runtimemodel
- Gateway beheert de Discord-verbinding.
- Antwoordroutering is deterministisch: inkomende Discord-antwoorden gaan terug naar Discord.
- Discord-gilde-/kanaalmetadata wordt toegevoegd aan de modelprompt als niet-vertrouwde context, niet als een voor gebruikers zichtbaar antwoordvoorvoegsel. Als een model die envelop terugkopieert, verwijdert OpenClaw de gekopieerde metadata uit uitgaande antwoorden en uit toekomstige replay-context.
- Standaard (
session.dmScope=main) delen directe chats de hoofdsessie van de agent (agent:main:main). - Gildekanalen zijn geïsoleerde sessiesleutels (
agent:<agentId>:discord:channel:<channelId>). - Groeps-DM’s worden standaard genegeerd (
channels.discord.dm.groupEnabled=false). - Native slash commands draaien in geïsoleerde opdrachtsessies (
agent:<agentId>:discord:slash:<userId>), terwijl ze nog steedsCommandTargetSessionKeymeenemen naar de gerouteerde conversatiesessie. - Tekst-only cron-/heartbeat-aankondigingslevering aan Discord gebruikt het uiteindelijke voor de assistant zichtbare antwoord één keer. Media en gestructureerde componentpayloads blijven meerdere berichten wanneer de agent meerdere leverbare payloads uitstuurt.
Forumkanalen
Discord-forum- en mediakanalen accepteren alleen threadberichten. OpenClaw ondersteunt twee manieren om ze te maken:- Stuur een bericht naar de forumparent (
channel:<forumId>) om automatisch een thread te maken. De threadtitel gebruikt de eerste niet-lege regel van je bericht. - Gebruik
openclaw message thread createom direct een thread te maken. Geef geen--message-iddoor voor forumkanalen.
channel:<threadId>).
Interactieve componenten
OpenClaw ondersteunt Discord components v2-containers voor agentberichten. Gebruik de berichttool met eencomponents-payload. Interactieresultaten worden teruggerouteerd naar de agent als normale inkomende berichten en volgen de bestaande Discord-instellingen voor replyToMode.
Ondersteunde blokken:
text,section,separator,actions,media-gallery,file- Actierijen staan maximaal 5 knoppen of één selectiemenu toe
- Selectietypen:
string,user,role,mentionable,channel
components.reusable=true in om knoppen, selecties en formulieren meerdere keren te kunnen gebruiken totdat ze verlopen.
Om te beperken wie op een knop kan klikken, stel je allowedUsers in op die knop (Discord-gebruikers-ID’s, tags of *). Wanneer dit is geconfigureerd, ontvangen niet-overeenkomende gebruikers een ephemeral weigering.
Componentcallbacks verlopen standaard na 30 minuten. Stel channels.discord.agentComponents.ttlMs in om die callbackregisterlevensduur te wijzigen voor het standaard Discord-account, of channels.discord.accounts.<accountId>.agentComponents.ttlMs om één account in een multi-accountconfiguratie te overschrijven. De waarde is in milliseconden, moet een positief geheel getal zijn en is begrensd op 86400000 (24 uur). Langere TTL’s zijn nuttig voor review- of goedkeuringsworkflows waarbij knoppen bruikbaar moeten blijven, maar ze verlengen ook het venster waarin een oud Discord-bericht nog steeds een actie kan triggeren. Gebruik bij voorkeur de kortste TTL die bij de workflow past, en behoud de standaardwaarde wanneer verouderde callbacks verrassend zouden zijn.
De slash commands /model en /models openen een interactieve modelkiezer met dropdowns voor provider, model en compatibele runtime plus een stap Indienen. /models add is verouderd en retourneert nu een verouderingsbericht in plaats van modellen vanuit chat te registreren. Het kiezerantwoord is ephemeral en alleen de aanroepende gebruiker kan het gebruiken. Discord-selectiemenu’s zijn beperkt tot 25 opties, dus voeg provider/*-items toe aan agents.defaults.models wanneer je wilt dat de kiezer dynamisch ontdekte modellen alleen toont voor geselecteerde providers zoals openai of vllm.
Bestandsbijlagen:
file-blokken moeten verwijzen naar een bijlagereferentie (attachment://<filename>)- Geef de bijlage op via
media/path/filePath(één bestand); gebruikmedia-galleryvoor meerdere bestanden - Gebruik
filenameom de uploadnaam te overschrijven wanneer die moet overeenkomen met de bijlagereferentie
- Voeg
components.modaltoe met maximaal 5 velden - Veldtypen:
text,checkbox,radio,select,role-select,user-select - OpenClaw voegt automatisch een triggerknop toe
Toegangscontrole en routering
- DM-beleid
- Toegangsgroepen
- Gildebeleid
- Vermeldingen en groeps-DM's
channels.discord.dmPolicy beheert DM-toegang. channels.discord.allowFrom is de canonieke DM-allowlist.pairing(standaard)allowlistopen(vereist datchannels.discord.allowFrom"*"bevat)disabled
pairing).Precedentie bij meerdere accounts:channels.discord.accounts.default.allowFromis alleen van toepassing op het accountdefault.- Voor één account heeft
allowFromvoorrang op legacydm.allowFrom. - Benoemde accounts erven
channels.discord.allowFromwanneer hun eigenallowFromen legacydm.allowFromniet zijn ingesteld. - Benoemde accounts erven
channels.discord.accounts.default.allowFromniet.
channels.discord.dm.policy en channels.discord.dm.allowFrom worden nog steeds gelezen voor compatibiliteit. openclaw doctor --fix migreert ze naar dmPolicy en allowFrom wanneer dat kan zonder de toegang te wijzigen.DM-doelindeling voor levering:user:<id><@id>-vermelding
allowFrom van het account staan, worden voor compatibiliteit behandeld als gebruiker-DM-doelen.Rolgebaseerde agentroutering
Gebruikbindings[].match.roles om Discord-gildeleden op basis van rol-ID naar verschillende agents te routeren. Rolgebaseerde bindings accepteren alleen rol-ID’s en worden geëvalueerd na peer- of parent-peer-bindings en vóór guild-only-bindings. Als een binding ook andere matchvelden instelt (bijvoorbeeld peer + guildId + roles), moeten alle geconfigureerde velden overeenkomen.
Native opdrachten en opdracht-authenticatie
commands.nativestaat standaard op"auto"en is ingeschakeld voor Discord.- Override per kanaal:
channels.discord.commands.native. commands.native=falseslaat registratie en opschoning van Discord-slash-opdrachten tijdens het opstarten over. Eerder geregistreerde opdrachten kunnen zichtbaar blijven in Discord totdat je ze uit de Discord-app verwijdert.- Authenticatie voor native opdrachten gebruikt dezelfde Discord-allowlists en beleidsregels als normale berichtverwerking.
- Opdrachten kunnen nog steeds zichtbaar zijn in de Discord-UI voor gebruikers die niet gemachtigd zijn; uitvoering dwingt nog steeds OpenClaw-authenticatie af en retourneert “not authorized”.
ephemeral: true
Functiedetails
Linkvoorbeelden
Linkvoorbeelden
channels.discord.accounts.<id>.suppressEmbeds in om één account te overriden. Verzendingen via de berichttool van agents kunnen ook suppressEmbeds: false doorgeven voor één bericht. Expliciete Discord-embeds-payloads worden niet onderdrukt door de standaardinstelling voor linkvoorbeelden.Live stream-voorbeeld
Live stream-voorbeeld
channels.discord.streaming accepteert off | partial | block | progress (standaard). progress houdt één bewerkbaar statusconcept bij en werkt dit bij met toolvoortgang tot de definitieve levering; het gedeelde startlabel is een rollende regel, dus het scrollt weg zoals de rest zodra er genoeg werk verschijnt. streamMode is een legacy runtime-alias. Voer openclaw doctor --fix uit om opgeslagen configuratie naar de canonieke sleutel te herschrijven.Stel channels.discord.streaming.mode in op off om Discord-voorbeeldbewerkingen uit te schakelen. Als Discord-blokstreaming expliciet is ingeschakeld, slaat OpenClaw de voorbeeldstream over om dubbel streamen te voorkomen.partialbewerkt één voorbeeldbericht terwijl tokens binnenkomen.blockzendt conceptgrote chunks uit (gebruikdraftChunkom grootte en breekpunten af te stemmen, begrensd optextChunkLimit).- Media, fouten en expliciete antwoordfinals annuleren wachtende voorbeeldbewerkingen.
streaming.preview.toolProgress(standaardtrue) bepaalt of tool-/voortgangsupdates het voorbeeldbericht hergebruiken.- Tool-/voortgangsrijen worden weergegeven als compacte emoji + titel + detail wanneer beschikbaar, bijvoorbeeld
🛠️ Bash: run testsof🔎 Web Search: for "query". streaming.progress.commentary(standaardfalse) schakelt assistentcommentaar/introductietekst in het tijdelijke voortgangsconcept in. Commentaar wordt vóór weergave opgeschoond, blijft tijdelijk en verandert de levering van het definitieve antwoord niet.streaming.progress.maxLineCharsbepaalt het budget per regel voor de voortgangsweergave. Proza wordt op woordgrenzen ingekort; opdracht- en paddetails behouden nuttige suffixen.streaming.preview.commandText/streaming.progress.commandTextbepaalt opdracht-/exec-details in compacte voortgangsregels:raw(standaard) ofstatus(alleen toollabel).
block-streaming expliciet is ingeschakeld, slaat OpenClaw de voorbeeldstream over om dubbel streamen te voorkomen.Geschiedenis, context en threadgedrag
Geschiedenis, context en threadgedrag
channels.discord.historyLimitstandaard20- fallback:
messages.groupChat.historyLimit 0schakelt uit
channels.discord.dmHistoryLimitchannels.discord.dms["<user_id>"].historyLimit
- Discord-threads routeren als kanaalsessies en erven de configuratie van het bovenliggende kanaal, tenzij overridden.
- Threadsessies erven de sessieniveau-
/model-selectie van het bovenliggende kanaal als model-only fallback; threadlokale/model-selecties hebben nog steeds voorrang en bovenliggende transcriptgeschiedenis wordt niet gekopieerd tenzij transcriptovererving is ingeschakeld. channels.discord.thread.inheritParent(standaardfalse) laat nieuwe auto-threads starten met seeddata uit het bovenliggende transcript. Overrides per account staan onderchannels.discord.accounts.<id>.thread.inheritParent.- Berichttoolreacties kunnen
user:<id>-DM-targets oplossen. guilds.<guild>.channels.<channel>.requireMention: falseblijft behouden tijdens reply-stage activation fallback.
Threadgebonden sessies voor subagents
Threadgebonden sessies voor subagents
/focus <target>bind huidige/nieuwe thread aan een subagent-/sessietarget/unfocusverwijder de huidige threadbinding/agentstoon actieve runs en bindingsstatus/session idle <duration|off>inspecteer/update automatische inactiviteits-unfocus voor gefocuste bindings/session max-age <duration|off>inspecteer/update harde maximale leeftijd voor gefocuste bindings
session.threadBindings.*stelt globale standaarden in.channels.discord.threadBindings.*overridet Discord-gedrag.spawnSessionsbeheert automatisch aanmaken/binden van threads voorsessions_spawn({ thread: true })en ACP-threadspawns. Standaard:true.defaultSpawnContextbeheert native subagentcontext voor threadgebonden spawns. Standaard:"fork".- Verouderde sleutels
spawnSubagentSessions/spawnAcpSessionsworden gemigreerd dooropenclaw doctor --fix. - Als threadbindings voor een account zijn uitgeschakeld, zijn
/focusen gerelateerde threadbindingsbewerkingen niet beschikbaar.
Persistente ACP-kanaalbindings
Persistente ACP-kanaalbindings
bindings[]mettype: "acp"enmatch.channel: "discord"
/acp spawn codex --bind herebindt het huidige kanaal of de huidige thread op zijn plek en houdt toekomstige berichten op dezelfde ACP-sessie. Threadberichten erven de binding van het bovenliggende kanaal.- In een gebonden kanaal of thread resetten
/newen/resetdezelfde ACP-sessie op zijn plek. Tijdelijke threadbindings kunnen targetresolutie overriden terwijl ze actief zijn. spawnSessionsbeheert het maken/binden van child-threads via--thread auto|here.
Reactiemeldingen
Reactiemeldingen
offown(standaard)allallowlist(gebruiktguilds.<id>.users)
Ack-reacties
Ack-reacties
ackReaction verzendt een bevestigingsemoji terwijl OpenClaw een inkomend bericht verwerkt.Resolutievolgorde:channels.discord.accounts.<accountId>.ackReactionchannels.discord.ackReactionmessages.ackReaction- fallback naar agentidentiteitsemoji (
agents.list[].identity.emoji, anders ”👀”)
- Discord accepteert unicode-emoji of aangepaste emojinamen.
- Gebruik
""om de reactie voor een kanaal of account uit te schakelen.
Configuratieschrijfacties
Configuratieschrijfacties
/config set|unset-flows (wanneer opdrachtfuncties zijn ingeschakeld).Uitschakelen:Gateway-proxy
Gateway-proxy
channels.discord.proxy.
Discord Gateway WebSocket-proxying is expliciet; WebSocket-verbindingen erven geen omgevingsproxyvariabelen uit het Gateway-proces. REST-lookups bij opstarten gebruiken deze proxy wanneer channels.discord.proxy is geconfigureerd.PluralKit-ondersteuning
PluralKit-ondersteuning
- allowlists kunnen
pk:<memberId>gebruiken - weergavenamen van leden worden alleen op naam/slug gematcht wanneer
channels.discord.dangerouslyAllowNameMatching: true - zoekacties gebruiken de oorspronkelijke bericht-ID en zijn beperkt tot een tijdvenster
- als de zoekactie mislukt, worden proxied berichten behandeld als botberichten en verwijderd, tenzij
allowBots=true
Uitgaande vermeldingsaliassen
Uitgaande vermeldingsaliassen
mentionAliases wanneer agents deterministische uitgaande vermeldingen nodig hebben voor bekende Discord-gebruikers. Sleutels zijn handles zonder de voorafgaande @; waarden zijn Discord-gebruikers-ID’s. Onbekende handles, @everyone, @here en vermeldingen binnen Markdown-codespans blijven ongewijzigd.Aanwezigheidsconfiguratie
Aanwezigheidsconfiguratie
- 0: Spelen
- 1: Streamen (vereist
activityUrl) - 2: Luisteren
- 3: Kijken
- 4: Aangepast (gebruikt de activiteitstekst als statustoestand; emoji is optioneel)
- 5: Deelnemen
autoPresence.healthyTextautoPresence.degradedTextautoPresence.exhaustedText(ondersteunt{reason}-placeholder)
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 opgelost, hetzij vanuit execApprovals.approvers, hetzij vanuit commands.ownerAllowFrom. Discord leidt exec-goedkeurders niet af uit kanaal-allowFrom, legacy dm.allowFrom of direct-message defaultTo. Stel enabled: false in om Discord expliciet uit te schakelen als native goedkeuringsclient.Voor gevoelige groepscommando’s die alleen voor eigenaren zijn, zoals /diagnostics en /export-trajectory, stuurt OpenClaw goedkeuringsprompts en eindresultaten privé. Het probeert eerst een Discord-DM wanneer de aanroepende eigenaar een Discord-eigenaarroute heeft; als die niet beschikbaar is, valt het terug op de eerste beschikbare eigenaarroute uit commands.ownerAllowFrom, zoals Telegram.Wanneer target channel of both is, is de goedkeuringsprompt zichtbaar in het kanaal. Alleen opgeloste goedkeurders kunnen de knoppen gebruiken; andere gebruikers ontvangen een vluchtige weigering. Goedkeuringsprompts bevatten de commandotekst, dus schakel kanaallevering alleen in vertrouwde kanalen in. Als de kanaal-ID niet uit de sessiesleutel kan worden afgeleid, valt OpenClaw terug op levering via DM.Discord rendert ook de gedeelde goedkeuringsknoppen die door andere chatkanalen worden gebruikt. De native Discord-adapter voegt vooral DM-routering voor goedkeurders en kanaalfanout toe.
Wanneer die knoppen aanwezig zijn, vormen ze de primaire goedkeurings-UX; OpenClaw
mag alleen een handmatig /approve-commando opnemen wanneer het toolresultaat zegt
dat chatgoedkeuringen niet beschikbaar zijn of dat handmatige goedkeuring het enige pad is.
Als de native Discord-goedkeuringsruntime niet actief is, houdt OpenClaw de
lokale deterministische prompt /approve <id> <decision> zichtbaar. Als de
runtime actief is maar een native kaart niet aan een doel kan worden geleverd,
stuurt OpenClaw een fallback-melding in dezelfde chat met het exacte /approve-
commando uit de wachtende goedkeuring.Gateway-authenticatie en goedkeuringsresolutie volgen het gedeelde Gateway-clientcontract (plugin:-ID’s worden opgelost via plugin.approval.resolve; andere ID’s via exec.approval.resolve). Goedkeuringen verlopen standaard na 30 minuten.Zie Exec-goedkeuringen.Tools en actiegates
Discord-berichtacties omvatten berichten, kanaalbeheer, moderatie, aanwezigheid en metadata-acties. 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 van de geplande gebeurtenis in te stellen.
Actiegates staan onder channels.discord.actions.*.
Standaard gate-gedrag:
| Actiegroep | Standaard |
|---|---|
| reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | ingeschakeld |
| roles | uitgeschakeld |
| moderation | uitgeschakeld |
| presence | uitgeschakeld |
Components v2-UI
OpenClaw gebruikt Discord-components v2 voor exec-goedkeuringen en cross-contextmarkeringen. Discord-berichtacties kunnen ookcomponents accepteren voor aangepaste UI (geavanceerd; vereist het construeren van een componentpayload via de discord-tool), terwijl legacy embeds beschikbaar blijven maar niet worden aanbevolen.
channels.discord.ui.components.accentColorstelt de accentkleur in die door Discord-componentcontainers wordt gebruikt (hex).- Stel dit per account in met
channels.discord.accounts.<id>.ui.components.accentColor. channels.discord.agentComponents.ttlMsbepaalt hoe lang verzonden Discord-componentcallbacks geregistreerd blijven (standaard1800000, maximum86400000). Stel dit per account in metchannels.discord.accounts.<id>.agentComponents.ttlMs.embedsworden genegeerd wanneer components v2 aanwezig zijn.- Voorvertoningen van gewone URL’s worden standaard onderdrukt. Stel
suppressEmbeds: falsein op een berichtactie wanneer één uitgaande link moet uitklappen.
Spraak
Discord heeft twee afzonderlijke spraakoppervlakken: realtime spraakkanalen (doorlopende gesprekken) en spraakberichtbijlagen (het waveform-previewformaat). De gateway ondersteunt beide.Spraakkanalen
Setupchecklist:- Schakel Message Content Intent in het Discord Developer Portal in.
- Schakel Server Members Intent in wanneer rol-/gebruikersallowlists 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 commando’s in (
commands.nativeofchannels.discord.commands.native). - Configureer
channels.discord.voice.
/vc join|leave|status om sessies te beheren. Het commando gebruikt de standaardagent van het account en volgt dezelfde allowlist- en groepsbeleidsregels als andere Discord-commando’s.
voice.ttsoverschrijftmessages.ttsalleen voorstt-tts-spraakweergave. Realtime-modi gebruikenvoice.realtime.speakerVoice.voice.modebepaalt het gesprekspad. De standaardwaarde isagent-proxy: een realtime spraakfrontend handelt beurtiming, onderbreking en weergave af, delegeert inhoudelijk werk aan de geroute OpenClaw-agent viaopenclaw_agent_consult, en behandelt het resultaat als een getypte Discord-prompt van die spreker.stt-ttsbehoudt de oudere batch-STT plus TTS-flow. Metbidikan het realtime model rechtstreeks converseren terwijlopenclaw_agent_consultvoor het OpenClaw-brein beschikbaar blijft.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 consults. Laat dit oningesteld om het geroute agentmodel te erven. Het staat los vanvoice.realtime.model.- Met
voice.followUserskan de bot Discord-spraak joinen, verplaatsen en verlaten met geselecteerde gebruikers. Zie Gebruikers volgen in spraak voor gedragsregels en voorbeelden. agent-proxyroute spraak viadiscord-voice, waardoor normale owner-/toolautorisatie voor de spreker en doelsessie behouden blijft, maar de agenttoolttswordt verborgen omdat Discord-spraak de weergave bezit. Standaard geeftagent-proxyhet consult volledige owner-equivalente tooltoegang voor owner-sprekers (voice.realtime.toolPolicy: "owner") en geeft het sterk de voorkeur aan het raadplegen van de OpenClaw-agent vóór inhoudelijke antwoorden (voice.realtime.consultPolicy: "always"). In die standaardmodusalwaysspreekt de realtime laag niet automatisch opvulling uit vóór het consultantwoord; hij legt spraak vast en transcribeert die, en spreekt daarna het geroute OpenClaw-antwoord uit. Als meerdere afgedwongen consultantwoorden klaar zijn terwijl Discord het eerste antwoord nog afspeelt, worden latere exact-spraakantwoorden in de wachtrij gezet totdat de weergave idle is, in plaats van spraak midden in een zin te vervangen.- In de modus
stt-ttsgebruikt STTtools.media.audio;voice.modelheeft geen invloed op transcriptie. - In realtime-modi configureren
voice.realtime.provider,voice.realtime.modelenvoice.realtime.speakerVoicede realtime audiosessie. Gebruik voor OpenAI Realtime 2 plus het Codex-breinvoice.realtime.model: "gpt-realtime-2"envoice.model: "openai/gpt-5.5". - Realtime spraakmodi nemen standaard kleine profielbestanden
IDENTITY.md,USER.mdenSOUL.mdop in de instructies voor de realtime provider, zodat snelle directe beurten dezelfde identiteit, gebruikersgronding en persona behouden als de geroute OpenClaw-agent. Stelvoice.realtime.bootstrapContextFilesin op een subset om dit aan te passen, of op[]om het uit te schakelen. De ondersteunde realtime bootstrap-bestanden zijn beperkt tot die profielbestanden;AGENTS.mdblijft in de normale agentcontext. De geïnjecteerde profielcontext vervangtopenclaw_agent_consultniet voor werkruimtetaken, actuele feiten, geheugenopzoeking of tool-ondersteunde acties. - Stel in de OpenAI realtime modus
agent-proxyvoice.realtime.requireWakeName: truein om Discord-realtime spraak stil te houden totdat een transcript begint of eindigt met een weknaam. Geconfigureerde weknamen moeten uit één of twee woorden bestaan. Alsvoice.realtime.wakeNamesniet is ingesteld, gebruikt OpenClaw de geroute agent-nameplusOpenClaw, met een fallback naar de agent-id plusOpenClaw. Weknaam-gating schakelt automatische antwoorden van de realtime provider uit, route geaccepteerde beurten via het OpenClaw-agentconsultpad, en geeft een korte gesproken bevestiging wanneer een leidende weknaam wordt herkend uit gedeeltelijke transcriptie voordat het definitieve transcript arriveert. - De OpenAI realtime provider accepteert huidige Realtime 2-eventnamen en legacy Codex-compatibele aliassen voor outputaudio- en transcriptevents, zodat compatibele providersnapshots kunnen afwijken zonder assistentaudio te laten vallen.
voice.realtime.bargeInbepaalt of Discord speaker-start-events actieve realtime weergave onderbreken. Als dit oningesteld is, volgt het de inputaudio-onderbrekingsinstelling van de realtime provider.voice.realtime.minBargeInAudioEndMsbepaalt de minimale afspeelduur van de assistant voordat een OpenAI realtime barge-in audio afkapt. Standaard:250. Stel0in voor onmiddellijke onderbreking in ruimtes met weinig echo, of verhoog dit voor luidsprekeropstellingen met veel echo.- Stel voor een OpenAI-stem bij Discord-weergave
voice.tts.provider: "openai"in en kies een Text-to-speech-stem ondervoice.tts.providers.openai.speakerVoice.cedaris een goede mannelijk klinkende keuze op het huidige OpenAI TTS-model. - Per-kanaal Discord-overschrijvingen van
systemPromptgelden voor spraaktranscriptbeurten voor dat spraakkanaal. - Spraaktranscriptbeurten leiden de owner-status af van Discord
allowFrom(ofdm.allowFrom) voor owner-gated opdrachten en kanaalacties. Zichtbaarheid van agenttools volgt het geconfigureerde toolbeleid voor de geroute sessie. - Discord-spraak is opt-in voor tekst-only configuraties; stel
channels.discord.voice.enabled=truein (of behoud een bestaandchannels.discord.voice-blok) om/vc-opdrachten, de spraakruntime en de Gateway-intentGuildVoiceStatesin te schakelen. channels.discord.intents.voiceStateskan het abonnement op de voice-state-intent expliciet overschrijven. Laat dit oningesteld zodat de intent de effectieve spraakinschakeling volgt.- Als
voice.autoJoinmeerdere vermeldingen voor dezelfde guild heeft, joint OpenClaw het laatst geconfigureerde kanaal voor die guild. voice.allowedChannelsis een optionele allowlist voor verblijf. Laat dit oningesteld om/vc jointoe te staan naar elk geautoriseerd Discord-spraakkanaal. Wanneer dit is ingesteld, zijn/vc join, startup auto-join en bot voice-state-verplaatsingen beperkt tot de vermelde{ guildId, channelId }-vermeldingen. Stel dit in op een lege array om alle Discord-spraakjoins te weigeren. Als Discord de bot buiten de allowlist verplaatst, verlaat OpenClaw dat kanaal en joint opnieuw het geconfigureerde auto-join-doel wanneer er een beschikbaar is.voice.daveEncryptionenvoice.decryptionFailureToleranceworden doorgegeven aan de join-opties van@discordjs/voice.- De standaardwaarden van
@discordjs/voicezijndaveEncryption=trueendecryptionFailureTolerance=24als ze oningesteld zijn. - OpenClaw gebruikt de gebundelde
libopus-wasm-codec voor Discord-spraakontvangst en realtime raw PCM-weergave. Deze levert een vastgepinde libopus WebAssembly-build mee en vereist geen native opus-add-ons. voice.connectTimeoutMsbepaalt de initiële@discordjs/voiceReady-wachttijd voor/vc joinen auto-join-pogingen. Standaard:30000.voice.reconnectGraceMsbepaalt hoelang OpenClaw wacht tot een verbroken spraaksessie begint met opnieuw verbinden voordat die wordt vernietigd. Standaard:15000.- In de modus
stt-ttsstopt spraakweergave niet alleen omdat een andere gebruiker begint te spreken. Om feedbacklussen te voorkomen, negeert OpenClaw nieuwe spraakopname terwijl TTS speelt; spreek nadat de weergave is afgelopen voor de volgende beurt. Realtime-modi sturen speaker-starts door als barge-in-signalen naar de realtime provider. - In realtime-modi kan echo van luidsprekers in een open microfoon lijken op barge-in en de weergave onderbreken. Stel voor Discord-ruimtes met veel echo
voice.realtime.providers.openai.interruptResponseOnInputAudio: falsein om te voorkomen dat OpenAI automatisch onderbreekt bij inputaudio. Voegvoice.realtime.bargeIn: truetoe als je nog steeds wilt dat Discord speaker-start-events actieve weergave onderbreken. De OpenAI realtime bridge negeert afspeelafkappingen korter danvoice.realtime.minBargeInAudioEndMsals waarschijnlijke echo/ruis en logt ze als overgeslagen in plaats van Discord-weergave 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 schokkerige gedeeltelijke transcripties.- Wanneer ElevenLabs de geselecteerde TTS-provider is, gebruikt Discord-spraakweergave streaming-TTS en start die vanuit de providerresponsstream. Providers zonder streamingondersteuning vallen terug op het gesynthetiseerde tijdelijke-bestandspad.
- OpenClaw bewaakt ook ontvangstdecryptiefouten en herstelt automatisch door het spraakkanaal te verlaten en opnieuw te joinen na herhaalde fouten binnen een korte periode.
- Als ontvangstlogs na een update herhaaldelijk
DecryptionFailed(UnencryptedWhenPassthroughDisabled)tonen, verzamel dan een dependencyrapport en logs. De gebundelde@discordjs/voice-lijn bevat de upstream padding-fix uit discord.js PR #11449, die discord.js-issue #11419 heeft gesloten. The operation was aborted-ontvangstevents zijn verwacht wanneer OpenClaw een vastgelegd sprekersegment afrondt; het zijn uitgebreide diagnostische meldingen, geen waarschuwingen.- Uitgebreide Discord-spraaklogs bevatten een begrensde transcriptpreview van één regel voor elk geaccepteerd sprekersegment, zodat debugging zowel de gebruikerskant als de agentantwoordkant toont zonder onbeperkte transcripttekst te dumpen.
- In de modus
agent-proxyslaat afgedwongen consultfallback waarschijnlijk onvolledige transcriptfragmenten over, zoals tekst die eindigt op...of een afsluitende verbinding zoalsand, plus duidelijk niet-actiegerichte afsluitingen zoals “ben zo terug” of “doei”. Logs 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 bij het opstarten een vast kanaal te joinen of op /vc join te wachten.
followUsersaccepteert raw Discord-gebruikers-ID’s en waarden vandiscord:<id>. OpenClaw normaliseert beide vormen voordat voice-state-events worden gematcht.followUsersEnabledis standaardtruewanneerfollowUsersis geconfigureerd. Stel dit in opfalseom de opgeslagen lijst te behouden maar automatisch spraakvolgen te stoppen.- Wanneer een gevolgde gebruiker een toegestaan spraakkanaal joint, joint OpenClaw dat kanaal. Wanneer de gebruiker verplaatst, verplaatst OpenClaw mee. Wanneer de actieve gevolgde gebruiker de verbinding verbreekt, verlaat OpenClaw het kanaal.
- Als meerdere gevolgde gebruikers zich in dezelfde guild bevinden en de actieve gevolgde gebruiker vertrekt, verplaatst OpenClaw naar het kanaal van een andere bijgehouden gevolgde gebruiker voordat de guild wordt verlaten. Als meerdere gevolgde gebruikers tegelijk verplaatsen, wint het laatst waargenomen voice-state-event.
allowedChannelsblijft van toepassing. Een gevolgde gebruiker in een niet-toegestaan kanaal wordt genegeerd, en een follow-owned sessie verplaatst naar een andere gevolgde gebruiker of verlaat het kanaal.- OpenClaw reconcileert gemiste voice-state-events bij het opstarten en met een begrensd interval. Reconciliatie samplet geconfigureerde guilds en begrenst REST-lookups per run, dus zeer grote
followUsers-lijsten kunnen meer dan één interval nodig hebben om te convergeren. - Als Discord of een admin de bot verplaatst terwijl deze een gebruiker volgt, bouwt OpenClaw de spraaksessie opnieuw op en behoudt follow ownership wanneer de bestemming is toegestaan. Als de bot buiten
allowedChannelswordt verplaatst, verlaat OpenClaw het kanaal en joint het geconfigureerde doel opnieuw wanneer er een bestaat. - DAVE-ontvangstherstel kan hetzelfde kanaal verlaten en opnieuw joinen na herhaalde decryptiefouten. Follow-owned sessies behouden hun follow ownership via dat herstelpad, zodat een latere verbreking door een gevolgde gebruiker het kanaal nog steeds verlaat.
- Gebruik
followUsersvoor persoonlijke of operatoropstellingen waarbij de bot automatisch in spraak moet zijn wanneer jij dat bent. - Gebruik
autoJoinvoor bots in vaste ruimtes die aanwezig moeten zijn, zelfs wanneer er geen bijgehouden gebruiker in spraak is. - Gebruik
/vc joinvoor eenmalige joins of ruimtes waar automatische spraakaanwezigheid verrassend zou zijn.
- Spraakontvangstlogs tonen
discord voice: opus decoder: libopus-wasm. - Realtime afspelen codeert ruwe 48 kHz stereo-PCM naar Opus met hetzelfde gebundelde
libopus-wasm-pakket voordat pakketten aan@discordjs/voiceworden doorgegeven. - Afspelen van bestanden en providerstreams transcodeert met ffmpeg naar ruwe 48 kHz stereo-PCM en gebruikt daarna
libopus-wasmvoor de Opus-pakketstream die naar Discord wordt gestuurd.
- Discord-PCM-opname wordt geconverteerd naar een tijdelijk WAV-bestand.
tools.media.audiohandelt STT af, bijvoorbeeldopenai/gpt-4o-mini-transcribe.- Het transcript wordt via Discord-ingang en routering verzonden terwijl de respons-LLM draait met een spraakuitvoerbeleid dat de agenttool
ttsverbergt en om teruggegeven tekst vraagt, omdat Discord-spraak eigenaar is van de uiteindelijke TTS-weergave. voice.model, wanneer ingesteld, overschrijft alleen de respons-LLM voor deze spraakkanaalbeurt.voice.ttswordt overmessages.ttssamengevoegd; providers die streaming ondersteunen voeden de speler rechtstreeks, anders wordt het resulterende audiobestand afgespeeld in het gekoppelde kanaal.
voice.agentSession-blok krijgt elk spraakkanaal zijn eigen gerouteerde OpenClaw-sessie. Bijvoorbeeld: /vc join channel:234567890123456789 praat met de sessie voor dat Discord-spraakkanaal. Het realtime model is alleen de spraakfrontend; inhoudelijke verzoeken worden aan de geconfigureerde OpenClaw-agent doorgegeven. Als het realtime model een definitief transcript produceert zonder de consulttool aan te roepen, forceert OpenClaw de consult als fallback zodat de standaard nog steeds werkt alsof je met de agent praat.
Voorbeeld van legacy STT plus TTS:
agent-proxy-modus neemt de bot deel aan het geconfigureerde spraakkanaal, maar OpenClaw-agentbeurten gebruiken de normale gerouteerde sessie en agent van het doelkanaal. De realtime spraaksessie spreekt het teruggegeven resultaat terug in het spraakkanaal. De supervisoragent kan nog steeds normale berichttools gebruiken volgens zijn toolbeleid, inclusief het verzenden van een apart Discord-bericht als dat de juiste actie is.
Terwijl een gedelegeerde OpenClaw-run actief is, worden nieuwe Discord-spraaktranscripten behandeld als live runbesturing voordat een andere agentbeurt wordt gestart. Zinnen zoals “status”, “cancel that”, “use the smaller fix” of “when you’re done also check tests” worden geclassificeerd als status-, annulerings-, bijsturings- of follow-up-invoer voor de actieve sessie. Status-, annulerings-, geaccepteerde bijsturings- en follow-up-uitkomsten worden teruggesproken in het spraakkanaal zodat de beller weet of OpenClaw het verzoek heeft afgehandeld.
Nuttige doelvormen:
target: "channel:123456789012345678"routeert via een Discord-tekstkanaalsessie.target: "123456789012345678"wordt behandeld als een kanaaldoel.target: "dm:123456789012345678"oftarget: "user:123456789012345678"routeert via die direct-message-sessie.
bargeIn: true ervoor zorgt dat Discord-gebeurtenissen voor sprekerstart en al actieve sprekeraudio actieve realtime reacties kunnen annuleren voordat de volgende vastgelegde beurt OpenAI bereikt. Zeer vroege barge-in-signalen met audioEndMs onder minBargeInAudioEndMs worden behandeld als waarschijnlijke echo/ruis en genegeerd zodat het model niet bij het eerste weergaveframe wordt afgekapt.
Verwachte spraaklogs:
- Bij deelnemen:
discord voice: joining ... voiceSession=... supervisorSession=... agentSessionMode=... voiceModel=... realtimeModel=... - Bij realtime start:
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 realtime respons:
discord voice: realtime audio playback finishing reason=response.done ... audioMs=... chunks=... - Bij stoppen/resetten van weergave:
discord voice: realtime audio playback stopped reason=... audioMs=... elapsedMs=... chunks=... - Bij realtime consult:
discord voice: realtime consult requested ... voiceSession=... supervisorSession=... question=... - Bij agentantwoord:
discord voice: agent turn answer ... - Bij in de wachtrij geplaatste exacte spraak:
discord voice: realtime exact speech queued ... queued=... outputAudioMs=... outputActive=..., gevolgd doordiscord voice: realtime exact speech dequeued reason=player-idle ... - Bij barge-in-detectie:
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 door ofweldiscord 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 barge-in:
discord voice: realtime capture ignored during playback (barge-in disabled) ... - Bij inactieve weergave:
discord voice: realtime barge-in ignored reason=... outputActive=false ... playbackChunks=0
realtime audio playback startedbetekent dat Discord is begonnen met het afspelen van assistentaudio. De bridge begint vanaf dit punt assistentuitvoerchunks, Discord-PCM-bytes, realtime providerbytes en gesynthetiseerde audioduur te tellen.realtime speaker turn openedmarkeert dat een Discord-spreker actief wordt. Als weergave al actief is enbargeInis ingeschakeld, kan dit worden gevolgd doorbarge-in detected source=speaker-start.realtime input audio startedmarkeert het eerste daadwerkelijke audioframe dat voor die sprekerbeurt is ontvangen.outputActive=trueof een niet-nuloutputAudioMshier betekent dat de microfoon invoer verzendt terwijl assistentweergave nog actief is.barge-in detected source=active-speaker-audiobetekent dat OpenClaw live sprekeraudio zag terwijl assistentweergave actief was. Dit is nuttig om een echte onderbreking te onderscheiden van een Discord-gebeurtenis voor sprekerstart zonder bruikbare audio.barge-in requested reason=...betekent dat OpenClaw de realtime provider heeft gevraagd de actieve respons te annuleren of af te kappen. Het bevatoutputAudioMs,outputActiveenplaybackChunkszodat je kunt zien hoeveel assistentaudio daadwerkelijk was afgespeeld vóór de onderbreking.realtime audio playback stopped reason=...is het lokale resetpunt voor Discord-weergave. De reden geeft aan wie de weergave stopte:barge-in,player-idle,provider-clear-audio,forced-agent-consult,stream-closeofsession-close.realtime speaker turn closedvat de vastgelegde invoerbeurt samen.chunks=0ofhasAudio=falsebetekent dat de sprekerbeurt werd geopend maar geen bruikbare audio de realtime bridge bereikte.interruptedPlayback=truebetekent dat die invoerbeurt overlapte met assistentuitvoer en barge-in-logica activeerde.
outputAudioMs: duur van assistentaudio die vóór de logregel door de realtime provider is gegenereerd.audioMs: duur van assistentaudio die OpenClaw telde voordat de weergave stopte.elapsedMs: wall-clock-tijd tussen het openen en sluiten van de weergavestream of sprekerbeurt.discordBytes: 48 kHz stereo-PCM-bytes die naar of van Discord-spraak zijn verzonden of ontvangen.realtimeBytes: PCM-bytes in providerformaat die naar of van de realtime provider zijn verzonden of ontvangen.playbackChunks: assistentaudiochunks die voor de actieve respons naar Discord zijn doorgestuurd.sinceLastAudioMs: tijdsverschil tussen het laatste vastgelegde sprekeraudioframe en het sluiten van de sprekerbeurt.
- Direct afkappen met
source=active-speaker-audio, kleineoutputAudioMsen dezelfde gebruiker in de buurt wijst meestal op luidsprekerecho die de microfoon binnenkomt. Verhoogvoice.realtime.minBargeInAudioEndMs, verlaag het luidsprekervolume, gebruik een koptelefoon of stelvoice.realtime.providers.openai.interruptResponseOnInputAudio: falsein. source=speaker-startgevolgd doorspeaker turn closed ... hasAudio=falsebetekent dat Discord een sprekerstart meldde, maar dat geen audio OpenClaw bereikte. Dat kan een tijdelijke Discord-spraakgebeurtenis zijn, gedrag van een noise gate, of een client die de microfoon kort activeert.audio playback stopped reason=stream-closezonder nabije barge-in ofprovider-clear-audiobetekent dat de lokale Discord-weergavestream onverwacht is beëindigd. Controleer de voorafgaande provider- en Discord-spelerlogs.capture ignored during playback (barge-in disabled)betekent dat OpenClaw invoer bewust heeft laten vallen terwijl assistentaudio actief was. Schakelvoice.realtime.bargeInin als je wilt dat spraak de weergave onderbreekt.barge-in ignored ... outputActive=falsebetekent dat Discord of provider-VAD spraak meldde, maar dat OpenClaw geen actieve weergave had om te onderbreken. Dit zou audio niet mogen afkappen.
voice.model, STT-authenticatie voor tools.media.audio, TTS-authenticatie voor messages.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 nodig op de Gateway-host om te inspecteren en te converteren.
- Geef een lokaal bestandspad op (URL’s worden geweigerd).
- Laat tekstinhoud weg (Discord weigert tekst + spraakbericht in dezelfde payload).
- Elk audioformaat wordt geaccepteerd; OpenClaw converteert indien nodig naar OGG/Opus.
Probleemoplossing
Niet-toegestane intents gebruikt of bot ziet geen guild-berichten
Niet-toegestane intents gebruikt of bot ziet geen guild-berichten
- schakel Message Content Intent in
- schakel Server Members Intent in wanneer je afhankelijk bent van gebruiker-/lidresolutie
- start de Gateway opnieuw na het wijzigen van intents
Guild-berichten onverwacht geblokkeerd
Guild-berichten onverwacht geblokkeerd
- controleer
groupPolicy - controleer de guild-allowlist onder
channels.discord.guilds - als de guild-
channels-map bestaat, zijn alleen vermelde kanalen toegestaan - controleer
requireMention-gedrag en vermeldingspatronen
Require mention is false maar wordt nog steeds geblokkeerd
Require mention is false maar wordt nog steeds geblokkeerd
groupPolicy="allowlist"zonder overeenkomende guild-/kanaalallowlistrequireMentionop de verkeerde plek geconfigureerd (moet onderchannels.discord.guildsof kanaalvermelding staan)- afzender geblokkeerd door guild-/kanaal-
users-allowlist
Langlopende Discord-beurten of dubbele antwoorden
Langlopende Discord-beurten of dubbele antwoorden
Slow listener detected ...stuck session: sessionKey=agent:...:discord:... state=processing ...
- één account:
channels.discord.eventQueue.listenerTimeout - meerdere accounts:
channels.discord.accounts.<accountId>.eventQueue.listenerTimeout - dit beheert alleen listenerwerk van de Discord Gateway, niet de levensduur van agentbeurten
Timeoutwaarschuwingen bij Gateway-metadataopzoeking
Timeoutwaarschuwingen bij Gateway-metadataopzoeking
/gateway/bot-metadata op voordat verbinding wordt gemaakt. Tijdelijke fouten vallen terug op Discord’s standaard-Gateway-URL en worden in logs beperkt in frequentie.Metadata-timeoutinstellingen:- één account:
channels.discord.gatewayInfoTimeoutMs - meerdere accounts:
channels.discord.accounts.<accountId>.gatewayInfoTimeoutMs - env-fallback wanneer configuratie niet is ingesteld:
OPENCLAW_DISCORD_GATEWAY_INFO_TIMEOUT_MS - standaard:
30000(30 seconden), max:120000
Herstarts door Gateway READY-timeout
Herstarts door Gateway READY-timeout
READY-event. Set-ups met meerdere accounts en gespreid opstarten kunnen een langer READY-venster bij opstarten nodig hebben dan de standaard.READY-timeoutinstellingen:- opstarten, één account:
channels.discord.gatewayReadyTimeoutMs - opstarten, meerdere accounts:
channels.discord.accounts.<accountId>.gatewayReadyTimeoutMs - opstart-env-fallback wanneer configuratie niet is ingesteld:
OPENCLAW_DISCORD_READY_TIMEOUT_MS - opstartstandaard:
15000(15 seconden), max:120000 - runtime, één account:
channels.discord.gatewayRuntimeReadyTimeoutMs - runtime, meerdere accounts:
channels.discord.accounts.<accountId>.gatewayRuntimeReadyTimeoutMs - runtime-env-fallback wanneer configuratie niet is ingesteld:
OPENCLAW_DISCORD_RUNTIME_READY_TIMEOUT_MS - runtime-standaard:
30000(30 seconden), max:120000
Mismatches bij rechtenaudit
Mismatches bij rechtenaudit
channels status --probe-rechtencontroles werken alleen voor numerieke kanaal-ID’s.Als je slug-sleutels gebruikt, kan runtime-matching nog steeds werken, maar kan probe rechten niet volledig verifiëren.DM- en koppelingsproblemen
DM- en koppelingsproblemen
- DM uitgeschakeld:
channels.discord.dm.enabled=false - DM-beleid uitgeschakeld:
channels.discord.dmPolicy="disabled"(legacy:channels.discord.dm.policy) - wacht op koppelingsgoedkeuring in
pairing-modus
Bot-naar-bot-loops
Bot-naar-bot-loops
channels.discord.allowBots=true instelt, gebruik dan strikte vermeldings- en allowlistregels om loopgedrag te voorkomen.
Geef de voorkeur aan channels.discord.allowBots="mentions" om alleen botberichten te accepteren die de bot vermelden.OpenClaw levert ook gedeelde bot-loopbescherming. Wanneer allowBots toestaat dat door bots geschreven berichten dispatch bereiken, koppelt Discord het inkomende event aan (account, channel, bot pair)-feiten en onderdrukt de generieke paarbewaker het paar nadat het het geconfigureerde eventbudget overschrijdt. De bewaker voorkomt uit de hand lopende loops tussen twee bots die eerder door Discord-rate limits moesten worden gestopt; dit heeft geen invloed op implementaties met één bot of eenmalige botantwoorden die onder het budget blijven.Standaardinstellingen (actief wanneer allowBots is ingesteld):maxEventsPerWindow: 20— botpaar kan 20 berichten uitwisselen binnen het schuivende vensterwindowSeconds: 60— lengte van het schuivende venstercooldownSeconds: 60— zodra het budget wordt overschreden, wordt elk extra bot-naar-botbericht in beide richtingen één minuut lang gedropt
channels.defaults.botLoopProtection en overschrijf Discord daarna wanneer een legitieme workflow meer ruimte nodig heeft. De prioriteit is:channels.discord.accounts.<account>.botLoopProtectionchannels.discord.botLoopProtectionchannels.defaults.botLoopProtection- ingebouwde standaarden
maxEventsPerWindow, windowSeconds en cooldownSeconds.Voice-STT valt weg met DecryptionFailed(...)
Voice-STT valt weg met DecryptionFailed(...)
- houd OpenClaw actueel (
openclaw update) zodat de herstel-logica voor Discord-spraakontvangst aanwezig is - bevestig
channels.discord.voice.daveEncryption=true(standaard) - begin met
channels.discord.voice.decryptionFailureTolerance=24(upstream-standaard) en stem alleen af indien nodig - bekijk logs op:
discord voice: DAVE decrypt failures detecteddiscord voice: repeated decrypt failures; attempting rejoin
- als fouten doorgaan na automatisch opnieuw deelnemen, verzamel logs en vergelijk met de upstream DAVE-ontvangstgeschiedenis in discord.js #11419 en discord.js #11449
Configuratiereferentie
Primaire referentie: Configuratiereferentie - Discord.Discord-velden met hoge signaalwaarde
Discord-velden met hoge signaalwaarde
- opstarten/auth:
enabled,token,accounts.*,allowBots - beleid:
groupPolicy,dm.*,guilds.*,guilds.*.channels.* - commando:
commands.native,commands.useAccessGroups,configWrites,slashCommand.* - eventwachtrij:
eventQueue.listenerTimeout(listenerbudget),eventQueue.maxQueueSize,eventQueue.maxConcurrency - Gateway:
gatewayInfoTimeoutMs,gatewayReadyTimeoutMs,gatewayRuntimeReadyTimeoutMs - antwoord/geschiedenis:
replyToMode,historyLimit,dmHistoryLimit,dms.*.historyLimit - levering:
textChunkLimit,chunkMode,maxLinesPerMessage - streaming:
streaming(legacy-alias:streamMode),streaming.preview.toolProgress,draftChunk,blockStreaming,blockStreamingCoalesce - media/opnieuw proberen:
mediaMaxMb(beperkt uitgaande Discord-uploads, standaard100MB),retry - acties:
actions.* - aanwezigheid:
activity,status,activityType,activityUrl - UI:
ui.components.accentColor - functies:
threadBindings, top-levelbindings[](type: "acp"),pluralkit,execApprovals,intents,agentComponents.enabled,agentComponents.ttlMs,heartbeat,responsePrefix
Veiligheid en beheer
- Behandel bottokens als geheimen (
DISCORD_BOT_TOKENheeft de voorkeur in beheerde omgevingen). - Verleen Discord-rechten volgens het principe van minimale rechten.
- Als commandodeploy/-status verouderd is, start dan de Gateway opnieuw en controleer opnieuw met
openclaw channels status --probe.