likes
comments
collection
share

Golang发送钉钉机器人消息推荐背景 作为新生代农民工,日常搬砖时间分配基本分为写Bug、Debug、Battle、摸

作者站长头像
站长
· 阅读数 19

推荐背景

作为新生代农民工,日常搬砖时间分配基本分为写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
    
消息预览
  • Golang发送钉钉机器人消息推荐背景 作为新生代农民工,日常搬砖时间分配基本分为写Bug、Debug、Battle、摸
  • Golang发送钉钉机器人消息推荐背景 作为新生代农民工,日常搬砖时间分配基本分为写Bug、Debug、Battle、摸
  • Golang发送钉钉机器人消息推荐背景 作为新生代农民工,日常搬砖时间分配基本分为写Bug、Debug、Battle、摸
  • Golang发送钉钉机器人消息推荐背景 作为新生代农民工,日常搬砖时间分配基本分为写Bug、Debug、Battle、摸

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)
    
消息预览(通过命令快速获取用户信息)
  • Golang发送钉钉机器人消息推荐背景 作为新生代农民工,日常搬砖时间分配基本分为写Bug、Debug、Battle、摸

了解更多

总结

将钉钉机器人接口进行封装,可根据使用场景选择不同类型的消息类型。达到低开发成本的同时满足队友们的不同读写需求。

添加钉钉消息测试群:35451012,执行dingtalk_test.go测试方法可直接查看当前支持消息内容。

参考资料

  1. github.com/blinkbean
  2. ding-doc.dingtalk.com/doc#/server…
转载自:https://juejin.cn/post/7011313161206759455
评论
请登录