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 代码实战

创建一个项目:

bash 复制代码
mkdir wechat-bot-demo
cd wechat-bot-demo
npm init -y
npm install axios

创建文件 notify.js

javascript 复制代码
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);

运行脚本:

bash 复制代码
node notify.js

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


🔁 五、进阶应用场景

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

javascript 复制代码
function getSystemHealth() {
  return {
    cpu: 85,
    memory: 72
  };
}

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

sendMessage(content);

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

bash 复制代码
crontab -e
*/30 * * * * node /home/app/notify.js

2️⃣ 推送日报自动化

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

javascript 复制代码
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 地址:

javascript 复制代码
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)

sql 复制代码
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 实现库存检测与消息推送

安装依赖:

bash 复制代码
npm install mysql2 axios

创建文件 inventory_alert.js

javascript 复制代码
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):

bash 复制代码
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 展示库存趋势

相关推荐
天天扭码1 天前
前端如何实现RAG?一文带你速通,使用RAG实现长期记忆
前端·node.js·ai编程
hxmmm1 天前
自定义封装 vue多页项目新增项目脚手架
前端·javascript·node.js
濮水大叔1 天前
VonaJS是如何做到文件级别精确HMR(热更新)的?
typescript·node.js·nestjs
小胖霞1 天前
全栈系列(15)github Actions自动化部署前端vue
前端·node.js·github
LYFlied1 天前
【一句话概述】Webpack、Vite、Rollup 核心区别
前端·webpack·node.js·rollup·vite·打包·一句话概述
跟‘码’死磕2 天前
springboot集成钉钉群内发送消息
java·spring boot·钉钉
pursue.dreams2 天前
Java实现企业微信机器人消息推送:文本消息与文件推送完整指南
java·机器人·企业微信
程序员爱钓鱼2 天前
Node.js 编程实战:MongoDB 基础与 Mongoose 入门
后端·node.js·trae
程序员爱钓鱼2 天前
Node.js 编程实战:MySQL PostgreSQL数据库操作详解
后端·node.js·trae
古韵2 天前
当 API 文档走进编辑器会怎样?
vue.js·react.js·node.js