专业的编程技术博客社区

网站首页 > 博客文章 正文

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

baijin 2025-05-21 11:58:47 博客文章 2 ℃ 0 评论

一、前言

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

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

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

二、发送至钉钉

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

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

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

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

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

第二步,添加机器人

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

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

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

  • 第一种是自定义关键词,只有发送的内容包含设置的关键词才允许发送。
  • 第二种是加签,要在webhook上加上这个标签才有效
  • 第三种是IP地段,只有允许的IP才能使用,比较严格 按需设置,一般使用第一种即可。

点击完成后就会生成webhook地址,使用这个地址就能实现向群里发送消息,复制备用。

第三步:编写消息推送脚本。

编写脚本send_dingding.sh

#!/bin/bash

# 设置钉钉的Webhook
dingding_webhook="https://oapi.dingtalk.com/robot/send?access_token=YOUR_DINGDING_ACCESS_TOKEN"

# 获取命令行参数
message=$1
format=${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 1
fi

# 发送消息到钉钉
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

# 设置钉钉的Webhook
dingding_webhook="https://oapi.dingtalk.com/robot/send?access_token=YOUR_WECHAT_ACCESS_TOKEN"

# 获取命令行参数
message=$1
format=${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 1
fi

# 发送消息到钉钉
curl -s -H "Content-Type: application/json" -d "$payload" "$dingding_webhook"
echo

四、整合钉钉和微信脚本

由于发送原理都是一样的,只有webhook不一样,因此可以整合这两个脚本。

#!/bin/bash

# 设置钉钉和企业微信的Webhook
dingding_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"

# 根据目标选择相应的Webhook
if [ "$target" == "wechat" ]; then
    webhook="$wechat_webhook"
elif [ "$target" == "dingding" ]; then
    webhook="$dingding_webhook"
else
    echo "Invalid target. Please choose either 'wechat' or 'dingding'."
    exit 1
fi

# 发送消息
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"
    fi
else
    echo "Invalid format. Please choose either 'text' or 'markdown'."
    exit 1
fi

echo

包含三个参数:

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

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表