python-3.x - 用户如何将图像上传到 Slack 应用程序?
问题描述
为了提供上下文,我有一个允许用户创建广告的 Slack 机器人,我可以使用对话框来获取列表标题、描述和价格。我正在寻找一种允许用户也添加图像的方法。
file.upload似乎允许机器人上传文件,但我想要的是能够允许用户在本地选择文件并上传它们,然后机器人将能够捕获并做出相应的响应。
这就是我到目前为止所拥有的
@app.route('/new', methods=['POST'])
def new_listing():
# Get payload
api_url = 'https://slack.com/api/dialog.open'
trigger_id = request.form.get('trigger_id')
dialog = {
"callback_id": "marketplace",
"title": "Create a new listing",
"submit_label": "Create",
"notify_on_cancel": True,
"state": "Item",
"elements": [
{
"type": "text",
"label": "Listing Title",
"name": "listing_title"
},
{
"type": "text",
"label": "Listing description",
"name": "listing_description"
},
{
"type": "text",
"label": "Listing Price",
"name": "listing_price"
}
]
}
api_data = {
"token": oauth_token,
"trigger_id": trigger_id,
"dialog": json.dumps(dialog)
}
res = requests.post(api_url, data=api_data)
print(res.content)
return make_response()
@app.route('/message_actions', methods=['POST'])
def message_actions():
user_id = request.form['user']['id']
submission = request.form['submission']
title = submission['listing_title']
description = submission['listing_description']
price = submission['listing_price']
# Add the listing to the database
return make_response()
解决方案
没有直接的方法,因为 Slack API(当前)不提供文件选择器。
但是,这里有 3 个解决方法来解决此要求:
A - 图片网址
用户不直接将图像上传到 Slack,而只需提供托管在 Internet 上的图像的 URL(例如上传到imgur.com
)。可以使用对话框中的简单纯文本输入字段来查询图像 URL 。
如果您可以期望您的用户足够精通技术以处理图像 URL 和上传到imgur.com
(或其他图像托管商),我认为这种方法非常有效。
B - 外部网页
您将用户重定向到具有文件选择器的应用程序的外部网页。该文件选择器允许将图像从用户本地计算机上传到您的应用程序。
这种方法也很有效。然而,用户需要切换到浏览器(然后再次切换回 Slack),因此它可能会稍微中断输入流程。实施起来也需要付出更多的努力,例如,您需要以安全的方式维护 Slack 和您的网页之间的上下文,这可能是一个挑战。
C - 手动上传到 Slack
用户将图像手册上传到 Slack,例如在应用程序频道中。您的应用程序会检测每张图片上传并询问他们将其附加到您的应用程序的哪个项目。
这种方法允许您留在 Slack 生态系统中,但可能会让用户感到困惑,并且确保用户上传和您的项目之间的正确链接可能是一个挑战。
PS:我对我的一个 Slack 应用程序(Rafflebot)有相同的要求,并采用了方法 A。
推荐阅读
- git - UI上的git过滤器和git rev-list命令有什么区别
- php - 防止 URL 变量不显示在 URL 中
- css - Bootstrap 模板:为所有视图使用模板
- python - 从 back4app 获取
- html - 我想将 HTML 表单字段传递给脚本中的 powershell 变量
- google-app-engine - 如何让 golang gin 与谷歌应用引擎一起工作?
- linux - PhpStorm 远程 Xdebug
- python - MSK 调制波形绘图
- mongodb - 如何将多个 MongoDB 集合的内容发送到使用 express 进行渲染的路由?
- vue.js - 如何为 Vue 组件数据指定类型、默认值和验证器