Go-钉钉机器人使用webhook发送消息

钉钉机器人使用webhook发送消息

package main

import (
	"bytes"
	"encoding/json"
	"errors"
	"fmt"
	"io/ioutil"
	"net/http"
)

type DingRobot struct {
	RobotId string
}
type ParamCronTask struct {
	At struct {
		AtMobiles []struct {
			AtMobile string `json:"atMobile"`
		} `json:"atMobiles"` //At和Tele是一对多关系
		IsAtAll bool `json:"isAtAll"`
	} `json:"at"` //存储的是@的成员
	Text struct {
		Content string `json:"content"`
	} `json:"text"` //存储的是用户所发送的信息
	Msgtype string `json:"msgtype"`
}

func (t *DingRobot) SendMessage(p *ParamCronTask) error {
	b := []byte{}
	//我们需要在文本,链接,markdown三种其中的一个
	if p.Msgtype == "text" {
		msg := map[string]interface{}{}
		atMobileStringArr := make([]string, len(p.At.AtMobiles))
		for i, atMobile := range p.At.AtMobiles {
			atMobileStringArr[i] = atMobile.AtMobile
		}

		msg = map[string]interface{}{
			"msgtype": "text",
			"text": map[string]string{
				"content": p.Text.Content,
			},
		}
		if p.At.IsAtAll {
			msg["at"] = map[string]interface{}{
				"isAtAll": p.At.IsAtAll,
			}
		} else {
			msg["at"] = map[string]interface{}{
				"atMobiles": atMobileStringArr, //字符串切片类型

				"isAtAll": p.At.IsAtAll,
			}
		}
		b, _ = json.Marshal(msg)
	}
	var resp *http.Response
	var err error

	resp, err = http.Post(t.getURLV2(), "application/json", bytes.NewBuffer(b))

	if err != nil {
		return err
	}
	defer resp.Body.Close()
	date, err := ioutil.ReadAll(resp.Body)
	r := struct {
		Errcode int    `json:"errcode"`
		Errmsg  string `json:"errmsg"`
	}{}
	err = json.Unmarshal(date, &r)
	if err != nil {
		return err
	}
	if r.Errcode != 0 {
		fmt.Println(r.Errmsg)
		return errors.New(r.Errmsg)
	}

	return nil
}
func (t *DingRobot) getURLV2() string {
	url := "https://oapi.dingtalk.com/robot/send?access_token=" + t.RobotId //拼接token路径
	return url
}
func main() {
	param := &ParamCronTask{
		At: struct {
			AtMobiles []struct {
				AtMobile string `json:"atMobile"`
			} `json:"atMobiles"`
			IsAtAll bool `json:"isAtAll"`
		}{
			AtMobiles: []struct {
				AtMobile string `json:"atMobile"`
			}{
				{
					AtMobile: "18737480171",
				},
				{
					AtMobile: "mobile2",
				},
			},
			IsAtAll: false,
		},
		Text: struct {
			Content string `json:"content"`
		}{
			Content: "Hello, World!",
		},
		Msgtype: "text",
	}
	err := (&DingRobot{RobotId: "aba857cf3ba132581d1a99f3f5c9c5fe2754ffd57a3e7929b6781367b9325e40"}).SendMessage(param)
	if err != nil {
		fmt.Println(err)
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,这是一个很实用的功能,需要用到 `dingtalkchatbot` 和 `itchat` 这两个 Python 库。 首先,安装这两个库: ```python pip install dingtalkchatbot pip install itchat ``` 然后,编代码: ```python import itchat import json from dingtalkchatbot.chatbot import DingtalkChatbot # 钉钉机器人 webhook url webhook = 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx' # 创建钉钉机器人对象 dingtalk_robot = DingtalkChatbot(webhook) # 钉钉机器人的问答库 qa_dict = { '你好': '你好啊!', '你是谁': '我是你的小助手,有什么可以帮到您的吗?', '再见': '好的,祝您生活愉快!' } # 监听钉钉消息 @itchat.msg_register(itchat.content.TEXT, isGroupChat=True) def group_text_reply(msg): if '@钉钉机器人' in msg['Text']: # 获取消息内容 text = msg['Text'].replace('@钉钉机器人', '').strip() # 在问答库中查找回复 reply = qa_dict.get(text) # 如果找到回复,则发送回复信息 if reply: # 发送回复信息到钉钉机器人 dingtalk_robot.send_text(msg=reply) # 登录微信 itchat.auto_login(hotReload=True) # 运行微信监听 itchat.run() ``` 这段代码实现了监听钉钉消息的功能,并且将消息发送钉钉机器人webhook钉钉机器人会根据问答库中的回复,在钉钉群中回复相应的内容。 需要注意的是,为了保证代码的安全性,钉钉机器人 webhook 的 `access_token` 需要保密,建议使用环境变量或配置文件的方式来存储。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值