All Projects → blinkbean → dingtalk

blinkbean / dingtalk

Licence: other
golang钉钉机器人客户端。支持文本、链接、Markdown、ActionCard、FeedCard类型消息的发送,Outgoing机器人消息的接收。通过钉钉机器人接口和不同消息的封装,达到简单快速发送不同类型消息的目的。

Programming Languages

go
31211 projects - #10 most used programming language

Labels

Projects that are alternatives of or similar to dingtalk

laravel-admin
LaravelAdmin是基于PHP开发的基础管理后台系统,做到开箱即用,为新项目开发省去了基础功能开发的步骤;此系统采用前后端分离模式,后端使用Laravel,前端使用vue;主要包含:登录、注销、可视化数据大屏、管理员、角色管理、菜单管理、权限管理、错误日志、登录日志、访问日志、获取服务器CPU使用率、内存使用率等功能。后端主要使用Artisan命令行、Jobs消息队列、 Rules验证规则、Restful API、Composer扩展包、Redis秒杀、Extend自定义扩展类:微信授权、钉钉告警推送、MongoDB、阿里云OSS、七牛云存储、七牛云直播、php-jwt TOKEN、Phpoffice、MySql数据库字典、Elasticsearch等技术。
Stars: ✭ 45 (-72.05%)
Mutual labels:  dingding
dingtalk
DingTalk(dingding) 是钉钉机器人的 go 实现。支持 Docker、Jenkinsfile、命令行模式,module 模式,加签安全设置,支持链式语法创建消息,支持文本、链接、Markdown、ActionCard、FeedCard消息类型; DingTalk (dingding) is the go implementation of the DingTalk robot. Support Docker, Jenkinsfile, command line mode, module mode, signature security settings, chain syntax to create messages, support text, link, markd…
Stars: ✭ 187 (+16.15%)
Mutual labels:  dingding
SmsForwarder
短信转发器——监控Android手机短信、来电、APP通知,并根据指定规则转发到其他手机:钉钉群自定义机器人、钉钉企业内机器人、企业微信群机器人、飞书机器人、企业微信应用消息、邮箱、bark、webhook、Telegram机器人、Server酱、PushPlus、手机短信等。包括主动控制服务端与客户端,让你轻松远程发短信、查短信、查通话、查话簿、查电量等。(V3.0 新增)PS.这个APK主要是学习与自用,如有BUG请提ISSUE,同时欢迎大家提PR指正
Stars: ✭ 8,386 (+5108.7%)
Mutual labels:  dingding
PSImageEditors
一个简而至美的图片编辑器 (仿钉钉与微信的图片编辑组件)
Stars: ✭ 32 (-80.12%)
Mutual labels:  dingding
gocn
每天抓去gocn.vip每日新闻最新一条发送到钉钉群
Stars: ✭ 53 (-67.08%)
Mutual labels:  dingding
dingtalk-encrypt
dingTalk encrypt Node Version. 钉钉的非官方nodejs版AES加解密库 sdk
Stars: ✭ 16 (-90.06%)
Mutual labels:  dingding
golang-zabbix-alter-to-dingding
zabbix报警到钉钉
Stars: ✭ 59 (-63.35%)
Mutual labels:  dingding
ad-password-self-service
基于Python 3.8 + Django 3.2的密码自助平台,AD用户自助修改密码,结合<钉钉>/<企业微信>扫码验证信息后用户可自行重置密码、解锁自己的账号。
Stars: ✭ 76 (-52.8%)
Mutual labels:  dingding
yii2-dingtalk
yii2钉钉接口
Stars: ✭ 23 (-85.71%)
Mutual labels:  dingding
autojs-dingtalk
利用autojs进行钉钉自动打卡的脚本
Stars: ✭ 37 (-77.02%)
Mutual labels:  dingding

dingtalk

钉钉机器人消息封装——Golang

目前自定义机器人支持

使用

创建钉钉群机器人

  1. 选择添加自定义机器人。
  2. 安全设置 共有关键词、加签、IP白名单三种设置,需要根据情况进行选择。 Xnip2020-07-05_15-55-24.jpg
  3. 选择自定义关键词,这里设置的关键词在初始化机器人的时候会用到。

