Open lcxfs1991 opened 5 years ago
hahahahahah free ride at after 9.
我用ifttt 配置了一下,更简单了些,自己不用写代码,哈哈。
我在公司搞得是QQ机器人。CoolQ/DingTalk 实现CI/CD消息推送到群
厉害,写的很好可以用,好像不支持外部群管理【创建群,踢人、自动加好友什么的】,一般用PC企微模拟的 rotdogmes.cn ,可以看看
您好: 我已收到邮件,将会尽快回复您。
这是来自QQ邮箱的自动回复邮件。 您好,您的邮件我已收到,谢谢!
这是来自QQ邮箱的自动回复邮件。 您好,您的邮件我已收到,谢谢!
您好: 我已收到邮件,将会尽快回复您。
到了新公司之后,发现居然也是用企业微信。但可惜的是,外部的企业微信居然没有机器人。这对以前在鹅厂里习惯用企业微信做提醒的我觉得很不方便。终于,7月一开始企业微信终于上线机器人功能。
右击群聊天卡片,可以添加群机器人。![](https://ask.qcloudimg.com/draft/1011618/wbtm33buw5.png?imageView2/2/w/1620)
悬浮在机器人的头像上,会显示出 Webhook 地址。点击这个地址,会跳到机器人的开发文档。![](https://ask.qcloudimg.com/draft/1011618/rnksxsmekp.png)
提醒机器人的开发其实很简单,其实就是向这个webhook地址,按文档提供的格式发送请求,就可以实现消息推送了。最简单的示例,可以用
Node.js
的axios
类库:以上是最简单的例子。除了普通文本内容,还可以发送
markdown
,图文等内容,大家可以自行去看文档。但问题来了:一般来说提醒,都是需要定时的,比如说每早提醒大家写计划,每周五傍晚提醒大家写周报,怎么可以让机器人在这些时间点出现提醒大家呢?你可能会想到买一台服务器,然后在上面部署
cronjob
服务,定时去调度服务。没错,这固然是最通俗的做法。但是买一台服务器要花钱呀,便宜的也得几十块钱一台虚拟机,而且只在上面跑一个这么简单的服务显然是不值的。有没有性价比高的做法呢?有,用云函数!我个人的理解,云函数跟传统的服务主要的区别有几点,一个是它是一种事件型的服务,由不同的事件触发(HTTP、数据更改、对象存储的变更等),第二个它是非长驻的,运行一定时间后会冷却或者销毁,第三个由于以上两种特性,对于一些负载不是很高的服务,用云函数比较省钱。而对于这种提醒机器人,正正是一种负载不是很高的服务,非常合适。对小型团队的这种提醒服务,在最近各大厂商都在推广的时期,真的可以做到不要钱。
这里我对腾讯云的云函数最为熟悉,因此就用它来做实践。
首先为了方便,我们可以用腾讯云提供的 SCF CLI 来初始化我们的云函数和配置文件。我用的电脑是 Macbook,可以直接安装以下的命令进行安装:
如果不是Macbook可以先自行安装
python
和pip
然后就是进行配置:
appid
,secret-id
和secret-key
可以在访问密钥页面里拿到。至于region
,则是你想部署云函数的区域,比方说在云函数的控制台首页,就能看到顶部的区域。选广州就是ap-guangzhou
,选香港的就是ap-hongkong
。基本上是ap-
加上国内市场的拼音或国外城市的英文。然后咱们初始化好项目(用node.js 8.9版本写云函数):
然后就能得到该云函数:![image.png](https://ask.qcloudimg.com/draft/1011618/61w7n8ex3h.png)
这次要用到 axios,那我们就安装这个依赖:
打开
index.js
是如下一段代码,async
表示该函数可以用Node.js
的新特性async/await
。我进行一些删减后,成这样。将函数名字改为
main
,而且由于用async/await
就可以不用callback
处理异步了。但改了名字也要改template.yaml
,将main_handler
改为main
好了。是时候来写提醒逻辑了。逻辑并不难,但主要注意的一点是时间。经过试验,云函数这里的时间统一使用了标准的国际时间,也就是北京时间要比它晚8小时,详细逻辑可以看以下代码的注释:
逻辑都写好了,但是,我们需要让它定时执行,比如每30分钟执行一次。这个时候,我们就需要添加“定时触发器” 了。定时触发我们可以在![image.png](https://ask.qcloudimg.com/draft/1011618/4c9x00wx3h.png)
template.yaml
里面添加,可以把注释去掉,然后修改得到:CronExpression
具体可以参考这个文档:https://cloud.tencent.com/document/product/583/9708请使用推荐的写法:![image.png](https://ask.qcloudimg.com/draft/1011618/dsxzou6rue.png?imageView2/2/w/1620)
这里有些参考的示例,直接套用即可:![image.png](https://ask.qcloudimg.com/draft/1011618/c8huyo925e.png)
我这里写的:
0 */30 * * * MON-FRI *
,表示每周一到周五,每30分钟会触发一次云函数的调用。当然,我们还想开启一下 HTTP 触发器,来用地址直接访问该云函数进行一些逻辑的调试,看看是否真的能成功发消息。
我们可以再到![image.png](https://ask.qcloudimg.com/draft/1011618/han96dd6f0.png)
template.yaml
里添加这样的HTTP
触发器:好了,万事俱备,我们只需要再用
SCF CLI
发布即可。发布完成后,我们可以到腾讯云的控制台看下,已经存在了:![image.png](https://ask.qcloudimg.com/draft/1011618/iwdojnw20u.png)
点进去看看触发方式,发现分别有一个定时触发器,一个API网关触发器(HTTP触发)![](https://ask.qcloudimg.com/draft/1011618/olml90u0mf.png)
如此,便大功告成了!看看效果:![](https://ask.qcloudimg.com/draft/1011618/wxlkzgyfpq.png)