Slack 接入
Slack 入口使用官方 Python SDK 的 Socket Mode,无需公网请求地址。命令采用 !status 等普通消息形式。 共享队列、PDF 来源血缘、候选复核和恢复逻辑见应用连接。
应用与权限
- 创建 Slack App,启用 Socket Mode,生成具备
connections:write的 App-Level Token。 - 安装应用到目标工作区,取得 Bot User OAuth Token。在 App Home 开放机器人 Messages Tab,允许用户发送消息。
- 订阅 Bot Events:单聊用
message.im,公开频道用message.channels,私有频道用message.groups,按需要选择。代码只接受白名单频道中 @ 机器人的消息和附件;本入口使用完整消息事件,不依赖app_mention。 - Bot scopes 配置
chat:write、im:history、files:read、files:write;使用公开/私有频道时补充channels:history/groups:history。修改权限后重新安装应用,把机器人加入目标频道。
参考:Slack Socket Mode、 文件上传 SDK。
本机 .env:
FINFLOW_SLACK_BOT_TOKEN=xoxb-your-bot-token
FINFLOW_SLACK_APP_TOKEN=xapp-your-app-level-token
在 config/integrations.local.json 的 slack 字段中填写:
{
"enabled": true,
"team_id": "T_WORKSPACE_ID",
"app_id": "A_APPLICATION_ID",
"bot_user_id": "U_BOT_USER_ID",
"users": {
"U_YOUR_USER_ID": ["viewer", "operator", "reviewer"]
},
"allowed_group_chats": ["C_ALLOWED_CHANNEL_ID"],
"notification_chats": []
}
应用 ID 来自 Basic Information;工作区和机器人用户 ID 可用官方 auth.test 确认。 用户 ID 从个人资料的 Copy member ID 获取,频道 ID 从频道详情获取。不要用显示名代替 ID。 这里的 bot_user_id 为 U... 用户身份,并非 B... 的 bot ID。 接收器同时验证工作区、应用与用户,发送前核对 token 的机器人身份。
启动
首次先复制通用配置模板,在项目目录执行:
. .venv/bin/activate
python -m pip install -e '.[slack]'
python -m integrations.cli --config config/integrations.local.json preflight --channel slack
python -m integrations.cli --config config/integrations.local.json slack
该进程同时启动 Socket Mode 和 worker。修改配置或环境变量后重启。 同时运行其他渠道时,所有进程使用同一份完整配置与数据目录。
命令与附件
单聊:
!status
!report
!audit
!candidate 候选ID
!run --no-discover
!review TICKET rejected 图中币种与描述不符
频道中使用 @FinFlow !status,并在 Slack 中选择真正的机器人 mention。 可发送一份 PDF 文件;频道附件消息也需 @。回复保留原 Slack 线程,自动日报默认发送到配置的频道主会话。 候选原图、完整 JSON 通过文件发送,人工决定使用带 ticket 的 !review,目前无 Slack 交互按钮。
运行边界
- 本版本面向一个工作区中的已安装机器人,不提供多租户 OAuth 安装入口。
- 接收新消息和文件分享,忽略编辑、删除、其他 bot 消息。事件先入库再确认;同一条消息的多个事件投递按频道和消息时间戳去重。
- 文件需机器人具备读取权限且由 Slack 托管。外链文件、尚未可访问的跨工作区文件,以及重定向至未允许域名的下载,不会自动导入。
- 文件大小受 FinFlow 设置和工作区限制共同约束;发送使用
files_upload_v2。 - 凭证、用户或频道权限变化后,重启全部相关进程;后台再次检查角色和会话授权。
- 阶段回执用于避免重复发送,上传成功但本地未保存回执的中断仍可能产生重复附件。
app-slack默认未批准训练用途,审核与发布继续执行通用来源策略。