如何在松弛应用程序中将松弛通道中的值传递给“选项加载URL”

时间:2017-11-29 01:59:54

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

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

根据我从外部URL返回的选项JSON

,正确显示下拉列表

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

例如:

如果用户说:give me choices for option 1:那么值1应该传递给Options Load URL,我在该网址上实现的代码将使用相应的JSON进行回复输入值1

接下来,当用户说give me choices for option 2时:应将值2传递给Options Load URL,其中实现的代码将根据值{{1}回复选项它收到了。

2的代码已经实施。还实现了从用户消息中提取数字Options Load URL1的代码。

21 ...等不是常数或固定的。这些可以是随机的,2处的API将能够正确处理这些值。

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

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

1 个答案:

答案 0 :(得分: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,
                }
            ]
        }
    ]
}

以下是您的选项加载网址将收到的内容。请注意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参数中传递数据的限制。