Linux-curl对接企业微信机器人

1,877 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情

为什么要做?

不知道大家是否有需要写日报、周报、月报的工作,对,没错,我把它看成了工作的一部分,毕竟是领导安排的,咱也不能不做呀。 由于公司要上市,公司内对于工时统计比较严苛,要求我们要在明道云把本月工作工时填够,所以我们每周写一次周报,最后每个月月底统计一次本月工时,如果工时不够还要自己补。 有的同事可能忙着忙着就忘了,最后在群里被通知是件很尴尬的事情,如果有什么工具能够按时提醒我们就好了啊。 根据这个需求,我做了一个自动的消息提醒工具,提醒群里的人每周填写一次周报,每个月月初检查下自己上个月的工时,避免我们经常忘记填写工时。

技术选型

  • 我们需要处理两个逻辑,一个是每周五下班前发送群消息通知,另一个是每月1日上班时发送群消息通知。
  • 我们需要向企业微信机器人发送通知消息
    • 可以使用云函数,写两个云函数,然后设置上定时任务
    • 也可以使用linux设置定时器执行脚本
  • 毕竟是公司内部用的工具,所以我从公司那里申请了一台内网服务器,使用linux执行脚本来完成我的工作制作。

实现效果

  • 我们先来看下完成后消息通知是什么样的,首先是周报填写

image.png

  • 然后是月工时检查

image.png

  • 这里面的点击跳转,对应的是我们明道云工时管理界面,看到消息后知道自己没有写周报,直接点击跳转就可以去填写啦。
  • 由于机器人的markdown格式不支持@所有人,所以发送的消息就做了两种。
  • 我们通过curl请求接口,发送消息模板,就达到了机器人推送消息的目的。
  • 下面我们就来实现下这个机器人自动推动消息

创建企业微信机器人

image.png 在群的设置中,选择添加群机器人,创建一个新的机器人,可以获取到webhook地址。

编写shell脚本

  • 编写可执行shell脚本,需要会一点shell语法,这个查下相关文档就可以了。
  • 我们需要编写四个脚本

添加执行权限chmod +x WeekMessageQall.sh

  • 填写周报-WeekMessage.sh
# 【Markdown格式】不支持@all
 curl 'Webhook地址' \
 -H 'Content-Type: application/json' \
 -d '
{
  "msgtype": "markdown",
  "markdown": {
    "content": "<font color=\"warning\">请及时填写周报</font>\n
    >截止时间:<font color=\"comment\">18:00</font>
    >填写地址:<font color=\"comment\">[点击跳转](Http地址)</font>"
  }
}'

添加执行权限chmod +x WeekMessage.sh

  • 填写月报--MonthMessage.sh
 # 【Markdown格式】不支持@all
curl 'Webhook地址' \
-H 'Content-Type: application/json' \
-d '
	{
		"msgtype": "markdown",
		"markdown": {
				"content": "<font color=\"warning\">请及时检查上月工时</font>\n
				>截止时间:<font color=\"comment\">18:00</font>
				>填写地址:<font color=\"comment\">[点击跳转](Http地址)</font>"
		}
	}'

添加执行权限chmod +x MonthMessage.sh

  • @所有人
    • 需要有两个@所有人的脚本来执行周报日报发送消息的shell
    • 周报通知:WeekMessageQall.sh
 curl 'Webhook地址' \
 -H 'Content-Type: application/json' \
 -d '
{
    "msgtype": "text",
    "text": {
        "mentioned_list":["@all"]   
    }
}'
# 文本格式的超链接不好看,调用【Markdown格式】的脚本去显示超链接
# 注意脚本文件保存路径
cd /home/admin/WeChartRobot
sh WeekMessage.sh

添加执行权限chmod +x WeekMessageQall.sh

  • 月报通知:MonthMessageQall.sh
curl 'Webhook地址' \
   -H 'Content-Type: application/json' \
   -d '
	{
	    "msgtype": "text",
	    "text": {
	        "mentioned_list":["@all"]   
	    }
	}'
# 文本格式的超链接不好看,调用【Markdown格式】的脚本去显示超链接
cd /root/WeChartRobot
sh MonthMessage.sh

添加执行权限chmod +x MonthMessageQall.sh

测试

我们在添加定时器之前,可以先对我们的脚本进行测试,直接执行对应的sh文件就可以了,比如我们测试月报通知,就在终端执行

./MonthMessageQall.sh

如果企业微信群收到对应的消息,说明推送成功了。

添加定时任务

  • 我们需要通过crontab来添加定时任务
  • Linux crontab 是用来定期执行程序的命令。
  • 当安装完成操作系统之后,默认便会启动此任务调度命令。
  • crond 命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

创建定时任务

执行创建命令

crontab -e

然后会进入到vim界面,需要注意的是,每项工作都是一行。 image.png 我们可以在配置中添加多行定时任务,比如我下面加的每周和每月定时提醒,编写完成后退出编辑界面即可。 下面说一下具体定时任务格式

定时任务格式

0 12 * * * mail dmtsai -s “at 12:00” < /home/dmtsai/.bashrc
# 分 时 日 月 周 |《命令行=========》|
# 没有的部分填 *

具体的时间格式

*    *    *    *    *
-    -    -    -    -
|    |    |    |    |
|    |    |    |    +----- 星期中星期几 (0 - 6) (星期天 为0)
|    |    |    +---------- 月份 (1 - 12) 
|    |    +--------------- 一个月中的第几天 (1 - 31)
|    +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

以我们现在执行的定时任务为例

# 每周的周六14:00执行/home/admin/WeChartRobot/下的WeekMessageQall.sh脚本
0 14 * * 6 /home/admin/WeChartRobot/WeekMessageQall.sh
# 分 时 日 月 周 执行脚本

检查定时任务是否添加成功

执行下面的命令,可以看到我们添加的定时任务列表

crontab -l

可以看到我们添加了两条定时任务 image.png

总结

到此我们的企业微信机器人就可以定时推送通知了,我们也可以把我们制作好的机器人发送到公司使用。 image.png 这样其他群里选择添加机器人时,就会看到我们制作好的机器人了。 更多的玩法可以继续研究。