channels.*. Couvre l’accès DM et groupe,
les configurations multi-comptes, le contrôle par mention et les clés propres à chaque canal pour Slack, Discord,
Telegram, WhatsApp, Matrix, iMessage et les autres plugins de canal intégrés.
Pour les agents, les outils, le runtime du Gateway et les autres clés de niveau supérieur, voir
Référence de configuration.
Canaux
Chaque canal démarre automatiquement lorsque sa section de configuration existe (sauf sienabled: false).
Accès DM et groupe
Tous les canaux prennent en charge des politiques DM et des politiques de groupe :| Politique DM | Comportement |
|---|---|
pairing (par défaut) | Les expéditeurs inconnus reçoivent un code de jumelage à usage unique ; le propriétaire doit approuver |
allowlist | Uniquement les expéditeurs dans allowFrom (ou le stockage autorisé jumelé) |
open | Autoriser tous les DM entrants (nécessite allowFrom: ["*"]) |
disabled | Ignorer tous les DM entrants |
| Politique de groupe | Comportement |
|---|---|
allowlist (par défaut) | Uniquement les groupes correspondant à la liste d’autorisation configurée |
open | Contourner les listes d’autorisation de groupe (le contrôle par mention s’applique toujours) |
disabled | Bloquer tous les messages de groupe/salon |
channels.defaults.groupPolicy définit la valeur par défaut lorsqu’un groupPolicy de fournisseur n’est pas défini.
Les codes de jumelage expirent après 1 heure. Les demandes de jumelage DM en attente sont limitées à 3 par canal.
Si un bloc de fournisseur est totalement absent (channels.<provider> absent), la politique de groupe runtime revient à allowlist (échec fermé) avec un avertissement au démarrage.Remplacements de modèle par canal
Utilisezchannels.modelByChannel pour épingler des ID de canal spécifiques à un modèle. Les valeurs acceptent provider/model ou des alias de modèle configurés. Le mappage de canal s’applique lorsqu’une session n’a pas déjà un remplacement de modèle (par exemple défini via /model).
Valeurs par défaut des canaux et Heartbeat
Utilisezchannels.defaults pour le comportement partagé de politique de groupe et de Heartbeat entre fournisseurs :
channels.defaults.groupPolicy: politique de groupe de repli lorsqu’ungroupPolicyau niveau fournisseur n’est pas défini.channels.defaults.contextVisibility: mode de visibilité du contexte supplémentaire par défaut pour tous les canaux. Valeurs :all(par défaut, inclure tout le contexte cité/de fil/d’historique),allowlist(inclure uniquement le contexte des expéditeurs autorisés),allowlist_quote(identique à allowlist mais conserve le contexte explicite de citation/réponse). Remplacement par canal :channels.<channel>.contextVisibility.channels.defaults.heartbeat.showOk: inclure les statuts de canal sains dans la sortie Heartbeat.channels.defaults.heartbeat.showAlerts: inclure les statuts dégradés/en erreur dans la sortie Heartbeat.channels.defaults.heartbeat.useIndicator: afficher une sortie Heartbeat compacte de type indicateur.
WhatsApp multi-compte
WhatsApp multi-compte
- Les commandes sortantes utilisent par défaut le compte
defaults’il est présent ; sinon le premier ID de compte configuré (trié). channels.whatsapp.defaultAccountfacultatif remplace ce choix de compte par défaut de repli lorsqu’il correspond à un ID de compte configuré.- L’ancien répertoire d’authentification Baileys mono-compte est migré par
openclaw doctorverswhatsapp/default. - Remplacements par compte :
channels.whatsapp.accounts.<id>.sendReadReceipts,channels.whatsapp.accounts.<id>.dmPolicy,channels.whatsapp.accounts.<id>.allowFrom.
Telegram
- Jeton du bot :
channels.telegram.botTokenouchannels.telegram.tokenFile(fichier ordinaire uniquement ; liens symboliques rejetés), avecTELEGRAM_BOT_TOKENcomme repli pour le compte par défaut. channels.telegram.defaultAccountfacultatif remplace la sélection du compte par défaut lorsqu’il correspond à un ID de compte configuré.- Dans les configurations multi-comptes (2+ ID de compte), définissez un défaut explicite (
channels.telegram.defaultAccountouchannels.telegram.accounts.default) pour éviter le routage de repli ;openclaw doctoravertit lorsque cela est absent ou invalide. configWrites: falsebloque les écritures de configuration initiées par Telegram (migrations d’ID de supergroupe,/config set|unset).- Les entrées
bindings[]de niveau supérieur avectype: "acp"configurent des liaisons ACP persistantes pour les topics de forum (utilisez le format canoniquechatId:topic:topicIddansmatch.peer.id). La sémantique des champs est partagée dans Agents ACP. - Les aperçus de streaming Telegram utilisent
sendMessage+editMessageText(fonctionne dans les discussions directes et de groupe). - Politique de nouvelle tentative : voir Politique de nouvelle tentative.
Discord
- Jeton :
channels.discord.token, avecDISCORD_BOT_TOKENcomme repli pour le compte par défaut. - Les appels sortants directs qui fournissent un
tokenDiscord explicite utilisent ce jeton pour l’appel ; les paramètres de politique/nouvelle tentative du compte proviennent toujours du compte sélectionné dans l’instantané runtime actif. channels.discord.defaultAccountfacultatif remplace la sélection du compte par défaut lorsqu’il correspond à un ID de compte configuré.- Utilisez
user:<id>(DM) ouchannel:<id>(canal de serveur) pour les cibles de livraison ; les ID numériques bruts sont rejetés. - Les slugs de serveur sont en minuscules avec les espaces remplacés par
-; les clés de canal utilisent le nom slugifié (sans#). Préférez les ID de serveur. - Les messages rédigés par des bots sont ignorés par défaut.
allowBots: trueles active ; utilisezallowBots: "mentions"pour n’accepter que les messages de bot qui mentionnent le bot (les propres messages restent filtrés). channels.discord.guilds.<id>.ignoreOtherMentions(et les remplacements de canal) supprime les messages qui mentionnent un autre utilisateur ou rôle mais pas le bot (hors @everyone/@here).maxLinesPerMessage(17 par défaut) découpe les messages hauts même lorsqu’ils font moins de 2000 caractères.channels.discord.threadBindingscontrôle le routage lié aux fils Discord :enabled: remplacement Discord pour les fonctionnalités de session liées aux fils (/focus,/unfocus,/agents,/session idle,/session max-age, ainsi que la livraison/le routage liés)idleHours: remplacement Discord pour le désancrage automatique sur inactivité en heures (0désactive)maxAgeHours: remplacement Discord pour l’âge maximal strict en heures (0désactive)spawnSubagentSessions: activation explicite pour la création/liaison automatique de fil parsessions_spawn({ thread: true })
- Les entrées
bindings[]de niveau supérieur avectype: "acp"configurent des liaisons ACP persistantes pour les canaux et les fils (utilisez l’ID de canal/fil dansmatch.peer.id). La sémantique des champs est partagée dans Agents ACP. channels.discord.ui.components.accentColordéfinit la couleur d’accentuation pour les conteneurs Discord components v2.channels.discord.voiceactive les conversations dans les canaux vocaux Discord et les remplacements facultatifs d’auto-connexion + TTS.channels.discord.voice.daveEncryptionetchannels.discord.voice.decryptionFailureTolerancesont transmis aux options DAVE de@discordjs/voice(trueet24par défaut).- OpenClaw tente en plus une récupération de réception vocale en quittant/rejoignant une session vocale après des échecs répétés de déchiffrement.
channels.discord.streamingest la clé canonique du mode de streaming. Les anciennes valeursstreamModeet booléennesstreamingsont migrées automatiquement.channels.discord.autoPresencemappe la disponibilité runtime à la présence du bot (sain => online, dégradé => idle, épuisé => dnd) et autorise des remplacements facultatifs du texte de statut.channels.discord.dangerouslyAllowNameMatchingréactive la correspondance mutable par nom/tag (mode de compatibilité de dernier recours).channels.discord.execApprovals: livraison native Discord des approbations exec et autorisation des approbateurs.enabled:true,falseou"auto"(par défaut). En mode auto, les approbations exec s’activent lorsque les approbateurs peuvent être résolus à partir deapproversoucommands.ownerAllowFrom.approvers: ID utilisateur Discord autorisés à approuver les demandes exec. Revient àcommands.ownerAllowFromlorsqu’il est omis.agentFilter: liste d’autorisation facultative des ID d’agent. Omettez pour transférer les approbations pour tous les agents.sessionFilter: motifs facultatifs de clé de session (sous-chaîne ou regex).target: où envoyer les invites d’approbation."dm"(par défaut) les envoie dans les DM des approbateurs,"channel"les envoie dans le canal d’origine,"both"les envoie aux deux. Lorsque la cible inclut"channel", les boutons ne sont utilisables que par les approbateurs résolus.cleanupAfterResolve: lorsquetrue, supprime les DM d’approbation après approbation, refus ou expiration.
off (aucune), own (messages du bot, par défaut), all (tous les messages), allowlist (depuis guilds.<id>.users sur tous les messages).
Google Chat
- JSON du compte de service : inline (
serviceAccount) ou basé sur un fichier (serviceAccountFile). - SecretRef de compte de service également pris en charge (
serviceAccountRef). - Variables d’environnement de repli :
GOOGLE_CHAT_SERVICE_ACCOUNTouGOOGLE_CHAT_SERVICE_ACCOUNT_FILE. - Utilisez
spaces/<spaceId>ouusers/<userId>pour les cibles de livraison. channels.googlechat.dangerouslyAllowNameMatchingréactive la correspondance mutable par principal d’e-mail (mode de compatibilité de dernier recours).
Slack
- Mode socket requiert
botTokenetappToken(SLACK_BOT_TOKEN+SLACK_APP_TOKENcomme repli env du compte par défaut). - Mode HTTP requiert
botTokenplussigningSecret(à la racine ou par compte). botToken,appToken,signingSecretetuserTokenacceptent des chaînes en clair ou des objets SecretRef.- Les instantanés de compte Slack exposent des champs source/statut par identifiant tels que
botTokenSource,botTokenStatus,appTokenStatuset, en mode HTTP,signingSecretStatus.configured_unavailablesignifie que le compte est configuré via SecretRef mais que le chemin actuel de commande/runtime n’a pas pu résoudre la valeur du secret. configWrites: falsebloque les écritures de configuration initiées par Slack.channels.slack.defaultAccountfacultatif remplace la sélection du compte par défaut lorsqu’il correspond à un ID de compte configuré.channels.slack.streaming.modeest la clé canonique du mode de streaming Slack.channels.slack.streaming.nativeTransportcontrôle le transport de streaming natif Slack. Les anciennes valeursstreamMode, booléennesstreamingetnativeStreamingsont migrées automatiquement.- Utilisez
user:<id>(DM) ouchannel:<id>pour les cibles de livraison.
off, own (par défaut), all, allowlist (depuis reactionAllowlist).
Isolation de session par fil : thread.historyScope est par fil (par défaut) ou partagé à l’échelle du canal. thread.inheritParent copie le transcript du canal parent vers les nouveaux fils.
- Le streaming natif Slack ainsi que le statut de fil Slack de type assistant « is typing… » requièrent une cible de fil de réponse. Les DM de niveau supérieur restent hors fil par défaut, ils utilisent donc
typingReactionou la livraison normale au lieu de l’aperçu de style fil. typingReactionajoute une réaction temporaire au message Slack entrant pendant l’exécution d’une réponse, puis la supprime une fois terminée. Utilisez un shortcode emoji Slack tel que"hourglass_flowing_sand".channels.slack.execApprovals: livraison native Slack des approbations exec et autorisation des approbateurs. Même schéma que Discord :enabled(true/false/"auto"),approvers(ID utilisateur Slack),agentFilter,sessionFilterettarget("dm","channel"ou"both").
| Groupe d’actions | Par défaut | Notes |
|---|---|---|
| reactions | enabled | Réagir + lister les réactions |
| messages | enabled | Lire/envoyer/modifier/supprimer |
| pins | enabled | Épingler/désépingler/lister |
| memberInfo | enabled | Informations sur les membres |
| emojiList | enabled | Liste des emojis personnalisés |
Mattermost
Mattermost est livré comme Plugin :openclaw plugins install @openclaw/mattermost.
oncall (répond sur @mention, par défaut), onmessage (chaque message), onchar (messages commençant par un préfixe déclencheur).
Lorsque les commandes natives Mattermost sont activées :
commands.callbackPathdoit être un chemin (par exemple/api/channels/mattermost/command), pas une URL complète.commands.callbackUrldoit se résoudre vers le point de terminaison Gateway OpenClaw et être joignable depuis le serveur Mattermost.- Les callbacks slash natifs sont authentifiés avec les jetons par commande renvoyés
par Mattermost lors de l’enregistrement des slash commands. Si l’enregistrement échoue ou si aucune
commande n’est activée, OpenClaw rejette les callbacks avec
Unauthorized: invalid command token. - Pour les hôtes de callback privés/tailnet/internes, Mattermost peut exiger que
ServiceSettings.AllowedUntrustedInternalConnectionsinclue l’hôte/domaine de callback. Utilisez des valeurs d’hôte/domaine, pas des URL complètes. channels.mattermost.configWrites: autoriser ou interdire les écritures de configuration initiées par Mattermost.channels.mattermost.requireMention: exiger une@mentionavant de répondre dans les canaux.channels.mattermost.groups.<channelId>.requireMention: remplacement de contrôle par mention par canal ("*"pour la valeur par défaut).channels.mattermost.defaultAccountfacultatif remplace la sélection du compte par défaut lorsqu’il correspond à un ID de compte configuré.
Signal
off, own (par défaut), all, allowlist (depuis reactionAllowlist).
channels.signal.account: épingler le démarrage du canal sur une identité de compte Signal spécifique.channels.signal.configWrites: autoriser ou interdire les écritures de configuration initiées par Signal.channels.signal.defaultAccountfacultatif remplace la sélection du compte par défaut lorsqu’il correspond à un ID de compte configuré.
BlueBubbles
BlueBubbles est le chemin iMessage recommandé (adossé à un plugin, configuré souschannels.bluebubbles).
- Chemins de clé principaux couverts ici :
channels.bluebubbles,channels.bluebubbles.dmPolicy. channels.bluebubbles.defaultAccountfacultatif remplace la sélection du compte par défaut lorsqu’il correspond à un ID de compte configuré.- Les entrées
bindings[]de niveau supérieur avectype: "acp"peuvent lier des conversations BlueBubbles à des sessions ACP persistantes. Utilisez un handle BlueBubbles ou une chaîne cible (chat_id:*,chat_guid:*,chat_identifier:*) dansmatch.peer.id. Sémantique partagée des champs : Agents ACP. - La configuration complète du canal BlueBubbles est documentée dans BlueBubbles.
iMessage
OpenClaw lanceimsg rpc (JSON-RPC sur stdio). Aucun daemon ni port requis.
-
channels.imessage.defaultAccountfacultatif remplace la sélection du compte par défaut lorsqu’il correspond à un ID de compte configuré. - Nécessite un accès complet au disque pour la base de données Messages.
-
Préférez les cibles
chat_id:<id>. Utilisezimsg chats --limit 20pour lister les discussions. -
cliPathpeut pointer vers un wrapper SSH ; définissezremoteHost(hostouuser@host) pour la récupération SCP des pièces jointes. -
attachmentRootsetremoteAttachmentRootslimitent les chemins des pièces jointes entrantes (par défaut :/Users/*/Library/Messages/Attachments). -
SCP utilise une vérification stricte de la clé d’hôte ; assurez-vous donc que la clé de l’hôte relais existe déjà dans
~/.ssh/known_hosts. -
channels.imessage.configWrites: autoriser ou interdire les écritures de configuration initiées par iMessage. -
Les entrées
bindings[]de niveau supérieur avectype: "acp"peuvent lier des conversations iMessage à des sessions ACP persistantes. Utilisez un handle normalisé ou une cible de discussion explicite (chat_id:*,chat_guid:*,chat_identifier:*) dansmatch.peer.id. Sémantique partagée des champs : Agents ACP.
Exemple de wrapper SSH iMessage
Exemple de wrapper SSH iMessage
Matrix
Matrix est adossé à un plugin et configuré souschannels.matrix.
- L’authentification par jeton utilise
accessToken; l’authentification par mot de passe utiliseuserId+password. channels.matrix.proxyroute le trafic HTTP Matrix via un proxy HTTP(S) explicite. Les comptes nommés peuvent le remplacer avecchannels.matrix.accounts.<id>.proxy.channels.matrix.network.dangerouslyAllowPrivateNetworkautorise les homeservers privés/internes.proxyet cette activation réseau sont des contrôles indépendants.channels.matrix.defaultAccountsélectionne le compte préféré dans les configurations multi-comptes.channels.matrix.autoJoinvaut par défautoff, donc les salons invités et les nouvelles invitations de type DM sont ignorés jusqu’à ce que vous définissiezautoJoin: "allowlist"avecautoJoinAllowlistouautoJoin: "always".channels.matrix.execApprovals: livraison native Matrix des approbations exec et autorisation des approbateurs.enabled:true,falseou"auto"(par défaut). En mode auto, les approbations exec s’activent lorsque les approbateurs peuvent être résolus depuisapproversoucommands.ownerAllowFrom.approvers: ID utilisateur Matrix (par ex.@owner:example.org) autorisés à approuver les demandes exec.agentFilter: liste d’autorisation facultative des ID d’agent. Omettez pour transférer les approbations pour tous les agents.sessionFilter: motifs facultatifs de clé de session (sous-chaîne ou regex).target: où envoyer les invites d’approbation."dm"(par défaut),"channel"(salon d’origine) ou"both".- Remplacements par compte :
channels.matrix.accounts.<id>.execApprovals.
channels.matrix.dm.sessionScopecontrôle la manière dont les DM Matrix sont regroupés en sessions :per-user(par défaut) partage par pair routé, tandis queper-roomisole chaque salon DM.- Les sondes de statut Matrix et les recherches live dans l’annuaire utilisent la même politique de proxy que le trafic runtime.
- La configuration complète de Matrix, les règles de ciblage et les exemples de configuration sont documentés dans Matrix.
Microsoft Teams
Microsoft Teams est adossé à un plugin et configuré souschannels.msteams.
- Chemins de clé principaux couverts ici :
channels.msteams,channels.msteams.configWrites. - La configuration complète de Teams (identifiants, webhook, politique DM/groupe, remplacements par équipe/canal) est documentée dans Microsoft Teams.
IRC
IRC est adossé à un plugin et configuré souschannels.irc.
- Chemins de clé principaux couverts ici :
channels.irc,channels.irc.dmPolicy,channels.irc.configWrites,channels.irc.nickserv.*. channels.irc.defaultAccountfacultatif remplace la sélection du compte par défaut lorsqu’il correspond à un ID de compte configuré.- La configuration complète du canal IRC (hôte/port/TLS/canaux/listes d’autorisation/contrôle par mention) est documentée dans IRC.
Multi-compte (tous les canaux)
Exécutez plusieurs comptes par canal (chacun avec son propreaccountId) :
defaultest utilisé lorsqueaccountIdest omis (CLI + routage).- Les jetons d’environnement s’appliquent uniquement au compte default.
- Les paramètres de canal de base s’appliquent à tous les comptes sauf remplacement par compte.
- Utilisez
bindings[].match.accountIdpour router chaque compte vers un agent différent. - Si vous ajoutez un compte non par défaut via
openclaw channels add(ou l’onboarding de canal) alors que vous êtes encore sur une configuration de canal mono-compte au niveau supérieur, OpenClaw promeut d’abord les valeurs mono-compte de niveau supérieur à portée de compte dans la map de comptes du canal afin que le compte d’origine continue à fonctionner. La plupart des canaux les déplacent verschannels.<channel>.accounts.default; Matrix peut à la place préserver une cible nommée/par défaut existante correspondante. - Les liaisons existantes uniquement au niveau canal (sans
accountId) continuent de correspondre au compte par défaut ; les liaisons à portée de compte restent facultatives. openclaw doctor --fixrépare également les formes mixtes en déplaçant les valeurs mono-compte de niveau supérieur à portée de compte vers le compte promu choisi pour ce canal. La plupart des canaux utilisentaccounts.default; Matrix peut à la place préserver une cible nommée/par défaut existante correspondante.
Autres canaux de plugin
De nombreux canaux de plugin sont configurés commechannels.<id> et documentés dans leurs pages de canal dédiées (par exemple Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat et Twitch).
Voir l’index complet des canaux : Channels.
Contrôle par mention dans les discussions de groupe
Les messages de groupe exigent par défaut une mention requise (mention de métadonnées ou motifs regex sûrs). Cela s’applique aux discussions de groupe WhatsApp, Telegram, Discord, Google Chat et iMessage. Types de mention :- Mentions de métadonnées : @mentions natives de la plateforme. Ignorées en mode discussion avec soi-même sur WhatsApp.
- Motifs texte : motifs regex sûrs dans
agents.list[].groupChat.mentionPatterns. Les motifs invalides et les répétitions imbriquées non sûres sont ignorés. - Le contrôle par mention n’est appliqué que lorsque la détection est possible (mentions natives ou au moins un motif).
messages.groupChat.historyLimit définit la valeur par défaut globale. Les canaux peuvent la remplacer avec channels.<channel>.historyLimit (ou par compte). Définissez 0 pour désactiver.
Limites d’historique DM
telegram, whatsapp, discord, slack, signal, imessage, msteams.
Mode discussion avec soi-même
Incluez votre propre numéro dansallowFrom pour activer le mode discussion avec soi-même (ignore les @mentions natives, répond uniquement aux motifs texte) :
Commandes (gestion des commandes de chat)
Détails des commandes
Détails des commandes
- Ce bloc configure les surfaces de commandes. Pour le catalogue actuel des commandes intégrées + groupées, voir Slash Commands.
- Cette page est une référence de clés de configuration, pas le catalogue complet des commandes. Les commandes appartenant aux canaux/plugins comme QQ Bot
/bot-ping/bot-help/bot-logs, LINE/card, device-pair/pair, memory/dreaming, phone-control/phoneet Talk/voicesont documentées dans leurs pages de canal/plugin ainsi que dans Slash Commands. - Les commandes texte doivent être des messages autonomes avec un
/initial. native: "auto"active les commandes natives pour Discord/Telegram, laisse Slack désactivé.nativeSkills: "auto"active les commandes natives de Skills pour Discord/Telegram, laisse Slack désactivé.- Remplacement par canal :
channels.discord.commands.native(booléen ou"auto").falseefface les commandes précédemment enregistrées. - Remplacez l’enregistrement natif des Skills par canal avec
channels.<provider>.commands.nativeSkills. channels.telegram.customCommandsajoute des entrées supplémentaires au menu du bot Telegram.bash: trueactive! <cmd>pour le shell hôte. Nécessitetools.elevated.enabledet un expéditeur présent danstools.elevated.allowFrom.<channel>.config: trueactive/config(lecture/écriture deopenclaw.json). Pour les clients Gatewaychat.send, les écritures persistantes/config set|unsetexigent aussioperator.admin; la lecture seule/config showreste disponible pour les clients opérateur normaux avec portée d’écriture.mcp: trueactive/mcppour la configuration des serveurs MCP gérés par OpenClaw sousmcp.servers.plugins: trueactive/pluginspour la découverte de plugins, l’installation et les contrôles d’activation/désactivation.channels.<provider>.configWritescontrôle les mutations de configuration par canal (par défaut : true).- Pour les canaux multi-comptes,
channels.<provider>.accounts.<id>.configWritescontrôle aussi les écritures ciblant ce compte (par exemple/allowlist --config --account <id>ou/config set channels.<provider>.accounts.<id>...). restart: falsedésactive/restartet les actions de l’outil gateway restart. Valeur par défaut :true.ownerAllowFromest la liste d’autorisation explicite des propriétaires pour les commandes/outils réservés au propriétaire. Elle est distincte deallowFrom.ownerDisplay: "hash"hache les ID de propriétaire dans le prompt système. DéfinissezownerDisplaySecretpour contrôler le hachage.allowFromest par fournisseur. Lorsqu’il est défini, c’est la seule source d’autorisation (les listes d’autorisation/jumelage de canal etuseAccessGroupssont ignorés).useAccessGroups: falsepermet aux commandes de contourner les politiques de groupes d’accès lorsqueallowFromn’est pas défini.- Carte des documents de commande :
Associé
- Référence de configuration — clés de niveau supérieur
- Configuration — agents
- Vue d’ensemble des canaux