跳到主要内容

接入 Slack

从 Slack 发起电脑上的 Ghast 任务,并在原 Slack 线程接收回复。入口是 设置 → 渠道 → Slack。

使用期间让 Ghast 保持运行,电脑保持联网。这是桌面连接,不是独立托管的机器人。请先按照 配置 Provider 和 选择并启用模型 准备可用模型。

1. 创建并安装 Slack 应用​

先使用私人测试频道,以及允许你安装应用的 Slack 工作区。不要直接从共享的生产频道开始。

创建应用​

  1. 打开 Slack Apps 控制台。
  2. 选择 Create New App → From scratch。
  3. 给应用取一个容易识别的名字,选择目标 Slack workspace。这里的 workspace 是外部 Slack 组织,不是 Ghast 的本地工作区。
  4. 如果组织要求管理员审批,先完成审批;Ghast 不会绕过 Slack 的安装政策。

添加 Bot Token Scopes​

进入 OAuth & Permissions → Bot Token Scopes,添加 Ghast 配置指引列出的权限:

权限用途
app_mentions:read接收对应用的提及
channels:history、channels:read机器人可访问的公开频道消息及频道信息
groups:history、groups:read机器人可访问的私密频道消息及信息
im:history、im:read私信消息及会话信息
mpim:history、mpim:read多人私信消息及会话信息
chat:write发送和更新回复
files:read、files:write下载收到的附件、上传回复文件
reactions:write给消息添加表情回应
users:read获取发送者的显示名称

这是当前客户端的配置权限列表,不代表 Ghast 会导入全部历史消息。还需要订阅对应事件,授予权限不等于订阅消息。参见 Slack Events API。

启用 Socket Mode,生成 App Token​

  1. 进入 Socket Mode,开启 Enable Socket Mode。
  2. 进入 Basic Information → App-Level Tokens → Generate Token and Scopes。
  3. 添加 connections:write 权限并生成 Token。
  4. 妥善保管得到的 xapp- Token。

Socket Mode 通过向外建立的 WebSocket 长连接接收事件,不需要公开 webhook URL、开放本地端口或配置隧道。App-Level Token 用于建立这条连接,不是发送回复的凭据。Slack Socket Mode、connections:write。

订阅机器人事件​

在 Event Subscriptions 开启事件,向 Subscribe to bot events 添加:

事件接收内容
app_mention对应用的明确 @提及
message.channels公开频道消息
message.groups私密频道消息
message.im私信
message.mpim多人私信

选择 bot events,不是用户 Token 的事件订阅。如果希望用户从应用的 Messages 标签发消息,在 App Home 启用该标签及 Allow users to send Slash commands and messages from the messages tab。这项 Slack 设置允许发送消息,不会给 Ghast 增加斜杠命令。Slack 私信配置说明。

安装并邀请​

  1. 选择 Install App → Install to Workspace,批准请求的权限。
  2. 在 OAuth & Permissions 复制以 xoxb- 开头的 Bot User OAuth Token。
  3. 后续增加 scopes 后,重新安装应用,使已安装的 Token 获得新权限。Slack 本地配置指引。
  4. 在测试频道使用 Slack 的频道集成功能,或输入 /invite @YourBot 邀请机器人。

两个 Token 必须属于同一个目标应用。不要使用 Signing Secret、Client Secret、Verification Token 或 xoxp- 用户 Token 代替。

2. 在 Ghast 填写凭据​

真实 Ghast Slack 设置中的两个独立 Token 输入框、启用开关和默认模型
真实中文客户端。Slack 保持停用,两个密钥均已遮蔽。当前英文界面存在部分翻译缺失,可能显示 Title、Bot Token Hint;它们不是需要填写的内容。
控件填写内容或操作
Bot User OAuth Token (xoxb-)粘贴 xoxb- Token,供 Ghast 验证机器人身份并调用 Slack Web API。
App-Level Token (xapp-)粘贴具有 connections:write 的 xapp- Token,供 Socket Mode 使用。
各 Token 右侧的眼睛按钮分别显示或隐藏该字段。分享屏幕时保持隐藏。
默认模型选择已启用、可用的 Slack 任务模型;它与 Chat 默认模型分开设置。
启用 Slack 桥接先完成下方的访问、模型和工作区设置,再打开开关并点击 保存。

