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

如何通过Slack入站Webhook发送独立消息及构建站点数组消息

嘿,我来帮你搞定这个Slack消息的问题!先理理你现在的实现逻辑,再解答你的核心疑问~

你的现有实现梳理

目前你正在做的流程很清晰:

  1. 调用API拉取网站统计数据
  2. 分析返回结果,把符合条件的站点筛选出来存入数组sites
  3. 构建Slack消息,将sites数组放到消息attachments的fields字段中

你给出的消息结构示例可以整理成代码块更清晰:

"attachments": [
  {
    "fallback": "",
    "color": "#E50000",
    "author_name": "title",
    "title": "metrics recorded",
    "title_link": "https://mor47992.live.dynatrace.com/#dashboard;id=cc832197-3b50-489e-b2cc-afda34ab6018;gtf=l_7_DAYS",
    "text": "more title info",
    "fields": sites,
    "ts": Date.now(...)
  }
]
如何发送独立而非连续的Slack消息?

其实Slack入站Webhook本身就是每次请求对应一条独立消息的!如果你之前遇到消息被合并成连续内容的情况,大概率是这几个原因:短时间内发送的消息太相似、用了线程关联字段,或者把多条消息打包成一个请求发送了。要确保每条消息独立,你可以注意这几点:

  • 每次消息单独发请求:每一条独立消息都要单独发起一次POST请求到你的Webhook URL,别把多个消息结构合并成一个请求发送。
  • 别加线程关联字段:如果你的消息里没有设置thread_ts(线程时间戳),Slack会默认把每条消息当成全新的独立消息展示,不会归到同一个线程里。
  • 给消息加独特标识:如果两条消息的标题、内容完全一致,Slack可能会自动合并它们。所以给每条消息设置不一样的标题、文本,或者用当前秒级时间戳作为ts值,就能避免这种情况。

举个Node.js的示例代码,帮你直观理解怎么发送独立消息:

const axios = require('axios');

// 封装发送Slack消息的函数
async function sendSingleSlackMsg(message) {
  const webhookUrl = '你的Slack入站Webhook地址';
  try {
    await axios.post(webhookUrl, message);
    console.log('独立消息发送成功');
  } catch (err) {
    console.error('消息发送失败:', err);
  }
}

// 发送第一条独立消息
const firstMsg = {
  attachments: [
    {
      fallback: "站点统计通知",
      color: "#E50000",
      author_name: "站点监控系统",
      title: "第一组符合条件的站点",
      text: "这是第一条独立推送的消息",
      fields: [{title: "站点A", value: "指标达标", short: true}],
      ts: Date.now() / 1000 // Slack的ts需要是秒级时间戳,记得转换
    }
  ]
};
sendSingleSlackMsg(firstMsg);

// 间隔2秒发送第二条独立消息
setTimeout(() => {
  const secondMsg = {
    attachments: [
      {
        fallback: "站点统计通知",
        color: "#00E500",
        author_name: "站点监控系统",
        title: "第二组符合条件的站点",
        text: "这是第二条独立推送的消息",
        fields: [{title: "站点B", value: "指标达标", short: true}],
        ts: Date.now() / 1000
      }
    ]
  };
  sendSingleSlackMsg(secondMsg);
}, 2000);

如果你的需求是每个符合条件的站点单独发一条消息,那更简单:直接遍历你的sites数组,给每个站点单独构建消息结构,然后逐个调用上面的发送函数就行。

内容的提问来源于stack exchange,提问作者chinds

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:59:50