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 展示库存趋势

相关推荐
-大头.2 小时前
Node.js 环境变量配置全攻略
node.js·编辑器·vim
嫂子的姐夫2 小时前
21-webpack介绍
前端·爬虫·webpack·node.js
York·Zhang9 小时前
VSCode 插件开发完整指南:从零到发布
ide·vscode·node.js·编辑器
自然 醒16 小时前
企业微信自建应用开发详细教程,如何获取授权链接?如何使用js-sdk?
javascript·vue.js·企业微信
西部森林牧歌17 小时前
Arbess零基础学习 - 使用Arbess+GitLab实现Node.js项目自动化构建/主机部署
ci/cd·node.js·gitlab·arbess·tiklab devops
Smile_25422041821 小时前
nodered 下载 excel 文件
node.js·excel
二进制星轨1 天前
在 Ubuntu 上快速配置 Node.js 环境(附问题说明)
linux·ubuntu·node.js
黄毛火烧雪下1 天前
Node.js 自动替换脚本工具:一键完成多项目批量修改与资源替换
node.js·ci
kuxku1 天前
使用 SSE 与 Streamdown 实现 Markdown 流式渲染
前端·javascript·node.js