You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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&param2=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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 20:39:06