From b51882819abc48e458f34e800d942ab5920cec49 Mon Sep 17 00:00:00 2001 From: shanmite Date: Sat, 5 Nov 2022 12:20:01 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E4=BC=81=E4=B8=9A?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E5=BA=94=E7=94=A8=E6=8E=A8=E9=80=81=20(#217)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed #217 --- README.md | 3 +- env.example.js | 1 + lib/helper/notify.js | 89 +++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 91 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 444ccaa..406f37c 100644 --- a/README.md +++ b/README.md @@ -186,7 +186,8 @@ Chrome浏览器: | `IGOT_PUSH_KEY` | iGot推送 | iGot聚合推送,支持多方式推送,确保消息可达。 [参考文档](https://wahao.github.io/Bark-MP-helper ) | | `QQ_SKEY` | 酷推(Cool Push)推送 | 推送所需的Skey,登录后获取Skey [参考文档](https://cp.xuthus.cc/) | | `QQ_MODE` | 酷推(Cool Push)推送 | 推送方式(send或group或者wx,默认send) [参考文档](https://cp.xuthus.cc/) | -| `QYWX_KEY` | 企业微信推送 | 密钥,企业微信推送 webhook 后面的 key [详见官方说明文档](https://work.weixin.qq.com/api/doc/90000/90136/91770) | +| `QYWX_AM` | 企业微信应用 | 第一个值是企业id,第二个值是secret,第三个值@all(或者成员id),第四个值是AgentID (逗号分割) 可查看此[教程](http://note.youdao.com/s/HMiudGkb) [官方文档](https://developer.work.weixin.qq.com/document/path/90236) | +| `QYWX_KEY` | 企业微信Bot推送 | 密钥,企业微信推送 webhook 后面的 key [详见官方说明文档](https://work.weixin.qq.com/api/doc/90000/90136/91770) | | `PUSH_PLUS_TOKEN` | pushplus推送 | 微信扫码登录后一对一推送或一对多推送下面的token(您的Token) [官方网站](http://pushplus.hxtrip.com/) | | `PUSH_PLUS_USER` | pushplus推送 | 一对多推送的“群组编码”(一对多推送下面->您的群组(如无则新建)->群组编码)注:(1、需订阅者扫描二维码 2、如果您是创建群组所属人,也需点击“查看二维码”扫描绑定,否则不能接受群组消息推送),只填`PUSH_PLUS_TOKEN`默认为一对一推送 | | `QMSG_KEY` | [Qmsg酱](https://qmsg.zendee.cn)私聊推送 | [Qmsg注册](https://qmsg.zendee.cn/login.html) | diff --git a/env.example.js b/env.example.js index 5bd0d3d..737b27d 100644 --- a/env.example.js +++ b/env.example.js @@ -75,6 +75,7 @@ module.exports = Object.freeze({ TG_PROXY_PORT: "", DD_BOT_TOKEN: "", DD_BOT_SECRET: "", + QYWX_AM: "", QYWX_KEY: "", IGOT_PUSH_KEY: "", PUSH_PLUS_TOKEN: "", diff --git a/lib/helper/notify.js b/lib/helper/notify.js index e2913a4..d5f61dc 100644 --- a/lib/helper/notify.js +++ b/lib/helper/notify.js @@ -43,6 +43,12 @@ let DD_BOT_TOKEN = ''; //密钥,机器人安全设置页面,加签一栏下面显示的SEC开头的字符串 let DD_BOT_SECRET = ''; +// ================================企业微信应用通知设置区域==================================== +// 此处填你企业微信应用消息的值(详见文档 https://work.weixin.qq.com/api/doc/90000/90135/90236) +// 环境变量名 QYWX_AM 依次填入 corpid,corpsecret,touser(注:多个成员ID使用|隔开),agentid,消息类型(选填,不填默认文本消息类型) +// 注意用,号隔开(英文输入法的逗号),例如:wwcff56746d9adwers,B-791548lnzXBE6_BWfxdf3kSTMJr9vFEPKAbh6WERQ,mingcheng,1000001,2COXgjH2UIfERF2zxrtUOKgQ9XklUqMdGSWLBoW_lSDAdafat +let QYWX_AM = ''; + // =======================================企业微信机器人通知设置区域=========================================== //此处填你企业微信机器人的 webhook(详见文档 https://work.weixin.qq.com/api/doc/90000/90136/91770),例如:693a91f6-7xxx-4bc4-97a0-0ec2sifa5aaa //注:此处设置github action用户填写到Settings-Secrets里面(Name输入QYWX_KEY) @@ -125,6 +131,10 @@ if (process.env.DD_BOT_TOKEN) { } } +if (process.env.QYWX_AM) { + QYWX_AM = process.env.QYWX_AM; +} + if (process.env.QYWX_KEY) { QYWX_KEY = process.env.QYWX_KEY; } @@ -169,7 +179,7 @@ if (process.env.SMTP_TO_USER) { async function sendNotify(text, desp, params = {}) { - //提供10种通知方式 + //提供多种通知方式 await Promise.all([ //微信server酱 serverNotify(text, desp), @@ -183,6 +193,8 @@ async function sendNotify(text, desp, params = {}) { tgBotNotify(text, desp), //钉钉机器人 ddBotNotify(text, desp), + //企业微信应用 + qywxAmNotify(text, desp), //企业微信机器人 qywxBotNotify(text, desp), //iGot @@ -529,6 +541,81 @@ function ddBotNotify(text, desp) { }) } +function qywxAmNotify(text, desp) { + return new Promise(resolve => { + if (QYWX_AM) { + const QYWX_AM_AY = QYWX_AM.split(','); + send({ + method: 'POST', + url: `https://qyapi.weixin.qq.com/cgi-bin/gettoken`, + contents: { + corpid: `${QYWX_AM_AY[0]}`, + corpsecret: `${QYWX_AM_AY[1]}`, + }, + config: { + retry: false + }, + headers: { + accept: 'application/json, text/plain, */*', + 'content-type': 'application/json', + }, + success: res => { + try { + const data = JSON.parse(res.body); + let accesstoken = data.access_token; + send({ + method: 'POST', + url: `https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=${accesstoken}`, + contents: { + touser: `${QYWX_AM_AY[2]}`, + agentid: `${QYWX_AM_AY[3]}`, + safe: '0', + msgtype: 'text', + text: { + content: `${text}\n\n${desp}`, + }, + }, + config: { + retry: false + }, + headers: { + accept: 'application/json, text/plain, */*', + 'content-type': 'application/json', + }, + success: res => { + try { + const data = JSON.parse(res.body); + if (data.errcode === 0) { + log.info('发送通知', '企业微信应用发送通知消息完成。'); + } else { + log.error('发送通知', `${data.errmsg}`); + } + } catch (e) { + log.error('发送通知', e); + } finally { + resolve(); + } + }, + failure: err => { + log.error('发送通知', '企业微信应用发送通知消息失败!!' + err); + resolve(); + } + }) + } catch (e) { + log.error('发送通知', e); + } finally { + resolve(); + } + }, + failure: err => { + log.error('发送通知', '企业微信应用发送通知消息失败!!' + err); + resolve(); + } + }) + } + }); +} + function qywxBotNotify(text, desp) { return new Promise(resolve => { if (QYWX_KEY) {