配置 — 共享频道策略
channels.defaults 和 channels.modelByChannel 下的键适用于所有渠道,此外还有共享的多账户模式。
DM 与群组访问¶
所有渠道都支持 DM 策略和群组策略:
| DM 策略 | 行为 |
|---|---|
pairing(默认) |
未知发件人会获得一次性配对码;所有者必须批准 |
allowlist |
仅允许 allowFrom 中(或已配对允许存储中)的发件人 |
open |
允许所有入站 DM(需要 allowFrom: ["*"]) |
disabled |
忽略所有入站 DM |
| 群组策略 | 行为 |
|---|---|
allowlist(默认) |
仅允许与已配置允许列表匹配的群组 |
open |
绕过群组允许列表(提及门控仍然生效) |
disabled |
阻止所有群组/房间消息 |
Note
channels.defaults.groupPolicy 仅在解析后的渠道策略未设置时生效。在 按渠道页面 上列出的渠道模式默认将根策略设为 allowlist;请显式设置 channels.<channel>.groupPolicy 以选择其他策略。
配对码在 1 小时后过期。待处理的配对请求上限为每账户 3 个(按渠道和账户 ID 限定)。
如果某个提供程序块完全缺失(缺少 channels.<provider>),运行时群组策略将回退为 allowlist(故障关闭),并给出启动警告。
渠道模型覆盖¶
使用 channels.modelByChannel 将特定渠道 ID 或私信对端固定到某个模型。值可以接受 provider/model 或已配置的模型别名。渠道映射仅在会话尚未有活动模型覆盖(例如通过 /model 设置的模型)时生效。更改会刷新已加载的渠道运行时,无需重启 Gateway;手动停止的账户将保持停止状态。
对于群组/线程对话,键是特定于渠道的群组 ID、话题 ID 或渠道名称。对于私信(DM)对话,键是源自渠道发送者身份的对端标识符(nativeDirectUserId、origin.from、origin.to、OriginatingTo、From 或 SenderId)。具体的键形式取决于渠道:
| 渠道 | DM 键形式 | 示例 |
|---|---|---|
| Discord | 原始用户 ID | 987654321 |
| Feishu | feishu:ou_... |
feishu:ou_a8b6cab7e945387de5f253775d9b4d85 |
| Matrix | Matrix 用户 ID | @user:matrix.org |
| Slack | user:U... |
user:U12345 |
| Telegram | 原始用户 ID | 123456789 |
| 电话号码或 JID | 15551234567 |
{
channels: {
modelByChannel: {
discord: {
"123456789012345678": "anthropic/claude-opus-4-6",
},
slack: {
C1234567890: "openai/gpt-6-astra",
"user:U12345": "openai/gpt-5.4-mini",
},
telegram: {
"-1001234567890": "openai/gpt-5.4-mini",
"-1001234567890:topic:99": "anthropic/claude-sonnet-4-6",
"123456789": "openai/gpt-4.1",
},
},
},
}
特定于 DM 的键仅在私信对话中匹配;它们不影响群组/线程路由。
渠道默认设置与心跳¶
使用 channels.defaults 在不同提供程序之间共享群组策略、隐式提及和心跳行为。更改会刷新已加载的渠道运行时,无需重启 Gateway;手动停止的账户将保持停止状态:
{
channels: {
defaults: {
groupPolicy: "allowlist", // open | allowlist | disabled
contextVisibility: "all", // all | allowlist | allowlist_quote
implicitMentions: {
replyToBot: true,
quotedBot: true,
threadParticipation: true,
},
heartbeatVisibility: {
showOk: false,
showAlerts: true,
useIndicator: true,
},
},
},
}
channels.defaults.groupPolicy:当提供程序级别的groupPolicy未设置时的回退群组策略。channels.defaults.contextVisibility:所有渠道的默认补充上下文可见性模式。取值:all(默认,包含所有引用/线程/历史上下文)、allowlist(仅包含来自允许列表发送者的上下文)、allowlist_quote(与allowlist相同,但保留显式引用/回复上下文)。按渠道覆盖:channels.<channel>.contextVisibility。channels.defaults.implicitMentions:控制哪些受支持的入站事实被计为提及。replyToBot、quotedBot和threadParticipation均默认为true,以保持当前行为。这些名称是正向的:将某个标志设为false即可停止该事实绕过提及门控。在内置渠道中,Mattermost、Slack 和 Tlon 会读取此策略;在这些渠道上,您还可以使用channels.<channel>.implicitMentions按渠道覆盖,或使用channels.<channel>.accounts.<id>.implicitMentions按账户覆盖,并且每个标志独立按 账户 -> 渠道 -> 默认值 的顺序解析。其他会生成隐式提及事实的内置渠道目前不读取这些设置,因此在那些渠道上,这些事实始终被计为提及,覆盖不会产生任何效果。原生显式提及始终被允许,并且当渠道不生成该事实时,某个标志不会产生任何效果。请参阅 提及门控 了解当前的生产者矩阵。这些设置不会改变出站回复/线程模式或授权命令处理。channels.defaults.heartbeatVisibility.showOk:当监视器无内容可报告时,发送旧式HEARTBEAT_OK确认(默认false)。channels.defaults.heartbeatVisibility.showAlerts:发送面向用户的心跳监视器警报(默认true)。channels.defaults.heartbeatVisibility.useIndicator:发出心跳状态指示器事件(默认true)。
多账户(所有频道)¶
每个频道可运行多个账户(每个账户都有自己的 accountId):
此模式适用于支持 accounts 的频道。Microsoft Teams 仅使用频道级别的 channels.msteams 配置。
{
channels: {
telegram: {
accounts: {
default: {
name: "Primary bot",
botToken: "123456:ABC...",
},
alerts: {
name: "Alerts bot",
botToken: "987654:XYZ...",
},
},
},
},
}
- 当省略
accountId时,将使用default(CLI + 路由)。 - 环境变量令牌仅适用于默认账户。
- 基础频道设置适用于所有账户,除非按账户单独覆盖。
- 对于 Discord、Google Chat、iMessage、Signal、Slack、Telegram 和 WhatsApp,省略账户的
groupPolicy或dmPolicy时,将继承频道策略。显式设置的账户值优先,包括allowlist或pairing。若未配置适用的策略,群组访问保持allowlist,私信使用pairing。 - WhatsApp 在回退到频道根设置之前,还会从
accounts.default继承共享设置;Google Chat 在根设置之下使用共享的accounts.default设置。有关这些例外情况和集合合并规则,请参阅各频道页面。 - 使用
bindings[].match.accountId将每个账户路由到不同的智能体。 - 如果你在仍使用单账户顶层频道配置时,通过
openclaw channels add(或频道引导流程)添加非默认账户,OpenClaw 会先将账户作用域的顶层单账户值提升到频道账户映射中,以便原有账户继续正常工作。大多数频道会将这些值移入channels.<channel>.accounts.default;Matrix 则可以改为保留已有的匹配命名/默认目标。 - 现有的仅频道绑定(不含
accountId)继续匹配默认账户;账户作用域的绑定仍为可选。 openclaw doctor --fix还会通过将账户作用域的顶层单账户值移入为该频道选择的提升账户,来修复混合形态。大多数频道使用accounts.default;Matrix 则可以改为保留已有的匹配命名/默认目标。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw