Node.js 实现企业内部消息通知系统(钉钉/企业微信机器人)

💬 Node.js 实现企业内部消息通知系统(钉钉/企业微信机器人)

🧩 关键词:Node.js / Webhook / 自动化通知 / 企业微信 / 钉钉机器人


🔍 一、写在前面

在企业内部系统中,我们经常需要自动推送各种消息:

  • 系统监控报警(CPU过高、接口异常)
  • 每日报表通知(销售日报、库存统计)
  • 审批结果提醒(订单通过、发货完成)

以前这些消息都要人工发送,现在我们用 Node.js + 企业微信机器人(Webhook) 就能轻松搞定。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

👉 核心目标:
让 Node.js 脚本能自动向钉钉或企业微信发送结构化消息(文本、卡片、Markdown等)。


🧠 二、系统架构思路

整个系统逻辑非常简单👇

┌─────────────────────┐
│    数据源 / 系统事件   │
│  (监控 / 日报 / API) │
└──────────┬──────────┘
           │
           ▼
┌─────────────────────┐
│ Node.js 通知脚本      │
│ - 组装消息内容        │
│ - 调用 Webhook 接口    │
└──────────┬──────────┘
           │
           ▼
┌─────────────────────┐
│ 企业微信 / 钉钉机器人   │
│ - 接收消息并展示         │
└─────────────────────┘

⚙️ 三、环境准备

1️⃣ 创建企业微信机器人

  1. 进入 企业微信 → 应用管理 → 群机器人
  2. 添加一个机器人,复制生成的 Webhook地址

示例地址:

https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxx-xxxxxx

💻 四、Node.js 代码实战

创建一个项目:

mkdir wechat-bot-demo
cd wechat-bot-demo
npm init -y
npm install axios

创建文件 notify.js

const axios = require('axios');

// 你的企业微信机器人 Webhook 地址
const WEBHOOK_URL = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxx-xxxxxx';

// 封装一个发送函数
async function sendMessage(content) {
  try {
    const res = await axios.post(WEBHOOK_URL, {
      msgtype: 'markdown',
      markdown: {
        content: content
      }
    });
    console.log('✅ 消息发送成功:', res.data);
  } catch (error) {
    console.error('❌ 消息发送失败:', error);
  }
}

// 示例:推送日报
const today = new Date().toLocaleDateString();
const markdown = `
**📊 每日报告通知**
> 日期:${today}
> 销售额:¥123,450  
> 新增客户:32  
> 异常订单:<font color="warning">3</font>  

[查看详细报表](https://yourdomain.com/report)
`;

sendMessage(markdown);

运行脚本:

node notify.js

👉 群里会收到一条漂亮的 Markdown 卡片消息。


🔁 五、进阶应用场景

1️⃣ 自动推送系统监控结果

function getSystemHealth() {
  return {
    cpu: 85,
    memory: 72
  };
}

const sys = getSystemHealth();
const content = `
**⚠️ 系统告警**
CPU使用率:${sys.cpu}%
内存使用率:${sys.memory}%
> 请尽快检查服务器状态!
`;

sendMessage(content);

可以搭配 cron 实现定时检测与通知

crontab -e
*/30 * * * * node /home/app/notify.js

2️⃣ 推送日报自动化

将数据从数据库读取并发送:

const mysql = require('mysql2/promise');

async function getDailyReport() {
  const conn = await mysql.createConnection({host: 'localhost', user: 'root', database: 'sales'});
  const [rows] = await conn.execute('SELECT COUNT(*) as orders, SUM(amount) as total FROM orders WHERE DATE(created_at)=CURDATE()');
  return rows[0];
}

async function sendDailyReport() {
  const data = await getDailyReport();
  const msg = `
  **📅 销售日报**
  > 订单数:${data.orders}  
  > 销售额:¥${data.total}  
  `;
  sendMessage(msg);
}

sendDailyReport();

🧩 六、支持钉钉版本

钉钉机器人调用方式基本一致,只需更换 Webhook 地址:

const WEBHOOK_URL = 'https://oapi.dingtalk.com/robot/send?access_token=xxxxx';

await axios.post(WEBHOOK_URL, {
  msgtype: 'markdown',
  markdown: {
    title: '系统通知',
    text: '### 🚀 钉钉机器人消息测试\n> 一切正常 ✅'
  }
});

