1

为了提供上下文,我有一个允许用户创建广告的 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()
4

2 回答 2

2

没有直接的方法,因为 Slack API(当前)不提供文件选择器。

但是,这里有 3 个解决方法来解决此要求:

A - 图片网址

用户不直接将图像上传到 Slack,而只需提供托管在 Internet 上的图像的 URL(例如上传到imgur.com)。可以使用对话框中的简单纯文本输入字段来查询图像 URL 。

如果您可以期望您的用户足够精通技术以处理图像 URL 和上传到imgur.com(或其他图像托管商),我认为这种方法非常有效。

B - 外部网页

您将用户重定向到具有文件选择器的应用程序的外部网页。该文件选择器允许将图像从用户本地计算机上传到您的应用程序。

这种方法也很有效。然而,用户需要切换到浏览器(然后再次切换回 Slack),因此它可能会稍微中断输入流程。实施起来也需要付出更多的努力,例如,您需要以安全的方式维护 Slack 和您的网页之间的上下文,这可能是一个挑战。

C - 手动上传到 Slack

用户将图像手册上传到 Slack,例如在应用程序频道中。您的应用程序会检测每张图片上传并询问他们将其附加到您的应用程序的哪个项目。

这种方法允许您留在 Slack 生态系统中,但可能会让用户感到困惑,并且确保用户上传和您的项目之间的正确链接可能是一个挑战。

PS:我对我的一个 Slack 应用程序(Rafflebot)有相同的要求,并采用了方法 A。

于 2019-11-13T23:21:11.880 回答
0

您没有显示您是如何调用 /new 的(使用触发器 ID)。然而——虽然对话和新模式似乎没有文件选择器——但 Slack 应用程序确实有。所以我要做的就是向我的应用程序发送一条消息开始我的流程 - 该消息可以附加文件。因此,例如,我的应用程序看起来消息“新报告” - 用户,在发送之前可以附加图像 - 我的应用程序将同时获取消息并获取“文件”属性作为消息事件的一部分。

于 2019-11-19T20:47:35.530 回答