• node.js + 企业微信实现定时推送消息


    一 . 注册企业微信及配置

    进入官网 https://work.weixin.qq.com/ 按要求填写资料开通企业微信。

    1. 查看企业 ID

    在这里插入图片描述

    2. 创建应用

    在这里插入图片描述

    3. 查看应用 AgentId , Secret ,下拉到页面底部还要配置IP白名单

    在这里插入图片描述

    配置IP白名单
    在这里插入图片描述

    在这里插入图片描述

    如果没有配置白名单,运行node.js 代码会报错 60020
    在这里插入图片描述

    4. 微信关注企业微信

    关注后,你可在微信中收发企业微信的工作消息和通知
    在这里插入图片描述

    二 . 编写node.js代码

    企业微信接口文档https://developer.work.weixin.qq.com/document/path/90372

    配置文件 config.js

    /*** config.js ***/
    
    // 导入所需插件模块
    const request = require('request')
    
    /******** 企业微信相关配置信息 填写自己的信息 ***********/
    // 企业ID 替换成自己
    const corpId = '*************'
    // 应用密钥 替换成自己
    const corpSecret = '***********'
    // 应用ID 替换成自己
    const agentId = 1000002
    // 发送给所有人
    const toUser = '@all'
    
    const tokenUrl = `https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=${corpId}&corpsecret=${corpSecret}`
    const sendMsgUrl = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=";
    /******** 企业微信相关配置信息 填写自己的信息 ***********/
    
    /**
     * 获取令牌
     */
    function getToken(success, error) {
    	request(tokenUrl, function(error, response, body) {
    		if (!error && response.statusCode == 200) {
    			var json = JSON.parse(body);
    			console.log(json)
    			success(json.access_token)
    		} else {
    			error('获取token失败')
    		}
    	})
    }
    
    /**
     * 真正发送消息
     */
    function sendMessage(token, content) {
    	const requestData = {
    		touser: toUser,
    		msgtype: "text",
    		agentid: agentId,
    		safe: 0,
    		text: {
    			content: content
    		}
    	}
    
    	request({
    		url: `${sendMsgUrl}${token}`,
    		method: "POST",
    		json: true,
    		headers: {
    			"content-type": "application/json",
    		},
    		body: requestData
    	}, function(error, response, body) {
    		console.log(body)
    		if (!error && response.statusCode == 200) {}
    	});
    }
    
    /***
     * 发送具体消息 
     */
    function sendText(content) {
    	getToken((token) => {
    		sendMessage(token, content)
    	}, (error) => {
    		console.log(error)
    	})
    }
    
    // 向外导出路由对象
    module.exports = {
    	sendText,
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78

    主程序文件 app.js

    /*** app.js ***/
    
    const alarmWechat = require('./config.js') // 引入配置模块
    const schedule = require('node-schedule');
    
    const scheduleCronstyle = ()=> {
        //每30秒执行一次
        schedule.scheduleJob('30 * * * * *',() =>{
            console.log('scheduleCronstyle:' + new Date());
            alarmWechat.sendText('测试发送的消息')
        }); 
    	
    	
    	// 立即执行发送
    	// alarmWechat.sendText('测试发送的消息')
    }
    
    
    scheduleCronstyle();
    
    
    /* 定时模块说明
    
    * * * * * *
    ┬ ┬ ┬ ┬ ┬ ┬
    │ │ │ │ │ │
    │ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun)
    │ │ │ │ └───── month (1 - 12)
    │ │ │ └────────── day of month (1 - 31)
    │ │ └─────────────── hour (0 - 23)
    │ └──────────────────── minute (0 - 59)
    └───────────────────────── second (0 - 59, OPTIONAL)
    
    6个占位符从左到右分别代表:秒、分、时、日、月、周几
    
    每分钟的第30秒触发: '30 * * * * *'
    
    每小时的1分30秒触发 :'30 1 * * * *'
    
    每天的凌晨1点1分30秒触发 :'30 1 1 * * *'
    
    每月的1日1点1分30秒触发 :'30 1 1 1 * *'
    
    2022年的1月1日1点1分30秒触发 :'30 1 1 1 2022 *'
    
    每周1的1点1分30秒触发 :'30 1 1 * * 1'
    
    
    */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    打开CMD运行服务: node app.js
    在这里插入图片描述

    手机微信成功接收到消息
    在这里插入图片描述

    参考文章:
    https://blog.csdn.net/weixin_44614230/article/details/126694984

  • 相关阅读:
    【安全利器SELinux快速入门系列】SELinux基础入门
    (WSI分类)WSI分类文献小综述
    tomcat动静分离和负载均衡
    数字图像处理(十一)白平衡算法
    原来老板口中的亏了是这个意思
    macOS - 使用 chromedriver
    软考高级系统架构设计师系列论文十八:论软件三层结构的设计
    Makefile 常见的错误信息
    你瞧不起的低代码开发,阿里云总裁张建锋,他看上了
    高可用之战:Redis Sentinal(哨兵模式)
  • 原文地址:https://blog.csdn.net/weixin_38946164/article/details/127119728