channels.* 下的每个渠道配置键。涵盖私信和群组访问、多账号设置、提及门控,以及 Slack、Discord、Telegram、WhatsApp、Matrix、iMessage 和其他内置渠道插件的每个渠道键。
对于智能体、工具、Gateway 网关运行时以及其他顶层键,请参阅
配置参考。
渠道
当某个渠道的配置节存在时,该渠道会自动启动(除非设置了enabled: false)。
私信和群组访问
所有渠道都支持私信策略和群组策略:| 私信策略 | 行为 |
|---|---|
pairing(默认) | 未知发送者会收到一次性配对码;所有者必须批准 |
allowlist | 仅允许 allowFrom 中的发送者(或已配对的允许存储) |
open | 允许所有入站私信(需要 allowFrom: ["*"]) |
disabled | 忽略所有入站私信 |
| 群组策略 | 行为 |
|---|---|
allowlist(默认) | 仅允许匹配已配置允许列表的群组 |
open | 绕过群组允许列表(提及门控仍然适用) |
disabled | 阻止所有群组/房间消息 |
channels.defaults.groupPolicy 在提供商的 groupPolicy 未设置时设为默认值。
配对码会在 1 小时后过期。待处理的私信配对请求每个渠道最多为 3 个。
如果提供商配置块完全缺失(即不存在 channels.<provider>),运行时群组策略会回退为 allowlist(默认拒绝),并在启动时发出警告。渠道模型覆盖
使用channels.modelByChannel 将特定渠道 ID 固定到某个模型。值接受 provider/model 或已配置的模型别名。当会话尚未有模型覆盖时(例如通过 /model 设置),就会应用渠道映射。
渠道默认值和心跳
使用channels.defaults 为各提供商共享群组策略和心跳行为:
channels.defaults.groupPolicy:当提供商级别的groupPolicy未设置时使用的回退群组策略。channels.defaults.contextVisibility:所有渠道的默认补充上下文可见性模式。可选值:all(默认,包含所有引用/线程/历史上下文)、allowlist(仅包含允许列表发送者的上下文)、allowlist_quote(与 allowlist 相同,但保留显式引用/回复上下文)。每个渠道的覆盖项:channels.<channel>.contextVisibility。channels.defaults.heartbeat.showOk:在心跳输出中包含健康渠道状态。channels.defaults.heartbeat.showAlerts:在心跳输出中包含降级/错误状态。channels.defaults.heartbeat.useIndicator:将心跳输出渲染为紧凑的指示器样式。
多账号 WhatsApp
多账号 WhatsApp
- 出站命令默认使用账号
default(如果存在);否则使用第一个已配置的账号 id(排序后)。 - 可选的
channels.whatsapp.defaultAccount会在其匹配某个已配置账号 id 时,覆盖上述默认账号选择。 - 旧版单账号 Baileys 认证目录会由
openclaw doctor迁移到whatsapp/default。 - 每个账号的覆盖项:
channels.whatsapp.accounts.<id>.sendReadReceipts、channels.whatsapp.accounts.<id>.dmPolicy、channels.whatsapp.accounts.<id>.allowFrom。
Telegram
- Bot token:
channels.telegram.botToken或channels.telegram.tokenFile(仅允许常规文件;拒绝符号链接),默认账号可回退到TELEGRAM_BOT_TOKEN。 - 可选的
channels.telegram.defaultAccount会在其匹配某个已配置账号 id 时,覆盖默认账号选择。 - 在多账号设置中(2 个或更多账号 id),请设置显式默认值(
channels.telegram.defaultAccount或channels.telegram.accounts.default)以避免回退路由;如果缺失或无效,openclaw doctor会发出警告。 configWrites: false会阻止由 Telegram 发起的配置写入(supergroup ID 迁移、/config set|unset)。- 顶层
bindings[]中type: "acp"的条目可为论坛话题配置持久化 ACP 绑定(在match.peer.id中使用规范格式chatId:topic:topicId)。字段语义与 ACP Agents 共享。 - Telegram 流式预览使用
sendMessage+editMessageText(在私聊和群聊中都可用)。 - 重试策略:参见 重试策略。
Discord
- Token:
channels.discord.token,默认账号可回退到DISCORD_BOT_TOKEN。 - 直接出站调用如果提供了显式的 Discord
token,该次调用会使用该 token;账号重试/策略设置仍然来自活动运行时快照中选定的账号。 - 可选的
channels.discord.defaultAccount会在其匹配某个已配置账号 id 时,覆盖默认账号选择。 - 使用
user:<id>(私信)或channel:<id>(服务器渠道)作为投递目标;不接受裸数字 ID。 - 服务器 slug 为小写,空格替换为
-;渠道键使用 slug 化名称(不带#)。优先使用服务器 ID。 - 默认会忽略由机器人编写的消息。
allowBots: true会启用它们;使用allowBots: "mentions"则仅接受提及机器人的机器人消息(机器人自己的消息仍会被过滤)。 channels.discord.guilds.<id>.ignoreOtherMentions(以及渠道级覆盖)会丢弃提及了其他用户或角色但未提及机器人的消息(不包括 @everyone/@here)。maxLinesPerMessage(默认 17)会拆分过高的消息,即使其长度未超过 2000 个字符。channels.discord.threadBindings控制 Discord 线程绑定路由:enabled:Discord 对线程绑定会话功能的覆盖(/focus、/unfocus、/agents、/session idle、/session max-age,以及绑定投递/路由)idleHours:Discord 对不活跃时自动取消聚焦的小时数覆盖(0表示禁用)maxAgeHours:Discord 对硬性最大存续时长(小时)的覆盖(0表示禁用)spawnSubagentSessions:为sessions_spawn({ thread: true })自动创建/绑定线程的显式启用开关
- 顶层
bindings[]中type: "acp"的条目可为渠道和线程配置持久化 ACP 绑定(在match.peer.id中使用渠道/线程 id)。字段语义与 ACP Agents 共享。 channels.discord.ui.components.accentColor为 Discord components v2 容器设置强调色。channels.discord.voice启用 Discord 语音渠道对话,以及可选的自动加入 + LLM + TTS 覆盖。channels.discord.voice.model可选地覆盖用于 Discord 语音渠道响应的 LLM 模型。channels.discord.voice.daveEncryption和channels.discord.voice.decryptionFailureTolerance会透传给@discordjs/voice的 DAVE 选项(默认分别为true和24)。- OpenClaw 还会在重复解密失败后,通过离开/重新加入语音会话来尝试恢复语音接收。
channels.discord.streaming是规范的流式模式键。旧版streamMode和布尔值streaming会自动迁移。channels.discord.autoPresence将运行时可用性映射到机器人在线状态(healthy => online,degraded => idle,exhausted => dnd),并允许可选的状态文本覆盖。channels.discord.dangerouslyAllowNameMatching会重新启用可变名称/tag 匹配(破窗兼容模式)。channels.discord.execApprovals:Discord 原生 exec 审批投递和审批人授权。enabled:true、false或"auto"(默认)。在自动模式下,当可以从approvers或commands.ownerAllowFrom解析出审批人时,exec 审批会激活。approvers:允许审批 exec 请求的 Discord 用户 ID。省略时回退到commands.ownerAllowFrom。agentFilter:可选的智能体 ID 允许列表。省略则会为所有智能体转发审批。sessionFilter:可选的会话键模式(子串或正则表达式)。target:发送审批提示的位置。"dm"(默认)发送到审批人的私信,"channel"发送到原始渠道,"both"同时发送到两者。当目标包含"channel"时,按钮仅可由已解析的审批人使用。cleanupAfterResolve:为true时,在审批、拒绝或超时后删除审批私信。
off(无)、own(机器人的消息,默认)、all(所有消息)、allowlist(来自 guilds.<id>.users 的所有消息)。
Google Chat
- 服务账号 JSON:可内联(
serviceAccount)或基于文件(serviceAccountFile)。 - 也支持服务账号 SecretRef(
serviceAccountRef)。 - 环境变量回退:
GOOGLE_CHAT_SERVICE_ACCOUNT或GOOGLE_CHAT_SERVICE_ACCOUNT_FILE。 - 使用
spaces/<spaceId>或users/<userId>作为投递目标。 channels.googlechat.dangerouslyAllowNameMatching会重新启用可变电子邮件主体匹配(破窗兼容模式)。
Slack
- Socket mode 需要同时提供
botToken和appToken(默认账号的环境变量回退为SLACK_BOT_TOKEN+SLACK_APP_TOKEN)。 - HTTP mode 需要
botToken加上signingSecret(位于根级或每个账号级)。 botToken、appToken、signingSecret和userToken接受纯文本 字符串或 SecretRef 对象。- Slack 账号快照会暴露每个凭证的来源/状态字段,例如
botTokenSource、botTokenStatus、appTokenStatus,以及在 HTTP mode 下的signingSecretStatus。configured_unavailable表示该账号通过 SecretRef 进行配置,但当前命令/运行时路径无法解析该 secret 值。 configWrites: false会阻止由 Slack 发起的配置写入。- 可选的
channels.slack.defaultAccount会在其匹配某个已配置账号 id 时覆盖默认账号选择。 channels.slack.streaming.mode是规范的 Slack 流式模式键。channels.slack.streaming.nativeTransport控制 Slack 的原生流式传输。旧版streamMode、布尔值streaming和nativeStreaming会自动迁移。- 使用
user:<id>(私信)或channel:<id>作为投递目标。
off、own(默认)、all、allowlist(来自 reactionAllowlist)。
线程会话隔离: thread.historyScope 为每线程(默认)或整个渠道共享。thread.inheritParent 会将父渠道的记录复制到新线程中。
- Slack 原生流式传输加上 Slack 助手样式的“正在输入…”线程状态,需要以回复线程为目标。顶层私信默认不在线程中,因此会使用
typingReaction或普通投递,而不是线程样式预览。 typingReaction会在回复运行期间为入站 Slack 消息添加一个临时反应,并在完成后移除。请使用 Slack emoji 简码,例如"hourglass_flowing_sand"。channels.slack.execApprovals:Slack 原生 exec 审批投递和审批人授权。与 Discord 使用相同 schema:enabled(true/false/"auto")、approvers(Slack 用户 ID)、agentFilter、sessionFilter和target("dm"、"channel"或"both")。
| 操作组 | 默认值 | 说明 |
|---|---|---|
| reactions | 已启用 | 添加反应 + 列出反应 |
| messages | 已启用 | 读取/发送/编辑/删除 |
| pins | 已启用 | 固定/取消固定/列出 |
| memberInfo | 已启用 | 成员信息 |
| emojiList | 已启用 | 自定义 emoji 列表 |
Mattermost
Mattermost 作为插件提供:openclaw plugins install @openclaw/mattermost。
oncall(在 @ 提及时响应,默认)、onmessage(每条消息)、onchar(以触发前缀开头的消息)。
当启用 Mattermost 原生命令时:
commands.callbackPath必须是路径(例如/api/channels/mattermost/command),不能是完整 URL。commands.callbackUrl必须解析到 OpenClaw Gateway 网关端点,并且 Mattermost 服务器能够访问。- 原生斜杠命令回调使用 Mattermost 在斜杠命令注册期间返回的每命令 token
进行认证。如果注册失败或没有激活任何命令,OpenClaw 会拒绝回调,并返回
Unauthorized: invalid command token.。 - 对于私有/tailnet/内部回调主机,Mattermost 可能要求
ServiceSettings.AllowedUntrustedInternalConnections包含回调主机/域名。 请使用主机/域名值,而不是完整 URL。 channels.mattermost.configWrites:允许或拒绝由 Mattermost 发起的配置写入。channels.mattermost.requireMention:在渠道中回复前要求@mention。channels.mattermost.groups.<channelId>.requireMention:每个渠道的提及门控覆盖("*"表示默认值)。- 可选的
channels.mattermost.defaultAccount会在其匹配某个已配置账号 id 时,覆盖默认账号选择。
Signal
off、own(默认)、all、allowlist(来自 reactionAllowlist)。
channels.signal.account:将渠道启动固定到特定的 Signal 账号标识。channels.signal.configWrites:允许或拒绝由 Signal 发起的配置写入。- 可选的
channels.signal.defaultAccount会在其匹配某个已配置账号 id 时,覆盖默认账号选择。
BlueBubbles
BlueBubbles 是推荐的 iMessage 路径(由插件支持,配置位于channels.bluebubbles)。
- 此处涵盖的核心键路径:
channels.bluebubbles、channels.bluebubbles.dmPolicy。 - 可选的
channels.bluebubbles.defaultAccount会在其匹配某个已配置账号 id 时,覆盖默认账号选择。 - 顶层
bindings[]中type: "acp"的条目可以将 BlueBubbles 对话绑定到持久化 ACP 会话。在match.peer.id中使用 BlueBubbles handle 或目标字符串(chat_id:*、chat_guid:*、chat_identifier:*)。共享字段语义: ACP Agents。 - 完整的 BlueBubbles 渠道配置记录在 BlueBubbles 中。
iMessage
OpenClaw 会启动imsg rpc(基于 stdio 的 JSON-RPC)。不需要守护进程或端口。
-
可选的
channels.imessage.defaultAccount会在其匹配某个已配置账号 id 时,覆盖默认账号选择。 - 需要对 Messages 数据库授予 Full Disk Access。
-
优先使用
chat_id:<id>目标。使用imsg chats --limit 20列出聊天。 -
cliPath可以指向 SSH 包装器;设置remoteHost(host或user@host)以便通过 SCP 获取附件。 -
attachmentRoots和remoteAttachmentRoots用于限制入站附件路径(默认:/Users/*/Library/Messages/Attachments)。 -
SCP 使用严格的主机密钥检查,因此请确保中继主机密钥已存在于
~/.ssh/known_hosts中。 -
channels.imessage.configWrites:允许或拒绝由 iMessage 发起的配置写入。 -
顶层
bindings[]中type: "acp"的条目可以将 iMessage 对话绑定到持久化 ACP 会话。在match.peer.id中使用规范化 handle 或显式聊天目标(chat_id:*、chat_guid:*、chat_identifier:*)。共享字段语义: ACP Agents。
iMessage SSH 包装器示例
iMessage SSH 包装器示例
Matrix
Matrix 由插件支持,配置位于channels.matrix。
- Token 认证使用
accessToken;密码认证使用userId+password。 channels.matrix.proxy通过显式 HTTP(S) 代理路由 Matrix HTTP 流量。命名账号可以通过channels.matrix.accounts.<id>.proxy覆盖它。channels.matrix.network.dangerouslyAllowPrivateNetwork允许私有/内部 homeserver。proxy和这个网络显式启用项是彼此独立的控制项。channels.matrix.defaultAccount在多账号设置中选择首选账号。channels.matrix.autoJoin默认为off,因此受邀房间和新的私信式邀请会被忽略,直到你设置autoJoin: "allowlist"并配合autoJoinAllowlist,或设置autoJoin: "always"。channels.matrix.execApprovals:Matrix 原生 exec 审批投递和审批人授权。enabled:true、false或"auto"(默认)。在自动模式下,当可以从approvers或commands.ownerAllowFrom解析出审批人时,exec 审批会激活。approvers:允许审批 exec 请求的 Matrix 用户 ID(例如@owner:example.org)。agentFilter:可选的智能体 ID 允许列表。省略则会为所有智能体转发审批。sessionFilter:可选的会话键模式(子串或正则表达式)。target:发送审批提示的位置。"dm"(默认)、"channel"(来源房间)或"both"。- 每账号覆盖项:
channels.matrix.accounts.<id>.execApprovals。
channels.matrix.dm.sessionScope控制 Matrix 私信如何归并到会话中:per-user(默认)按路由对端共享,而per-room会隔离每个私信房间。- Matrix 状态探测和实时目录查找使用与运行时流量相同的代理策略。
- 完整的 Matrix 配置、目标规则和设置示例记录在 Matrix 中。
Microsoft Teams
Microsoft Teams 由插件支持,配置位于channels.msteams。
- 此处涵盖的核心键路径:
channels.msteams、channels.msteams.configWrites。 - 完整的 Teams 配置(凭证、webhook、私信/群组策略、每团队/每渠道覆盖)记录在 Microsoft Teams 中。
IRC
IRC 由插件支持,配置位于channels.irc。
- 此处涵盖的核心键路径:
channels.irc、channels.irc.dmPolicy、channels.irc.configWrites、channels.irc.nickserv.*。 - 可选的
channels.irc.defaultAccount会在其匹配某个已配置账号 id 时,覆盖默认账号选择。 - 完整的 IRC 渠道配置(host/port/TLS/channels/allowlists/mention gating)记录在 IRC 中。
多账号(所有渠道)
每个渠道可运行多个账号(每个账号都有自己的accountId):
- 当省略
accountId时,使用default(CLI + 路由)。 - 环境变量 token 仅适用于 default 账号。
- 基础渠道设置会应用到所有账号,除非在每账号级别被覆盖。
- 使用
bindings[].match.accountId将每个账号路由到不同的智能体。 - 如果你通过
openclaw channels add(或渠道新手引导)添加非默认账号,而当前仍使用单账号顶层渠道配置,OpenClaw 会先将带账号作用域的顶层单账号值提升到该渠道的账号映射中,以便原始账号继续工作。大多数渠道会将其移到channels.<channel>.accounts.default;Matrix 则可以保留现有匹配的命名/default 目标。 - 现有的仅渠道绑定(无
accountId)将继续匹配默认账号;带账号作用域的绑定仍然是可选的。 openclaw doctor --fix也会通过将带账号作用域的顶层单账号值移动到该渠道所选的提升账号中来修复混合形状。大多数渠道使用accounts.default;Matrix 则可以保留现有匹配的命名/default 目标。
其他插件渠道
许多插件渠道都配置为channels.<id>,并在各自专属的渠道页面中有说明(例如 Feishu、Matrix、LINE、Nostr、Zalo、Nextcloud Talk、Synology Chat 和 Twitch)。
参见完整渠道索引:Channels。
群聊提及门控
群组消息默认需要提及(元数据提及或安全正则表达式模式)。适用于 WhatsApp、Telegram、Discord、Google Chat 和 iMessage 群聊。 提及类型:- 元数据提及:原生平台 @ 提及。在 WhatsApp self-chat 模式下会被忽略。
- 文本模式:
agents.list[].groupChat.mentionPatterns中的安全正则表达式模式。无效模式和不安全的嵌套重复会被忽略。 - 仅在能够检测提及的情况下(原生提及或至少有一个模式)才会强制执行提及门控。
messages.groupChat.historyLimit 设置全局默认值。渠道可通过 channels.<channel>.historyLimit(或每账号设置)覆盖。设置为 0 可禁用。
私信历史限制
telegram、whatsapp、discord、slack、signal、imessage、msteams。
self-chat 模式
将你自己的号码包含在allowFrom 中即可启用 self-chat 模式(忽略原生 @ 提及,仅响应文本模式):
Commands(聊天命令处理)
命令详情
命令详情
- 此配置块用于配置命令入口。关于当前内置 + 内置捆绑的命令目录,请参见 Slash Commands。
- 本页是配置键参考,不是完整的命令目录。像 QQ Bot
/bot-ping/bot-help/bot-logs、LINE/card、设备配对/pair、内存/dreaming、手机控制/phone和 Talk/voice这类由渠道/插件拥有的命令,记录在其各自的渠道/插件页面以及 Slash Commands 中。 - 文本命令必须是带有前导
/的独立消息。 native: "auto"会为 Discord/Telegram 开启原生命令,对 Slack 保持关闭。nativeSkills: "auto"会为 Discord/Telegram 开启原生 Skills 命令,对 Slack 保持关闭。- 每个渠道单独覆盖:
channels.discord.commands.native(布尔值或"auto")。false会清除之前已注册的命令。 - 使用
channels.<provider>.commands.nativeSkills为每个渠道覆盖原生 Skills 注册。 channels.telegram.customCommands会添加额外的 Telegram 机器人菜单项。bash: true为主机 shell 启用! <cmd>。需要tools.elevated.enabled,并且发送者位于tools.elevated.allowFrom.<channel>中。config: true启用/config(读取/写入openclaw.json)。对于 Gateway 网关chat.send客户端,持久化/config set|unset写入还需要operator.admin;只读的/config show对普通写作用域 operator 客户端仍然可用。mcp: true会为mcp.servers下由 OpenClaw 管理的 MCP 服务器配置启用/mcp。plugins: true会为插件发现、安装和启用/禁用控制启用/plugins。channels.<provider>.configWrites控制每个渠道的配置变更权限(默认:true)。- 对于多账号渠道,
channels.<provider>.accounts.<id>.configWrites也会控制以该账号为目标的写入(例如/allowlist --config --account <id>或/config set channels.<provider>.accounts.<id>...)。 restart: false会禁用/restart和 Gateway 网关 restart 工具操作。默认值:true。ownerAllowFrom是 owner 专用命令/工具的显式 owner 允许列表。它与allowFrom分开。ownerDisplay: "hash"会在系统提示中对 owner id 做哈希。设置ownerDisplaySecret可控制哈希。allowFrom是按提供商区分的。设置后,它将成为唯一的授权来源(渠道允许列表/配对以及useAccessGroups都会被忽略)。useAccessGroups: false允许命令在未设置allowFrom时绕过访问组策略。- 命令文档映射: