将斜线命令用法限制为应用程序通道

时间:2018-12-18 00:30:50

标签: slack botkit

我使用botkit / node.js / express服务器创建了一个松弛的应用程序。

我的方法:

    controller.on('slash_command', function(bot, message) { SOME_LOGIC } 

侦听每个通道中的所有斜杠命令。现在,我的机器人(松弛应用)拥有自己的直接渠道。我希望我的slash命令仅侦听该特定通道中的斜杠命令。有可能限制斜杠命令吗?会是什么样?

我似乎找不到直接与slack app bot通话的唯一标识符。

1 个答案:

答案 0 :(得分:1)

是的,那是可能的。

通常slash commands可以在任何频道/会话中使用,并且Slack API中没有选项可以将它们限制为特定的会话。但是,您可以将适当的功能添加到您的应用程序,因此它仅对来自应用程序通道的命令做出反应。方法如下:

1。检测正确的对话

来自Slack的每个斜杠命令请求都包括来自发出该会话的对话的通道ID和来自相应用户的用户ID。 (参见下面的斜杠命令示例)。您的应用只需查找与该应用频道相对应的频道ID,并做出相应的反应。

以下是斜杠命令的示例(来自official documentation

token=gIkuvaNzQIHg97ATvDxqgjtO
&team_id=T0001
&team_domain=example
&enterprise_id=E0001
&enterprise_name=Globular%20Construct%20Inc
&channel_id=C2147483705
&channel_name=test
&user_id=U2147483697
&user_name=Steve
&command=/weather
&text=94070
&response_url=https://hooks.slack.com/commands/1234/5678
&trigger_id=13345224609.738474920.8088930838d88f008e0

要获取与当前用户对应的频道ID,您可以在types设置为IM的情况下调用conversations.list,这将为您提供所有直接消息频道及其应用程序的频道ID 。 user等于当前斜杠请求中的用户ID的那个是正确的。

以下是来自channels.list的直接消息响应示例:

{
    "ok": true,
    "channels": [
        {
            "id": "D0G9QPY56",
            "created": 1449709280,
            "is_im": true,
            "is_org_shared": false,
            "user": "USLACKBOT",
            "is_user_deleted": false,
            "priority": 0
        },
        {
            "id": "D1KL59A72",
            "created": 1466692204,
            "is_im": true,
            "is_org_shared": false,
            "user": "U0G9QF9C6",
            "is_user_deleted": false,
            "priority": 0
        }
}

2。回应其他对话

此外,您还需要响应其他会话中的斜杠命令请求,否则将在Slack上收到超时错误。

对于那些您可以使用空主体和HTTP代码200进行响应,这将不会在Slack上创建任何输出。

或者,您可以通过一条简短的消息来回应用户,说明他应该在适当的通道中使用您的斜杠命令。 (我建议您使用此选项,因为它对用户更友好)