获取

  • 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{"7bd675b66646ba890046c2198257576470099e1bda0770bad7dd6684fb1e0415"}
        cli := dingtalk.InitDingTalk(dingToken, ".")
        cli.SendTextMessage("content")
    }

OutGoing

  • 钉钉OutGoing机器人原理

    给钉钉机器人绑定一个HTTP类型的POST接口,通过@群机器人,将消息发送到指定外部服务,还可以将外部服务的响应结果返回到群组。

  • 配置步骤

  1. 创建钉钉群机器人时选中 是否开启Outgoing机制
  2. 配置POST地址,外网是可访问的接口地址,如:http://robot.blinkbean.com/outgoing
  3. 当前未做Token相关逻辑,填写内容不影响测试和使用。 OutGoing.jpg
  • 钉钉发送的消息格式

    {
        "atUsers":[
            {
                "dingtalkId":"$:LWCP_v1:$1h0bmSzcLCHncx0lCt3Bb/UVz7xv/8vh*"
            }],
        "chatbotUserId":"$:LWCP_v1:$1hbmLCHncx0lCt3Bb/UVz7x/8vh*",
        "conversationId":"cidkkCwvtlh1L0RmFuhmashi*==",
        "conversationTitle":"Blinkbean",
        "conversationType":"2",
        "createAt":1295212438950,
        "isAdmin":false,
        "isInAtList":true,
        "msgId":"msgm/bJkKjTupFM7ZoRF/eKR*==",
        "msgtype":"text",
        "sceneGroupCode":"project",
        "senderId":"$:LWCP_v1:$x4wFOct/DGctv96o4IxxB*==",
        "senderNick":"blinkbean",
        "sessionWebhook":"https://oapi.dingtalk.com/robot/sendBySession?session=6d69b333f243db32d42c11sda9de620*",
        "sessionWebhookExpiredTime":1595212438350,
        "text":{
            "content":" hello"
        }
    }
  • 方法及可选参数

    通过命令注册的方式,简化新命令增加操作,方便命令及其绑定方法的管理。

    //接口方法
    type ExecFunc func(args []string) []byte
    
    // 注册方法
    func RegisterCommand(name string, execFunc ExecFunc, arity int, isAdmin bool) {
    	cmdTable[name] = &command{
    		executor: execFunc,
    		arity:    arity,
    		isAdmin:  isAdmin,
    	}
    }
    
    // Handler
    type OutGoingHandler struct{}
  • 使用

    // 自定义方法
    outgoingFunc := func(args []string) []byte {
        // do what you want to
        return NewTextMsg("hello").Marshaler()
    }
    
    // 自定义方法注册到handler
    RegisterCommand("hello", outgoingFunc, 2, true)
    
    // 启动http服务
    http.Handle("/outgoing", &OutGoingHandler{})
    _ = http.ListenAndServe(":8000", nil)
  • 本地测试

    1. 执行dingtalk_test.go TestOutGoing 方法启动http服务
    2. 执行以下curl命令(只保留了部分参数)
      curl --location --request POST '127.0.0.1:8000/outgoing' \
      --header 'Content-type: application/json' \
      --data-raw '    {
              "isAdmin":true,
              "msgtype":"text",
              "text":{
                  "content":"hello"
              }
          }'
    3. 获取返回结果
      {
          "msgtype": "text",
          "text": {
              "content": "hello"
          },
          "at": {}
      }
  • Xnip2021-09-05_17-09-21.jpeg

Text类型

  • 方法及可选参数
    // 方法定义
    SendTextMessage(content string, opt ...atOption) error
    
    // 可选参数
    // @所有人
    WithAtAll()
    
    // @指定群成员
    WithAtMobiles(mobiles []string)
  • 使用
    // at所有人
    cli.SendTextMessage("content", WithAtAll())
    
    // at指定群成员
    mobiles := []string{"131********"}
    cli.SendTextMessage("content", WithAtMobiles(mobiles))
  • Xnip2020-07-05_10-46-59.jpg

Link类型

  • 方法
    // 方法定义
    SendLinkMessage(title, text, picUrl, msgUrl string) error
  • 使用
    cli.SendLinkMessage(title, text, picUrl, msgUrl)
  • Xnip2020-07-05_10-25-33.jpg

