【问题标题】:Restrict slash command usage to app channel将斜杠命令的使用限制为应用程序通道
【发布时间】:2018-12-18 00:30:49
【问题描述】:

我使用 botkit / node.js / express server 创建了一个 slack 应用程序。

我的方法:

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

侦听每个通道中的所有斜杠命令。现在,我的机器人(slack 应用程序)拥有自己的直接渠道。我希望我的斜杠命令只监听该特定频道中的斜杠命令。是否可以像这样限制斜杠命令?它会是什么样子?

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

【问题讨论】:

    标签: slack slack-api botkit


    【解决方案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,您可以调用 conversations.list 并将 types 设置为 IM,这将为您提供所有直接消息频道及其应用的频道 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 上创建任何输出。

    或者,您可以回复一条短消息,向用户解释他应该在正确的频道中使用您的斜杠命令。 (我会推荐这个选项,因为它对用户更友好)

    【讨论】:

    • 感谢您的回复!我专门寻找用户何时通过直接消息直接与 Slack 应用程序交互。当我使用 conversations.list 时,它只显示公共频道。有没有办法识别用户正在与应用程序直接交互?
    • 我也很乐意帮助您解决这个问题,但对我来说这似乎是一个全新的话题。请为其创建一个新问题。泰。
    • 嗨,埃里克,谢谢!如何检测用户是否直接与 slack bot 应用程序通信是我最初的问题。
    • 据我所知,这个问题只是询问如何限制斜杠命令,我想我已经全面回答了。如果您还想了解直接消息,请提出另一个问题。
    猜你喜欢
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    • 2021-06-08
    • 2021-07-17
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    相关资源
    最近更新 更多