Golang 发送钉钉群消息,也可以 @ 相关人员,复制直接使用

本文介绍了如何使用Golang通过钉钉自定义机器人发送群消息,并可指定@相关人员。首先,参照钉钉官方文档完成机器人接入和设置;接着,通过Webhook发送消息,内容需符合数据格式要求;若选择加签方式,还需进行签名验证。提供了一份完整的代码示例,可以直接使用。

自定义机器人接入——钉钉官方文档

https://open.dingtalk.com/document/robots/custom-robot-access

消息类型和数据格式——钉钉官方文档

这主要是发送消息的数据格式
https://open.dingtalk.com/document/robots/message-types-and-data-format

钉钉群创建机器人

钉钉群——右上角群设置——机器人——添加机器人——选择[自定义机器人]
这里建议选择【自定义关键词】 这样不需要加签,会稍微方便一点
在这里插入图片描述
这里需要保留好 Webhook, 我们主要就是使用这个来发送消息
自定义关键字 的作用就是如果你发送的内容里面包含这些关键字就可以发送钉钉群消息,反之则发送不了
在这里插入图片描述

代码部分

只需要调用这个方法就可以,复制直接就可以使用,其中:
webhook 就是创建钉钉机器人时复制的webhook
content 就是想要发送的内容
atPhones 就是想要@对象的手机号

func SendDingMsgNoSecret(webhook, content string, atPhones []string) error {
	// 组合数据并传输
	dingUrl := webhook
	data := make(map[string]interface{})
	data["msgtype"] = "text"
	data["text"] = map[string]string{"content": content}

	// 创建at部分的数据
	atData := map[string]interface{}{
		"atMobiles": atPhones,
		"isAtAll":   false,
	}

	// 将at部分数据添加到原始数据中
	data["at"] = atData

	bytePayload, err := jsoniter.Marshal(data)
	if err != nil {
		return err
	}

	resp, postErr := http.Post(dingUrl, "application/json", bytes.NewBuffer(bytePayload))
	if postErr != nil {
		return postErr
	}
	defer resp.Body.Close()

	jsonData, err := ioutil.ReadAll(resp.Body)
	var result map[string]interface{}
	err = json.Unmarshal(jsonData, &result)
	if err != nil {
		log.Logger.Errorf("解析 JSON 出错:%s", err)
	}
	for key, value := range result {
		fmt.Printf("%s: %v\n", key, value)
	}

	return nil
}

如果创建钉钉机器人时选择了加签的方式

在这里插入图片描述

具体代码如下,主要多了加签的步骤

	// 构建签名字符串
	signString := fmt.Sprintf("%d\n%s", timestamp, secret)
	hmacSha256 := hmac.New(sha256.New, []byte(secret))
	hmacSha256.Write([]byte(signString))
	signature := hmacSha256.Sum(nil)
	base64EncodedSignature := base64.StdEncoding.EncodeToString(signature)
	urlEncodedSignature := url.QueryEscape(base64EncodedSignature)

完整代码:
secret 创建钉钉机器人时选择加签后直接复制放到代码里
其他和不加签的方式差不多

func SendDingMsg(secret, webhook, content string) error {
	timeNow := time.Now().UnixNano()
	timestamp := timeNow / int64(time.Millisecond)

	// 构建签名字符串
	signString := fmt.Sprintf("%d\n%s", timestamp, secret)
	hmacSha256 := hmac.New(sha256.New, []byte(secret))
	hmacSha256.Write([]byte(signString))
	signature := hmacSha256.Sum(nil)
	base64EncodedSignature := base64.StdEncoding.EncodeToString(signature)
	urlEncodedSignature := url.QueryEscape(base64EncodedSignature)

	// 组合数据并传输
	dingUrl := fmt.Sprintf("%s&timestamp=%d&sign=%s", webhook, timestamp, urlEncodedSignature)
	data := make(map[string]interface{})
	data["msgtype"] = "text"
	data["text"] = map[string]string{"content": content}

	bytePayload, err := jsoniter.Marshal(data)
	if err != nil {
		return err
	}

	resp, postErr := http.Post(dingUrl, "application/json", bytes.NewBuffer(bytePayload))
	if postErr != nil {
		return postErr
	}
	defer resp.Body.Close()

	jsonData, err := ioutil.ReadAll(resp.Body)
	var result map[string]interface{}
	err = json.Unmarshal(jsonData, &result)
	if err != nil {
		log.Logger.Errorf("解析 JSON 出错:%s", err)
	}
	for key, value := range result {
		fmt.Printf("%s: %v\n", key, value)
	}

	return nil
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值