配置 — 工作场所聊天频道
channels.* 配置键用于工作场所聊天渠道:Google Chat、Slack、Mattermost 和 Microsoft Teams。
Google Chat¶
{
channels: {
googlechat: {
enabled: true,
serviceAccountFile: "/path/to/service-account.json",
audienceType: "app-url", // app-url | project-number
audience: "https://gateway.example.com/googlechat",
webhookPath: "/googlechat",
botUser: "users/1234567890",
dmPolicy: "pairing",
allowFrom: ["users/1234567890"],
groupPolicy: "allowlist",
groups: {
"spaces/AAAA": { enabled: true, requireMention: true },
},
typingIndicator: "message",
mediaMaxMb: 20,
},
},
}
- 服务账号 JSON:内联(
serviceAccount)或基于文件(serviceAccountFile)。 serviceAccount直接接受 SecretRef。- 环境变量回退:
GOOGLE_CHAT_SERVICE_ACCOUNT或GOOGLE_CHAT_SERVICE_ACCOUNT_FILE(仅限默认账号)。 - 投递目标使用
spaces/<spaceId>或users/<userId>。 channels.googlechat.dangerouslyAllowNameMatching重新启用可变电子邮件主体匹配(紧急兼容模式)。
Slack¶
{
channels: {
slack: {
enabled: true,
botToken: "xoxb-...",
appToken: "xapp-...",
dmPolicy: "pairing",
allowFrom: ["U123", "U456", "*"],
dm: { enabled: true, groupEnabled: false, groupChannels: ["G123"] },
channels: {
C123: { enabled: true, requireMention: true },
C456: {
enabled: true,
requireMention: true,
allowBots: false,
users: ["U123"],
skills: ["docs"],
systemPrompt: "Short answers only.",
},
},
historyLimit: 50,
allowBots: true,
reactionNotifications: "own",
reactionAllowlist: ["U123"],
replyToMode: "off", // off | first | all | batched
thread: {
historyScope: "thread", // thread | channel
inheritParent: false,
initialHistoryLimit: 20,
},
actions: {
reactions: true,
messages: true,
pins: true,
memberInfo: true,
emojiList: true,
},
slashCommand: {
enabled: true,
name: "openclaw",
sessionPrefix: "slack:slash",
ephemeral: true,
},
typingReaction: "hourglass_flowing_sand",
unfurlLinks: false,
unfurlMedia: false,
textChunkLimit: 4000,
streaming: {
mode: "partial", // off | partial | block | progress
chunkMode: "length", // length | newline
nativeTransport: true, // use Slack native streaming API when mode=partial
},
mediaMaxMb: 20,
execApprovals: {
enabled: "auto", // true | false | "auto"
approvers: ["U123"],
agentFilter: ["default"],
sessionFilter: ["slack:"],
target: "dm", // dm | channel | both
},
},
},
}
- 套接字模式 需要同时提供
botToken和appToken(默认账号的环境变量回退为SLACK_BOT_TOKEN+SLACK_APP_TOKEN)。 - HTTP 模式 需要
botToken以及signingSecret(位于根级别或按账号配置)。 allowBots默认为true,控制其他机器人是否可以触发回合。显式设置为false仍表示选择退出;房间设置会覆盖账号和根设置。常规访问、提及、机器人房间授权、自我消息过滤以及机器人循环保护仍然适用。机器人创建的历史记录和线程上下文仍独立于该标志受上下文可见性规则约束。参见Slack 访问控制。channels.slack.joinIntro默认为true。当机器人加入受允许的频道时,它会使用频道名称、用途或主题以及可用的最近消息发布一条介绍。将此选项设置为false可禁用介绍,或使用channels.slack.accounts.<accountId>.joinIntro进行特定账号覆盖。每个频道最多读取 100 条最近消息,且每个频道仅读取一次;参见群组加入介绍。介绍绝不会在私信中运行。- Slack 会自动通过 bot token 的
auth.test检测 Enterprise Grid 全组织安装;无需安装模式设置。Enterprise 私信支持disabled、open、allowlist和工作区范围的pairing。频道策略要求team:<team-id>:channel:<channel-id>。用户策略接受全组织稳定用户 ID,或用于工作区范围的team:<team-id>:user:<user-id>。可变名称和不受支持的频道前缀会导致启动失败。提及模式频道作用域和静态路由绑定对等方使用工作区限定的 Slack 目标。直接 Socket Mode 或 HTTP 消息、提及、工作区限定操作、延迟投递、主动发送、支持的事件监听器和交互、静态路由绑定,以及来自工作区限定回合的 Slack 原生审批均受支持。Relay、频道 ID 变更事件、App Home、Agent 和 Assistant 生命周期事件、已配置的 ACP 绑定以及运行时当前会话绑定仍不可用。参见Enterprise Grid 全组织安装了解最小权限清单、设置流程和完整限制。 - 已弃用的
enterpriseOrgInstall键会被openclaw doctor --fix在 Slack 根级别和账号级别移除。 botToken、appToken、signingSecret和userToken接受明文字符串或 SecretRef 对象。- Slack 账号快照会暴露按凭据划分的来源/状态字段,例如
botTokenSource、botTokenStatus、userTokenSource、userTokenStatus、appTokenStatus,以及在 HTTP 模式下的signingSecretStatus。configured_unavailable表示账号通过 SecretRef 配置,但当前命令/运行时路径无法解析密钥值。 configWrites: false会阻止 Slack 发起的配置写入。- 可选的
channels.slack.defaultAccount在匹配已配置的账号 ID 时覆盖默认账号选择。 dm.groupEnabled和dm.groupChannels仅过滤应用已是成员的 Slack 群组私信(MPDM)。它们无法让应用看到其从未加入的现有群组私信;请将群组私信转换为私有频道并邀请应用,或让应用使用conversations.open打开新的 MPDM。参见群组私信(MPDM)和机器人。channels.slack.streaming.mode是规范的 Slack 流模式键(默认"progress")。channels.slack.streaming.nativeTransport控制 Slack 的原生流传输(默认true)。旧版streamMode、布尔值streaming、chunkMode、blockStreaming、blockStreamingCoalesce和nativeStreaming值在运行时不再读取;运行openclaw doctor --fix可将持久化配置迁移到streaming.{mode,chunkMode,block.enabled,block.coalesce,nativeTransport}。unfurlLinks和unfurlMedia会将 Slack 的chat.postMessage链接和媒体展开布尔值透传给机器人回复。unfurlLinks默认为false,因此出站机器人链接不会内联展开,除非启用;unfurlMedia未配置时会被省略。在channels.slack.accounts.<accountId>设置任一值,可针对单个账号覆盖顶层值。- 投递目标使用
user:<id>(私信)或channel:<id>。
反应通知模式: off、own(默认)、all、allowlist(来自 reactionAllowlist)。
线程会话隔离: thread.historyScope 为按线程(默认)或跨频道共享。thread.inheritParent 将父频道转录复制到新线程。thread.initialHistoryLimit(默认 20)限制新线程会话启动时获取多少条现有线程消息;0 禁用线程历史获取。
- Slack 原生流式以及 Slack 助手风格的“正在输入...”线程状态需要一个回复线程目标。默认情况下,没有回复线程的
progress轮次(包括普通顶层 DM)仅发布最终答案。设置streaming.progress.style、设置streaming.progress.toolProgress,或设置streaming.progress.nativeTaskCards: false会选择预览。线程轮次、Agent View、Assistant View 以及显式off/partial/block模式保留其原有行为。参见 Slack 消息行为。 typingReaction会在回复运行期间向传入的 Slack 消息添加一个临时反应,完成后将其移除。对于静默顶层进度轮次,默认为"hourglass_flowing_sand";已配置的快捷代码会覆盖它,""会禁用它。channels.slack.execApprovals:Slack 原生审批客户端投递和执行审批人授权。与 Discord 相同的模式:enabled(true/false/"auto")、approvers(Slack 用户 ID)、agentFilter、sessionFilter和target("dm"、"channel"或"both")。当 Slack 插件审批人可解析时,插件审批可以为此 Slack 来源请求使用此原生客户端路径;对于 Slack 来源会话或 Slack 目标,也可以通过approvals.plugin启用 Slack 原生插件审批投递。插件审批在设置时使用approvals.plugin.slack审阅者列表,当省略默认列表时回退到 Slack 账户allowFrom和默认路由。它们不使用执行审批人。- 有效的非空
approvals.plugin.slack审阅者列表会独立于channels.slack.execApprovals和插件转发,启用 Slack 原生插件审批投递。
| 操作组 | 默认 | 说明 |
|---|---|---|
| reactions | 已启用 | 添加反应 + 列出反应 |
| messages | 已启用 | 读取/发送/编辑/删除 |
| pins | 已启用 | 置顶/取消置顶/列出 |
| memberInfo | 已启用 | 成员信息 |
| emojiList | 已启用 | 列出自定义表情 |
Mattermost¶
Mattermost 作为独立插件安装,方式与 Discord、Slack 和 WhatsApp 相同:
在固定版本之前,请检查 npmjs.com/package/@openclaw/mattermost 上的当前 dist-tags。
{
channels: {
mattermost: {
enabled: true,
botToken: "mm-token",
baseUrl: "https://chat.example.com",
dmPolicy: "pairing",
chatmode: "oncall", // oncall | onmessage | onchar
oncharPrefixes: [">", "!"],
groups: {
"*": { requireMention: true },
"team-channel-id": { requireMention: false },
},
commands: {
native: true, // opt-in
nativeSkills: true,
callbackPath: "/api/channels/mattermost/command",
// Optional explicit URL for reverse-proxy/public deployments
callbackUrl: "https://gateway.example.com/api/channels/mattermost/command",
},
textChunkLimit: 4000,
streaming: { chunkMode: "length" },
},
},
}
聊天模式:oncall(在 @-mention 时响应,默认)、onmessage(每条消息)、onchar(以触发前缀开头的消息)。
启用 Mattermost 原生命令时:
commands.callbackPath必须是一个路径(例如/api/channels/mattermost/command),而不是完整 URL。commands.callbackUrl必须解析到 OpenClaw 网关端点,并且可从 Mattermost 服务器访问。- 原生斜杠回调使用 Mattermost 在斜杠命令注册期间返回的每个命令令牌进行身份验证。如果注册失败或未激活任何命令,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 时覆盖默认账户选择。
Microsoft Teams¶
Microsoft Teams 由插件支持,并在 channels.msteams 下配置。
{
channels: {
msteams: {
enabled: true,
configWrites: true,
// appId, appPassword, tenantId, webhook, team/channel policies:
// see /channels/msteams
},
},
}
- 此处涵盖的核心键路径:
channels.msteams、channels.msteams.configWrites。 - 完整的 Teams 配置(凭据、webhook、DM/群组策略、按团队/按频道覆盖)记录在 Microsoft Teams 中。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw