☰
如何把AI同事请进Slack?OpenDots托管渠道接入完整指南(含白名单安全设置)
2026/10/4 5:13:13 网站建设 项目流程

如何把AI同事请进Slack?OpenDots托管渠道接入完整指南(含白名单安全设置)

【免费下载链接】OpenDotsYour always-on AI coworkers that move between text, calls, and Slack.项目地址: https://gitcode.com/gh_mirrors/op/OpenDots

OpenDots是一个开源的「常驻 AI 同事」模板:你可以克隆它、定义自己的 Dot(AI 同事)、为每个同事配置角色和权限,并让它们在你与它们之间自由切换——文字聊天、语音通话,以及Slack 渠道。本指南将带你用最安全的托管渠道(managed channel)方式把 AI 同事请进 Slack:不写一行 Webhook 服务器代码,同时通过workspace/user 白名单严格控制谁能唤醒这位 AI 同事。

为什么用 OpenDots 接入 Slack?

大多数 AI 机器人接入 Slack,要自己写 Webhook 服务、管理 Socket Mode 连接、处理签名校验。OpenDots 走的是另一条更省心的路:

  • 托管渠道模式:基于 CopilotKit 的 Channels SDK(@copilotkit/channels),由 Intelligence 托管 Slack 适配与消息投递,应用端只声明「渠道 + 专家 Agent」,参考实现见 src/server/platform.ts
  • 零自建消息服务器:不需要单独的 Slack webhook 服务或 Socket Mode 连接
  • 显式白名单安全:Slack workspace ID + 用户 ID 双重白名单,身份在服务端严格校验,详见 src/server/slack-channel.ts
  • 完全自托管:MIT 协议,数据存本地 SQLite,凭据全部留在服务端

先认识一下你的 AI 同事

每个 Dot(AI 同事)都有自己的名字、角色指令和权限。它不只是聊天——每个 Dot 还可以拥有自己的「电脑」:独立浏览器、持久化文件、终端,在聊天里实时展示工作过程:

💡 正是因为它能在 Slack 线程里继续干「重活」,把 AI 同事接入团队日常最常用的 Slack,价值才真正体现出来。

前提准备:完成基础四步

Slack 渠道依赖会话服务,所以要先让 OpenDots 跑起来:

  1. 使用Node.js 24+ npm,克隆仓库并安装:
git clone https://gitcode.com/gh_mirrors/op/OpenDots cd OpenDots npm ci cp .env.example .env npm run dev
  1. 打开 http://127.0.0.1:5173 确认应用可运行
  2. 在.env中填入会话与模型凭据(变量说明见 docs/SETUP.md):
变量作用
INTELLIGENCE_API_KEY会话持久化项目凭据(Slack 渠道必需)
OPENAI_API_KEY/OPENAI_MODEL模型凭据与模型标识
OWNER_ID本部署的对话身份,保持稳定
  1. 至少创建一个 Dot(AI 同事),后面要把它绑定到 Slack 渠道

一键创建 Slack 托管渠道(CLI)

选择与应用相同的 Intelligence 项目,然后创建命名唯一的托管渠道(完整步骤见 docs/SETUP.md Slack 小节):

npx --yes copilotkit@latest project select npx --yes copilotkit@latest channels add --name opendots --display-name "OpenDots" --adapter slack --json

接着按 CLI 返回的nextAction操作即可:

  • 用生成的 manifest 在 Slack 控制台创建应用
  • 通过托管设置流程填入 Slack 凭据(bot token、signing secret)
  • 运行 CLI 给出的resumeCommand完成激活

⚠️ 三个注意点:

  1. 保持 Socket Mode 关闭(托管渠道不需要它)
  2. 返回blocked表示还差 Slack 控制台步骤;failed必须先解决再继续
  3. 多套部署请用不同的渠道名,避免互相争抢投递

白名单安全设置:4 个环境变量

打开应用服务端的.env(变量解析见 src/server/index.ts),与模型凭据放在一起配置:

