一、前言
对于任何程序员来说,及时地收到程序运行的反馈是非常重要的,比如告警通知、运维报告、任务进度通知、事件触发通知等等。这可以提高工作效率。
一般情况下,我们坐在电脑前看着屏幕才能及时地获取程序的反馈信息。但是有些时候比如我们已经下班了或在进行其他工作时,我们就无法实时接收到程序的反馈信息。
一番折腾后,小编成功实现了在Linux下(WIndows肯定也可以)自动发送信息至钉钉和微信。这样我们可以随时随地用手机获取到程序的反馈信息。
二、发送至钉钉
顾名思义,这要求你要加入企业,并创建一个隶属于企业的群。如果你没有打工的话就只能发送到微信了,第三部分再介绍。
第一步,创建企业钉钉群。
如果你本来就是要在一个企业群里实现自动发消息,那就不用创建新的群了。
选择你的一个同事,点击右上角 添加成员 。
群场景和群归属使用默认则就能创建内部群,也就是企业群,选择归属于个人是不行的,个人群不能添加机器人。
第二步,添加机器人
进入群聊天界面,点击右上角的设置按钮,往下滑点击机器人进入机器人管理界面
点击添加机器人,选择 自定义 后,点击添加进入机器人设置界面。
名字自己定义,安全设置就是设置哪些条件下才允许调用这个机器人,这里设置为 test
点击完成后就会生成webhook地址,使用这个地址就能实现向群里发送消息,复制备用。
第三步:编写消息推送脚本。
编写脚本 send_dingding.sh
#!/bin/bash# 设置钉钉的Webhookdingding_webhook="https://oapi.dingtalk.com/robot/send?access_token=YOUR_DINGDING_ACCESS_TOKEN"# 获取命令行参数message=$1format=${2:-"text"}# 构建消息数据if [ "$format" == "text" ]; then payload="{\"msgtype\":\"text\",\"text\":{\"content\":\"$message\"}}"elif [ "$format" == "markdown" ]; then payload="{\"msgtype\":\"markdown\",\"markdown\":{\"title\":\"Markdown Title\",\"text\":\"$message\"}}"else echo "Unsupported format: $format" exit 1fi# 发送消息到钉钉curl -s -H "Content-Type: application/json" -d "$payload" "$dingding_webhook"echo
将dingding_webhook替换为刚才复制的链接即可。
该脚本接受两个参数:
使用试试:
# 给予执行权限chmod 700 ./send_dingding.sh# 普通文本./send_dingding.sh "test:你好"# markdown格式./send_dingding.sh "test: **<font color='orange' size='40'>Hello, World</font>**" markdown
结果分别为:
自动发送至钉钉至此就已经实现了,但是毕竟是关联到自己打工的公司的,而且必须要有同事在内,会带来些许不便。
因为接下来介绍发送至微信的方法,但注意必须是企业微信,如果没有企业微信可能自己办个个体工商户(几十块钱)自己开通企业微信(小编就是这样干的。。。)
三、发送至微信
注册企业微信网址:https://work.weixin.qq.com/。
注册一个个体工商户并注册企业微信后,会自动创建一个企业群,群里只有自己一个人,但是就可以添加机器人了。
操作流程几乎一样,因为原理相同。
打开群聊界面,点击右上角三点按钮,添加群机器人,输入机器人名,点击确认,即可获得webhook网址。
而这里没有安全设置,也就是说有人获取webhood就能发消息,要注意。
而脚本编写跟上面钉钉的一样,不同一点的是,小编发现两者对于markdown格式的内容发送有所区别,钉钉要求必须带有Title,否则报错 title 缺失,或者参数格式不正确 。而微信没有这个要求。
脚本内容为:
#!/bin/bash# 设置钉钉的Webhookdingding_webhook="https://oapi.dingtalk.com/robot/send?access_token=YOUR_WECHAT_ACCESS_TOKEN"# 获取命令行参数message=$1format=${2:-"text"}# 构建消息数据if [ "$format" == "text" ]; then payload="{\"msgtype\":\"text\",\"text\":{\"content\":\"$message\"}}"elif [ "$format" == "markdown" ]; then payload="{\"msgtype\":\"markdown\",\"markdown\":{\"content\":\"$message\"}}"else echo "Unsupported format: $format" exit 1fi# 发送消息到钉钉curl -s -H "Content-Type: application/json" -d "$payload" "$dingding_webhook"echo
四、整合钉钉和微信脚本
由于发送原理都是一样的,只有webhook不一样,因此可以整合这两个脚本。
#!/bin/bash# 设置钉钉和企业微信的Webhookdingding_webhook="https://oapi.dingtalk.com/robot/send?access_token=YOUR_DINGDING_ACCESS_TOKEN"wechat_webhook="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_WECHAT_ACCESS_TOKEN"# 获取命令行参数target="$1"message="$2"format="${3:-text}" # 如果未提供format参数,默认为"text"# 根据目标选择相应的Webhookif [ "$target" == "wechat" ]; then webhook="$wechat_webhook"elif [ "$target" == "dingding" ]; then webhook="$dingding_webhook"else echo "Invalid target. Please choose either 'wechat' or 'dingding'." exit 1fi# 发送消息if [ "$format" == "text" ]; then # 发送文本格式的消息 curl -s -H "Content-Type: application/json" -d "{\"msgtype\":\"text\",\"text\":{\"content\":\"$message\"}}" "$webhook"elif [ "$format" == "markdown" ]; then # 发送Markdown格式的消息 if [ "$target" == "wechat" ];then curl -s -H "Content-Type: application/json" -d "{\"msgtype\":\"markdown\",\"markdown\":{\"content\":\"$message\"}}" "$webhook" else curl -s -H "Content-Type: application/json" -d "{\"msgtype\":\"markdown\",\"markdown\":{\"title\":\"Markdown Title\",\"text\":\"$message\"}}" "$webhook" fielse echo "Invalid format. Please choose either 'text' or 'markdown'." exit 1fiecho
包含三个参数: