来自传入webhook的消息中的松弛交互式按钮失败

时间:2016-10-08 10:21:46

标签: button message interactive slack-api

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

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

Slack Error Message

我已经阅读了尽可能多的Slack文档,我注意到向Slack发送消息的机器人需要在消息中包含app令牌。我详细阅读了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);

会喜欢有关如何解决的任何建议! 干杯, 安德鲁。

1 个答案:

答案 0 :(得分:4)

我遇到了同样的问题,这是因为使用的松弛令牌与我授权应用时生成的令牌不同。我希望松弛只能识别应用程序,如果它具有该应用程序独有的机器人令牌。不幸的是,获得这个新的机器人访问令牌是一个非常重要的过程。我将在下面概述:

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

  2. 将其生成的网址粘贴到' a'元素进入浏览器,然后自行授权。

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

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

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

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