【问题标题】:POST from Slack for button interactions has empty body来自 Slack 的用于按钮交互的 POST 正文为空
【发布时间】:2019-06-13 14:56:42
【问题描述】:

我正在使用 node.js 设置一个 Slack 机器人。事件系统运行良好,并为我提供了来自 Slack 的有效正文的 POST,我能够成功地将消息(交互式和非交互式)发送到 Slack。

但是,Slack 发送给我以响应与交互式消息上的按钮的交互的 POST 的正文是空的。有趣的是,Slack 标头仍然格式正确,尽管它未能通过签名秘密测试(我知道我已正确实施,因为来自 Slack 的事件 POST 通过了它)。

我已经根据 Slack 自己的文档在此处设置了交互的所有内容:https://api.slack.com/messaging/interactivity/enabling。我正在使用 express、request 和 XMLHttpRequest 来接收和发送 HTTP 方法。如果有人遇到过这个问题或有任何见解,那就太好了。谢谢!

这是我的函数从交互中接收 POST 的代码 sn-p:

var express = require('express');
var request = require('request');
var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.json());

app.post('/interaction', (req, res) => {
    res.sendStatus(200);
    var payload = {
            "channel": req.body.payload.channel, // Breaks here since req.body is empty
            "text": "Selected choice " + req.body.payload.actions.text.text
        }

    var r = new XMLHttpRequest();
    r.onload = () => { var status = request.status; var data = request.responseText; }
    r.open("POST", request_url, true);
    r.setRequestHeader("Content-Type", "application/json");
    r.setRequestHeader("Authorization", "Bearer " + botToken);
    r.send(JSON.stringify(payload));
});

【问题讨论】:

  • 感谢您在 SO 上发布问题。社区已准备好帮助您找到解决方案,但如果您编写代码添加代码的相关部分以及从 Slack 接收到的消息的示例,这将非常有帮助。 TY

标签: node.js slack-api


【解决方案1】:

Slack 文档似乎没有提到这一点,但根据经验,webhook 调用应用程序的内容类型似乎使用Content-Type: application/x-www-form-urlencoded。您需要添加:

app.use(bodyParser.urlencoded({ extended: true }));

另外,payload 参数不能像你正在做的那样被访问:它实际上是一个序列化为字符串的 JSON 对象。这记录在这里:https://api.slack.com/messaging/interactivity/enabling#understanding_payloads

请求将发送到您在 HTTP POST 中指定的请求 URL。该请求的正文将包含一个有效负载参数。您的应用应将此有效负载参数解析为 JSON。

所以你的代码会想要做这样的事情:

var slack_payload = JSON.parse(req.body.payload);
var payload = {
            "channel": slack_payload.channel,
            "text": "Selected choice " + slack_payload.actions.text.text
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-31
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    相关资源
    最近更新 更多