SLACK_CHANNEL_NAME=opendots SLACK_TEAM_ID=T_REPLACE_WITH_WORKSPACE_ID SLACK_USER_IDS=U_REPLACE_WITH_YOUR_USER_ID SLACK_DOT_ID=REPLACE_WITH_DOT_ID
变量说明
SLACK_CHANNEL_NAME必须与托管渠道声明名完全一致(不是#general这类 Slack 会话名)
SLACK_TEAM_IDSlack workspace ID,限制「哪个团队」可用
SLACK_USER_IDS逗号分隔的 Slack 用户 ID,限制「哪些人」可用
SLACK_DOT_ID指定响应 Slack 的 Dot;省略时默认使用初始 Dot(ID 可在/api/workspace响应中查到)

改完环境变量后重启 OpenDots,并在Settings & setup页面确认渠道状态变为激活(状态逻辑见 src/server/platform-config.ts)。渠道激活完成后,才能开始发消息测试。

白名单是怎么生效的?

OpenDots 在 slack-channel.ts 中做严格身份校验,一条消息要触发 AI 同事,必须同时满足:

  • ✅ 来自slack平台,且 workspace 匹配SLACK_TEAM_ID
  • ✅ 发言者必须是human(机器人、应用、系统消息一律忽略)
  • ✅ 用户 ID 在SLACK_USER_IDS白名单内
  • ✅ 消息操作类型是created——编辑消息补加 @ 不生效,请发新消息
  • ✅ 是首次 @ 机器人,或该线程已被订阅(线程内后续消息才会继续触发)

这与 SECURITY.md 的原则一致:显式映射 Slack 身份,绝不把显示名或客户端自报的 ID 当作身份证明。

在 Slack 里唤醒 AI 同事并验证

  1. 在机器人可访问的频道中@ 提及该 bot,它会在同一线程回复
  2. 在该线程内继续发消息,对话保持连续(同一专家 Agent)
  3. 用白名单外的用户测试:应无法触发
  4. 在 OpenDots 里暂停(Pause)助理:白名单用户收到「已暂停」提示而非执行结果(实现见 slack-channel.ts)

🔍 完整验证清单(含检查连接失败状态)见 docs/SETUP.md 的Verify your deployment小节。

安全细节:别忽略的 3 件事

  • 错误信息不泄露凭据:渠道失败时只上报安全化的错误名(如Error (HTTP 401)),提供商原始报文不会进入日志或 Slack 回复,防止凭据泄漏(见 safeFailure)
  • 单所有者映射:模板把白名单内的 Slack 用户统一映射到同一个 OpenDots owner,回复对该 Slack 会话的所有成员可见——所以请提前收好该 Dot 的Space 访问权限和工具权限,这不是多用户身份模型
  • 并发串行化:渠道以concurrency: 'serial'运行,同一线程的请求排队处理,不会互相踩踏(见 createSlackChannel)

这些行为都有对应测试覆盖:tests/slack-channel.test.ts 验证了白名单拦截、线程订阅语义与错误隔离;tests/slack-channel-wiring.test.ts 验证渠道注册方式。

常见坑位清单

现象原因与解决
改完.env没反应Slack 配置只在启动时读取,必须重启OpenDots
渠道一直setup_requiredSLACK_CHANNEL_NAME与SLACK_TEAM_ID必须与托管声明一致,且SLACK_USER_IDS非空
编辑旧消息补 @ 无效设计如此,编辑/删除不触发,请发送新消息
多个部署互抢消息每套部署使用唯一的渠道名
SLACK_DOT_ID报错该 ID 必须指向已存在的 Dot,否则服务启动会失败

✅ 完成以上步骤,你就把一位受白名单约束、带自己电脑的 AI 同事正式请进了 Slack。后续还想让它拥有持久化「电脑」(浏览器 + 文件 + 终端),可继续参考 docs/COMPUTERS.md。

【免费下载链接】OpenDotsYour always-on AI coworkers that move between text, calls, and Slack.项目地址: https://gitcode.com/gh_mirrors/op/OpenDots

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询