【问题标题】:Slack interactive buttons fail in message from incoming webhook来自传入 webhook 的消息中的 Slack 交互式按钮失败
【发布时间】:2016-10-08 10:21:46
【问题描述】:

我创建了一个带有传入 webhook 和斜杠命令的 Slack 应用程序。 OAUTH 进程按预期工作,我能够成功部署应用程序、检索和存储应用程序令牌。

我已经通过应用程序的传入 webhook 创建并发送了一条消息(带有交互式按钮)到 Slack。问题是按钮无法操作,并在 Slack 频道内生成错误消息。

阅读了尽可能多的 Slack 文档后,我注意到向 Slack 发送消息的机器人需要在消息中包含应用令牌。但是,我详细阅读了 webhook 文档,但找不到类似的要求。 webhook 指南只提到了所需的 JSON 格式,但没有提到应用令牌。我错过了什么吗?该指南明确指出 webhook 消息可以包含交互式按钮,但该按钮不起作用。我正在创建如下响应:

    $actions = [
        [
            "name"  => "save",
            "text"  => "Save",
            "type"  => "button",
            "value" => "save"
        ]
    ];

    $attachments = [
        [
            "fallback"      => "fallback message",
            "title"         => "Attachment 1",
            "text"          => "foobar attachment",
            "color"         => "#0066ff",
            "callback_id"   => "btn_action",
            "actions"       => $actions
        ]
    ];

    $payload = [
        "channel"       => "#test",
        "response_type" => "ephemeral",
        "icon_emoji"    => ":rocket:",
        "username"      => "Test User",
        "attachments"   => $attachments
    ];

    $data = 'payload=' . json_encode($payload);

    $ch = curl_init($webhook);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);    
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $result = curl_exec($ch);
    curl_close($ch);

希望有任何关于如何解决的建议! 干杯, 安德鲁。

【问题讨论】:

    标签: button message interactive slack-api


    【解决方案1】:

    我遇到了同样的问题,这是由于使用了一个与我授权我的应用程序时生成的不同的松弛令牌。我希望 slack 只能在具有该应用程序唯一的机器人令牌时才能识别该应用程序。不幸的是,获得这个新的机器人访问令牌是一个不平凡的过程。我将在下面概述:

    1. 在“添加 Slack 按钮”中选择您的应用和“机器人”复选框 https://api.slack.com/docs/slack-button的部分。

    2. 将它在“a”元素中生成的url粘贴到浏览器中,然后自己授权。

    3. 收集它在尝试重定向回您的应用程序时添加到 URL 的 code 令牌。

    4. 使用code 令牌为您的应用获取bot_access_token。我已经有一个使用 slack 进行基于 oath 登录的 python 应用程序,所以我只是修改了它,但是使用 python slackclient 代码看起来像这样:

      SlackClient("你的 api 令牌").api_call( 'oauth.access', client_id="你的应用客户端ID", client_secret="你的应用客户端密码", code="代码令牌")

    我认为它是这样工作的,因为第 3 方集成只是存储每个团队的 bot_access_token 并在以后使用它。就我而言,我只是想将机器人访问令牌填充为我的应用程序的环境变量,它永远不会在公共松弛应用程序目录中。我很想知道一种更简单的获取机器人访问令牌的方法,所以如果你找到了,请告诉我。希望这对你有用,安德鲁。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-26
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多