从关闭状态启用时,两个 Token 字段都必须非空。这不是凭据验证;启动机器人时才会检查格式并认证。Slack 设置目前没有“验证凭据”或“发送测试消息”按钮。

Token、模型、启用开关、白名单频道、仅响应提及和工作区绑定均为草稿,点击 保存 后才生效。切换平台标签不会保存。要放弃草稿,点击底部 关闭,确认不保存就关闭。

保存任何有变化的 Slack 设置都会重启连接,单独修改访问规则或模型也一样。先完成重要任务再保存,不要假设正在生成的回复能跨重启继续送达。

3. 限制允许接收消息的位置​

无需写代码即可查 ID:在浏览器打开目标 Slack 频道,查看地址。例如 https://app.slack.com/client/TEXAMPLE/C0123456789 中,TEXAMPLE 是工作区,C0123456789 才是要填写的频道。只复制会话那一段,不要粘贴完整网址。私信则打开与此机器人的会话,不是个人资料页;使用会话 ID,不是 U… 用户 ID。Slack 的说明中给出了 工作区/频道网址结构。

无法可靠识别时,请 Slack 应用管理员确认;管理员可以通过 Conversations API 查询。不要为了发现 ID,临时清空生产工作区的白名单。

在 白名单频道 输入 Slack 会话 ID,例如虚构的 C0123456789,点击 添加 或按 Enter。确认它变成标签,再 保存。仅输入但没有添加,不会改变列表。

填写 ID,不是 #频道名称、应用 ID、Slack 工作区 ID 或消息链接。客户端会去掉首尾空格并忽略重复添加,但不会验证 ID 是否存在、机器人是否有权访问。点击标签的 × 可移除该项,仍需保存才生效。

白名单频道实际效果
留空Ghast 不按会话 ID 限制;仍受 Slack 的消息交付权限和成员关系约束。
填写一个或多个 ID只允许完全匹配的会话 ID,也包括私信和多人私信。
添加某频道 ID该频道内的线程使用同一个白名单 ID,不要填写线程时间戳。
只添加一个公开频道不会顺便允许私信;若要接收某个私信会话,也要添加它自己的会话 ID。

这不是按人的允许列表。允许会话内的参与者,只要消息能送到机器人并符合下方提及规则,就可能发起任务。工作区绑定不负责允许或拒绝访问。

真实 Slack 白名单频道示例、仅响应提及开关、运行状态和工作区绑定
仅为未保存示例:虚构频道 C0123456789,已打开“仅响应 @提及”,机器人仍停用。拍摄后已丢弃草稿,不代表限制已应用或 Slack 已完成真实收发。

4. 选择何时响应​

通过 仅响应 @提及,要求公开和私密频道中的消息明确提及机器人。

已通过白名单的消息开启仅响应提及关闭仅响应提及
公开/私密频道中,使用 Slack 真正 @提及机器人的消息接收接收
公开/私密频道中,没有提及机器人的普通消息忽略接收
公开/私密频道线程内的回复,但未重新 @提及忽略接收
私信或多人私信无需提及即可接收无需提及即可接收
机器人发送的消息,包括 Ghast 自己忽略忽略
编辑或删除消息的事件不会启动新一轮任务不会启动新一轮任务

“接收”指有资格进入 Ghast,不保证模型最终成功回复。消息可以带有效附件;既无文字也无可用附件的空消息会被跳过。

请使用 Slack 真正的 @提及选择器。只输入 ghast、在线程里回复机器人,或照搬 Discord 的 !new,不会绕过 Slack 的提及规则。

