【问题标题】:Slack WebAPI fails with not_authedSlack WebAPI 因 not_authed 而失败
【发布时间】:2017-10-07 03:44:12
【问题描述】:

我正在尝试以 Bot 用户的身份向 slack 发布交互式消息(使用 chat.postMessage 等)。

虽然我传递了 Bot 访问令牌(从初始 OAuth 收到),但我不断收到一条错误响应,指出“not_authed”。

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

我正在使用 node.js 中的“请求”执行以下操作:

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 文档,如果我作为 Bot 发布,我应该使用 Bot 的访问令牌(从初始 oauth 收到),但我认为我的请求格式不正确,或者令牌是不是 Slack 所期望的。

【问题讨论】:

  • 用 Postman 测试,当令牌通过 x-www-form-urlencoded 时,我似乎能够成功验证。

标签: slack


【解决方案1】:

好的,在与 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"); 
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 2012-10-03
    • 2014-07-16
    • 2021-11-23
    相关资源
    最近更新 更多