为了提供上下文,我有一个允许用户创建广告的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()发布于 2019-11-14 07:21:12
没有直接的方法,因为Slack API (当前)不提供filer选择器。
然而,这里有3个解决方法来解决这个要求:
A-图像URL
用户只需提供托管在互联网上的图片的网址(例如,上传到imgur.com),而不是直接将图片上传到Slack。可以在对话框中使用简单的plain-text input field查询图像URL。
如果你能期望你的用户足够精通技术,能够处理图片URL和上传到imgur.com (或其他图片托管商),我认为这种方法效果很好。
B-外部网页
您可以将用户重定向到具有文件选择器的应用程序的外部网页。该文件选择器允许将图像从用户本地计算机上传到您的应用程序。
这种方法也能很好地工作。然而,用户需要切换到浏览器(然后再切换回Slack ),所以它可能会稍微中断输入流。它也需要更多的努力来实现,例如,你需要以一种安全的方式维护Slack和你的网页之间的上下文,这可能是一个挑战。
C-手动上传到Slack
用户手动将图片上传到Slack,例如在应用程序通道中。你的应用程序会检测每一张上传的图片,并询问他们要将图片附加到应用程序的哪个项目上。
这种方法允许您留在Slack生态系统中,但可能会让用户感到困惑,并且确保用户上传和您的项目之间的正确链接可能是一个挑战。
附言:我的一个Slack应用程序(Rafflebot)也有同样的要求,我选择了A方法。
发布于 2019-11-20 04:47:36
您没有展示如何调用/new (使用触发器id)。然而,虽然对话和新的模态似乎没有文件选择器,但slack应用程序肯定有。因此,我所做的就是向我的应用程序发送一条消息作为我的流程的开始--该消息可以附加文件。例如,我的应用程序看起来是消息'new report‘-用户在发送之前可以附加图像-我的应用程序将获得消息并获得"files“属性作为消息事件的一部分。
https://stackoverflow.com/questions/58842648
复制相似问题