跳转至

配置 — 工作场所聊天频道

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 相同:

openclaw plugins install @openclaw/mattermost

在固定版本之前,请检查 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