Golang发送钉钉机器人消息

blinkbean · · 480 次点击 · · 开始浏览    
## 推荐背景 作为新生代农民工,日常搬砖时间分配基本分为写Bug、Debug、Battle、~~摸鱼、喝水、上厕所~~...。除了这些,作为业务一线的民工们还会偶尔会收到产品、运营姐姐妹妹的数据统计需求,她的确要这个数有用,并且只有你有,有每天都要的,有每周要的,有不定期要的。可能也就几个SQL的事,做后台不值得,不做后台呢也不值得。一块砖搬一次两次可以,再多可就不行了,不然配不上==新生代==这三个字。 那有没有一个实现简单又使用方便的工具呢,没有?那想办法搞一个。 ### 需求特点 - 无技术门槛 - 简单命令 - 一定自主性 - 权限控制(针对写类型的操作) - 历史记录(查看查找和操作记录) - 及时响应 - 主动反馈 ### 钉钉 看起来要实现一个方便的工具可真是没有那么容易。发现钉钉有群机器人这个功能后,真是过江遇渡船——赶巧了,稍加包装就能实现以上的所有需求。[blinkbean/dingtalk](https://github.com/blinkbean/dingtalk) - 对话式消息交互 - 约定命令格式 - 参数通过命令的方式传递 - 可通过消息体内字段判断消息发送者身份 - 聊天记录 - 通过Http方式向机器人发多种类型的消息([blinkbean/dingtalk](https://github.com/blinkbean/dingtalk) 查看详细介绍) - Text - Link - Markdown - ActionCard - FeedCard - 可通过@机器人的方式主动调用Http接口,==需开启Outgoing机制== ### 使用 #### 获取 - ```go go get github.com/blinkbean/dingtalk ``` #### 初始化 - ```go // key 创建钉钉机器人需要设置的关键词,默认为`.` func InitDingTalk(tokens []string, key string) *dingTalk // 加签方式创建钉钉机器人 // 加签机器人 access_token和secret一一对应,在创建机器人是获取 func InitDingTalkWithSecret(tokens string, secret string) *DingTalk ``` - ```go import "github.com/blinkbean/dingtalk" func main() { // 单个机器人有单位时间内消息条数的限制,有需要可以初始化多个token,随机发给其中一个机器人。 var dingToken = []string{"7bd675b664****dd6684fb1e0415"} cli := dingtalk.InitDingTalk(dingToken, ".") // 发个text类型消息 cli.SendTextMessage("content") } ``` #### 一般消息类型 - ```go // 普通文本消息 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 ``` ##### 消息预览 - ![text](https://i.loli.net/2020/07/05/LXErbH1KiRGstQ7.jpg) - ![markdown)](https://i.loli.net/2020/07/26/PADJ5uqmfQht2cr.jpg) - ![action](https://i.loli.net/2020/07/26/pEg7hotXZnsaJPV.jpg) - ![dtmt](https://i.loli.net/2020/11/02/1OqEr4HKZWapRgd.jpg) #### OutGoing消息 - 随着各种类型工具都可以集成到钉钉机器人,管理和查找开始复杂,于是做成了注册的形式, - ```go // 自定义方法 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) ``` ##### 消息预览(通过命令快速获取用户信息) - ![OutGoing](https://i.loli.net/2021/09/05/cP4IdKhlxbs1mSn.jpg) #### [了解更多](https://github.com/blinkbean/dingtalk) ## 总结 将钉钉机器人接口进行封装,可根据使用场景选择不同类型的消息类型。达到低开发成本的同时满足队友们的不同读写需求。 添加钉钉消息测试群:**35451012**,执行dingtalk_test.go测试方法可直接查看当前支持消息内容。 ## 参考资料 1. https://github.com/blinkbean 2. https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:701969077

480 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传