如何将值从松弛通道传递到 Slack App 中的“Options Load URL”

How to pass a value from slack channel to `Options Load URL` in Slack App

我在 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 并且那里实现的代码将根据值 [=] 回复选项17=] 它收到。

Options Load URL 处的代码已经实现。从用户消息中提取数字12的代码也已实现。

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

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

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

在您的请求中使用 name 属性 将自定义值传递给应用程序中处理来自 Slack 的选项请求的部分 ("Options Load URL")。我通常使用它来 select 预定义选项列表到 return,但你也可以使用它根据值动态创建新的选项列表。

此处的参考是创建动态菜单的示例 Slack 请求(来自 offical documentation),您可以在其中看到正在执行的名称 属性。在此示例中,它的值为 "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,
                }
            ]
        }
    ]
}

这是您的 Options Load 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 请求中的一个常见参数,因此您可以在其中放置几乎所有内容,甚至数据结构,只要它们被编码为字符串即可。另请参阅我的 ,其中讨论了在 Slack 参数中传递数据的限制。