Slack
添加 Slack 作为消息频道。通过 Chat SDK 桥接使用事件订阅(Event Subscriptions)Webhook——需要一个可从公网访问的 HTTPS 端点。
功能特性
- 通过 Chat SDK 桥接将 NanoClaw 连接到 Slack
- 事件订阅(Event Subscriptions)Webhook 发送到 NanoClaw 的 Webhook 服务器
- 支持公共频道、私有频道、私信和线程
- 可与其他频道并行使用或独立运行
- 完整的 OAuth 权限配置,支持读取和发送消息
前置条件
- 已安装并运行 NanoClaw
- 拥有管理员权限的 Slack 工作区
- 在 api.slack.com 创建 Slack 应用
- 一个可从公网访问的 HTTPS 端点(或 ngrok、Cloudflare Tunnel 之类的隧道)
安装
/add-slack 工作原理
/add-slack 技能通过 Chat SDK 桥接将 NanoClaw 连接到 Slack。Slack 会将事件发送到 NanoClaw 共享的 Webhook 服务器(默认端口 3000,可通过 WEBHOOK_PORT 配置)的 /webhook/slack 路径。要让 Slack 能够投递事件,该端点必须可从公网访问——如果你在本地机器上运行 NanoClaw,可以使用 ngrok 或 Cloudflare Tunnel 之类的隧道来提供公网 URL。
该技能会从 channels 分支复制 Slack 适配器(src/channels/slack.ts),在 src/channels/index.ts 中追加一个自注册导入语句,并安装固定版本的 @chat-adapter/slack 包。如果你已经配置了 WhatsApp 或 Telegram 等其他频道,Slack 会作为新增频道一并添加。
设置 Slack 应用需要在 Slack API 控制面板中完成几个步骤。技能会为每个步骤提供详细说明:
- 创建应用——在 api.slack.com 选择“From scratch”(从零开始)并选择你的工作区。
- 配置 Bot Token 权限:
chat:write、im:write、channels:history、groups:history、im:history、channels:read、groups:read、users:read、reactions:write、files:read和files:write。 - 将应用安装到工作区以获取 Bot Token(
xoxb-...),并从 Basic Information 中复制 Signing Secret。 - 在 App Home 中启用 Messages 标签,以便用户可以私信机器人。
- 启用事件订阅(Event Subscriptions),将 Request URL 设置为
https://your-domain/webhook/slack,并订阅message.channels、message.groups、message.im和app_mention机器人事件。 - 开启 Interactivity(交互功能),使用相同的 Request URL,然后在 Slack 提示时重新安装应用。
将这两个值(Bot Token 和 Signing Secret)粘贴到技能中,技能会将它们以 SLACK_BOT_TOKEN 和 SLACK_SIGNING_SECRET 的形式保存到 .env。
注册频道
应用安装完成后,技能会通过构建项目并运行频道注册测试来验证改动。随后你可以使用 /manage-channels 将 Slack 频道连接到智能体分组。要查找频道的 ID,在 Slack 中右键点击频道名称,选择“查看频道详情”——Channel ID 位于详情面板的底部。注册使用平台 ID 格式 slack:{channelId}(私信的 ID 以 D 开头,而非 C)。
线程与私信
Slack 线程受支持——适配器会保留线程上下文,而不会将回复展平。只要在 App Home 中启用了 Messages 标签,机器人也可以在私信中工作。
使用技巧
- Webhook 服务器必须可从公网访问,Slack 才能投递事件。在本地开发时,
ngrok http 3000或 Cloudflare Tunnel 可以为你提供一个公网 URL,作为 Request URL 的基础地址。 - 如果机器人停止响应,请检查
.env中的 Bot Token 和 Signing Secret 是否仍然有效。Bot Token 在重新安装应用时可能会被撤销。 - 部分 Slack 工作区有管理策略限制可安装的应用。如果遇到权限问题,你可能需要工作区管理员的审批。
- 连接频道前请先将机器人邀请到该频道——Slack 机器人只能读取已被明确添加到的频道中的消息。