chat.postMessage invalid_json 的响应

chat.postMessage response of invalid_json

我正在尝试使用 Slack api 方法 chat.postMessage。这是以块格式发送 JSON 的文档:

这是我使用 google 应用程序脚本发送消息的代码:

try {
    var params = {
      method: "post",
      headers: {
        Authorization: "Bearer " + token,
        "Content-Type": "application/json; charset=utf-8"
      },
      payload: {
        text: "posted",
        channel: channel_id,
        blocks: encodeURIComponent(JSON.stringify(result.payload.blocks))
      }
    };
    var url = "https://slack.com/api/chat.postMessage";
    var response = UrlFetchApp.fetch(url, params);
    var json = response.getContentText();
    var data = JSON.parse(json);
    log("Response Data: " + JSON.stringify(data));
...

我得到的回复是 {"ok":false,"error":"invalid_json"}

我已经使用 JSON 并使用 Slack's Block Kit Builder 对其进行了测试,其中 JSON 似乎格式正确。

在上面的代码中,我尝试了使用和不使用 encodeURIComponent 并得到了相同的错误。由于上图中的文档,我认为我需要对其进行编码。

我四处寻找解决方案,但没有找到类似的问题。我应该在这里寻找什么?不知所措。谢谢!

这个修改怎么样?

修改点:

  • 这种情况下,while payload请使用JSON.stringify(),不需要encodeURIComponent()

修改后的脚本:

当您的脚本修改时,请修改如下。

从:
var params = {
  method: "post",
  headers: {
    Authorization: "Bearer " + token,
    "Content-Type": "application/json; charset=utf-8"
  },
  payload: {
    text: "posted",
    channel: channel_id,
    blocks: encodeURIComponent(JSON.stringify(result.payload.blocks))
  }
};
到:
var params = {
  method: "post",
  headers: {Authorization: "Bearer " + token},
  contentType: "application/json",
  payload: JSON.stringify({
    text: "posted",
    channel: channel_id,
    blocks: result.payload.blocks
  })
};

注:

  • 如果与范围有关的错误,请添加范围以使用"chat.postMessage"。
  • 我不确定 result.payload.blocks。所以如果result.payload.blocks的结构不正确,就会出错。请注意这一点。

参考文献:

如果我误解了您的问题并且这不是您问题的直接解决方案,我深表歉意。