目录
一、背景
二、企业微信注册与配置
1.注册
2.配置
(1)加入企业
(2)开启微信插件
(3)测试是否能在微信接收消息
三、方法一 通过自建应用发送消息
1.添加自建应用
2.获取应用接口凭证(access_token)
(1)获取企业id(corp_id)
编辑(2)获取应用的Secret
(3)获取access_token
3.配置ip白名单和可信域名
(1)配置可信域名
(2)配置可信ip白名单
4.发送消息
(1)获取应用id(agent_id)
(2)发送消息
四、方法二 企业微信机器人推送
(1)创建与添加机器人
(2)发送消息
五、小结
前排提示:含源码的文章已发布,稍微配置即可直接推送 企业微信推送天气、课表、纪念日、每日一句等(含源码和详细步骤)
最近在研究推送每日课表,一开始是使用 微信公众号接口测试号 来推送的,但是现在公众号消息展示改了,不会显示在消息列表,而是隐藏在“订阅号消息”里面,不仔细看都看不到,很容易被忽略,如下图:
所以就一直在找其他方法,想到了企业微信 - 可以显示在微信消息主页,且提醒很明显,如下图。
效果示例
下面讲两种方法进行推送。注意:如果你想每日定时推送,需要有自己的服务器,或者使用阿里云函数
每个人都可以注册企业微信(免费版企业最大人数是200人,不认证不会影响api使用,足够我们个人使用了)
网址: 企业微信 (qq.com) 注册:
同时,手机或电脑下载企业微信客户端
注册成功后进入管理后台。让自己和想要推送的人加入企业
为了让我们的企业微信能直接在微信上看,需要开启微信插件
能在微信正常收到公告就代表已经成功进入企业,且成功使用微信插件
注:这个方法需要的要求- 有自己的服务器和域名(且服务器ip为固定ip,域名通过ICP备案)
不符合要求的可以看方法二
这个凭证可以拥有该应用的全部权限,请妥善保管,不要在前端暴露access_token和secret
回到应用管理页面,找到我们刚刚的自建应用,点开,就能看到secret了
发送后,打开企业微信客户端(必须是企业微信,不能是微信),在里面找到“企业微信团队”发给你的secret
向https://qyapi.weixin.qq.com/cgi-bin/gettoken 发送get请求,query参数为刚刚获取的企业id和应用密匙 (参考文档 获取access_token - 文档 - 企业微信开发者中心 (qq.com))
以下是nodejs示例 (注意,access_token有效期为两小时,可以缓存起来,减少请求次数)
官方文档的代码中有一处错误,我改正过来了 (请求参数名写错)
const corp_id = '';// 企业 corp_id
const secret = ''// 当前应用的 secret
// 获取的 access_token
let {data} = await axios.get(`https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=${corp_id}&corpsecret=${secret}`);
let {access_token}= data;
if(access_token){
console.log('获取 access_token 成功',access_token);
}
else{
res.render('error');
}
这一步很关键,官方文档并没有说明,不配置的话,即使有access_token也做不了任何事(这是2022年6月新增的规定,在此之前的自建应用不需要这些限制) 。在应用管理-我们的自建应用界面,拉到最下面,可以看到配置入口。
输入经过ICP备案的域名,然后点击申请校验
然后就会出现校验流程,下载文件后,放到自己的域名根目录下
放好文件后部署,然后点击确定按钮,提示成功即可。
在这里面输入你的服务器的ip
在自建应用界面,可以复制应用id
POST请求,nodejs示例如下: (除了文本消息,还可以发送多种颜色的图片、卡片等,这里不一一介绍了,详情可以看官方文档 发送应用消息 - 文档 - 企业微信开发者中心 (qq.com))
const agent_id = '1000063';// 自建应用的 agent_id
const access_token = 'xxxxxx';// access_token
let {data:message_data} = await axios.post(`https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=${access_token}`,{
"touser" : '@all',//意思是发给所有人
"agentid" : agent_id,
"msgtype" : "text",//类型为文本,可以是其他的,详情可见官方文档
"text" : {
"content" : `Hello World!` //里面填写文本
},
});
在content里面,可以填写你通过请求其他api获得的天气数据(比如百度天气api),也可以输入自己的数据(比如课表)
参数列表:放在请求体中
如果你的服务器ip不是固定的话,上面的方法不适合你使用(因为需要配置ip白名单)
下面讲的这个方法可以适用于所有人 - 如果你没有自己的服务器,可以使用阿里云函数来发送推送
打开企业微信手机客户端 ,进入全员群(只要你加入了企业,就会自动进入这个群),点击右上角进入详情,选择“群机器人”
然后进入,点击右上角“添加”,然后进入后再点右上角“新建”,然后输入机器人名字,即可新建一个机器人。建立成功后,会给你一个Webhook地址,保管好不要泄露 ,然后添加到群
向刚刚的Webhook地址发送post请求,所需参数放在body里
下面是nodejs发送文本消息代码示例(下面代码的key,包含在刚刚给你的Webhook了)
robot: async (content) => {//参数为内容
return new Promise(async (resolve, reject) => {
try {
const params = {
method: 'POST',
url: `https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxx`,//在这里填你的key
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
data: JSON.stringify({//携带的数据
"msgtype": "text",
"text": {
content,
}
}),
}
const { data } = await axios(params)
if (data.errcode == 0) {
resolve(data)
} else {
reject(data.errmsg || '发送失败')
}
} catch (error) {
reject(error.message || error)
}
})
},
除了文本消息,还能发送很多东西,详情查看官方文档 群机器人配置说明 - 文档 - 企业微信开发者中心 (qq.com)
上面讲述了如何进行推送,推送的内容你们可以自行发挥(天气、课表、早安问候语、每日图片等)
如果你没有资金购买自己的服务器,可以尝试使用 vercel(免费) +自己购买的域名(新用户几块钱就能买一年)关于vercel 的使用可以自行搜索其他内容(注:vercel无法使用定时任务,因为云函数只有在请求它时才会运行,可以使用GitHub Actions定时向vercel上的云函数请求)
如果还有不明白的地方可以在评论区问我,有哪里错误的也请及时告知我,谢谢大家~