持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情
为什么要做?
不知道大家是否有需要写日报、周报、月报的工作,对,没错,我把它看成了工作的一部分,毕竟是领导安排的,咱也不能不做呀。 由于公司要上市,公司内对于工时统计比较严苛,要求我们要在明道云把本月工作工时填够,所以我们每周写一次周报,最后每个月月底统计一次本月工时,如果工时不够还要自己补。 有的同事可能忙着忙着就忘了,最后在群里被通知是件很尴尬的事情,如果有什么工具能够按时提醒我们就好了啊。 根据这个需求,我做了一个自动的消息提醒工具,提醒群里的人每周填写一次周报,每个月月初检查下自己上个月的工时,避免我们经常忘记填写工时。
技术选型
- 我们需要处理两个逻辑,一个是每周五下班前发送群消息通知,另一个是每月1日上班时发送群消息通知。
- 我们需要向企业微信机器人发送通知消息
- 可以使用云函数,写两个云函数,然后设置上定时任务
- 也可以使用linux设置定时器执行脚本
- 毕竟是公司内部用的工具,所以我从公司那里申请了一台内网服务器,使用linux执行脚本来完成我的工作制作。
实现效果
- 我们先来看下完成后消息通知是什么样的,首先是周报填写
- 然后是月工时检查
- 这里面的点击跳转,对应的是我们明道云工时管理界面,看到消息后知道自己没有写周报,直接点击跳转就可以去填写啦。
- 由于机器人的markdown格式不支持
@所有人,所以发送的消息就做了两种。 - 我们通过curl请求接口,发送消息模板,就达到了机器人推送消息的目的。
- 下面我们就来实现下这个机器人自动推动消息
创建企业微信机器人
在群的设置中,选择添加群机器人,创建一个新的机器人,可以获取到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界面,需要注意的是,每项工作都是一行。
我们可以在配置中添加多行定时任务,比如我下面加的每周和每月定时提醒,编写完成后退出编辑界面即可。
下面说一下具体定时任务格式
定时任务格式
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
可以看到我们添加了两条定时任务
总结
到此我们的企业微信机器人就可以定时推送通知了,我们也可以把我们制作好的机器人发送到公司使用。
这样其他群里选择添加机器人时,就会看到我们制作好的机器人了。
更多的玩法可以继续研究。