Slack 与频道
将 Slack 连接到项目,并从频道控制会话。
频道用于将聊天平台连接到项目。在已连接的频道中发送消息会启动一个会话。智能体会在同一话题串中回复。
目前支持的频道
Beeuni 目前支持四种频道平台:
- Slack — 通过 Beeuni 管理的应用一键连接,或使用你自己的机器人令牌。
- Microsoft Teams — 通过组织管理员同意的 OAuth 连接,或使用你自己的 Azure Bot(实验性功能;可在Settings → Feature flags中启用)。
- 电子邮件 — 由 AgentMail 提供支持的频道(实验性功能;可在Settings → Feature flags中启用)。
- 语音 — 实时语音频道(实验性功能;可在Settings → Feature flags中启用)。与 Agent 进行实时语音对话。
只有 Slack 和 Microsoft Teams 可通过 CLI 和控制面板连接。电子邮件和语音需在控制面板中管理。本页介绍 Slack。Teams 遵循相同的会话、身份关联和凭据规则。
频道如何启动会话
Slack 话题串或 Teams 对话中的第一条消息会创建一个会话。即使沙盒停止后又恢复,该话题串仍会保留此会话。
在 Slack 频道中,之后的消息只有在提及机器人时才会发送给会话。未标记机器人的回复是给话题串中其他人的。下次有人提及机器人时,智能体会读取这些回复。在私信中,每条消息都会发送给会话。
一个 Slack 工作区连接到多个项目时,首次提及时会显示项目选择器。
身份关联
在智能体为聊天发送者运行之前,Beeuni 会先将每位发送者关联到一个 Beeuni 账户。在 Slack 中运行 /beeuni login,然后通过链接登录。Teams 也有同样的要求。未关联的发送者会收到关联提示,而不会启动会话。
登录链接只能使用一次,并会在 10 分钟后过期。已连接到一个 Beeuni 账户的 Slack 账户无法再连接到其他账户:请先运行 /beeuni logout。如果你的组织要求双重身份验证,Beeuni 会在连接你之前要求你提供第二重验证信息,聊天操作也会以你用于连接的验证方式运行。
每项操作都以执行者所关联的账户身份运行,并遵循该账户的项目角色。账户所有者和管理员视为项目管理员。
| 操作 | 谁有权执行 |
|---|---|
| 在新消息或其话题串中提及机器人 | 有权访问该项目的已关联账户,且须遵守频道策略 |
| 停止一次运行 | 发送了当前回复所针对消息的人,或已获准加入该会话且仍可使用此项目的任何人 |
| 更改频道的项目、智能体、模型或策略 | 项目管理员;在与机器人的私信中,任何项目成员均可 |
| 处理审核项 | 项目管理员 |
| 批准或拒绝连接器调用 | 项目管理员,或启动会话的人 |
批准某人加入 owner_approval 话题串 |
会话所有者 |
link-bot |
项目管理员 |
凭据存放位置
已连接频道的机器人令牌是连接器范围的密钥。它不会显示在项目的 Secrets 页面中。Beeuni 绝不会将它注入沙盒。智能体发送或读取聊天消息时,Beeuni 会在服务器端解析该令牌。
连接 Slack
开始连接
在 CLI 中运行:
beeuni channels connect在配置了共享 Slack 应用的主机上(例如 Beeuni Cloud),此命令会显示一键安装链接。打开链接并选择工作区。点击 Allow。添加 --wait,让命令持续轮询,直到安装完成。
也可以在控制面板中打开项目的 Channels 页面,然后在那里连接 Slack。使用的是相同的安装流程。
使用自己的 Slack 应用
若要使用自己的 Slack 应用,请运行 beeuni channels manifest 以输出应用清单。根据该清单,在 api.slack.com/apps 创建应用。将应用安装到工作区。然后运行:
beeuni channels connect --manual --bot-token xoxb-... --signing-secret ...检查连接
beeuni channels status运行 beeuni channels disconnect 以移除连接。所有标志请参阅 CLI 参考。
连接 Slack 后,Beeuni 会为你在 beeuni.yaml 添加一条 channel 连接器条目。你无需手动编写此条目。
使用 Slack
在机器人已加入的任意频道中提及机器人并附上任务,或打开一条私信。话题串会按上述说明保留会话。在频道话题串中再次提及机器人即可继续对话。若只提及机器人但未提供任务,它会提醒你补充任务,而不会启动会话。
智能体可以读取的内容
智能体通过项目的 Slack 连接器读取 Slack(beeuni_slack,或沙盒中的 slack 命令)。连接到同一 Slack 工作区的每个项目都使用同一个机器人,因此 Beeuni 会将每次读取限制在各项目自己的对话中:
| 对话 | 读取权限 |
|---|---|
| 连接到此项目的频道或私信 | 允许 |
| 此项目的会话在任意频道中启动或加入的话题串 | 允许 |
| 其他项目的频道、私信或话题串 | 拒绝 |
| 未连接到任何项目的对话 | 仅当工作区尚未连接其他项目时允许 |
读取被拒绝时,403 会返回原因 conversation_not_in_project,并显示包含对话名称的消息。若要读取尚未连接到任何项目的对话,请先连接:在其中运行 /beeuni switch,然后选择此项目。
- 频道历史记录不会包含其他项目话题串中的消息。
get_history和get_thread会为每条作者身份可由 Slack 确认的消息添加user_name,并显示在userID 旁边。每次读取最多标注 25 人;Slack 在 2 秒内未返回姓名的用户会被略过。list_channels会列出所有公开频道,以及智能体可读取的私密频道和私信。channel_info会对任何公开频道作答。私密频道或私信遵循上表规则。- 当文件分享在智能体可读取的对话或此项目的话题串中时,
file_info会作答。slack download遵循相同规则:如果文件只分享在其他项目的对话中,则会对403作答。下载大小上限为 50 MB,超出时会对413作答。 search_messages只会在工作区未连接其他项目时运行,因为搜索无法限制在某个项目的对话范围内。list_users、user_info和auth_test会读取工作区目录,不受限制。
写入操作遵循下文的独立规则。
智能体可以发布的内容
发布消息、发送文件、编辑、删除、添加反应、加入频道和绑定话题串都遵循同一规则:智能体绝不会在其他项目的频道或话题串中操作。
| 目标 | 写入权限 |
|---|---|
| 此项目的频道,或其会话启动或加入的话题串 | 允许 |
| 未连接到任何项目的频道 | 允许。新消息会在此项目中启动一个话题串,因此提及机器人的回复会回到该会话 |
| 与某人的私信 | 允许,即使该人与机器人的私信正在运行其他项目也允许 |
| 其他项目的频道或群组私信 | 拒绝 |
| 任意对话中属于其他项目的话题串 | 拒绝:无法回复、编辑、删除或添加反应 |
写入被拒绝时,403 会返回原因 conversation_not_in_project,并显示包含对话名称的消息。slack send --file 和 slack bind-thread 遵循相同规则。
channel 必须是对话 ID 或用户 ID,例如 C0123ABCD 或 U0123ABCD,而不是频道名称。Slack 会按名称发布消息,而名称无法通过规则检查。如果 Slack 最终将消息发布到已检查的对话以外的位置,Beeuni 会删除该消息并拒绝发布。
若要在由其他项目运行的频道中发布消息,请在其中运行 /beeuni switch 并选择此项目,或从那个项目发布。
使用斜杠命令控制会话
在 Slack 中将这些命令作为 /beeuni <command> 输入,或在私信中作为纯文本输入。斜杠命令无法在 Assistant 私信面板中运行,因此 Beeuni 会在其中解析相同的纯文本内容。
| 命令 | 功能 |
|---|---|
login、logout |
关联或取消关联你的 Slack 身份 |
switch、unbind |
重新绑定或解除此频道与其项目的绑定 |
projects |
列出你可以绑定到的项目 |
sessions |
列出此工作区中最近启动的会话 |
whoami |
显示频道面板:项目、智能体、模型、策略和你已关联的身份 |
models |
为此频道选择模型 — 请参阅模型和密钥 |
agent <name>、model <id> |
设置此频道使用的智能体或模型 |
policy <mode> |
设置谁可以在此处启动会话 |
help |
列出所有命令 |
policy 接受 project_open(默认值 — 任何提及机器人的项目成员都会启动会话)、owner_approval 或 owner_only。这是针对单个频道的资源级设置,不是角色。它不会授予角色判定所拒绝的任何权限 — 请参阅账户与访问权限。
模型和密钥
/beeuni models 会列出你可以在此处运行的所有模型,与网页选择器相同:Beeuni 模型,以及通过提供商 API 密钥或 ChatGPT 订阅使用的模型。每个模型都会注明付费方式。列表较长时,你可以在单个选择框中输入搜索。选择一个模型,或输入 /beeuni model <id>;/beeuni model default 会恢复为项目默认值。
哪些密钥可用取决于对话类型:
- 与机器人的私信 — 你自己的密钥和 ChatGPT 订阅,以及与项目共享的密钥。该会话仅你可见。
- 频道或群组私信 — 仅限与整个项目共享的密钥。若要使用基于个人密钥运行的模型,请改在私信中选择。
基于密钥运行的模型会使用你可使用的该提供商的所有密钥,并在触发速率限制时轮换密钥。频道的模型会用于启动每个新话题串;话题串会继续使用启动时的模型。如果某个话题串无法再运行原模型,则会为该条消息替换模型,而不会直接失败。请参阅提供商密钥与成员访问权限。
包含图像的后续消息会使用能够读取图像的模型运行。如果可用模型都无法读取图像,提示词中会告知智能体这一点:它会说明自己无法查看图像,并要求提供文字,而不是猜测。
频道和人员名称
Slack 会发送 ID,例如 C0123ABCD 和 U0123ABCD。Beeuni 会显示 Slack 用户看到的名称,并在操作时使用 ID。
| 位置 | 显示内容 |
|---|---|
Channels 页面、beeuni channels bindings |
公开或私密频道的 #channel、私信的联系人、群组私信的成员 |
| 会话中的 Slack 消息 | 发送者的姓名和 #channel |
会话中的 slack send 回复 |
#channel,或私信中的联系人 |
| 会话标题 | 按 Slack 显示方式呈现提及:@Beeuni,而非 <@U0123ABCD> |
| 智能体的提示词 | ID 旁的名称:Sam Rivera (U0123ABCD)、#general (C0123ABCD) |
| 智能体在 Slack 中的计划步骤 | 人员显示为 @Sam Rivera,频道显示为 #general。步骤不会通知任何人 |
| Slack 中的审批卡片 | 频道参数显示为频道链接,名称取决于你自己的访问权限。用户参数显示为该用户的姓名 |
Slack 无法找到的频道会显示为 Unavailable channel,并保留其 ID。如果频道已被删除或机器人已被移除,就会发生这种情况。Slack 在 2 秒内未返回的名称会从该消息中略去。提示词将只包含 ID,而且该轮处理不会等待。
审批
智能体需要人工决定才能继续时,会提交一个审核项。如果会话是从此话题串启动的,决定事项会以卡片形式显示在这里,其中包含标题、摘要、风险等级以及 Approve、Request changes 和 Deny。
Request changes 会打开一个输入框,让你填写需要更改的内容。你输入的内容会随决定一并保存并传给智能体,因此智能体无需再次询问。此项可选 — 留空发送后,智能体会被告知需要询问。批准和拒绝仍只需点击一次。
处理审核项需要关联的 Beeuni 账户具有项目写入权限。
停止运行
智能体工作时,其实时消息上会显示 Stop 按钮。此按钮会在运行时终止运行,而不只是停止消息显示 — 如果运行仍处于打开状态,它会吞掉话题串中的下一条消息,而不是回复。
发送了当前回复所针对消息的人可以停止运行;已获准加入该会话且仍可使用此项目的人也可以停止。频道中的旁观者无法停止运行;他们会收到一条私密提示,告知其没有权限。
无法使用的功能
- 斜杠命令无法在 Assistant 私信面板中触发。请改为在其中输入纯文本
/beeuni <command>。 - 目前不支持 Telegram 等其他聊天平台作为频道。只有 Slack 和 Microsoft Teams 可通过 CLI 和控制面板连接;电子邮件和语音需通过控制面板连接。