Skip to content

Slack

状态:生产就绪,支持私信和频道,通过 Slack 应用集成。默认使用 Socket Mode,也支持 HTTP Events API 模式。

快速配置

Socket Mode(默认,推荐)

Socket Mode 无需公开的 Webhook URL,适合在防火墙后或本地运行 Gateway。

步骤 1:创建 Slack 应用并获取 Token

在 Slack 应用设置中:

  • 启用 Socket Mode
  • 创建 App Tokenxapp-...),赋予 connections:write 权限
  • 安装应用并复制 Bot Tokenxoxb-...

订阅以下 Bot 事件:

  • app_mention
  • message.channelsmessage.groupsmessage.immessage.mpim
  • reaction_addedreaction_removed

还需启用 App Home 的 Messages Tab(用于私信)。

步骤 2:配置 OpenClaw

json5
{
  channels: {
    slack: {
      enabled: true,
      mode: "socket",
      appToken: "xapp-...",
      botToken: "xoxb-...",
    },
  },
}

环境变量备选(仅默认账户):

bash
SLACK_APP_TOKEN=xapp-...
SLACK_BOT_TOKEN=xoxb-...

步骤 3:启动 Gateway

bash
openclaw gateway

HTTP Events API 模式

如果你需要使用 HTTP 模式(需要公开 URL):

json5
{
  channels: {
    slack: {
      enabled: true,
      mode: "http",
      botToken: "xoxb-...",
      signingSecret: "your-signing-secret",
      webhookPath: "/slack/events",
    },
  },
}

在 Slack 应用设置中,将 Event Subscriptions、Interactivity、Slash command 的 Request URL 都指向同一个路径(默认 /slack/events)。

Token 说明

Token 类型用途必须性
botTokenxoxb-...发送消息等 Bot 操作Socket 和 HTTP 模式都需要
appTokenxapp-...Socket Mode 连接仅 Socket Mode 需要
signingSecret验证 HTTP 请求签名仅 HTTP 模式需要

可选:添加 chat:write.customize 权限,让发出消息显示为自定义 Bot 名称和图标。

访问控制

私信策略(dmPolicy)

channels.slack.dmPolicy 控制私信访问:

  • pairing(默认)
  • allowlist
  • open(需要 allowFrom: ["*"]
  • disabled
json5
{
  channels: {
    slack: {
      dmPolicy: "allowlist",
      allowFrom: ["U123456789"],
      dm: { enabled: true },
    },
  },
}

审批配对:

bash
openclaw pairing approve slack <CODE>

频道策略(groupPolicy)

控制公共/私有频道行为:

  • open:任何频道都可以
  • allowlist:只允许 channels.slack.channels 中配置的频道
  • disabled:禁用频道消息
json5
{
  channels: {
    slack: {
      groupPolicy: "allowlist",
      channels: {
        "#engineering": { allow: true, requireMention: true },
        "#general": { allow: true, requireMention: true },
      },
    },
  },
}

安全提示:默认按用户 ID 授权。不要开启 dangerouslyAllowNameMatching: true,除非你明确接受按用户名匹配的风险。

Mention 行为

频道消息默认需要 @mention Bot(<@botId>)才会响应。

可按频道关闭:

json5
{
  channels: {
    slack: {
      channels: {
        "#my-channel": {
          allow: true,
          requireMention: false,
        },
      },
    },
  },
}

斜杠命令

Slack 原生斜杠命令默认关闭(不同于 Telegram/Discord)。

启用方式:

json5
{
  channels: {
    slack: {
      commands: { native: true },
    },
  },
}

注意:在 Slack 中注册命令时,状态命令需注册为 /agentstatus(因为 Slack 保留了 /status)。

单命令模式(轻量级替代方案):

json5
{
  channels: {
    slack: {
      slashCommand: {
        enabled: true,
        name: "openclaw",
        sessionPrefix: "slack:slash",
        ephemeral: true,
      },
    },
  },
}

消息线程

  • 私信:路由为 direct
  • 公共/私有频道:路由为 channel
  • 群组私信(MPIM):路由为 group

线程回复控制(channels.slack.replyToMode):

  • off(默认):不自动在线程中回复
  • first:回复第一条消息所在线程
  • all:总是在线程中回复

注意replyToMode: "off" 会禁用 Slack 的所有线程功能,包括手动 [[reply_to_*]] 标签。这与 Telegram 的行为不同——Telegram 的 "off" 模式仍允许显式标签。

完整配置示例

json5
{
  channels: {
    slack: {
      enabled: true,
      botToken: "xoxb-REPLACE_ME",
      appToken: "xapp-REPLACE_ME",
      dmPolicy: "allowlist",
      allowFrom: ["U123456789"],
      channels: {
        "#general": { allow: true, requireMention: true },
        "#engineering": { allow: true, requireMention: true },
      },
      dm: { enabled: true },
    },
  },
}