Markdown类型

  • 方法及可选参数

    // 方法定义
    // text:markdown格式字符串
    SendMarkDownMessage(title, text string, opts ...atOption) error
    
    // 可选参数 目前钉钉markdown格式消息不支持@(可能是钉钉的bug),所以以下可选参数暂时不生效。
    // @所有人
    WithAtAll()
    
    // @指定群成员
    WithAtMobiles(mobiles []string)
  • 使用

    cli.SendMarkDownMessage(title, text)
  • Markdown进阶

    // 按行写入数组,增强markdown的可读性
    msg := []string{
        "### Link test",
        "---",
        "- <font color=#00ff00 size=6>红色文字</font>",
        "- content2",
    }
    cli.SendMarkDownMessageBySlice("Markdown title", msg, WithAtAll())
    
    // 字体及颜色
    dm := DingMap()
    dm.Set("颜色测试", H2)
    dm.Set("失败:$$ 同行不同色 $$", RED)  // 双$分隔
    dm.Set("---", N)
    dm.Set("金色", GOLD)
    dm.Set("成功", GREEN)
    dm.Set("警告", BLUE)
    dm.Set("普通文字", N)
    cli.SendMarkDownMessageBySlice("color test", dm.Slice())
  • Xnip2020-07-05_10-27-33.jpg

  • Xnip2020-07-26_17-14-40.jpg

  • 点击DTMD链接发送消息

    点击'dtmdLink1',自动发送'dtmdValue1'并@机器人,简化输入

    // 创建有序map
    dtmdOrderMap := DingMap().
        Set("dtmdOrderMap1", "dtmdValue1").
        Set("dtmdOrderMap2", "dtmdValue2").
        Set("dtmdOrderMap3", "dtmdValue3")
    err := dingTalkCli.SendDTMDMessage("DTMD title", dtmdOrderMap)
  • Xnip2020-11-02_17-17-26.jpg

整体跳转ActionCard类型

  • 方法及可选参数
    // 方法定义
    SendActionCardMessage(title, text string, opts ...actionCardOption) error
    
    // 可选参数
    // 标题
    WithCardSingleTitle(title string)
    
    // 跳转地址
    WithCardSingleURL(url string)
  • 使用
    cli.SendActionSingleMessage(title, text, WithCardSingleTitle(sTitle), WithCardSingleURL(url))
  • Xnip2020-07-05_10-28-57.jpg

独立跳转ActionCard类型

  • 方法及可选参数
    // 方法定义
    SendActionCardMessage(title, text string, opts ...actionCardOption) error
    
    // 可选参数
    // 按钮排列方向,默认水平
    WithCardBtnVertical()
    
    // 跳转按钮
    WithCardBtns(btns []ActionCardMultiBtnModel)
    
    // ActionCardMultiBtnModel
    type ActionCardMultiBtnModel struct {
    	Title     string `json:"title,omitempty"`
    	ActionURL string `json:"actionURL,omitempty"`
    }
  • 使用
    btns := []ActionCardMultiBtnModel{{
        Title:     "test1",
        ActionURL: testUrl,
        },{
        Title:     "test2",
        ActionURL: testUrl,
        },
    }
    cli.SendActionSingleMessage(title, text, WithCardBtns(btns))
  • Xnip2020-07-05_10-29-21.jpg
  • Xnip2020-07-26_17-14-56.jpg

FeedCard类型

  • 方法
    // 方法定义
    SendFeedCardMessage(feedCard []FeedCardLinkModel) error
    
    // FeedCardLinkModel
    type FeedCardLinkModel struct {
    	Title      string `json:"title,omitempty"`
    	MessageURL string `json:"messageURL,omitempty"`
    	PicURL     string `json:"picURL,omitempty"`
    }
  • 使用
    links := []FeedCardLinkModel{
        {
            Title:      "FeedCard1.",
            MessageURL: testUrl,
            PicURL:     testImg,
        },
        {
            Title:      "FeedCard2",
            MessageURL: testUrl,
            PicURL:     testImg,
        },
        {
            Title:      "FeedCard3",
            MessageURL: testUrl,
            PicURL:     testImg,
        },
    }
    cli.SendFeedCardMessage(links)
  • Xnip2020-07-05_10-30-02.jpg
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].