🔒 七、安全与配置建议

风险建议措施
Webhook 泄露放在服务器端环境变量,不要写死在前端
消息频繁加入防抖机制或限频逻辑
内容过长Markdown消息有字数限制(2000字内)

🧭 八、结语

自动化通知是企业信息流转的关键一步。
用简单的 Node.js 脚本,你就能让系统自动发出提醒、日报、监控告警,
从被动汇报变为主动通知,真正实现“信息到人”。


🏭 九、业务实战案例:自动推送库存预警通知

企业日常中,库存管理是最容易被忽视但又最关键的部分。
很多公司使用 ERP 或 WMS 系统记录库存,当某个商品库存低于安全线时,需要及时通知采购或仓库人员。
过去都是人工导出表格、手动通知,现在我们让系统自动监测库存并推送企业微信消息👇


🎯 业务目标

当数据库中某个商品库存低于安全库存时,
系统自动检测到并推送通知到企业微信群。

触发条件通知内容
库存 < 安全线“⚠️ 库存告警:产品XXX 当前库存仅剩5件”

🧩 系统流程

┌────────────────────────────┐
│     MySQL库存数据表         │
│  product(id, name, stock, min_stock) │
└──────────────┬────────────┘
               │ 定时任务检查库存
               ▼
┌────────────────────────────┐
│   Node.js 脚本             │
│  - 查询低库存商品          │
│  - 拼接告警消息 Markdown   │
│  - 调用 Webhook 接口发送   │
└──────────────┬────────────┘
               ▼
┌────────────────────────────┐
│ 企业微信机器人              │
│ 自动推送消息至群组           │
└────────────────────────────┘

💻 实战代码实现

1️⃣ 数据库设计(MySQL)

CREATE TABLE products (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50),
  stock INT,
  min_stock INT
);

INSERT INTO products (name, stock, min_stock) VALUES
('试剂盒A', 8, 10),
('酶标板B', 22, 15),
('离心管C', 4, 10);

2️⃣ Node.js 实现库存检测与消息推送

安装依赖:

npm install mysql2 axios

创建文件 inventory_alert.js

const mysql = require('mysql2/promise');
const axios = require('axios');

const WEBHOOK_URL = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxx-xxxxxx';

// 连接数据库
async function getLowStockProducts() {
  const conn = await mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '123456',
    database: 'warehouse'
  });
  const [rows] = await conn.execute(
    'SELECT name, stock, min_stock FROM products WHERE stock < min_stock'
  );
  return rows;
}

// 发送企业微信消息
async function sendAlert(products) {
  if (products.length === 0) {
    console.log('✅ 库存正常,无需告警。');
    return;
  }

  let markdown = '**⚠️ 库存告警通知**\n\n';
  products.forEach(p => {
    markdown += `> ${p.name}:剩余 <font color="warning">${p.stock}</font> 件(最低安全库存 ${p.min_stock})\n`;
  });
  markdown += `\n[点击查看库存详情](https://yourdomain.com/inventory)`;

  await axios.post(WEBHOOK_URL, {
    msgtype: 'markdown',
    markdown: { content: markdown }
  });

  console.log('🚨 已发送库存告警消息');
}

// 主流程
async function main() {
  const lowStocks = await getLowStockProducts();
  await sendAlert(lowStocks);
}

main();

3️⃣ 定时运行(实现自动化)

在服务器上添加定时任务(crontab):

crontab -e

添加任务,每小时执行一次库存检测:

0 * * * * /usr/local/bin/node /home/app/inventory_alert.js >> /home/app/logs/inventory.log 2>&1

📲 效果演示

运行脚本后,企业微信群自动收到消息:

⚠️ 库存告警通知
试剂盒A:剩余 8 件(最低安全库存 10)
离心管C:剩余 4 件(最低安全库存 10)

点击查看库存详情

自动化通知


🧠 技术要点总结

模块技术说明
数据源MySQL存储库存与安全线
检测逻辑Node.js + 定时任务定时检查低库存
通知推送企业微信机器人Markdown 消息卡片
可扩展性支持钉钉 / 邮件 / Slack仅替换 Webhook 接口即可

🚀 拓展方向

  • ✅ 添加“采购自动下单”功能
  • ✅ 集成 Elasticsearch 实时监控库存变化
  • ✅ 结合 Grafana 展示库存趋势

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT小哥哥呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值