【问题标题】:How to pass a value from slack channel to `Options Load URL` in Slack App如何在 Slack App 中将值从 slack 通道传递到“选项加载 URL”
【发布时间】:2018-05-12 15:14:49
【问题描述】:

我在 node.js 中实现了一个 Slack 应用程序,我在其中动态地显示一个下拉菜单,从 Options Load URL 到 Slack 组上的一个频道。

根据我从外部 URL 返回的选项 JSON 正确显示下拉列表,

但现在的问题是,我需要根据用户在松弛通道上输入的内容在下拉菜单中设置单独的项目。

例如:

如果用户说:give me choices for option 1: 那么值 1 应该被传递给 Options Load URL 并且我在该 URL 上实现的代码将根据输入值 1 使用适当的 JSON 进行回复.

接下来,当用户说 give me choices for option 2: 时,应将值 2 传递给 Options Load URL,在那里实现的代码将根据收到的值 2 回复选项。

Options Load URL 处的代码已经实现。还实现了从用户消息中提取号码12的代码。

12 ... 等值不是恒定的或固定的。这些可以是随机的,Options Load URL 的 API 将能够正确处理这些值。

我只需要想办法以某种方式将这些值发送到Options Load URL

是否有可能在 Slack 中以某种方式做到这一点?

【问题讨论】:

    标签: javascript json node.js slack slack-api


    【解决方案1】:

    在您的请求中使用 name 属性将自定义值传递给您的应用程序中处理来自 Slack 的选项请求的部分(“选项加载 URL”)。我通常使用它来选择要返回的预定义选项列表,但您也可以使用它根据值动态创建新的选项列表。

    这里是用于创建动态菜单的示例 Slack 请求(来自 offical documentation),您可以在其中看到正在操作的 name 属性。在此示例中,它的值为 "bugs_list"

    {
        "text": "What's bugging you?",
        "response_type": "in_channel",
        "attachments": [
            {
                "fallback": "Upgrade your Slack client to use messages like these.",
                "color": "3AA3E3",
                "attachment_type": "default",
                "callback_id": "select_remote_1234",
                "actions": [
                    {
                        "name": "bugs_list",
                        "text": "Which random bug do you want to resolve?",
                        "type": "select",
                        "data_source": "external",
                        "min_query_length": 3,
                    }
                ]
            }
        ]
    }
    

    这是您的选项加载 URL 将收到的内容。注意name 参数。

    {
        "name": "bugs_list",
        "value": "bot",
        "callback_id": "select_remote_1234",
        "team": {
            "id": "T012AB0A1",
            "domain": "pocket-calculator"
        },
        "channel": {
            "id": "C012AB3CD",
            "name": "general"
        },
        "user": {
            "id": "U012A1BCJ",
            "name": "bugcatcher"
        },
        "action_ts": "1481670445.010908",
        "message_ts": "1481670439.000007",
        "attachment_id": "1",
        "token": "verification_token_string"
    }
    

    name 参数是 HTTP 请求中的常用参数,因此您可以将几乎所有内容都放入其中,甚至是数据结构,只要它们被编码为字符串即可。另请参阅我的 other answer,其中谈到了在 Slack 参数中传递数据的限制。

    【讨论】:

    • 谢谢,这就是我最终要做的。但在我的情况下,事情有点复杂,因为我稍后在通过操作获得响应以确定用户执行了哪种操作时使用了这个名称值。 (我也有 Button Clicks,我使用此名称来区分用户单击了哪个按钮。)因此,我最终将我的值作为空格分隔的字符串附加到名称。这似乎不是一个优雅的解决方案,但它现在有效。
    • 酷。我也这样做,但通常对我的数据结构使用 JSON 编码。我同意这似乎不是一个优雅的解决方案,但没有任何好的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2018-05-13
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多