Slack 在下载附件和记录最近历史之前检查白名单及提及规则。被这些规则拒绝的消息不会进入该入站处理路径,这与 Discord、Telegram 群聊不同。但收紧规则不会删除此前已接收并保存在 Ghast 对话或本地记忆中的内容。

私信仍须通过白名单

界面提示“DM 始终响应”只是在说明私信无需 @提及。白名单非空时,它仍限制私信。私信和 @提及都不能绕过白名单。

5. 选择模型和本地工作区​

模型选择​

先配置 Provider 凭据并启用模型,Slack 的选择器才会列出已启用、具备使用条件的 Provider 模型。找不到目标模型时,回到 模型配置 检查,再重新打开选择器。

明确设置的 Slack 默认模型优先,已有 Slack 对话也会使用它。没有 Slack 专属默认模型时,优先沿用已有对话保存的模型,再回退到 Chat 默认模型。改变默认值不会自动启用模型、充值或修复 Provider 认证。

工作区绑定​

  1. 先创建合适的非临时本地工作区。
  2. 在 工作区绑定 选择已知 频道 ID,或手动输入 ID。列表可能包含此前已知的会话,不证明机器人目前仍有访问权限。
  3. 选择 工作区,点击 添加。两个字段缺一不可。
  4. 检查 ID 到工作区的对应行,再 保存。
  5. 替换绑定时,先删除原行,再用同一 ID 添加新工作区,最后保存。

优先使用明确绑定且仍存在的工作区;没有有效绑定时,使用 通用 → 默认工作区,再回退到 Ghast 自动默认工作区。可通过“未绑定的聊天使用”一行核对回退位置。

绑定按频道/私信会话 ID,不按人或线程。该会话中新创建的线程会使用所选工作区。已有 Slack 线程保留其 Ghast 对话原来的工作区,保存新绑定不会移动这些对话。请发一条新的顶层消息使用新路由,并在请求文件访问前核对工作区。线程忙碌时到达的新消息可能创建分支,此分支使用当前的工作区选择。

绑定及回退工作区都应保持最小范围。Slack 消息可能在你的电脑上启动模型和工具任务,结果会发送给该 Slack 会话的参与者。

6. 验证首条回复​

  1. 确认示例 ID 已换成真实 ID,模型可用,工作区正确。
  2. 启用 Slack 并 保存,展开 运行状态。
  3. 等待 已连接;有 Slack 工作区信息时确认是目标组织。
  4. 在允许的测试频道发送明确提及:“@YourBot 只回复 slack-ready-47。”
  5. 在 Slack 打开这条消息的线程,确认准确回复已出现,不只是 Ghast 中生成成功。
  6. 在同一线程回复:“@YourBot 你刚才返回了什么字符串?”开启仅响应提及时,继续带上 @提及。
  7. 分别用无敏感内容测试允许的私信、未允许的会话、不含提及的频道消息,核对限制是否符合预期。
  8. 普通文字通过后,再测试附件。

Slack 集成没有用于 /new、/model、/stop 或切换对话的内置命令菜单。不要照搬 Telegram、Discord 的命令。模型配置和正在运行的任务请回到 Ghast 桌面端查看与操作。

线程、上下文和并发消息​

  • 每条 Slack 顶层消息都会建立独立的 Ghast 对话,私信顶层消息也一样。要延续同一个对话,请在线程内继续。
  • 同一 Slack 线程中的参与者共享对应对话,不会按发送者分别隔离。
  • 回复发送到原消息线程。新的顶层消息不会自动继承上一条顶层消息的上下文。
  • 同一线程还在生成时,新消息会促使 Ghast 创建分支并将后续轮次路由过去,而不是简单排队。顺序重要时,等回复完成后再继续。
  • 最近 Slack 上下文来自当前连接期间实际接收的消息,以及可用的本地发送者资料。首次接触线程时,不会自动抓取全部频道或旧线程历史。
  • 已保存的 Ghast 对话历史与连接中的最近消息缓冲不是同一份数据。重启机器人不会清除已保存对话或记忆。

