Slack斜杠命令如何获取用户上传的媒体文件?
如何通过Slack斜杠命令或机器人获取用户上传的文件?
斜杠命令的直接请求负载本身不会附带任何文件数据,这是Slack的机制限制。要实现同时接收文本和媒体文件的需求,可以通过以下两种方案解决:
方案一:消息事件监听+斜杠命令联动
这种方案适配用户直接在聊天框发送斜杠命令+文件的操作习惯:
- 给Slack应用添加对应权限:根据需要监听的频道类型,勾选
channels:history(公开频道)、groups:history(私有频道)、im:history(私聊)、mpim:history(多人私聊)权限;同时启用message.channels、message.im等对应的消息事件。 - 事件关联逻辑:用户发送斜杠命令+文件后,Slack会先触发斜杠命令请求,随后发送包含文件信息的消息事件到你的应用。消息事件的payload里会有
files数组,包含所有上传文件的ID、私有链接、文件类型等详情。你可以通过事件中的user、channel字段,和斜杠命令请求里的user_id、channel_id做关联,匹配到对应的文件。 - 注意事项:用
event_id对事件做去重处理,避免重复处理同一消息。
方案二:通过模态框(Modal)收集文本与文件
这种方案更可控,能明确引导用户提交内容:
- 触发模态框:在斜杠命令的响应逻辑中,调用Slack的
views.openAPI,弹出一个模态框。模态框里需包含两个核心组件:plain_text_input:用于收集用户的文本内容file_input:用于让用户上传图片、视频、语音等文件
- 获取提交内容:用户在模态框中完成提交后,Slack会发送
view_submission事件到你的应用。事件payload的state.values字段里会包含用户输入的文本,以及上传文件的ID。 - 获取文件详情:调用
files.infoAPI,传入文件ID即可获取文件的完整信息,之后就能根据文本中的关键词判断是否将文件发布到指定频道。
权限补充说明
- 两种方案都需要确保应用已授权
files:read权限,才能读取文件详情;若要将文件发布到其他频道,files:write权限必须配置。 - 模态框方案额外需要
chat:write权限,用于触发模态框。
内容的提问来源于stack exchange,提问作者Nuriel
相关产品推荐
相关产品推荐

