Slack Web API 失败并显示 not_authed

Slack WebAPI fails with not_authed

我正在尝试 post 作为机器人用户的交互式消息(使用 chat.postMessage 等)。

虽然我传递了机器人访问令牌(从初始 OAuth 收到),但我不断收到错误响应,指出 "not_authed"。

当我尝试 auth.test 时,我得到了同样的结果。

我在 node.js 中对 "request" 执行类似以下操作:

app.get("/testAuth/test", function(req,res){
    console.log("in testAuth/test...sending test message to Slack");

    var bToken = process.env.TESTBOT_ACCESS_TOKEN;
    var slackMessageURL = "https://slack.com/api/auth.test";
    var postOptions = {
        uri: slackMessageURL,
        method: "POST",
        token: bToken
    };
    request(postOptions, (error, response, body) => {
        if(error){
            console.log("OOPPPPS....we hit an error in auth.test: " + error);
        } else {
            console.log("auth.test response: " + JSON.stringify(response));
        }
    });
    res.send("Sent Test...check logs"); 
});

结果为:

auth.test response: {"statusCode":200,"body":"{\"ok\":false,\"error\":\"not_authed\"}",...

根据 Slack WebAPI 文档,如果我 post 作为 Bot,我应该使用 Bot 的访问令牌(从初始 oauth 收到),但我想我正在格式化我的请求不正确,或者令牌不是 Slack 所期望的。

好的,在与 Slack 支持人员交谈后,我调用的 WebAPI 似乎(至少)还不支持 application/json。这些确实适用于 x-www-form-urlencoded。

正在看这个post

我能够拼凑出以下已成功验证的内容:

//up top
var request = require("request");

var querystring = require("querystring");

//...

app.get("/testAuth/test", function(req,res){
    console.log("in testAuth/test...sending test message to Slack");

    var bToken = process.env.TESTBOT_ACCESS_TOKEN;
    var message = {
        token: bToken
    };
    var messageString = querystring.stringify(message);
    var messageLength = messageString.length;
    var slackMessageURL = "https://slack.com/api/auth.test";
    var postOptions = {
        headers: {
            "Content-length": messageLength,
            "Content-type": "application/x-www-form-urlencoded"
        },
        uri: slackMessageURL,
        body: messageString,
        method: "POST"
    };
    request(postOptions, (error, response, body) => {
        if(error){
            console.log("OOPPPPS....we hit an error in auth.test: " + error);
        } else {
            console.log("auth.test response: " + JSON.stringify(response));
        }
    });
    res.send("Sent Test...check logs"); 
});