Bereit für DMs und Guild-Kanäle über den offiziellen Discord-Gateway.Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Kopplung
Slash-Befehle
Kanal-Fehlerbehebung
Schnelleinrichtung
Sie müssen eine neue Anwendung mit einem Bot erstellen, den Bot zu Ihrem Server hinzufügen und ihn mit OpenClaw koppeln. Wir empfehlen, Ihren Bot zu Ihrem eigenen privaten Server hinzuzufügen. Wenn Sie noch keinen haben, erstellen Sie zuerst einen (wählen Sie Create My Own > For me and my friends).Discord-Anwendung und Bot erstellen
Privilegierte Intents aktivieren
- Message Content Intent (erforderlich)
- Server Members Intent (empfohlen; erforderlich für Rollen-Allowlists und die Zuordnung von Namen zu IDs)
- Presence Intent (optional; nur für Präsenzaktualisierungen erforderlich)
Bot-Token kopieren
Einladungs-URL erstellen und Bot zu Ihrem Server hinzufügen
botapplications.commands
- Kanäle anzeigen Text Permissions
- Nachrichten senden
- Nachrichtenverlauf lesen
- Links einbetten
- Dateien anhängen
- Reaktionen hinzufügen (optional)
Entwicklermodus aktivieren und IDs sammeln
- Klicken Sie auf User Settings (Zahnradsymbol neben Ihrem Avatar) → Advanced → aktivieren Sie Developer Mode
- Klicken Sie mit der rechten Maustaste in der Seitenleiste auf Ihr Serversymbol → Copy Server ID
- Klicken Sie mit der rechten Maustaste auf Ihren eigenen Avatar → Copy User ID
DMs von Servermitgliedern erlauben
Bot-Token sicher festlegen (nicht im Chat senden)
openclaw gateway run stoppen und erneut starten.
Führen Sie bei verwalteten Dienstinstallationen openclaw gateway install aus einer Shell aus, in der DISCORD_BOT_TOKEN vorhanden ist, oder speichern Sie die Variable in ~/.openclaw/.env, damit der Dienst den env-SecretRef nach dem Neustart auflösen kann.
Wenn Ihr Host durch Discords Anwendungsabfrage beim Start blockiert oder rate-limited wird, legen Sie die Discord-Anwendungs-/Client-ID aus dem Developer Portal fest, damit der Start diesen REST-Aufruf überspringen kann. Verwenden Sie channels.discord.applicationId für das Standardkonto oder channels.discord.accounts.<accountId>.applicationId, wenn Sie mehrere Discord-Bots ausführen.OpenClaw konfigurieren und koppeln
- Ihren Agenten fragen
- CLI / Konfiguration
„Ich habe mein Discord-Bot-Token bereits in der Konfiguration festgelegt. Bitte schließen Sie die Discord-Einrichtung mit User ID<user_id>und Server ID<server_id>ab.“
Erste DM-Kopplung genehmigen
- Ihren Agenten fragen
- CLI
„Genehmigen Sie diesen Discord-Kopplungscode: <CODE>“
DISCORD_BOT_TOKEN wird nur für das Standardkonto verwendet.
Wenn zwei aktivierte Discord-Konten auf dasselbe Bot-Token auflösen, startet OpenClaw nur einen Gateway-Monitor für dieses Token. Ein Token aus der Konfiguration hat Vorrang vor dem Standard-env-Fallback; andernfalls gewinnt das erste aktivierte Konto und das doppelte Konto wird als deaktiviert gemeldet.
Für erweiterte ausgehende Aufrufe (Nachrichtentool/Kanalaktionen) wird ein explizites token pro Aufruf für diesen Aufruf verwendet. Dies gilt für Sende- und Lese-/Probe-Aktionen (zum Beispiel read/search/fetch/thread/pins/permissions). Kontorichtlinien- und Wiederholungseinstellungen stammen weiterhin aus dem ausgewählten Konto im aktiven Runtime-Snapshot.Empfohlen: Guild-Workspace einrichten
Sobald DMs funktionieren, können Sie Ihren Discord-Server als vollständigen Workspace einrichten, in dem jeder Kanal seine eigene Agentensitzung mit eigenem Kontext erhält. Dies wird für private Server empfohlen, auf denen nur Sie und Ihr Bot sind.Server zur Guild-Allowlist hinzufügen
- Ihren Agenten fragen
- Konfiguration
„Fügen Sie meine Discord Server ID <server_id> zur Guild-Allowlist hinzu“
Antworten ohne @mention erlauben
message-Tool gesendet werden, sodass der Agent standardmäßig mitlesen und nur posten kann, wenn er entscheidet, dass eine Kanalantwort sinnvoll ist.Das bedeutet, dass das ausgewählte Modell zuverlässig Tools aufrufen muss. Wenn Discord „tippt“ anzeigt und die Logs Token-Nutzung zeigen, aber keine Nachricht gepostet wird, prüfen Sie das Sitzungslog auf Assistententext mit didSendViaMessagingTool: false. Das bedeutet, dass das Modell eine private finale Antwort erzeugt hat, statt message(action=send) aufzurufen. Wechseln Sie zu einem stärkeren Tool-Calling-Modell oder verwenden Sie die unten stehende Konfiguration, um ältere automatische finale Antworten wiederherzustellen.- Ihren Agenten fragen
- Konfiguration
„Erlauben Sie meinem Agenten, auf diesem Server zu antworten, ohne mit @ erwähnt werden zu müssen“
Speicher für Guild-Kanäle planen
- Ihren Agenten fragen
- Manuell
„Wenn ich Fragen in Discord-Kanälen stelle, verwenden Sie memory_search oder memory_get, falls Sie Langzeitkontext aus MEMORY.md benötigen.“
#coding, #home, #research oder etwas anderes einrichten, das zu Ihrem Workflow passt.
Runtime-Modell
- Gateway besitzt die Discord-Verbindung.
- Das Reply-Routing ist deterministisch: Eingehende Discord-Antworten gehen zurück an Discord.
- Discord-Guild-/Channel-Metadaten werden dem Modell-Prompt als nicht vertrauenswürdiger Kontext hinzugefügt, nicht als für Benutzer sichtbares Antwortpräfix. Wenn ein Modell diesen Umschlag zurückkopiert, entfernt OpenClaw die kopierten Metadaten aus ausgehenden Antworten und aus künftigem Replay-Kontext.
- Standardmäßig (
session.dmScope=main) teilen direkte Chats die Hauptsitzung des Agents (agent:main:main). - Guild-Channels sind isolierte Sitzungsschlüssel (
agent:<agentId>:discord:channel:<channelId>). - Gruppen-DMs werden standardmäßig ignoriert (
channels.discord.dm.groupEnabled=false). - Native Slash-Commands laufen in isolierten Command-Sitzungen (
agent:<agentId>:discord:slash:<userId>), führen aber weiterhinCommandTargetSessionKeyzur gerouteten Konversationssitzung mit. - Text-only-Cron-/Heartbeat-Ankündigungen an Discord verwenden die finale für den Assistenten sichtbare Antwort einmal. Medien- und strukturierte Komponenten-Payloads bleiben mehrteilig, wenn der Agent mehrere zustellbare Payloads ausgibt.
Forum-Channels
Discord-Forum- und Media-Channels akzeptieren nur Thread-Beiträge. OpenClaw unterstützt zwei Möglichkeiten, sie zu erstellen:- Senden Sie eine Nachricht an das Forum-Parent (
channel:<forumId>), um automatisch einen Thread zu erstellen. Der Thread-Titel verwendet die erste nicht leere Zeile Ihrer Nachricht. - Verwenden Sie
openclaw message thread create, um einen Thread direkt zu erstellen. Übergeben Sie für Forum-Channels nicht--message-id.
channel:<threadId>).
Interaktive Komponenten
OpenClaw unterstützt Discord-Komponenten-v2-Container für Agent-Nachrichten. Verwenden Sie das Nachrichten-Tool mit einemcomponents-Payload. Interaktionsergebnisse werden als normale eingehende Nachrichten an den Agent zurückgeroutet und folgen den bestehenden Discord-replyToMode-Einstellungen.
Unterstützte Blöcke:
text,section,separator,actions,media-gallery,file- Action Rows erlauben bis zu 5 Buttons oder ein einzelnes Auswahlmenü
- Auswahltypen:
string,user,role,mentionable,channel
components.reusable=true, damit Buttons, Auswahlelemente und Formulare bis zu ihrem Ablauf mehrfach verwendet werden können.
Um einzuschränken, wer einen Button anklicken darf, setzen Sie allowedUsers für diesen Button (Discord-Benutzer-IDs, Tags oder *). Wenn konfiguriert, erhalten nicht übereinstimmende Benutzer eine ephemere Ablehnung.
Die Slash-Commands /model und /models öffnen eine interaktive Modellauswahl mit Dropdowns für Provider, Modell und kompatible Runtime sowie einem Absenden-Schritt. /models add ist veraltet und gibt jetzt eine Veraltungsmeldung zurück, statt Modelle aus dem Chat zu registrieren. Die Picker-Antwort ist ephemer und kann nur vom aufrufenden Benutzer verwendet werden. Discord-Auswahlmenüs sind auf 25 Optionen begrenzt. Fügen Sie daher provider/*-Einträge zu agents.defaults.models hinzu, wenn der Picker dynamisch erkannte Modelle nur für ausgewählte Provider wie openai-codex oder vllm anzeigen soll.
Dateianhänge:
file-Blöcke müssen auf eine Anhangsreferenz verweisen (attachment://<filename>)- Stellen Sie den Anhang über
media/path/filePathbereit (einzelne Datei); verwenden Siemedia-galleryfür mehrere Dateien - Verwenden Sie
filename, um den Upload-Namen zu überschreiben, wenn er der Anhangsreferenz entsprechen soll
- Fügen Sie
components.modalmit bis zu 5 Feldern hinzu - Feldtypen:
text,checkbox,radio,select,role-select,user-select - OpenClaw fügt automatisch einen Auslöse-Button hinzu
Zugriffskontrolle und Routing
- DM policy
- Access groups
- Guild policy
- Mentions and group DMs
channels.discord.dmPolicy steuert den DM-Zugriff. channels.discord.allowFrom ist die kanonische DM-Allowlist.pairing(Standard)allowlistopen(erfordert, dasschannels.discord.allowFrom"*"enthält)disabled
pairing zur Kopplung aufgefordert).Vorrang bei mehreren Konten:channels.discord.accounts.default.allowFromgilt nur für das Kontodefault.- Bei einem Konto hat
allowFromVorrang vor dem veraltetendm.allowFrom. - Benannte Konten erben
channels.discord.allowFrom, wenn ihr eigenesallowFromund das veraltetedm.allowFromnicht gesetzt sind. - Benannte Konten erben
channels.discord.accounts.default.allowFromnicht.
channels.discord.dm.policy und channels.discord.dm.allowFrom werden aus Kompatibilitätsgründen weiterhin gelesen. openclaw doctor --fix migriert sie nach dmPolicy und allowFrom, wenn dies ohne Änderung des Zugriffs möglich ist.DM-Zielformat für Zustellung:user:<id><@id>-Mention
allowFrom des Kontos aufgeführt sind, werden aus Kompatibilitätsgründen jedoch als Benutzer-DM-Ziele behandelt.Rollenbasiertes Agent-Routing
Verwenden Siebindings[].match.roles, um Discord-Guild-Mitglieder anhand der Rollen-ID zu verschiedenen Agents zu routen. Rollenbasierte Bindings akzeptieren nur Rollen-IDs und werden nach Peer- oder Parent-Peer-Bindings und vor reinen Guild-Bindings ausgewertet. Wenn ein Binding auch andere Match-Felder setzt (zum Beispiel peer + guildId + roles), müssen alle konfigurierten Felder übereinstimmen.
Native Commands und Command-Auth
commands.nativeist standardmäßig"auto"und für Discord aktiviert.- Kanalspezifische Überschreibung:
channels.discord.commands.native. commands.native=falseüberspringt beim Start die Registrierung und Bereinigung von Discord-Slash-Commands. Zuvor registrierte Commands können in Discord sichtbar bleiben, bis Sie sie aus der Discord-App entfernen.- Die Authentifizierung nativer Commands verwendet dieselben Discord-Allowlists/-Richtlinien wie die normale Nachrichtenverarbeitung.
- Commands können in der Discord-Oberfläche weiterhin für Benutzer sichtbar sein, die nicht autorisiert sind; die Ausführung erzwingt dennoch die OpenClaw-Authentifizierung und gibt “not authorized” zurück.
ephemeral: true
Funktionsdetails
Antwort-Tags und native Antworten
Antwort-Tags und native Antworten
Live-Stream-Vorschau
Live-Stream-Vorschau
channels.discord.streaming akzeptiert off | partial | block | progress (Standard). progress hält einen bearbeitbaren Statusentwurf und aktualisiert ihn bis zur finalen Zustellung mit Tool-Fortschritt; die gemeinsame Startbezeichnung ist eine laufende Zeile, sodass sie wie der Rest wegscrollt, sobald genug Arbeit erscheint. streamMode ist ein älterer Runtime-Alias. Führen Sie openclaw doctor --fix aus, um persistierte Konfiguration auf den kanonischen Schlüssel umzuschreiben.Setzen Sie channels.discord.streaming.mode auf off, um Discord-Vorschauänderungen zu deaktivieren. Wenn Discord-Block-Streaming explizit aktiviert ist, überspringt OpenClaw den Vorschau-Stream, um doppeltes Streaming zu vermeiden.partialbearbeitet eine einzelne Vorschaunachricht, während Tokens eintreffen.blockgibt entwurfsgroße Blöcke aus (verwenden SiedraftChunk, um Größe und Umbruchpunkte abzustimmen, begrenzt durchtextChunkLimit).- Medien, Fehler und finale explizite Antworten brechen ausstehende Vorschauänderungen ab.
streaming.preview.toolProgress(Standardtrue) steuert, ob Tool-/Fortschrittsaktualisierungen die Vorschaunachricht wiederverwenden.- Tool-/Fortschrittszeilen werden, wenn verfügbar, kompakt als Emoji + Titel + Detail dargestellt, zum Beispiel
🛠️ Bash: run testsoder🔎 Web Search: for "query". streaming.preview.commandText/streaming.progress.commandTextsteuert Command-/Ausführungsdetails in kompakten Fortschrittszeilen:raw(Standard) oderstatus(nur Tool-Bezeichnung).
block-Streaming explizit aktiviert ist, überspringt OpenClaw den Vorschau-Stream, um doppeltes Streaming zu vermeiden.Verlauf, Kontext und Thread-Verhalten
Verlauf, Kontext und Thread-Verhalten
channels.discord.historyLimitStandard20- Fallback:
messages.groupChat.historyLimit 0deaktiviert
channels.discord.dmHistoryLimitchannels.discord.dms["<user_id>"].historyLimit
- Discord-Threads werden als Kanalsitzungen geroutet und erben die Konfiguration des übergeordneten Kanals, sofern sie nicht überschrieben wird.
- Thread-Sitzungen erben die sitzungsspezifische
/model-Auswahl des übergeordneten Kanals als reinen Modell-Fallback; threadlokale/model-Auswahlen haben weiterhin Vorrang, und der Verlauf des übergeordneten Transkripts wird nur kopiert, wenn Transkriptvererbung aktiviert ist. channels.discord.thread.inheritParent(Standardfalse) lässt neue Auto-Threads mit dem übergeordneten Transkript initialisieren. Kontospezifische Überschreibungen befinden sich unterchannels.discord.accounts.<id>.thread.inheritParent.- Message-Tool-Reaktionen können
user:<id>-DM-Ziele auflösen. guilds.<guild>.channels.<channel>.requireMention: falsebleibt während des Fallbacks für die Aktivierung in der Antwortphase erhalten.
Thread-gebundene Sitzungen für Subagents
Thread-gebundene Sitzungen für Subagents
/focus <target>bindet den aktuellen/neuen Thread an ein Subagent-/Sitzungsziel/unfocusentfernt die aktuelle Thread-Bindung/agentszeigt aktive Läufe und Bindungsstatus/session idle <duration|off>prüft/aktualisiert automatische Inaktivitäts-Entfokussierung für fokussierte Bindungen/session max-age <duration|off>prüft/aktualisiert das harte Maximalalter für fokussierte Bindungen
session.threadBindings.*legt globale Standardwerte fest.channels.discord.threadBindings.*überschreibt Discord-Verhalten.spawnSessionssteuert das automatische Erstellen/Binden von Threads fürsessions_spawn({ thread: true })und ACP-Thread-Spawns. Standard:true.defaultSpawnContextsteuert den nativen Subagent-Kontext für threadgebundene Spawns. Standard:"fork".- Veraltete Schlüssel
spawnSubagentSessions/spawnAcpSessionswerden durchopenclaw doctor --fixmigriert. - Wenn Thread-Bindungen für ein Konto deaktiviert sind, sind
/focusund zugehörige Thread-Bindungsvorgänge nicht verfügbar.
Persistente ACP-Kanalbindungen
Persistente ACP-Kanalbindungen
bindings[]mittype: "acp"undmatch.channel: "discord"
/acp spawn codex --bind herebindet den aktuellen Kanal oder Thread direkt und hält zukünftige Nachrichten auf derselben ACP-Sitzung. Thread-Nachrichten erben die Bindung des übergeordneten Kanals.- In einem gebundenen Kanal oder Thread setzen
/newund/resetdieselbe ACP-Sitzung direkt zurück. Temporäre Thread-Bindungen können die Zielauflösung überschreiben, solange sie aktiv sind. spawnSessionssteuert die Erstellung/Bindung von Child-Threads über--thread auto|here.
Reaktionsbenachrichtigungen
Reaktionsbenachrichtigungen
offown(Standard)allallowlist(verwendetguilds.<id>.users)
Ack-Reaktionen
Ack-Reaktionen
ackReaction sendet ein Bestätigungs-Emoji, während OpenClaw eine eingehende Nachricht verarbeitet.Auflösungsreihenfolge:channels.discord.accounts.<accountId>.ackReactionchannels.discord.ackReactionmessages.ackReaction- Fallback auf Agent-Identitäts-Emoji (
agents.list[].identity.emoji, andernfalls ”👀”)
- Discord akzeptiert Unicode-Emoji oder benutzerdefinierte Emoji-Namen.
- Verwenden Sie
"", um die Reaktion für einen Kanal oder ein Konto zu deaktivieren.
Konfigurationsschreibvorgänge
Konfigurationsschreibvorgänge
/config set|unset-Abläufe (wenn Command-Funktionen aktiviert sind).Deaktivieren:Gateway-Proxy
Gateway-Proxy
channels.discord.proxy.PluralKit-Unterstützung
PluralKit-Unterstützung
- Allowlists können
pk:<memberId>verwenden - Anzeigenamen von Mitgliedern werden nur nach Name/Slug abgeglichen, wenn
channels.discord.dangerouslyAllowNameMatching: true - Abfragen verwenden die ursprüngliche Nachrichten-ID und sind zeitfensterbegrenzt
- Wenn die Abfrage fehlschlägt, werden proxied Nachrichten als Bot-Nachrichten behandelt und verworfen, sofern
allowBots=truenicht gesetzt ist
Ausgehende Mention-Aliasse
Ausgehende Mention-Aliasse
mentionAliases, wenn Agents deterministische ausgehende Mentions für bekannte Discord-Benutzer benötigen. Schlüssel sind Handles ohne führendes @; Werte sind Discord-Benutzer-IDs. Unbekannte Handles, @everyone, @here und Mentions innerhalb von Markdown-Code-Spans bleiben unverändert.Präsenzkonfiguration
Präsenzkonfiguration
- 0: Spielt
- 1: Streamt (erfordert
activityUrl) - 2: Hört
- 3: Schaut zu
- 4: Benutzerdefiniert (verwendet den Aktivitätstext als Statuszustand; Emoji ist optional)
- 5: Nimmt teil
autoPresence.healthyTextautoPresence.degradedTextautoPresence.exhaustedText(unterstützt den Platzhalter{reason})
Approvals in Discord
Approvals in Discord
channels.discord.execApprovals.enabledchannels.discord.execApprovals.approvers(optional; fällt, wenn möglich, aufcommands.ownerAllowFromzurück)channels.discord.execApprovals.target(dm|channel|both, Standard:dm)agentFilter,sessionFilter,cleanupAfterResolve
enabled nicht gesetzt ist oder "auto" lautet und mindestens ein Genehmiger aufgelöst werden kann, entweder aus execApprovals.approvers oder aus commands.ownerAllowFrom. Discord leitet Exec-Genehmiger nicht aus Kanal-allowFrom, dem veralteten dm.allowFrom oder Direct-Message-defaultTo ab. Setzen Sie enabled: false, um Discord explizit als nativen Genehmigungs-Client zu deaktivieren.Für sensible, nur Ownern vorbehaltene Gruppenbefehle wie /diagnostics und /export-trajectory sendet OpenClaw Genehmigungsaufforderungen und Endergebnisse privat. Zuerst versucht es Discord-DM, wenn der aufrufende Owner eine Discord-Owner-Route hat; ist diese nicht verfügbar, fällt es auf die erste verfügbare Owner-Route aus commands.ownerAllowFrom zurück, z. B. Telegram.Wenn target channel oder both ist, ist die Genehmigungsaufforderung im Kanal sichtbar. Nur aufgelöste Genehmiger können die Buttons verwenden; andere Benutzer erhalten eine ephemere Ablehnung. Genehmigungsaufforderungen enthalten den Befehlstext. Aktivieren Sie die Zustellung im Kanal daher nur in vertrauenswürdigen Kanälen. Wenn die Kanal-ID nicht aus dem Sitzungsschlüssel abgeleitet werden kann, fällt OpenClaw auf die Zustellung per DM zurück.Discord rendert außerdem die gemeinsamen Genehmigungsbuttons, die von anderen Chat-Kanälen verwendet werden. Der native Discord-Adapter ergänzt hauptsächlich Genehmiger-DM-Routing und Kanal-Fanout.
Wenn diese Buttons vorhanden sind, sind sie die primäre Genehmigungs-UX; OpenClaw
sollte nur dann einen manuellen /approve-Befehl einschließen, wenn das Tool-Ergebnis besagt,
dass Chat-Genehmigungen nicht verfügbar sind oder die manuelle Genehmigung der einzige Weg ist.
Wenn die native Discord-Genehmigungslaufzeit nicht aktiv ist, hält OpenClaw die
lokal deterministische /approve <id> <decision>-Aufforderung sichtbar. Wenn die
Laufzeit aktiv ist, aber keine native Karte an ein Ziel zugestellt werden kann,
sendet OpenClaw eine Ausweichbenachrichtigung im selben Chat mit dem exakten /approve-
Befehl aus der ausstehenden Genehmigung.Gateway-Authentifizierung und Genehmigungsauflösung folgen dem gemeinsamen Gateway-Client-Vertrag (plugin:-IDs werden über plugin.approval.resolve aufgelöst; andere IDs über exec.approval.resolve). Genehmigungen laufen standardmäßig nach 30 Minuten ab.Siehe Exec-Genehmigungen.Tools und Aktions-Gates
Discord-Nachrichtenaktionen umfassen Messaging, Kanaladministration, Moderation, Präsenz und Metadatenaktionen. Kernbeispiele:- Messaging:
sendMessage,readMessages,editMessage,deleteMessage,threadReply - Reaktionen:
react,reactions,emojiList - Moderation:
timeout,kick,ban - Präsenz:
setPresence
event-create akzeptiert einen optionalen Parameter image (URL oder lokaler Dateipfad), um das Titelbild des geplanten Events festzulegen.
Aktions-Gates befinden sich unter channels.discord.actions.*.
Standardverhalten der Gates:
| Aktionsgruppe | Standard |
|---|---|
| Reaktionen, Nachrichten, Threads, Pins, Umfragen, Suche, MitgliedInfo, RollenInfo, KanalInfo, Kanäle, Sprachstatus, Events, Sticker, Emoji-Uploads, Sticker-Uploads, Berechtigungen | aktiviert |
| Rollen | deaktiviert |
| Moderation | deaktiviert |
| Präsenz | deaktiviert |
Components-v2-UI
OpenClaw verwendet Discord Components v2 für Exec-Genehmigungen und kontextübergreifende Marker. Discord-Nachrichtenaktionen können außerdemcomponents für benutzerdefinierte UI akzeptieren (fortgeschritten; erfordert das Erstellen einer Component-Payload über das Discord-Tool), während veraltete embeds weiterhin verfügbar sind, aber nicht empfohlen werden.
channels.discord.ui.components.accentColorlegt die Akzentfarbe fest, die von Discord-Component-Containern verwendet wird (Hex).- Pro Konto mit
channels.discord.accounts.<id>.ui.components.accentColorfestlegen. embedswerden ignoriert, wenn Components v2 vorhanden sind.
Sprache
Discord hat zwei unterschiedliche Sprachoberflächen: Echtzeit-Sprachkanäle (kontinuierliche Unterhaltungen) und Sprachnachrichten-Anhänge (das Waveform-Vorschauformat). Der Gateway unterstützt beide.Sprachkanäle
Einrichtungs-Checkliste:- Aktivieren Sie Message Content Intent im Discord Developer Portal.
- Aktivieren Sie Server Members Intent, wenn Rollen-/Benutzer-Allowlists verwendet werden.
- Laden Sie den Bot mit den Scopes
botundapplications.commandsein. - Gewähren Sie Connect, Speak, Send Messages und Read Message History im Ziel-Sprachkanal.
- Aktivieren Sie native Befehle (
commands.nativeoderchannels.discord.commands.native). - Konfigurieren Sie
channels.discord.voice.
/vc join|leave|status, um Sitzungen zu steuern. Der Befehl verwendet den Standard-Agent des Kontos und folgt denselben Allowlist- und Gruppenrichtlinienregeln wie andere Discord-Befehle.
voice.ttsüberschreibtmessages.ttsnur für die Sprachwiedergabe mitstt-tts. Echtzeitmodi verwendenvoice.realtime.voice.voice.modesteuert den Gesprächspfad. Standard istagent-proxy: Ein Echtzeit-Voice-Frontend übernimmt Turn-Timing, Unterbrechung und Wiedergabe, delegiert inhaltliche Arbeit überopenclaw_agent_consultan den gerouteten OpenClaw-Agent und behandelt das Ergebnis wie einen getippten Discord-Prompt von dieser sprechenden Person.stt-ttsbehält den älteren Batch-STT-plus-TTS-Ablauf bei.bidilässt das Echtzeitmodell direkt sprechen und stellt zugleichopenclaw_agent_consultfür das OpenClaw-Brain bereit.voice.agentSessionsteuert, welche OpenClaw-Konversation Voice-Turns erhält. Lassen Sie es ungesetzt für die eigene Sitzung des Voice-Kanals, oder setzen Sie{ mode: "target", target: "channel:<text-channel-id>" }, damit der Voice-Kanal als Mikrofon-/Lautsprecher-Erweiterung einer bestehenden Discord-Textkanal-Sitzung wie#maintainersfungiert.voice.modelüberschreibt das OpenClaw-Agent-Brain für Discord-Voice-Antworten und Echtzeit-Consults. Lassen Sie es ungesetzt, um das Modell des gerouteten Agents zu erben. Es ist vonvoice.realtime.modelgetrennt.agent-proxyroutet Sprache überdiscord-voice; dadurch bleibt die normale Owner-/Tool-Autorisierung für die sprechende Person und die Zielsitzung erhalten, aber das Agent-Toolttswird ausgeblendet, weil Discord Voice die Wiedergabe besitzt. Standardmäßig gibtagent-proxydem Consult für Owner-Sprechende vollständigen Owner-äquivalenten Tool-Zugriff (voice.realtime.toolPolicy: "owner") und bevorzugt deutlich, vor inhaltlichen Antworten den OpenClaw-Agent zu konsultieren (voice.realtime.consultPolicy: "always"). In diesem Standardmodusalwaysspricht die Echtzeitschicht vor der Consult-Antwort nicht automatisch Fülltext; sie erfasst und transkribiert Sprache und spricht dann die geroutete OpenClaw-Antwort. Wenn mehrere erzwungene Consult-Antworten fertig werden, während Discord noch die erste Antwort abspielt, werden spätere Antworten mit exakter Sprachausgabe in die Warteschlange gestellt, bis die Wiedergabe im Leerlauf ist, statt Sprache mitten im Satz zu ersetzen.- Im Modus
stt-ttsverwendet STTtools.media.audio;voice.modelbeeinflusst die Transkription nicht. - In Echtzeitmodi konfigurieren
voice.realtime.provider,voice.realtime.modelundvoice.realtime.voicedie Echtzeit-Audiositzung. Für OpenAI Realtime 2 plus Codex-Brain verwenden Sievoice.realtime.model: "gpt-realtime-2"undvoice.model: "openai-codex/gpt-5.5". - Der OpenAI-Echtzeit-Provider akzeptiert aktuelle Realtime-2-Ereignisnamen und ältere Codex-kompatible Aliasse für Output-Audio- und Transcript-Ereignisse, sodass kompatible Provider-Snapshots abweichen können, ohne Assistant-Audio zu verlieren.
voice.realtime.bargeInsteuert, ob Discord-Speaker-Start-Ereignisse aktive Echtzeitwiedergabe unterbrechen. Wenn es ungesetzt ist, folgt es der Input-Audio-Unterbrechungseinstellung des Echtzeit-Providers.voice.realtime.minBargeInAudioEndMssteuert die minimale Assistant-Wiedergabedauer, bevor ein OpenAI-Echtzeit-Barge-in Audio abschneidet. Standard:250. Setzen Sie0für sofortige Unterbrechung in Räumen mit wenig Echo, oder erhöhen Sie den Wert für Lautsprecher-Setups mit starkem Echo.- Für eine OpenAI-Stimme bei Discord-Wiedergabe setzen Sie
voice.tts.provider: "openai"und wählen Sie eine Text-to-Speech-Stimme untervoice.tts.openai.voiceodervoice.tts.providers.openai.voice.cedarist beim aktuellen OpenAI-TTS-Modell eine gute maskulin klingende Wahl. - Discord-
systemPrompt-Überschreibungen pro Kanal gelten für Voice-Transcript-Turns dieses Voice-Kanals. - Voice-Transcript-Turns leiten den Owner-Status aus Discord
allowFrom(oderdm.allowFrom) ab; Nicht-Owner-Sprechende können nicht auf Owner-only-Tools zugreifen (zum Beispielgatewayundcron). - Discord Voice ist für reine Textkonfigurationen opt-in; setzen Sie
channels.discord.voice.enabled=true(oder behalten Sie einen bestehendenchannels.discord.voice-Block bei), um/vc-Befehle, die Voice-Runtime und den Gateway-IntentGuildVoiceStateszu aktivieren. channels.discord.intents.voiceStateskann das Abonnement des Voice-State-Intents explizit überschreiben. Lassen Sie es ungesetzt, damit der Intent der effektiven Voice-Aktivierung folgt.- Wenn
voice.autoJoinmehrere Einträge für dieselbe Guild enthält, tritt OpenClaw dem zuletzt konfigurierten Kanal für diese Guild bei. voice.allowedChannelsist eine optionale Residency-Allowlist. Lassen Sie es ungesetzt, um/vc joinin jeden autorisierten Discord-Voice-Kanal zu erlauben. Wenn gesetzt, sind/vc join, Auto-Join beim Start und Bot-Voice-State-Verschiebungen auf die aufgeführten Einträge{ guildId, channelId }beschränkt. Setzen Sie es auf ein leeres Array, um alle Discord-Voice-Beitritte zu verweigern. Wenn Discord den Bot außerhalb der Allowlist verschiebt, verlässt OpenClaw diesen Kanal und tritt wieder dem konfigurierten Auto-Join-Ziel bei, sobald eines verfügbar ist.voice.daveEncryptionundvoice.decryptionFailureTolerancewerden an die Join-Optionen von@discordjs/voicedurchgereicht.- Die Standardwerte von
@discordjs/voicesinddaveEncryption=trueunddecryptionFailureTolerance=24, wenn sie ungesetzt sind. - OpenClaw verwendet standardmäßig den reinen JS-Decoder
opusscriptfür Discord-Voice-Empfang. Das optionale native Paket@discordjs/opuswird von der pnpm-Installationsrichtlinie des Repos ignoriert, sodass normale Installationen, Docker-Lanes und nicht verwandte Tests kein natives Addon kompilieren. Dedizierte Hosts für Voice-Performance können nach der Installation des nativen Addons mitOPENCLAW_DISCORD_OPUS_DECODER=nativeopt-in aktivieren. voice.connectTimeoutMssteuert das anfängliche Warten auf@discordjs/voiceReady für/vc joinund Auto-Join-Versuche. Standard:30000.voice.reconnectGraceMssteuert, wie lange OpenClaw wartet, bis eine getrennte Voice-Sitzung mit der erneuten Verbindung beginnt, bevor sie zerstört wird. Standard:15000.- Im Modus
stt-ttsstoppt die Voice-Wiedergabe nicht nur deshalb, weil eine andere Person zu sprechen beginnt. Um Feedback-Schleifen zu vermeiden, ignoriert OpenClaw neue Voice-Erfassung, während TTS abgespielt wird; sprechen Sie nach Ende der Wiedergabe für den nächsten Turn. Echtzeitmodi leiten Speaker-Starts als Barge-in-Signale an den Echtzeit-Provider weiter. - In Echtzeitmodi kann Echo von Lautsprechern in ein offenes Mikrofon wie Barge-in wirken und die Wiedergabe unterbrechen. Für Discord-Räume mit starkem Echo setzen Sie
voice.realtime.providers.openai.interruptResponseOnInputAudio: false, damit OpenAI bei Input-Audio nicht automatisch unterbricht. Fügen Sievoice.realtime.bargeIn: truehinzu, wenn Discord-Speaker-Start-Ereignisse aktive Wiedergabe weiterhin unterbrechen sollen. Die OpenAI-Echtzeit-Bridge ignoriert Wiedergabeabschneidungen, die kürzer alsvoice.realtime.minBargeInAudioEndMssind, als wahrscheinliches Echo/Rauschen und protokolliert sie als übersprungen, statt die Discord-Wiedergabe zu löschen. voice.captureSilenceGraceMssteuert, wie lange OpenClaw wartet, nachdem Discord gemeldet hat, dass eine sprechende Person aufgehört hat, bevor dieses Audiosegment für STT finalisiert wird. Standard:2500; erhöhen Sie diesen Wert, wenn Discord normale Pausen in abgehackte Teil-Transcripts aufteilt.- Wenn ElevenLabs der ausgewählte TTS-Provider ist, verwendet Discord-Voice-Wiedergabe Streaming-TTS und startet aus dem Antwortstream des Providers. Provider ohne Streaming-Unterstützung fallen auf den Pfad mit synthetisierter temporärer Datei zurück.
- OpenClaw überwacht außerdem Receive-Decrypt-Fehler und stellt sich automatisch wieder her, indem es nach wiederholten Fehlern in einem kurzen Zeitfenster den Voice-Kanal verlässt und erneut beitritt.
- Wenn Receive-Logs nach einem Update wiederholt
DecryptionFailed(UnencryptedWhenPassthroughDisabled)zeigen, sammeln Sie einen Dependency-Bericht und Logs. Die gebündelte@discordjs/voice-Linie enthält den Upstream-Padding-Fix aus discord.js PR #11449, der discord.js Issue #11419 geschlossen hat. - Receive-Ereignisse
The operation was abortedsind zu erwarten, wenn OpenClaw ein erfasstes Sprechersegment finalisiert; sie sind ausführliche Diagnosen, keine Warnungen. - Ausführliche Discord-Voice-Logs enthalten eine begrenzte einzeilige STT-Transcript-Vorschau für jedes akzeptierte Sprechersegment, sodass Debugging sowohl die Benutzerseite als auch die Agent-Antwortseite zeigt, ohne unbegrenzt Transcript-Text auszugeben.
- Im Modus
agent-proxyüberspringt der erzwungene Consult-Fallback wahrscheinlich unvollständige Transcript-Fragmente, etwa Text, der auf...endet, oder einen nachgestellten Konnektor wieand, sowie offensichtlich nicht umsetzbare Abschlüsse wie „bin gleich zurück“ oder „tschüss“. Logs zeigenforced agent consult skipped reason=..., wenn dies eine veraltete Antwort in der Warteschlange verhindert.
node-gyp-Toolchain für den Source-Build.
Nach der Installation des nativen Addons starten Sie den Gateway mit:
discord voice: opus decoder: @discordjs/opus anzeigen. Ohne das Env-Opt-in, oder wenn das native Addon fehlt oder auf dem Host nicht geladen werden kann, protokolliert OpenClaw discord voice: opus decoder: opusscript und empfängt Voice weiterhin über den reinen JS-Fallback.
STT-plus-TTS-Pipeline:
- Discord-PCM-Erfassung wird in eine temporäre WAV-Datei konvertiert.
tools.media.audioübernimmt STT, zum Beispielopenai/gpt-4o-mini-transcribe.- Das Transcript wird über Discord-Ingress und Routing gesendet, während das Antwort-LLM mit einer Voice-Output-Richtlinie läuft, die das Agent-Tool
ttsausblendet und zurückgegebenen Text anfordert, weil Discord Voice die finale TTS-Wiedergabe besitzt. voice.modelüberschreibt, wenn gesetzt, nur das Antwort-LLM für diesen Voice-Kanal-Turn.voice.ttswird übermessages.ttsgemergt; streamingfähige Provider speisen den Player direkt, andernfalls wird die resultierende Audiodatei im beigetretenen Kanal abgespielt.
voice.agentSession-Block erhält jeder Voice-Kanal seine eigene geroutete OpenClaw-Sitzung. Zum Beispiel spricht /vc join channel:234567890123456789 mit der Sitzung für diesen Discord-Voice-Kanal. Das Echtzeitmodell ist nur das Voice-Frontend; inhaltliche Anfragen werden an den konfigurierten OpenClaw-Agent übergeben. Wenn das Echtzeitmodell ein finales Transcript erzeugt, ohne das Consult-Tool aufzurufen, erzwingt OpenClaw den Consult als Fallback, damit der Standard weiterhin so funktioniert, als würden Sie mit dem Agent sprechen.
Beispiel für Legacy-STT-plus-TTS:
agent-proxy tritt der Bot dem konfigurierten Voice-Kanal bei, aber OpenClaw-Agent-Turns verwenden die normale geroutete Sitzung und den Agent des Zielkanals. Die Echtzeit-Voice-Sitzung spricht das zurückgegebene Ergebnis zurück in den Voice-Kanal. Der Supervisor-Agent kann entsprechend seiner Tool-Richtlinie weiterhin normale Message-Tools verwenden, einschließlich des Sendens einer separaten Discord-Nachricht, wenn das die richtige Aktion ist.
Nützliche Zielformen:
target: "channel:123456789012345678"routet über eine Discord-Textkanal-Sitzung.target: "123456789012345678"wird als Kanalziel behandelt.target: "dm:123456789012345678"odertarget: "user:123456789012345678"routet über diese Direct-Message-Sitzung.
bargeIn: true Discord-Sprecherstart-Ereignisse und bereits aktive Sprecher-Audiosignale aktive Realtime-Antworten abbrechen lässt, bevor der nächste erfasste Turn OpenAI erreicht. Sehr frühe Barge-in-Signale mit audioEndMs unterhalb von minBargeInAudioEndMs werden als wahrscheinliches Echo/Rauschen behandelt und ignoriert, damit das Modell nicht bereits beim ersten Wiedergabe-Frame abbricht.
Erwartete Voice-Logs:
- Beim Beitreten:
discord voice: joining ... voiceSession=... supervisorSession=... agentSessionMode=... voiceModel=... realtimeModel=... - Beim Realtime-Start:
discord voice: realtime bridge starting ... autoRespond=false interruptResponse=false bargeIn=false minBargeInAudioEndMs=... - Bei Sprecher-Audio:
discord voice: realtime speaker turn opened ...,discord voice: realtime input audio started ... outputAudioMs=... outputActive=...unddiscord voice: realtime speaker turn closed ... chunks=... discordBytes=... realtimeBytes=... interruptedPlayback=... - Bei übersprungener veralteter Sprache:
discord voice: realtime forced agent consult skipped reason=incomplete-transcript ...oderreason=non-actionable-closing ... - Beim Abschluss der Realtime-Antwort:
discord voice: realtime audio playback finishing reason=response.done ... audioMs=... chunks=... - Bei Wiedergabestopp/-zurücksetzung:
discord voice: realtime audio playback stopped reason=... audioMs=... elapsedMs=... chunks=... - Bei Realtime-Consult:
discord voice: realtime consult requested ... voiceSession=... supervisorSession=... question=... - Bei Agent-Antwort:
discord voice: agent turn answer ... - Bei eingereihter exakter Sprache:
discord voice: realtime exact speech queued ... queued=... outputAudioMs=... outputActive=..., gefolgt vondiscord voice: realtime exact speech dequeued reason=player-idle ... - Bei Barge-in-Erkennung:
discord voice: realtime barge-in detected source=speaker-start ...oderdiscord voice: realtime barge-in detected source=active-speaker-audio ..., gefolgt vondiscord voice: realtime barge-in requested reason=... outputAudioMs=... outputActive=... - Bei Realtime-Unterbrechung:
discord voice: realtime model interrupt requested client:response.cancel reason=barge-in, gefolgt entweder vondiscord voice: realtime model audio truncated client:conversation.item.truncate reason=barge-in audioEndMs=...oderdiscord voice: realtime model interrupt confirmed server:response.done status=cancelled ... - Bei ignoriertem Echo/Rauschen:
discord voice: realtime model interrupt ignored client:conversation.item.truncate.skipped reason=barge-in audioEndMs=0 minAudioEndMs=250 - Bei deaktiviertem Barge-in:
discord voice: realtime capture ignored during playback (barge-in disabled) ... - Bei inaktiver Wiedergabe:
discord voice: realtime barge-in ignored reason=... outputActive=false ... playbackChunks=0
realtime audio playback startedbedeutet, dass Discord mit der Wiedergabe von Assistant-Audio begonnen hat. Die Bridge zählt ab diesem Punkt Assistant-Ausgabe-Chunks, Discord-PCM-Bytes, Provider-Realtime-Bytes und die synthetisierte Audiodauer.realtime speaker turn openedmarkiert, dass ein Discord-Sprecher aktiv wird. Wenn die Wiedergabe bereits aktiv ist undbargeInaktiviert ist, kann daraufbarge-in detected source=speaker-startfolgen.realtime input audio startedmarkiert den ersten tatsächlich empfangenen Audio-Frame für diesen Sprecher-Turn.outputActive=trueoder ein von null verschiedeneroutputAudioMshier bedeutet, dass das Mikrofon Eingaben sendet, während die Assistant-Wiedergabe noch aktiv ist.barge-in detected source=active-speaker-audiobedeutet, dass OpenClaw Live-Sprecher-Audio gesehen hat, während die Assistant-Wiedergabe aktiv war. Dies ist nützlich, um eine echte Unterbrechung von einem Discord-Sprecherstart-Ereignis ohne verwertbares Audio zu unterscheiden.barge-in requested reason=...bedeutet, dass OpenClaw den Realtime-Provider aufgefordert hat, die aktive Antwort abzubrechen oder zu kürzen. Es enthältoutputAudioMs,outputActiveundplaybackChunks, damit Sie sehen können, wie viel Assistant-Audio vor der Unterbrechung tatsächlich abgespielt wurde.realtime audio playback stopped reason=...ist der lokale Zurücksetzungspunkt der Discord-Wiedergabe. Der Grund gibt an, wer die Wiedergabe gestoppt hat:barge-in,player-idle,provider-clear-audio,forced-agent-consult,stream-closeodersession-close.realtime speaker turn closedfasst den erfassten Eingabe-Turn zusammen.chunks=0oderhasAudio=falsebedeutet, dass der Sprecher-Turn geöffnet wurde, aber kein nutzbares Audio die Realtime-Bridge erreicht hat.interruptedPlayback=truebedeutet, dass sich dieser Eingabe-Turn mit der Assistant-Ausgabe überschnitten und Barge-in-Logik ausgelöst hat.
outputAudioMs: vom Realtime-Provider vor der Log-Zeile erzeugte Assistant-Audiodauer.audioMs: Assistant-Audiodauer, die OpenClaw gezählt hat, bevor die Wiedergabe gestoppt wurde.elapsedMs: Echtzeit zwischen Öffnen und Schließen des Wiedergabe-Streams oder Sprecher-Turns.discordBytes: 48-kHz-Stereo-PCM-Bytes, die an Discord Voice gesendet oder von dort empfangen wurden.realtimeBytes: PCM-Bytes im Provider-Format, die an den Realtime-Provider gesendet oder von dort empfangen wurden.playbackChunks: Assistant-Audio-Chunks, die für die aktive Antwort an Discord weitergeleitet wurden.sinceLastAudioMs: Abstand zwischen dem letzten erfassten Sprecher-Audio-Frame und dem Schließen des Sprecher-Turns.
- Sofortiges Abschneiden mit
source=active-speaker-audio, kleinemoutputAudioMsund demselben Nutzer in der Nähe weist meist darauf hin, dass Lautsprecherecho in das Mikrofon gelangt. Erhöhen Sievoice.realtime.minBargeInAudioEndMs, senken Sie die Lautsprecherlautstärke, verwenden Sie Kopfhörer oder setzen Sievoice.realtime.providers.openai.interruptResponseOnInputAudio: false. source=speaker-startgefolgt vonspeaker turn closed ... hasAudio=falsebedeutet, dass Discord einen Sprecherstart gemeldet hat, aber kein Audio OpenClaw erreicht hat. Das kann ein vorübergehendes Discord-Voice-Ereignis, Noise-Gate-Verhalten oder ein Client sein, der das Mikrofon kurz aktiviert.audio playback stopped reason=stream-closeohne nahegelegenes Barge-in oderprovider-clear-audiobedeutet, dass der lokale Discord-Wiedergabe-Stream unerwartet beendet wurde. Prüfen Sie die vorherigen Provider- und Discord-Player-Logs.capture ignored during playback (barge-in disabled)bedeutet, dass OpenClaw Eingaben absichtlich verworfen hat, während Assistant-Audio aktiv war. Aktivieren Sievoice.realtime.bargeIn, wenn Sprache die Wiedergabe unterbrechen soll.barge-in ignored ... outputActive=falsebedeutet, dass Discord oder Provider-VAD Sprache gemeldet hat, OpenClaw aber keine aktive Wiedergabe zum Unterbrechen hatte. Dies sollte Audio nicht abschneiden.
voice.model, STT-Authentifizierung für tools.media.audio, TTS-Authentifizierung für messages.tts/voice.tts und Realtime-Provider-Authentifizierung für voice.realtime.providers oder die normale Authentifizierungskonfiguration des Providers.
Sprachnachrichten
Discord-Sprachnachrichten zeigen eine Wellenformvorschau und erfordern OGG/Opus-Audio. OpenClaw generiert die Wellenform automatisch, benötigt aberffmpeg und ffprobe auf dem Gateway-Host, um zu prüfen und zu konvertieren.
- Geben Sie einen lokalen Dateipfad an (URLs werden abgelehnt).
- Lassen Sie Textinhalt weg (Discord lehnt Text + Sprachnachricht in derselben Nutzlast ab).
- Jedes Audioformat wird akzeptiert; OpenClaw konvertiert bei Bedarf zu OGG/Opus.
Fehlerbehebung
Nicht erlaubte Intents verwendet oder Bot sieht keine Guild-Nachrichten
Nicht erlaubte Intents verwendet oder Bot sieht keine Guild-Nachrichten
- Message Content Intent aktivieren
- Server Members Intent aktivieren, wenn Sie auf Nutzer-/Mitgliederauflösung angewiesen sind
- Gateway nach Änderung der Intents neu starten
Guild-Nachrichten unerwartet blockiert
Guild-Nachrichten unerwartet blockiert
groupPolicyprüfen- Guild-Allowlist unter
channels.discord.guildsprüfen - wenn eine Guild-
channels-Map existiert, sind nur aufgelistete Kanäle erlaubt requireMention-Verhalten und Erwähnungsmuster prüfen
Require Mention ist false, wird aber weiterhin blockiert
Require Mention ist false, wird aber weiterhin blockiert
groupPolicy="allowlist"ohne passende Guild-/Kanal-AllowlistrequireMentionan der falschen Stelle konfiguriert (muss unterchannels.discord.guildsoder dem Kanaleintrag stehen)- Absender durch Guild-/Kanal-
users-Allowlist blockiert
Lang laufende Discord-Turns oder doppelte Antworten
Lang laufende Discord-Turns oder doppelte Antworten
Slow listener detected ...stuck session: sessionKey=agent:...:discord:... state=processing ...
- Einzelkonto:
channels.discord.eventQueue.listenerTimeout - Mehrere Konten:
channels.discord.accounts.<accountId>.eventQueue.listenerTimeout - dies steuert nur Listener-Arbeit des Discord-Gateways, nicht die Lebensdauer von Agent-Turns
Timeout-Warnungen bei Gateway-Metadatenabfrage
Timeout-Warnungen bei Gateway-Metadatenabfrage
/gateway/bot-Metadaten ab. Vorübergehende Fehler fallen auf die Standard-Gateway-URL von Discord zurück und werden in Logs rate-limitiert.Metadaten-Timeout-Regler:- Einzelkonto:
channels.discord.gatewayInfoTimeoutMs - Mehrere Konten:
channels.discord.accounts.<accountId>.gatewayInfoTimeoutMs - Env-Fallback, wenn die Konfiguration nicht gesetzt ist:
OPENCLAW_DISCORD_GATEWAY_INFO_TIMEOUT_MS - Standard:
30000(30 Sekunden), Maximum:120000
Gateway-READY-Timeout-Neustarts
Gateway-READY-Timeout-Neustarts
READY-Ereignis. Setups mit mehreren Konten und gestaffeltem Start können ein längeres READY-Startfenster benötigen als den Standard.READY-Timeout-Regler:- Start, Einzelkonto:
channels.discord.gatewayReadyTimeoutMs - Start, mehrere Konten:
channels.discord.accounts.<accountId>.gatewayReadyTimeoutMs - Start-Env-Fallback, wenn die Konfiguration nicht gesetzt ist:
OPENCLAW_DISCORD_READY_TIMEOUT_MS - Startstandard:
15000(15 Sekunden), Maximum:120000 - Runtime, Einzelkonto:
channels.discord.gatewayRuntimeReadyTimeoutMs - Runtime, mehrere Konten:
channels.discord.accounts.<accountId>.gatewayRuntimeReadyTimeoutMs - Runtime-Env-Fallback, wenn die Konfiguration nicht gesetzt ist:
OPENCLAW_DISCORD_RUNTIME_READY_TIMEOUT_MS - Runtime-Standard:
30000(30 Sekunden), Maximum:120000
Abweichungen bei Berechtigungsprüfung
Abweichungen bei Berechtigungsprüfung
channels status --probe funktionieren nur für numerische Kanal-IDs.Wenn Sie Slug-Schlüssel verwenden, kann Runtime-Matching weiterhin funktionieren, aber Probe kann Berechtigungen nicht vollständig verifizieren.DM- und Pairing-Probleme
DM- und Pairing-Probleme
- DM deaktiviert:
channels.discord.dm.enabled=false - DM-Richtlinie deaktiviert:
channels.discord.dmPolicy="disabled"(veraltet:channels.discord.dm.policy) - ausstehende Pairing-Genehmigung im
pairing-Modus
Bot-zu-Bot-Schleifen
Bot-zu-Bot-Schleifen
channels.discord.allowBots=true setzen, verwenden Sie strikte Erwähnungs- und Allowlist-Regeln, um Schleifenverhalten zu vermeiden.
Verwenden Sie vorzugsweise channels.discord.allowBots="mentions", um nur Bot-Nachrichten zu akzeptieren, die den Bot erwähnen.Voice-STT-Aussetzer mit DecryptionFailed(...)
Voice-STT-Aussetzer mit DecryptionFailed(...)
- halten Sie OpenClaw aktuell (
openclaw update), damit die Wiederherstellungslogik für Discord-Sprach-Empfang vorhanden ist - bestätigen Sie
channels.discord.voice.daveEncryption=true(Standard) - beginnen Sie mit
channels.discord.voice.decryptionFailureTolerance=24(Upstream-Standard) und passen Sie den Wert nur bei Bedarf an - beobachten Sie die Logs auf:
discord voice: DAVE decrypt failures detecteddiscord voice: repeated decrypt failures; attempting rejoin
- wenn Fehler nach dem automatischen erneuten Beitritt weiterhin auftreten, sammeln Sie Logs und vergleichen Sie sie mit der Upstream-DAVE-Empfangshistorie in discord.js #11419 und discord.js #11449
Konfigurationsreferenz
Primäre Referenz: Konfigurationsreferenz - Discord.Wichtige Discord-Felder
Wichtige Discord-Felder
- Start/Auth:
enabled,token,accounts.*,allowBots - Richtlinie:
groupPolicy,dm.*,guilds.*,guilds.*.channels.* - Befehl:
commands.native,commands.useAccessGroups,configWrites,slashCommand.* - Ereigniswarteschlange:
eventQueue.listenerTimeout(Listener-Budget),eventQueue.maxQueueSize,eventQueue.maxConcurrency - Gateway:
gatewayInfoTimeoutMs,gatewayReadyTimeoutMs,gatewayRuntimeReadyTimeoutMs - Antwort/Verlauf:
replyToMode,historyLimit,dmHistoryLimit,dms.*.historyLimit - Zustellung:
textChunkLimit,chunkMode,maxLinesPerMessage - Streaming:
streaming(Legacy-Alias:streamMode),streaming.preview.toolProgress,draftChunk,blockStreaming,blockStreamingCoalesce - Medien/Wiederholung:
mediaMaxMb(begrenzt ausgehende Discord-Uploads, Standard100MB),retry - Aktionen:
actions.* - Präsenz:
activity,status,activityType,activityUrl - UI:
ui.components.accentColor - Funktionen:
threadBindings,bindings[]auf oberster Ebene (type: "acp"),pluralkit,execApprovals,intents,agentComponents,heartbeat,responsePrefix
Sicherheit und Betrieb
- Behandeln Sie Bot-Tokens als Geheimnisse (
DISCORD_BOT_TOKENbevorzugt in überwachten Umgebungen). - Gewähren Sie Discord-Berechtigungen nach dem Prinzip der geringsten Rechte.
- Wenn Befehls-Deployment/-Status veraltet ist, starten Sie den Gateway neu und prüfen Sie erneut mit
openclaw channels status --probe.