# Golang怎么實現發送釘釘機器人消息
釘釘機器人是釘釘開放平臺提供的一種自動化消息推送工具,可用于監控報警、任務通知等場景。本文將詳細介紹如何使用Golang實現發送釘釘機器人消息。
## 一、準備工作
### 1. 創建釘釘機器人
1. 在釘釘群設置中選擇「智能群助手」
2. 點擊「添加機器人」→「自定義」
3. 設置機器人名稱和安全設置(建議選擇加簽方式)
4. 記錄生成的`Webhook URL`和`加簽密鑰`
### 2. Golang環境要求
- Go 1.13+
- 需要使用的庫:
```go
import (
"bytes"
"crypto/hmac"
"crypto/sha256"
"encoding/base64"
"encoding/json"
"fmt"
"net/http"
"time"
)
釘釘要求對請求進行簽名驗證:
func generateSign(secret string) (string, int64) {
timestamp := time.Now().UnixNano() / 1e6
stringToSign := fmt.Sprintf("%d\n%s", timestamp, secret)
h := hmac.New(sha256.New, []byte(secret))
h.Write([]byte(stringToSign))
sign := base64.StdEncoding.EncodeToString(h.Sum(nil))
return sign, timestamp
}
支持多種消息類型,這里以文本消息為例:
type DingTalkMessage struct {
MsgType string `json:"msgtype"`
Text struct {
Content string `json:"content"`
} `json:"text"`
At struct {
AtMobiles []string `json:"atMobiles"`
IsAtAll bool `json:"isAtAll"`
} `json:"at"`
}
func SendDingTalkMessage(webhook, secret, content string, atMobiles []string, isAtAll bool) error {
sign, timestamp := generateSign(secret)
msg := DingTalkMessage{
MsgType: "text",
}
msg.Text.Content = content
msg.At.AtMobiles = atMobiles
msg.At.IsAtAll = isAtAll
jsonData, err := json.Marshal(msg)
if err != nil {
return err
}
reqUrl := fmt.Sprintf("%s×tamp=%d&sign=%s", webhook, timestamp, sign)
resp, err := http.Post(reqUrl, "application/json", bytes.NewBuffer(jsonData))
if err != nil {
return err
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
return fmt.Errorf("dingtalk response status: %d", resp.StatusCode)
}
return nil
}
package main
import (
// ... 省略import部分 ...
)
// ... 省略之前的函數定義 ...
func main() {
webhook := "https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN"
secret := "YOUR_SECRET"
content := "Golang釘釘機器人測試\n當前時間: " + time.Now().Format("2006-01-02 15:04:05")
err := SendDingTalkMessage(webhook, secret, content, []string{"138xxxx1234"}, false)
if err != nil {
fmt.Println("發送失敗:", err)
} else {
fmt.Println("發送成功")
}
}
type MarkdownMessage struct {
MsgType string `json:"msgtype"`
Markdown struct {
Title string `json:"title"`
Text string `json:"text"`
} `json:"markdown"`
}
type ActionCard struct {
Title string `json:"title"`
Text string `json:"text"`
BtnOrientation string `json:"btnOrientation"`
SingleTitle string `json:"singleTitle"`
SingleURL string `json:"singleURL"`
}
本文介紹了使用Golang發送釘釘機器人消息的完整流程,包括: - 簽名生成算法 - 基礎文本消息實現 - 擴展消息類型支持 - 實際使用中的注意事項
通過這個方案,你可以輕松地將釘釘機器人集成到你的Golang應用中,實現高效的消息通知功能。 “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。