附件、流式回复和表情回应​

收到的图片、音频、视频及文件可以下载并传给生成流程。实际理解能力取决于所选模型及可用工具;附件被接收,不代表它已被成功读取。

文件报告的大小超过 20 MiB 时会被跳过。没有可用私有下载地址、无权访问的文件,以及需要额外查询才能取得内容的 Slack Connect 附件占位信息,也可能被跳过。附件遗漏时,先在允许的测试会话中上传较小的普通文件并查看日志。

文字回复可以在生成过程中持续编辑同一条消息,长回复可能拆分。语音输入轮次不走这条部分文字流式更新路径。不要因为音频已显示在 Slack 就认定转写或语音回复可用;参见 语音输入与回复。

Ghast 可以把本地结果文件上传到同一线程,也可以给入站消息添加表情回应。表情不是模型任务完成的确认。请求发送文件前,确认该线程的所有接收者都应有权看到它。

查看运行状态和日志​

展开 运行状态:

项目能说明什么
连接Slack 是否停用、连接中、已连接或出现错误;已连接不证明消息送达或模型可用。
Slack 工作区/启动时间有数据时显示运行时的组织身份和本次连接启动时间。
最近事件最近一次 Slack 事件信封到达客户端的时间;没有变成 Ghast 任务的事件也能更新时间。时间较旧也可能只是工作区暂时没有活动。
机器人日志连接、认证、事件、过滤及 Slack API 失败。
桥接日志消息到 Ghast 的路由、模型生成和回复处理。

运行时没有对应日志路径时,日志按钮禁用。可用日志在设置页内展开,默认显示最后 200 行;点击 刷新 重新读取,× 关闭。它不是持续自动更新的日志流。

日志可能包含消息片段、用户/频道 ID、组织名称和本地路径。分享前删除敏感内容,不要公开任何一个 Token。

排查问题​

现象依次检查
不能打开启用开关两个 Token 字段均须非空;保存前确认 Token 类型正确。
Token 前缀或认证错误xoxb- 填 Bot Token,xapp- 填 App Token,确认属于同一应用。在 Slack 替换已撤销的 Token,再保存。
Socket Mode 连不上确认已启用 Socket Mode,App Token 有 connections:write,电脑和网络允许建立连接。
已连接,但最近事件一直不变检查 bot 事件订阅、应用安装和频道成员关系;增加 scopes 后重新安装。建立连接不等于已订阅消息事件。
有事件,但没有任务检查准确的白名单会话 ID、提及规则、是否为机器人消息,以及空消息或不可用的纯附件消息。
频道可用,但私信不行检查私信 ID 是否通过白名单、message.im 订阅、im:history 和 App Home Messages 设置。
首次提及可用,线程跟进没回复开启仅响应提及时,在公开/私密频道线程里再次 @提及机器人。
模型缺失或 Provider 报错配置并启用可用模型,检查余额及认证,选择 Slack 默认模型并保存。
新工作区绑定似乎没有生效发送新的 Slack 顶层消息;已有映射线程保留原对话工作区。
Ghast 已生成,但 Slack 没收到打开原线程,查看两类日志,检查 chat:write、成员关系、限流和 Token 错误;不要反复重发可能仍在运行的任务。
文字正常,但文件缺失检查入站 20 MiB 限制、私有文件访问、Slack Connect 限制以及 files:read/files:write。
英文标题显示 Title 或 Body此客户端的 Slack 英文翻译不完整。按照本指南的控件名称和 Token 前缀识别,中文界面有较完整的标签。

断开连接​

关闭 启用 Slack 桥接 并 保存,停止连接。这不会卸载 Slack 应用、撤销凭据或删除 Slack/Ghast 的旧消息。

停用整个集成时,还应在 Slack 工作区移除应用或撤销 Token,并单独检查保存的对话与本地记忆。不要把重启连接当作隐私清除。