channels.*. Deckt DM- und Gruppenzugriff,
Multi-Account-Setups, Erwähnungs-Gating und Per-Channel-Schlüssel für Slack, Discord,
Telegram, WhatsApp, Matrix, iMessage und die anderen gebündelten Channel-Plugins ab.
Für Agents, Tools, Gateway-Laufzeit und andere Schlüssel auf oberster Ebene siehe
Konfigurationsreferenz.
Channels
Jeder Channel startet automatisch, wenn sein Konfigurationsabschnitt vorhanden ist (außer beienabled: false).
DM- und Gruppenzugriff
Alle Channels unterstützen DM-Richtlinien und Gruppenrichtlinien:| DM-Richtlinie | Verhalten |
|---|---|
pairing (Standard) | Unbekannte Absender erhalten einen einmaligen Pairing-Code; der Owner muss zustimmen |
allowlist | Nur Absender in allowFrom (oder im Store für gekoppelte Erlaubnisse) |
open | Alle eingehenden DMs zulassen (erfordert allowFrom: ["*"]) |
disabled | Alle eingehenden DMs ignorieren |
| Gruppenrichtlinie | Verhalten |
|---|---|
allowlist (Standard) | Nur Gruppen, die zur konfigurierten Allowlist passen |
open | Gruppen-Allowlists umgehen (Erwähnungs-Gating gilt weiterhin) |
disabled | Alle Gruppen-/Raumnachrichten blockieren |
channels.defaults.groupPolicy legt den Standard fest, wenn groupPolicy eines Providers nicht gesetzt ist.
Pairing-Codes laufen nach 1 Stunde ab. Ausstehende DM-Pairing-Anfragen sind auf 3 pro Channel begrenzt.
Wenn ein Provider-Block vollständig fehlt (channels.<provider> fehlt), fällt die Laufzeit-Gruppenrichtlinie auf allowlist zurück (fail-closed) und gibt beim Start eine Warnung aus.Channel-Modell-Overrides
Verwenden Siechannels.modelByChannel, um bestimmte Channel-IDs oder Direct-Message-Peers an ein Modell zu binden. Werte akzeptieren provider/model oder konfigurierte Modell-Aliasse. Die Channel-Zuordnung gilt, wenn eine Sitzung noch keinen Modell-Override hat (zum Beispiel per /model gesetzt).
Für Gruppen-/Thread-Unterhaltungen sind Schlüssel Channel-spezifische Gruppen-IDs, Themen-IDs oder Channel-Namen. Für Direct-Message-Unterhaltungen (DM) sind Schlüssel Peer-Identifikatoren, die aus der Absenderidentität des Channels abgeleitet werden (nativeDirectUserId, origin.from, origin.to, OriginatingTo, From oder SenderId). Die genaue Schlüsselform hängt vom Channel ab:
| Channel | DM-Schlüsselform | Beispiel |
|---|---|---|
| Slack | user:U... | user:U12345 |
| Telegram | rohe Benutzer-ID | 123456789 |
| Discord | rohe Benutzer-ID | 987654321 |
| Telefonnummer oder JID | 15551234567 | |
| Matrix | Matrix-Benutzer-ID | @user:matrix.org |
| Feishu | feishu:ou_... | feishu:ou_a8b6cab7e945387de5f253775d9b4d85 |
Channel-Standards und Heartbeat
Verwenden Siechannels.defaults für gemeinsame Gruppenrichtlinien- und Heartbeat-Verhalten über Provider hinweg:
channels.defaults.groupPolicy: Fallback-Gruppenrichtlinie, wenngroupPolicyauf Provider-Ebene nicht gesetzt ist.channels.defaults.contextVisibility: Standardmodus für die Sichtbarkeit von ergänzendem Kontext für alle Channels. Werte:all(Standard, gesamten zitierten/Thread-/Verlaufskontext einschließen),allowlist(nur Kontext von Absendern in der Allowlist einschließen),allowlist_quote(wie Allowlist, aber expliziten Zitat-/Antwortkontext beibehalten). Per-Channel-Override:channels.<channel>.contextVisibility.channels.defaults.heartbeat.showOk: Gesunde Channel-Status in die Heartbeat-Ausgabe aufnehmen.channels.defaults.heartbeat.showAlerts: Eingeschränkte/Fehlerstatus in die Heartbeat-Ausgabe aufnehmen.channels.defaults.heartbeat.useIndicator: Kompakte Heartbeat-Ausgabe im Indikatorstil rendern.
- Einträge in
bindings[]auf oberster Ebene mittype: "acp"konfigurieren persistente ACP-Bindungen für WhatsApp-DMs und -Gruppen. Verwenden Sie eine direkte E.164-Nummer oder WhatsApp-Gruppen-JID inmatch.peer.id. Die Feldsemantik wird in ACP Agents gemeinsam beschrieben.
Multi-Account-WhatsApp
Multi-Account-WhatsApp
- Ausgehende Befehle verwenden standardmäßig das Konto
default, wenn vorhanden; andernfalls die erste konfigurierte Konto-ID (sortiert). - Optionales
channels.whatsapp.defaultAccountüberschreibt diese Fallback-Auswahl des Standardkontos, wenn es zu einer konfigurierten Konto-ID passt. - Das alte Baileys-Auth-Verzeichnis für Einzelkonten wird von
openclaw doctornachwhatsapp/defaultmigriert. - Overrides pro Konto:
channels.whatsapp.accounts.<id>.sendReadReceipts,channels.whatsapp.accounts.<id>.dmPolicy,channels.whatsapp.accounts.<id>.allowFrom.
Telegram
- Bot-Token:
channels.telegram.botTokenoderchannels.telegram.tokenFile(nur reguläre Datei; Symlinks werden abgelehnt), mitTELEGRAM_BOT_TOKENals Fallback für das Standardkonto. apiRootist nur der Root der Telegram Bot API. Verwenden Siehttps://api.telegram.orgoder Ihren selbst gehosteten/Proxy-Root, nichthttps://api.telegram.org/bot<TOKEN>;openclaw doctor --fixentfernt ein versehentlich angehängtes Suffix/bot<TOKEN>.- Optionales
channels.telegram.defaultAccountüberschreibt die Auswahl des Standardkontos, wenn es zu einer konfigurierten Konto-ID passt. - Legen Sie in Multi-Account-Setups (2+ Konto-IDs) einen expliziten Standard fest (
channels.telegram.defaultAccountoderchannels.telegram.accounts.default), um Fallback-Routing zu vermeiden;openclaw doctorwarnt, wenn dieser fehlt oder ungültig ist. configWrites: falseblockiert von Telegram initiierte Konfigurationsschreibvorgänge (Supergroup-ID-Migrationen,/config set|unset).- Einträge in
bindings[]auf oberster Ebene mittype: "acp"konfigurieren persistente ACP-Bindungen für Forumsthemen (verwenden Sie das kanonischechatId:topic:topicIdinmatch.peer.id). Die Feldsemantik wird in ACP Agents gemeinsam beschrieben. - Telegram-Stream-Vorschauen verwenden
sendMessage+editMessageText(funktioniert in direkten Chats und Gruppenchats). - Wiederholungsrichtlinie: siehe Wiederholungsrichtlinie.
Discord
- Token:
channels.discord.token, mitDISCORD_BOT_TOKENals Fallback für das Standardkonto. - Direkte ausgehende Aufrufe, die ein explizites Discord-
tokenbereitstellen, verwenden dieses Token für den Aufruf; Einstellungen für Konto-Wiederholung und -Richtlinien stammen weiterhin aus dem ausgewählten Konto im aktiven Runtime-Snapshot. - Optionales
channels.discord.defaultAccountüberschreibt die Auswahl des Standardkontos, wenn es mit einer konfigurierten Konto-ID übereinstimmt. - Verwenden Sie
user:<id>(DM) oderchannel:<id>(Guild-Kanal) für Zustellziele; reine numerische IDs werden abgelehnt. - Guild-Slugs sind kleingeschrieben, wobei Leerzeichen durch
-ersetzt werden; Kanalschlüssel verwenden den slugifizierten Namen (kein#). Bevorzugen Sie Guild-IDs. - Von Bots verfasste Nachrichten werden standardmäßig ignoriert.
allowBots: trueaktiviert sie; verwenden SieallowBots: "mentions", um nur Bot-Nachrichten zu akzeptieren, die den Bot erwähnen (eigene Nachrichten werden weiterhin gefiltert). - Kanäle, die von Bots verfasste eingehende Nachrichten unterstützen, können gemeinsamen Bot-Loop-Schutz verwenden. Setzen Sie
channels.defaults.botLoopProtectionfür Basisbudgets für Paare und überschreiben Sie dann Kanal oder Konto nur, wenn eine Oberfläche andere Limits benötigt. channels.discord.guilds.<id>.ignoreOtherMentions(und Kanalüberschreibungen) verwirft Nachrichten, die einen anderen Benutzer oder eine Rolle erwähnen, aber nicht den Bot (ausgenommen @everyone/@here).channels.discord.mentionAliasesordnet stabilen ausgehenden@handle-Text vor dem Senden Discord-Benutzer-IDs zu, sodass bekannte Teammitglieder deterministisch erwähnt werden können, auch wenn der flüchtige Verzeichnis-Cache leer ist. Kontospezifische Überschreibungen befinden sich unterchannels.discord.accounts.<accountId>.mentionAliases.maxLinesPerMessage(Standard 17) teilt hohe Nachrichten auch dann auf, wenn sie unter 2000 Zeichen liegen.channels.discord.suppressEmbedsist standardmäßigtrue, sodass ausgehende URLs nicht zu Discord-Linkvorschauen erweitert werden, sofern dies nicht deaktiviert ist. Expliziteembeds-Payloads werden weiterhin normal gesendet; Toolaufrufe pro Nachricht können dies mitsuppressEmbedsüberschreiben.channels.discord.threadBindingssteuert Discord-threadgebundenes Routing:enabled: Discord-Überschreibung für threadgebundene Sitzungsfunktionen (/focus,/unfocus,/agents,/session idle,/session max-ageund gebundene Zustellung/Routing)idleHours: Discord-Überschreibung für automatisches Unfocus bei Inaktivität in Stunden (0deaktiviert)maxAgeHours: Discord-Überschreibung für maximales Hartlimit-Alter in Stunden (0deaktiviert)spawnSessions: Schalter fürsessions_spawn({ thread: true })und automatische ACP-Thread-Erstellung/-Bindung bei Thread-Spawns (Standard:true)defaultSpawnContext: nativer Subagent-Kontext für threadgebundene Spawns (standardmäßig"fork")
- Einträge auf oberster Ebene in
bindings[]mittype: "acp"konfigurieren persistente ACP-Bindungen für Kanäle und Threads (Kanal-/Thread-ID inmatch.peer.idverwenden). Die Feldsemantik wird in ACP-Agenten gemeinsam genutzt. channels.discord.ui.components.accentColorlegt die Akzentfarbe für Discord-Komponenten-v2-Container fest.channels.discord.agentComponents.ttlMssteuert, wie lange gesendete Discord-Komponenten-Callbacks registriert bleiben. Der Standardwert ist1800000(30 Minuten), das Maximum ist86400000(24 Stunden), und kontospezifische Überschreibungen befinden sich unterchannels.discord.accounts.<accountId>.agentComponents.ttlMs. Längere Werte halten alte Buttons/Selects/Formulare länger nutzbar; bevorzugen Sie daher die kürzeste TTL, die zum Workflow passt.channels.discord.voiceaktiviert Discord-Sprachkanal-Unterhaltungen und optionale Überschreibungen für Auto-Join + LLM + TTS. Reine Text-Discord-Konfigurationen lassen Voice standardmäßig deaktiviert; setzen Siechannels.discord.voice.enabled=true, um sich dafür zu entscheiden.channels.discord.voice.modelüberschreibt optional das LLM-Modell, das für Discord-Sprachkanal-Antworten verwendet wird.channels.discord.voice.daveEncryptionundchannels.discord.voice.decryptionFailureTolerancewerden an die DAVE-Optionen von@discordjs/voicedurchgereicht (standardmäßigtrueund24).channels.discord.voice.connectTimeoutMssteuert das anfängliche@discordjs/voice-Warten auf Ready für/vc joinund Auto-Join-Versuche (standardmäßig30000).channels.discord.voice.reconnectGraceMssteuert, wie lange eine getrennte Voice-Sitzung Zeit hat, in die Wiederverbindungs-Signalisierung einzutreten, bevor OpenClaw sie zerstört (standardmäßig15000).- Die Discord-Voice-Wiedergabe wird nicht durch das Speaking-Start-Ereignis eines anderen Benutzers unterbrochen. Um Feedback-Schleifen zu vermeiden, ignoriert OpenClaw neue Voice-Erfassung, während TTS abgespielt wird.
- OpenClaw versucht zusätzlich, den Voice-Empfang wiederherzustellen, indem eine Voice-Sitzung nach wiederholten Entschlüsselungsfehlern verlassen und erneut betreten wird.
channels.discord.streamingist der kanonische Schlüssel für den Stream-Modus. Discord verwendet standardmäßigstreaming.mode: "progress", sodass Tool-/Arbeitsfortschritt in einer bearbeiteten Vorschau-Nachricht erscheint; setzen Siestreaming.mode: "off", um dies zu deaktivieren. Legacy-WertestreamModeund booleschestreaming-Werte bleiben Runtime-Aliasse; führen Sieopenclaw doctor --fixaus, um persistierte Konfiguration neu zu schreiben.channels.discord.autoPresenceordnet Runtime-Verfügbarkeit der Bot-Präsenz zu (healthy => online, degraded => idle, exhausted => dnd) und erlaubt optionale Überschreibungen des Statustexts.channels.discord.dangerouslyAllowNameMatchingaktiviert veränderliches Name-/Tag-Matching erneut (Notfall-Kompatibilitätsmodus).channels.discord.execApprovals: Discord-native Zustellung von Exec-Genehmigungen und Autorisierung der Genehmigenden.enabled:true,falseoder"auto"(Standard). Im Auto-Modus werden Exec-Genehmigungen aktiviert, wenn Genehmigende ausapproversodercommands.ownerAllowFromaufgelöst werden können.approvers: Discord-Benutzer-IDs, die Exec-Anfragen genehmigen dürfen. Fällt bei Auslassung aufcommands.ownerAllowFromzurück.agentFilter: optionale Allowlist für Agent-IDs. Weglassen, um Genehmigungen für alle Agenten weiterzuleiten.sessionFilter: optionale Sitzungsschlüssel-Muster (Teilzeichenfolge oder Regex).target: wohin Genehmigungsaufforderungen gesendet werden."dm"(Standard) sendet an DMs der Genehmigenden,"channel"sendet an den Ursprungskanal,"both"sendet an beide. Wenn das Ziel"channel"enthält, sind Buttons nur für aufgelöste Genehmigende nutzbar.cleanupAfterResolve: löscht beitrueGenehmigungs-DMs nach Genehmigung, Ablehnung oder Timeout.
off (keine), own (Nachrichten des Bots, Standard), all (alle Nachrichten), allowlist (aus guilds.<id>.users für alle Nachrichten).
Google Chat
- Dienstkonto-JSON: inline (
serviceAccount) oder dateibasiert (serviceAccountFile). - Dienstkonto-SecretRef wird ebenfalls unterstützt (
serviceAccountRef). - Env-Fallbacks:
GOOGLE_CHAT_SERVICE_ACCOUNToderGOOGLE_CHAT_SERVICE_ACCOUNT_FILE. - Verwenden Sie
spaces/<spaceId>oderusers/<userId>für Zustellziele. channels.googlechat.dangerouslyAllowNameMatchingaktiviert veränderliches E-Mail-Principal-Matching erneut (Notfall-Kompatibilitätsmodus).
Slack
- Socket-Modus erfordert sowohl
botTokenals auchappToken(SLACK_BOT_TOKEN+SLACK_APP_TOKENals Env-Fallback für das Standardkonto). - HTTP-Modus erfordert
botTokenplussigningSecret(auf Root-Ebene oder pro Konto). socketModereicht Slack-SDK-Transport-Tuning für Socket Mode an die öffentliche Bolt-Receiver-API durch. Verwenden Sie es nur, wenn Sie Ping/Pong-Timeouts oder veraltetes Websocket-Verhalten untersuchen.clientPingTimeoutist standardmäßig15000;serverPingTimeoutundpingPongLoggingEnabledwerden nur durchgereicht, wenn sie konfiguriert sind.botToken,appToken,signingSecretunduserTokenakzeptieren Klartext- Strings oder SecretRef-Objekte.- Slack-Konto-Snapshots stellen Quell-/Statusfelder pro Anmeldeinformation bereit, etwa
botTokenSource,botTokenStatus,appTokenStatusund im HTTP-ModussigningSecretStatus.configured_unavailablebedeutet, dass das Konto über SecretRef konfiguriert ist, der aktuelle Befehls-/Laufzeitpfad den Secret-Wert aber nicht auflösen konnte. configWrites: falseblockiert von Slack ausgelöste Config-Schreibvorgänge.- Das optionale
channels.slack.defaultAccountüberschreibt die Standardkontoauswahl, wenn es mit einer konfigurierten Konto-ID übereinstimmt. channels.slack.streaming.modeist der kanonische Schlüssel für den Slack-Stream-Modus.channels.slack.streaming.nativeTransportsteuert Slacks nativen Streaming-Transport. Legacy-Werte fürstreamMode, booleschesstreamingundnativeStreamingbleiben Laufzeit-Aliasse; führen Sieopenclaw doctor --fixaus, um persistierte Config umzuschreiben.unfurlLinksundunfurlMediareichen Slackschat.postMessage-Booleans für Link- und Medien-Unfurling bei Bot-Antworten durch.unfurlLinksist standardmäßigfalse, damit ausgehende Bot-Links nicht inline erweitert werden, sofern dies nicht aktiviert ist;unfurlMediawird ausgelassen, sofern es nicht konfiguriert ist. Setzen Sie einen der Werte unterchannels.slack.accounts.<accountId>, um den Top-Level-Wert für ein Konto zu überschreiben.- Verwenden Sie
user:<id>(DM) oderchannel:<id>für Zustellungsziele.
off, own (Standard), all, allowlist (aus reactionAllowlist).
Thread-Sitzungsisolation: thread.historyScope ist pro Thread (Standard) oder kanalweit geteilt. thread.inheritParent kopiert das Transkript des übergeordneten Kanals in neue Threads.
- Slack Native Streaming plus der Slack-Assistenten-artige Thread-Status „tippt …“ erfordern ein Antwort-Thread-Ziel. Top-Level-DMs bleiben standardmäßig außerhalb von Threads, sodass sie weiterhin über Slack-Entwurfsbeiträge mit Bearbeitungsvorschau streamen können, statt die native Stream-/Statusvorschau im Thread-Stil anzuzeigen.
typingReactionfügt der eingehenden Slack-Nachricht eine temporäre Reaktion hinzu, während eine Antwort läuft, und entfernt sie nach Abschluss. Verwenden Sie einen Slack-Emoji-Shortcode wie"hourglass_flowing_sand".channels.slack.execApprovals: Slack-native Zustellung über Approval-Client und Autorisierung von Exec-Genehmigern. Gleiches Schema wie Discord:enabled(true/false/"auto"),approvers(Slack-Benutzer-IDs),agentFilter,sessionFilterundtarget("dm","channel"oder"both"). Plugin-Genehmigungen können diesen nativen Client-Pfad für von Slack stammende Anfragen verwenden, wenn Slack-Plugin-Genehmiger aufgelöst werden; Slack-native Zustellung von Plugin-Genehmigungen kann auch überapprovals.pluginfür von Slack stammende Sitzungen oder Slack-Ziele aktiviert werden. Plugin-Genehmigungen verwenden Slack-Plugin-Genehmiger ausallowFromund Standard-Routing, nicht Exec-Genehmiger.
| Aktionsgruppe | Standard | Hinweise |
|---|---|---|
| reactions | aktiviert | Reagieren + Reaktionen auflisten |
| messages | aktiviert | Lesen/senden/bearbeiten/löschen |
| pins | aktiviert | Anheften/lösen/auflisten |
| memberInfo | aktiviert | Mitgliedsinformationen |
| emojiList | aktiviert | Benutzerdefinierte Emoji-Liste |
Mattermost
Mattermost wird in aktuellen OpenClaw-Releases als gebündeltes Plugin ausgeliefert. Ältere oder benutzerdefinierte Builds können ein aktuelles npm-Paket mitopenclaw plugins install @openclaw/mattermost installieren. Prüfen Sie
npmjs.com/package/@openclaw/mattermost
auf die aktuellen Dist-Tags, bevor Sie eine Version pinnen.
oncall (Antwort bei @-Erwähnung, Standard), onmessage (jede Nachricht), onchar (Nachrichten, die mit einem Auslösepräfix beginnen).
Wenn native Mattermost-Befehle aktiviert sind:
commands.callbackPathmuss ein Pfad sein (zum Beispiel/api/channels/mattermost/command), keine vollständige URL.commands.callbackUrlmuss zum OpenClaw-Gateway-Endpunkt auflösen und vom Mattermost-Server erreichbar sein.- Native Slash-Callbacks werden mit den pro Befehl zurückgegebenen Tokens authentifiziert,
die Mattermost während der Registrierung von Slash-Befehlen zurückgibt. Wenn die Registrierung fehlschlägt oder keine
Befehle aktiviert sind, weist OpenClaw Callbacks mit
Unauthorized: invalid command token.zurück. - Für private/Tailnet/interne Callback-Hosts kann Mattermost erfordern, dass
ServiceSettings.AllowedUntrustedInternalConnectionsden Callback-Host bzw. die Domain enthält. Verwenden Sie Host-/Domain-Werte, keine vollständigen URLs. channels.mattermost.configWrites: von Mattermost ausgelöste Config-Schreibvorgänge erlauben oder verweigern.channels.mattermost.requireMention:@mentionvor Antworten in Kanälen verlangen.channels.mattermost.groups.<channelId>.requireMention: kanalbezogene Überschreibung für Erwähnungs-Gating ("*"als Standard).- Das optionale
channels.mattermost.defaultAccountüberschreibt die Standardkontoauswahl, wenn es mit einer konfigurierten Konto-ID übereinstimmt.
Signal
off, own (Standard), all, allowlist (aus reactionAllowlist).
channels.signal.account: Kanalstart an eine bestimmte Signal-Kontoidentität binden.channels.signal.configWrites: von Signal ausgelöste Config-Schreibvorgänge erlauben oder verweigern.- Das optionale
channels.signal.defaultAccountüberschreibt die Standardkontoauswahl, wenn es mit einer konfigurierten Konto-ID übereinstimmt.
iMessage
OpenClaw startetimsg rpc (JSON-RPC über stdio). Kein Daemon oder Port erforderlich. Dies ist der bevorzugte Pfad für neue OpenClaw-iMessage-Setups, wenn der Host Zugriff auf die Messages-Datenbank und Automation-Berechtigungen gewähren kann.
BlueBubbles-Unterstützung wurde entfernt. channels.bluebubbles ist in aktuellem OpenClaw keine unterstützte Laufzeit-Config-Oberfläche. Migrieren Sie alte Configs zu channels.imessage; verwenden Sie Entfernung von BlueBubbles und der imsg-iMessage-Pfad für die Kurzversion und Wechsel von BlueBubbles für die vollständige Übersetzungstabelle.
Wenn das Gateway nicht auf dem angemeldeten Messages-Mac läuft, behalten Sie channels.imessage.enabled=true bei und setzen Sie channels.imessage.cliPath auf einen SSH-Wrapper, der imsg "$@" auf diesem Mac ausführt. Der lokale Standardpfad imsg ist nur für macOS.
Bevor Sie sich für Produktionssendungen auf einen SSH-Wrapper verlassen, verifizieren Sie ein ausgehendes imsg send über genau diesen Wrapper. Einige macOS-TCC-Zustände weisen Messages Automation /usr/libexec/sshd-keygen-wrapper zu, wodurch Lesevorgänge und Probes funktionieren können, während Sendungen mit AppleEvents -1743 fehlschlagen; siehe SSH-Wrapper-Sendungen schlagen mit AppleEvents -1743 fehl.
-
Das optionale
channels.imessage.defaultAccountüberschreibt die Standardkontoauswahl, wenn es mit einer konfigurierten Konto-ID übereinstimmt. - Erfordert vollständigen Festplattenzugriff auf die Messages-DB.
-
Bevorzugen Sie
chat_id:<id>-Ziele. Verwenden Sieimsg chats --limit 20, um Chats aufzulisten. -
cliPathkann auf einen SSH-Wrapper verweisen; setzen SieremoteHost(hostoderuser@host) für das Abrufen von Anhängen per SCP. -
attachmentRootsundremoteAttachmentRootsbeschränken eingehende Anhangspfade (Standard:/Users/*/Library/Messages/Attachments). -
SCP verwendet strikte Host-Key-Prüfung; stellen Sie daher sicher, dass der Relay-Host-Key bereits in
~/.ssh/known_hostsvorhanden ist. -
channels.imessage.configWrites: von iMessage ausgelöste Config-Schreibvorgänge erlauben oder verweigern. -
channels.imessage.sendTransport: bevorzugterimsg-RPC-Sendetransport für normale ausgehende Antworten.auto(Standard) verwendet die IMCore-Bridge für vorhandene Chats, wenn sie läuft, und fällt dann auf AppleScript zurück;bridgeerfordert Zustellung über private API;applescripterzwingt den öffentlichen Messages-Automation-Pfad. -
channels.imessage.actions.*: private API-Aktionen aktivieren, die auch durchimsg status/openclaw channels status --probegegatet sind. -
channels.imessage.includeAttachmentsist standardmäßig deaktiviert; setzen Sie es auftrue, bevor Sie eingehende Medien in Agent-Turns erwarten. -
Eingehende Wiederherstellung nach einem Bridge-/Gateway-Neustart erfolgt automatisch (GUID-Deduplizierung plus Altersgrenze für veralteten Backlog). Vorhandene
channels.imessage.catchup.enabled: true-Configs werden weiterhin als veraltetes Kompatibilitätsprofil berücksichtigt. -
channels.imessage.groups: Gruppenregistrierung und gruppenbezogene Einstellungen. MitgroupPolicy: "allowlist"konfigurieren Sie entweder explizitechat_id-Schlüssel oder einen"*"-Wildcard-Eintrag, damit Gruppennachrichten das Registry-Gate passieren können. -
Top-Level-
bindings[]-Einträge mittype: "acp"können iMessage-Unterhaltungen an persistente ACP-Sitzungen binden. Verwenden Sie ein normalisiertes Handle oder ein explizites Chat-Ziel (chat_id:*,chat_guid:*,chat_identifier:*) inmatch.peer.id. Gemeinsame Feldsemantik: ACP-Agenten.
iMessage-SSH-Wrapper-Beispiel
iMessage-SSH-Wrapper-Beispiel
Matrix
Matrix ist Plugin-gestützt und wird unterchannels.matrix konfiguriert.
- Token-Auth verwendet
accessToken; Passwort-Auth verwendetuserId+password. channels.matrix.proxyleitet Matrix-HTTP-Traffic über einen expliziten HTTP(S)-Proxy. Benannte Konten können dies mitchannels.matrix.accounts.<id>.proxyüberschreiben.channels.matrix.network.dangerouslyAllowPrivateNetworkerlaubt private/interne Homeserver.proxyund dieses Netzwerk-Opt-in sind unabhängige Steuerungen.channels.matrix.defaultAccountwählt das bevorzugte Konto in Setups mit mehreren Konten aus.channels.matrix.autoJoinist standardmäßigoff, sodass eingeladene Räume und neue DM-artige Einladungen ignoriert werden, bis SieautoJoin: "allowlist"mitautoJoinAllowlistoderautoJoin: "always"setzen.channels.matrix.execApprovals: Matrix-native Zustellung von Exec-Genehmigungen und Autorisierung von Genehmigenden.enabled:true,falseoder"auto"(Standard). Im Auto-Modus werden Exec-Genehmigungen aktiviert, wenn Genehmigende ausapproversodercommands.ownerAllowFromaufgelöst werden können.approvers: Matrix-Benutzer-IDs (z. B.@owner:example.org), die Exec-Anfragen genehmigen dürfen.agentFilter: optionale Agent-ID-Allowlist. Weglassen, um Genehmigungen für alle Agenten weiterzuleiten.sessionFilter: optionale Session-Key-Muster (Teilzeichenfolge oder Regex).target: wohin Genehmigungsaufforderungen gesendet werden."dm"(Standard),"channel"(ursprünglicher Raum) oder"both".- Überschreibungen pro Konto:
channels.matrix.accounts.<id>.execApprovals.
channels.matrix.dm.sessionScopesteuert, wie Matrix-DMs zu Sessions gruppiert werden:per-user(Standard) teilt nach geroutetem Peer, währendper-roomjeden DM-Raum isoliert.- Matrix-Statusprüfungen und Live-Verzeichnis-Lookups verwenden dieselbe Proxy-Richtlinie wie Runtime-Traffic.
- Die vollständige Matrix-Konfiguration, Targeting-Regeln und Setup-Beispiele sind in Matrix dokumentiert.
Microsoft Teams
Microsoft Teams ist Plugin-gestützt und wird unterchannels.msteams konfiguriert.
- Hier abgedeckte zentrale Schlüsselpfade:
channels.msteams,channels.msteams.configWrites. - Die vollständige Teams-Konfiguration (Anmeldedaten, Webhook, DM-/Gruppenrichtlinie, Überschreibungen pro Team/pro Kanal) ist in Microsoft Teams dokumentiert.
IRC
IRC ist Plugin-gestützt und wird unterchannels.irc konfiguriert.
- Hier abgedeckte zentrale Schlüsselpfade:
channels.irc,channels.irc.dmPolicy,channels.irc.configWrites,channels.irc.nickserv.*. - Optionales
channels.irc.defaultAccountüberschreibt die Standardkontoauswahl, wenn es mit einer konfigurierten Konto-ID übereinstimmt. - Die vollständige IRC-Kanalkonfiguration (Host/Port/TLS/Kanäle/Allowlists/Erwähnungs-Gating) ist in IRC dokumentiert.
Mehrere Konten (alle Kanäle)
Führen Sie mehrere Konten pro Kanal aus (jedes mit eigeneraccountId):
defaultwird verwendet, wennaccountIdweggelassen wird (CLI + Routing).- Env-Tokens gelten nur für das Standardkonto.
- Basis-Kanaleinstellungen gelten für alle Konten, sofern sie nicht pro Konto überschrieben werden.
- Verwenden Sie
bindings[].match.accountId, um jedes Konto an einen anderen Agenten zu routen. - Wenn Sie ein Nicht-Standardkonto über
openclaw channels add(oder Kanal-Onboarding) hinzufügen, während noch eine Top-Level-Kanalkonfiguration für ein einzelnes Konto verwendet wird, verschiebt OpenClaw zuerst kontobezogene Top-Level-Werte für Einzelkonten in die Konten-Map des Kanals, damit das ursprüngliche Konto weiter funktioniert. Die meisten Kanäle verschieben sie nachchannels.<channel>.accounts.default; Matrix kann stattdessen ein vorhandenes übereinstimmendes benanntes/Standardziel beibehalten. - Bestehende kanalbezogene Bindings (ohne
accountId) passen weiterhin zum Standardkonto; kontobezogene Bindings bleiben optional. openclaw doctor --fixrepariert gemischte Formen ebenfalls, indem kontobezogene Top-Level-Werte für Einzelkonten in das für diesen Kanal ausgewählte hochgestufte Konto verschoben werden. Die meisten Kanäle verwendenaccounts.default; Matrix kann stattdessen ein vorhandenes übereinstimmendes benanntes/Standardziel beibehalten.
Andere Plugin-Kanäle
Viele Plugin-Kanäle werden alschannels.<id> konfiguriert und auf ihren dedizierten Kanalseiten dokumentiert (zum Beispiel Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat und Twitch).
Siehe den vollständigen Kanalindex: Kanäle.
Erwähnungs-Gating in Gruppenchats
Gruppennachrichten erfordern standardmäßig eine Erwähnung (Metadaten-Erwähnung oder sichere Regex-Muster). Gilt für WhatsApp, Telegram, Discord, Google Chat und iMessage-Gruppenchats. Sichtbare Antworten werden separat gesteuert. Normale Gruppen-, Kanal- und interne WebChat-Direktanfragen verwenden standardmäßig automatische finale Zustellung: Der finale Assistant-Text wird über den alten sichtbaren Antwortpfad gepostet. Aktivieren Siemessages.visibleReplies: "message_tool" oder messages.groupChat.visibleReplies: "message_tool", wenn sichtbare Ausgabe erst gepostet werden soll, nachdem der Agent message(action=send) aufruft. Wenn das Modell in einem aktivierten reinen Tool-Modus finalen Text zurückgibt, ohne das Nachrichtentool aufzurufen, bleibt dieser finale Text privat und das ausführliche Gateway-Log zeichnet Metadaten zur unterdrückten Payload auf.
Nur-Tool-sichtbare Antworten erfordern ein Modell/eine Runtime, das bzw. die zuverlässig Tools aufruft, und werden für gemeinsam genutzte Umgebungsräume auf Modellen der neuesten Generation wie GPT 5.5 empfohlen. Einige schwächere Modelle können finalen Text beantworten, verstehen aber nicht, dass quellensichtbare Ausgabe mit message(action=send) gesendet werden muss. Verwenden Sie für diese Modelle "automatic", damit der finale Assistant-Turn der sichtbare Antwortpfad ist. Wenn das Session-Log Assistant-Text mit didSendViaMessagingTool: false zeigt, hat das Modell privaten finalen Text erzeugt, statt das Nachrichtentool aufzurufen. Wechseln Sie für diesen Kanal zu einem stärkeren Tool-aufrufenden Modell, prüfen Sie das ausführliche Gateway-Log auf die Zusammenfassung der unterdrückten Payload, oder setzen Sie messages.groupChat.visibleReplies: "automatic", um sichtbare finale Antworten für jede Gruppen-/Kanalanfrage zu verwenden.
Wenn das Nachrichtentool unter der aktiven Tool-Richtlinie nicht verfügbar ist, fällt OpenClaw auf automatische sichtbare Antworten zurück, statt die Antwort stillschweigend zu unterdrücken. openclaw doctor warnt vor dieser Nichtübereinstimmung.
Diese Regel gilt für normalen finalen Agent-Text. Plugin-eigene Konversations-Bindings verwenden die vom besitzenden Plugin zurückgegebene Antwort als sichtbare Antwort für beanspruchte gebundene Thread-Turns; das Plugin muss für diese Binding-Antworten nicht message(action=send) aufrufen.
Fehlerbehebung: Gruppen-@Erwähnung löst Tippen aus, dann Stille (kein Fehler)
Symptom: Eine Gruppen-/Kanal-@Erwähnung zeigt die Tippanzeige, und das Gateway-Log meldet dispatch complete (queuedFinal=false, replies=0), aber im Raum kommt keine Nachricht an. DMs an denselben Agenten antworten normal.
Ursache: Der sichtbare Antwortmodus für Gruppen/Kanäle wird zu "message_tool" aufgelöst, sodass OpenClaw den Turn ausführt, den finalen Assistant-Text aber unterdrückt, sofern der Agent nicht message(action=send) aufruft. In diesem Modus gibt es keinen NO_REPLY-Vertrag; kein Nachrichtentool-Aufruf bedeutet keine Quellenantwort. Es gibt keinen Fehler, weil die Unterdrückung das konfigurierte Verhalten ist. Normale Gruppen- und Kanal-Turns verwenden standardmäßig "automatic", daher tritt dieses Symptom nur auf, wenn messages.groupChat.visibleReplies (oder global messages.visibleReplies) explizit auf "message_tool" gesetzt ist. Harness-defaultVisibleReplies gilt hier nicht — der Gruppen-/Kanal-Resolver ignoriert es; es betrifft nur Direkt-/Quellchats (das Codex-Harness unterdrückt Direktchat-Finals auf diese Weise).
Fix: Wählen Sie entweder ein stärkeres Tool-aufrufendes Modell, entfernen Sie die explizite "message_tool"-Überschreibung, um auf den Standard "automatic" zurückzufallen, oder setzen Sie messages.groupChat.visibleReplies: "automatic", um sichtbare Antworten für jede Gruppen-/Kanalanfrage zu erzwingen. Das Gateway lädt die messages-Konfiguration nach dem Speichern der Datei per Hot-Reload neu; starten Sie das Gateway nur neu, wenn Dateiüberwachung oder Konfigurations-Reload in der Bereitstellung deaktiviert ist.
Erwähnungstypen:
- Metadaten-Erwähnungen: Native Plattform-@Erwähnungen. Im WhatsApp-Self-Chat-Modus ignoriert.
- Textmuster: Sichere Regex-Muster in
agents.list[].groupChat.mentionPatterns. Ungültige Muster und unsichere verschachtelte Wiederholungen werden ignoriert. - Erwähnungs-Gating wird nur erzwungen, wenn Erkennung möglich ist (native Erwähnungen oder mindestens ein Muster).
messages.groupChat.historyLimit legt den globalen Standard fest. Kanäle können dies mit channels.<channel>.historyLimit (oder pro Konto) überschreiben. Setzen Sie 0, um es zu deaktivieren.
messages.groupChat.unmentionedInbound: "room_event" übermittelt nicht erwähnte Always-on-Gruppen-/Kanalnachrichten auf unterstützten Kanälen als stillen Raumkontext. Erwähnte Nachrichten, Befehle und Direktnachrichten bleiben Benutzeranfragen. Vollständige Beispiele für Discord, Slack und Telegram finden Sie unter Umgebungs-Raumereignisse.
messages.visibleReplies ist der globale Standard für Quellereignisse; messages.groupChat.visibleReplies überschreibt ihn für Gruppen-/Kanal-Quellereignisse. Wenn messages.visibleReplies nicht gesetzt ist, verwenden Direkt-/Quellchats den ausgewählten Runtime- oder Harness-Standard, aber interne WebChat-Direkt-Turns verwenden automatische finale Zustellung für Pi-/Codex-Prompt-Parität. Setzen Sie messages.visibleReplies: "message_tool", um message(action=send) absichtlich für sichtbare Ausgabe zu verlangen. Kanal-Allowlists und Erwähnungs-Gating entscheiden weiterhin, ob ein Ereignis verarbeitet wird.
DM-Verlaufslimits
telegram, whatsapp, discord, slack, signal, imessage, msteams.
Self-Chat-Modus
Nehmen Sie Ihre eigene Nummer inallowFrom auf, um den Self-Chat-Modus zu aktivieren (ignoriert native @Erwähnungen, antwortet nur auf Textmuster):
Befehle (Chat-Befehlsverarbeitung)
Befehlsdetails
Befehlsdetails
- Dieser Block konfiguriert Befehlsoberflächen. Den aktuellen integrierten + gebündelten Befehlskatalog finden Sie unter Slash-Befehle.
- Diese Seite ist eine Referenz für Konfigurationsschlüssel, nicht der vollständige Befehlskatalog. Kanal-/Plugin-eigene Befehle wie QQ Bot
/bot-ping/bot-help/bot-logs, LINE/card, Gerätekopplung/pair, Memory/dreaming, Telefonsteuerung/phoneund Talk/voicesind auf den jeweiligen Kanal-/Plugin-Seiten sowie unter Slash-Befehle dokumentiert. - Textbefehle müssen eigenständige Nachrichten mit führendem
/sein. native: "auto"aktiviert native Befehle für Discord/Telegram und lässt Slack deaktiviert.nativeSkills: "auto"aktiviert native Skill-Befehle für Discord/Telegram und lässt Slack deaktiviert.- Pro Kanal überschreiben:
channels.discord.commands.native(bool oder"auto"). Bei Discord überspringtfalsedie native Befehlsregistrierung und Bereinigung während des Starts. - Überschreiben Sie die native Skill-Registrierung pro Kanal mit
channels.<provider>.commands.nativeSkills. channels.telegram.customCommandsfügt zusätzliche Telegram-Bot-Menüeinträge hinzu.bash: trueaktiviert! <cmd>für die Host-Shell. Erforderttools.elevated.enabledund den Absender intools.elevated.allowFrom.<channel>.config: trueaktiviert/config(liest/schreibtopenclaw.json). Für Gateway-chat.send-Clients erfordern persistente/config set|unset-Schreibvorgänge außerdemoperator.admin; schreibgeschütztes/config showbleibt für normale Operator-Clients mit Schreibumfang verfügbar.mcp: trueaktiviert/mcpfür von OpenClaw verwaltete MCP-Serverkonfiguration untermcp.servers.plugins: trueaktiviert/pluginsfür Plugin-Erkennung, Installation und Aktivierungs-/Deaktivierungssteuerungen.channels.<provider>.configWritessteuert Konfigurationsänderungen pro Kanal (Standard: true).- Bei Kanälen mit mehreren Konten steuert
channels.<provider>.accounts.<id>.configWritesaußerdem Schreibvorgänge, die auf dieses Konto abzielen (zum Beispiel/allowlist --config --account <id>oder/config set channels.<provider>.accounts.<id>...). restart: falsedeaktiviert/restartund Gateway-Neustart-Tool-Aktionen. Standard:true.ownerAllowFromist die explizite Owner-Allowlist für reine Owner-Befehle und durch Owner beschränkte Kanalaktionen. Sie ist vonallowFromgetrennt.ownerDisplay: "hash"hasht Owner-IDs im System-Prompt. Legen SieownerDisplaySecretfest, um das Hashing zu steuern.allowFromgilt pro Provider. Wenn gesetzt, ist es die einzige Autorisierungsquelle (Kanal-Allowlists/Kopplung unduseAccessGroupswerden ignoriert).useAccessGroups: falseerlaubt Befehlen, Zugriffgruppenrichtlinien zu umgehen, wennallowFromnicht gesetzt ist.- Zuordnung der Befehlsdokumentation:
Verwandte Themen
- Konfigurationsreferenz — Schlüssel auf oberster Ebene
- Konfiguration — Agents
- Kanalübersicht