【问题标题】:How can users upload images to a Slack app?用户如何将图像上传到 Slack 应用程序?
【发布时间】:2019-11-13 17:36:45
【问题描述】:

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

【问题讨论】:

    标签: python-3.x flask slack-api slack-dialog


    【解决方案1】:

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

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

    A - 图片网址

    用户不直接将图片上传到 Slack,而只提供互联网上托管的图片的 URL(例如上传到imgur.com)。可以在对话框中使用简单的plain-text input field 查询图像 URL。

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

    B - 外部网页

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

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

    C - 手动上传到 Slack

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-30
        • 1970-01-01
        • 2023-01-04
        • 1970-01-01
        • 2016-04-14
        • 2017-12-15
        • 2022-07-02
        • 1970-01-01
        相关资源
        最近更新 更多