Golang发送钉钉机器人消息推荐背景 作为新生代农民工,日常搬砖时间分配基本分为写Bug、Debug、Battle、摸
推荐背景
作为新生代农民工,日常搬砖时间分配基本分为写Bug、Debug、Battle、摸鱼、喝水、上厕所...。除了这些,作为业务一线的民工们还会偶尔会收到产品、运营姐姐妹妹的数据统计需求,她的确要这个数有用,并且只有你有,有每天都要的,有每周要的,有不定期要的。可能也就几个SQL的事,做后台不值得,不做后台呢也不值得。一块砖搬一次两次可以,再多可就不行了,不然配不上==新生代==这三个字。
那有没有一个实现简单又使用方便的工具呢,没有?那想办法搞一个。
需求特点
-
无技术门槛
-
简单命令
-
一定自主性
-
权限控制(针对写类型的操作)
-
历史记录(查看查找和操作记录)
-
及时响应
-
主动反馈
钉钉
看起来要实现一个方便的工具可真是没有那么容易。发现钉钉有群机器人这个功能后,真是过江遇渡船——赶巧了,稍加包装就能实现以上的所有需求。blinkbean/dingtalk
-
对话式消息交互
-
约定命令格式
-
参数通过命令的方式传递
-
可通过消息体内字段判断消息发送者身份
-
聊天记录
-
通过Http方式向机器人发多种类型的消息(blinkbean/dingtalk 查看详细介绍)
- Text
- Link
- Markdown
- ActionCard
- FeedCard
-
可通过@机器人的方式主动调用Http接口,==需开启Outgoing机制==
使用
获取
-
go get github.com/blinkbean/dingtalk
初始化
-
// key 创建钉钉机器人需要设置的关键词,默认为`.` func InitDingTalk(tokens []string, key string) *dingTalk // 加签方式创建钉钉机器人 // 加签机器人 access_token和secret一一对应,在创建机器人是获取 func InitDingTalkWithSecret(tokens string, secret string) *DingTalk
-
import "github.com/blinkbean/dingtalk" func main() { // 单个机器人有单位时间内消息条数的限制,有需要可以初始化多个token,随机发给其中一个机器人。 var dingToken = []string{"7bd675b664****dd6684fb1e0415"} cli := dingtalk.InitDingTalk(dingToken, ".") // 发个text类型消息 cli.SendTextMessage("content") }
一般消息类型
-
// 普通文本消息 SendTextMessage(content string, opt ...atOption) error // 链接消息 SendLinkMessage(title, text, picUrl, msgUrl string) error // markdown格式消息 SendMarkDownMessage(title, text string, opts ...atOption) error // 有序列表markdown消息 SendMarkDownMessageBySlice(title string, textList []string, opt ...atOption) error // Action类型消息 SendActionCardMessage(title, text string, opts ...actionCardOption) error // 批量发送Action类型消息 SendActionCardMessageBySlice(title string, textList []string, opts ...actionCardOption) error // Feed类型消息 SendFeedCardMessage(feedCard []FeedCardLinkModel) error // DTMD消息(点击链接发送交互内容) SendDTMDMessage(title string, dtmdMap *dingMap, opt ...atOption) error
消息预览
OutGoing消息
-
随着各种类型工具都可以集成到钉钉机器人,管理和查找开始复杂,于是做成了注册的形式,
-
// 自定义方法 outgoingFunc := func(args []string) []byte { // do what you want to return NewTextMsg("hello").Marshaler() } // 自定义方法注册到handler // hello 关键词、outgoingFunc 主方法、2 参数个数、true 需要身份 RegisterCommand("hello", outgoingFunc, 2, true) // 启动http服务 http.Handle("/outgoing", &OutGoingHandler{}) _ = http.ListenAndServe(":8000", nil)
消息预览(通过命令快速获取用户信息)
了解更多
总结
将钉钉机器人接口进行封装,可根据使用场景选择不同类型的消息类型。达到低开发成本的同时满足队友们的不同读写需求。
添加钉钉消息测试群:35451012,执行dingtalk_test.go测试方法可直接查看当前支持消息内容。
参考资料
转载自:https://juejin.cn/post/7011313161206759455