当前位置: 华文世界 > 科技

Linux实现自动发送消息至钉钉和微信

2024-05-11科技

一、前言

对于任何程序员来说,及时地收到程序运行的反馈是非常重要的,比如告警通知、运维报告、任务进度通知、事件触发通知等等。这可以提高工作效率。

一般情况下,我们坐在电脑前看着屏幕才能及时地获取程序的反馈信息。但是有些时候比如我们已经下班了或在进行其他工作时,我们就无法实时接收到程序的反馈信息。

一番折腾后,小编成功实现了在Linux下(WIndows肯定也可以)自动发送信息至钉钉和微信。这样我们可以随时随地用手机获取到程序的反馈信息。

二、发送至钉钉

顾名思义,这要求你要加入企业,并创建一个隶属于企业的群。如果你没有打工的话就只能发送到微信了,第三部分再介绍。

第一步,创建企业钉钉群。

如果你本来就是要在一个企业群里实现自动发消息,那就不用创建新的群了。

选择你的一个同事,点击右上角 添加成员

群场景和群归属使用默认则就能创建内部群,也就是企业群,选择归属于个人是不行的,个人群不能添加机器人。

第二步,添加机器人

进入群聊天界面,点击右上角的设置按钮,往下滑点击机器人进入机器人管理界面

点击添加机器人,选择 自定义 后,点击添加进入机器人设置界面。

名字自己定义,安全设置就是设置哪些条件下才允许调用这个机器人,这里设置为 test

  • 第一种是自定义关键词,只有发送的内容包含设置的关键词才允许发送。
  • 第二种是加签, 要在webhook上加上这个标签才有效
  • 第三种是IP地段,只有允许的IP才能使用,比较严格 按需设置,一般使用第一种即可。
  • 点击完成后就会生成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替换为刚才复制的链接即可。

    该脚本接受两个参数:

  • message:待发送的消息
  • format:消息的格式,有普通文本text(默认)和markdown格式两种
  • 使用试试:

    # 给予执行权限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

    包含三个参数:

  • target:发送至dingding还是wechat
  • message: 消息内容
  • format: 普通文本还是markdown,默认普通文本