前言

公司是企业微信协同的,刚好之前搞得CLI有输出报告文件的功能;想了想也可以打通这个流程,让沟通成本降低【不用人工转发】;

运转流程:生成报告-> 推送文件 -> 企业微信群。再把这个流程接入到自动化执行的流程,就更加人性化了~

那么,这里说说如何利用node快速覆盖这个场景!

需求及环境

前置知识储备

  • IO操作及文件流的概念
  • 加密解密的基础

没玩过的也能跟着帖子,逐步查阅相关资料长见识~

功能需求

  • 配置一个企业微信机器人key即可使用* 考虑CI环境可以运行,部分配置支持从环境变量接收
  • 支持推送图片
  • 支持推送文本,Markdown
  • 支持推送文件【比如json,excel等】

环境依赖

  • Node 16
  • npm deps [core: Node原生模块]* axios* form-data* core* crypto* path* fs
  • 企业微信开发者中心-群机器人* developer.work.weixin.qq.com/document/pa…

成品图

代码实现

webhook初始化配置

/**** @param {*} key 企业微信机器人推送的key* @returns 配置信息*/
const getConfig = (key) => {const hookKey = key || process.env?.WECHAT_WEBHOOK_KEY || 'xxxxxxxx';if (typeof hookKey <img src="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=${hookKey}`,uploadURL: `https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key=${hookKey}&type=file`,}" style="margin: auto" />
};

文本推送

/**** @param { string } text 普通文本的内容* @param {*} options* @param {string[]} options.mentioned_list userid的列表,提醒群中的指定成员(@某个成员),@all表示提醒所有人,如果开发者获取不到userid,可以使用mentioned_mobile_list* @param {string[]} options.mentioned_mobile_list 手机号列表,提醒手机号对应的群成员(@某个成员),@all表示提醒所有人* @see {@link https://developer.work.weixin.qq.com/document/path/91770#%E6%96%87%E6%9C%AC%E7%B1%BB%E5%9E%8B | 企业微信机器人配置}* @returns*/
function sendTextToEnterpriseWeChatGroup(text = '', options = {}) {const url = getConfig().url;const data = {msgtype: 'text',text: {content: text,mentioned_mobile_list: ['@all'],...options,},};return axios({url,method: 'post',headers: {'Content-Type': 'application/json',},data,});
}

Markdown推送

markdown的语法支持力度并不高,只有非常基础的几个写法

/**** @param {string} mdTpl markdown的字符串模板,仅生效特定子集* @see {@link https://developer.work.weixin.qq.com/document/path/91770#markdown%E7%B1%BB%E5%9E%8B | 企业微信机器人配置}* @returns*/
function sendMarkdownTextToEnterpriseWeChatGroup(mdTpl = '') {const url = getConfig().url;const data = {msgtype: 'markdown',markdown: {content: mdTpl,},};return axios({url,method: 'post',headers: {'Content-Type': 'application/json',},data,});
}

图片推送

图片源文件推送的使用场景挺多的,比如测评报告【图片】,比如数据概览图,亦或者辅助排版的美化;图片的推送需要特殊点,有两个强制要求!

  • 源文件算出md5
  • 图片流转成base64

不过这两个可以node的核心API实现,都不用装其他库了。

/**** @param {*} filename 文件路径* @returns*/
function sendImgToEnterpriseWeChatGroup(filename) {if (typeof filename === 'string' && <img src="https://nodejs.org/api/crypto.html#cryptocreatehashalgorithm-optionsconst md5 = crypto.createHash('md5').update(buffer).digest('hex');const data = {msgtype: 'image',image: {base64: base64data,md5,},};return axios({url,method: 'post',headers: {'Content-Type': 'application/json',},data,})" style="margin: auto" />
}

tips: 这里有一个要注意点是我给了一张默认图,复制记得同步调整哦!

文件推送

文件推送需要分两步,先上传文件,获取响应带回来的媒体id。再把这个作为推送接口的参数。值得注意的是,最好使用multipart/form-data,好处就是兼容性强,且拿到文件名这些。我用过另外一个模式,推送到群发送是不可阅读的文件,如图:

接着往下走,那么我们如何合理高效的上传文件呢?因为我用了axios, 官方有一个node的标准案例,拿来即用;github.com/axios/axios…

上传文件到企业微信

/*** 上传文件到企业微信* @param {string} filename 上传的文件* @return Promise<response>** response:* ```* {* errcode: 0,* errmsg: 'ok',* type: 'file',* media_id: '3-txPJzsW5L5IMXDcQjlcp5OxUenF_YB_ib8zRJwE4AgEVb97RbjG-PtF-pjP42jk',* created_at: '1662452066'* }* ```https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=*/
function uploadFileToEnterpriseWeChat(filename) {const url = getConfig().uploadURL;const readStream = fs.createReadStream(filename);// 上传文件使用FormData// nodejs里使用FormData:https://github.com/form-data/form-dataconst formData = new FormData();formData.append('media', readStream);return axios.post(url, formData).then((res) => {return res.status === 200 && res.data;});
}

推送文件到机器人

/*** 发送文件到企业微信群* @param {string} media_id 通过上传接口获取的`media_id`*/
function sendFileToEnterpriseWeChatGroup(media_id) {const url = getConfig().url;const data = {msgtype: 'file',file: {media_id,},};return axios({url,method: 'post',headers: {'Content-Type': 'application/json',},data,});
}

总结

至此一个简易的封装就实现了,若换class来写的,还能写成链式调用的,见仁见智了哈;企业微信机器人还支持图文这些,若是图片是外链可以考虑这种公众号风格的排版。有不对之处请留言,谢谢阅读~

基于NodeJS实现企业微信机器人推送相关推荐

  1. PowerShell 实现企业微信机器人推送消息

    前言企业微信机器人 在ARMS告警管理中创建企业微信机器人后,您可以在通知策略中指定对应的企业微信群用于接收告警.当通知策略的匹配规则被触发时,系统会自动向您指定的企业微信群发送告警通知.企业微信群收 ...

  2. 企业微信机器人推送mysql_Zabbix.5.0设置企业微信群机器人推送告警信息

    一.企业微信端配置 1.创建微信群机器人 在需要接收告警信息的企业微信群上右键(注意群里成员至少要3人以上),选择"添加群机器人",设置机器人名称,系统自动生成此机器人的webho ...

  3. python、C# 写企业微信机器人推送【图文消息】

    企业微信机器人发送图文消息(基础版) 使用工具 进入代码模式 1. 引入 2. 发送方式 3. 发送到企业微信机器人步骤 3. 总代码 C#写法 看下效果图: 代码展示 使用工具 突然来兴趣搞了个机器 ...

  4. 企业微信机器人推送mysql_进阶功能|将数据推送到企业微信群机器人

    当通过金数据收集到新数据/新客资后,如何才能在企业微信中快速通知特定负责人进行处理呢? 小金特别准备了一份文档,帮助大家了解学习噢- 前期准备工作 1.金数据账户 2.WinDeal账户 3.企业微信 ...

  5. Node-Red 实践:企业微信消息推送

    一个偶然的机会,认识了node-red.这种拖拽控件编写代码的方式给了我很深刻的印象.能够通过简单的拖拽实现mqtt,http,websocket,tcp的服务,作为基于网络的业务流程demon非常方 ...

  6. 企业微信消息推送卡片按钮互动的使用

    企业微信回调推送消息互动模板 前置条件 # 企业微信后台中设置了url 按以上设置 # 回调url: http://www.baidu.com# token: xxxxx# EncodingAESKe ...

  7. Spring Boot 实现企业微信消息推送

    1 Maven依赖 <!-- 阿里JSON解析器 --><dependency><groupId>com.alibaba</groupId><ar ...

  8. 企业微信消息推送接口大全

    该类存放接口所用到的企业微信的接口地址 package com.common;public final class QyapiUrl {/*** 请求nginx转发服务器地址*/public stat ...

  9. 【Java开发】Java实现企业微信消息推送,通过应用发送

    企业微信机器人发送消息 一.可能需要的依赖 二.必须的信息 三.效果展示 四.具体代码 一.可能需要的依赖 之前导依赖的时候没有特别标记,现在分不清哪个是哪个了,应该就在这些里面 <depend ...

  10. Python 企业微信群推送消息

    方法一,操控企业微信发送消息,条件:需要登录企业微信并置顶群聊 方法二,通过企业微信机器人发送消息,可以不用登录企业微信(推荐) 方法一代码如下: import os import time impo ...

最新文章

  1. P1282 多米诺骨牌 (差值DP+背包)
  2. C#实现UTC时间与Datetime转换
  3. (转)5个Xcode开发调试技巧
  4. 深入实践Spring Boot1.3 使用Spring Boot
  5. raspberry pi_什么是Raspberry Pi基金会? 售出1000万台计算机
  6. 【转】OpenGL版本与OpenGL扩展机制
  7. mac上如何将文件批量重命名的方法
  8. socket.io实现客户端和服务端的双向通信
  9. 未来的云计算基础设施长什么样?
  10. 递归算法经典实例 java_java实现的经典递归算法三例
  11. java 拉姆达表达式_一看就懂之java8新特性函数式编程:我是拉姆达表达式lambda...
  12. 数学运算符号的英文表达
  13. 复杂电路简化经典例题_复杂电路简化练习题
  14. vue4+Cesium1.81.0安装及配置
  15. eclipse中ADT和SDK配置(详解)
  16. poi操作word docx文档内容替换详解
  17. asp毕业设计——基于vb+VB.NET+SQL Server的图书馆管理信息系统设计与实现(毕业论文+程序源码)——图书馆管理信息系统
  18. Android蓝牙开发—经典蓝牙和BLE(低功耗)蓝牙的区别
  19. varchar和varchar2有什么区别?
  20. 基于php+Mysql网上商城系统 开题报告

热门文章

  1. 细胞生物学-7-叶绿体和线粒体
  2. MODB:软体动物线粒体基因组数据库
  3. 3D图形渲染及数字图像处理算法相关文集
  4. 数电设计--交通灯控制系统
  5. 复杂性思维第二版 三、小世界图
  6. 多项式乘法 快速傅里叶变换
  7. 中国互联网发展报告2018年度总结
  8. 解决Win10无操作两分钟进入睡眠问题
  9. 基于convLSTM模型的雷达图像外推算法
  10. MySQL分区表详解