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
的结构不正确,就会出错。请注意这一点。
参考文献:
如果我误解了您的问题并且这不是您问题的直接解决方案,我深表歉意。
我正在尝试使用 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
的结构不正确,就会出错。请注意这一点。
参考文献:
如果我误解了您的问题并且这不是您问题的直接解决方案,我深表歉意。