Node.js 实现企业内部消息通知系统(钉钉/企业微信机器人)
💬 Node.js 实现企业内部消息通知系统(钉钉/企业微信机器人)
🧩 关键词:Node.js / Webhook / 自动化通知 / 企业微信 / 钉钉机器人
🔍 一、写在前面
在企业内部系统中,我们经常需要自动推送各种消息:
- 系统监控报警(CPU过高、接口异常)
- 每日报表通知(销售日报、库存统计)
- 审批结果提醒(订单通过、发货完成)
以前这些消息都要人工发送,现在我们用 Node.js + 企业微信机器人(Webhook) 就能轻松搞定。



👉 核心目标:
让 Node.js 脚本能自动向钉钉或企业微信发送结构化消息(文本、卡片、Markdown等)。
🧠 二、系统架构思路
整个系统逻辑非常简单👇
┌─────────────────────┐
│ 数据源 / 系统事件 │
│ (监控 / 日报 / API) │
└──────────┬──────────┘│▼
┌─────────────────────┐
│ Node.js 通知脚本 │
│ - 组装消息内容 │
│ - 调用 Webhook 接口 │
└──────────┬──────────┘│▼
┌─────────────────────┐
│ 企业微信 / 钉钉机器人 │
│ - 接收消息并展示 │
└─────────────────────┘
⚙️ 三、环境准备
1️⃣ 创建企业微信机器人
- 进入 企业微信 → 应用管理 → 群机器人
- 添加一个机器人,复制生成的 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 展示库存趋势
