當前位置: 華文世界 > 科技

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,預設普通文本