Node.js调用Slack API报invalid_blocks_format错误求助
解决Slack Block Kit的
invalid_blocks_format错误(多参数URL场景) 问题本质
带多个查询参数的URL中的&符号,会被Slack的Block Kit解析逻辑误判为JSON结构的分隔符,触发invalid_blocks_format错误;但直接将&URL编码成%26后,Slack不会自动解码,导致URL显示不可读。
两种可行解决方案
1. 使用Slack Markdown链接语法(推荐)
用<完整URL|显示文本>的格式包裹URL,Slack会正确识别URL中的特殊字符,同时展示友好的可读文本,不会触发格式错误。
Node.js代码示例:
const axios = require('axios'); const sendSlackMessage = async () => { const slackPayload = { blocks: [ { type: "section", text: { type: "mrkdwn", text: `查看详情: <https://example.com/url?param1=value1¶m2=value2|点击跳转>` } } ] }; try { await axios.post('https://slack.com/api/chat.postMessage', slackPayload, { headers: { 'Authorization': 'Bearer YOUR_SLACK_TOKEN', 'Content-Type': 'application/json' } }); } catch (error) { console.error('发送失败:', error.response.data); } }; sendSlackMessage();
2. 用Unicode转义&符号(仅适用于需显示完整URL的场景)
如果必须在消息中展示完整URL文本,可将URL中的&转义为Unicode的\u0026,Slack会自动解码显示原始URL,同时避免格式错误。
Node.js代码示例:
const slackPayload = { blocks: [ { type: "section", text: { type: "plain_text", text: "详情链接: https://example.com/url?param1=value1\u0026param2=value2" } } ] };
关键注意事项
- 发送请求时必须设置
Content-Type: application/json,确保Payload以JSON格式发送,而非表单编码,避免HTTP层面的参数解析干扰。 - 禁止手动对整个URL做URL编码,Slack会自行处理URL的解析逻辑,只需针对
&符号做上述处理即可。
内容的提问来源于stack exchange,提问作者xxlali
相关产品推荐
相关产品推荐

