钉钉群自定义机器人消息推送spring boot starter封装组件

张开发
2026/4/16 14:50:36 15 分钟阅读

分享文章

钉钉群自定义机器人消息推送spring boot starter封装组件
2026-02-28官方又放开了这个自定义机器人了官方政策调整此后新群不支持此种方式了这个封装组件只对以上满足需求的机器人有效了。20230821更新版本更新3.0.2此版本新增yml方式配置分组机器人20221213更新版本更新3.0.1此版本适配 spring boot 3.x也可在spring boot 2.x使用1 介绍根据官方文档https://open.dingtalk.com/document/group/custom-robot-access封装了一个spring boot starterhttps://github.com/kangaroo1122/dingtalk-spring-boot-starter目前已上传至maven中央仓库当前最新版为3.0.1或查看这个地址找到最新版本https://search.maven.org/artifact/com.kangaroohy/dingtalk-spring-boot-starterdependencygroupIdcom.kangaroohy/groupIdartifactIddingtalk-spring-boot-starter/artifactIdversion3.0.1/version/dependency当前自定义机器人支持以下消息类型文本 (text)链接 (link)markdown(markdown)ActionCardFeedCard具体参见前文提到的官方文档组件支持以上所有类型的消息发送2 使用由于官方限制每个机器人只能发送20条/分钟的消息所以这里支持配置多个机器人来轮询或者随机指定机器人发送消息2.1 默认机器人配置无论单机器人还是多机器人都必须配置一个默认机器人kangaroohy:ding-talk:access-token:d4a24b6ea884d5d3ec245fb95e9cdbc3630secret:SEC8cc743fc2286f5209f1162d72131f47515843fc0cea661152bd2.2 单机器人使用直接注入IDingTalkSender类调用相关的方法即可AutowiredprivateIDingTalkSendertalkSender;//text类型talkSender.send(TextArgs.builder().content(自定义封装测试).atMobiles(Lists.newArrayList(133xxxx7608)).build());//markdown类型talkSender.send(MarkdownArgs.builder().title(markdown测试).text(### andon通知\n - 工位 station\n - 故障 content).build());//link类型talkSender.send(LinkArgs.builder().title(link).text(这是一条link消息).picUrl(https://help-static-aliyun-doc.aliyuncs.com/assets/img/zh-CN/9977602461/p352641.png).messageUrl(https://open.dingtalk.com/document/group/robot-overview).pcSlide(true).build());//整体跳转ActionCard类型talkSender.send(ActionCardWholeArgs.builder().singleTitle(测试).text(消息内容).title(ActionCard).singleUrl(https://open.dingtalk.com/document/group/robot-overview).build());//独立跳转ActionCard类型talkSender.send(ActionCardAloneArgs.builder().btnOrientation(BtnOrientation.VERTICAL).btns(Lists.newArrayList(CardButtonArgs.builder().title(测试1).actionUrl(https://open.dingtalk.com).pcSlide(true).build(),CardButtonArgs.builder().title(测试2).actionUrl(https://open.dingtalk.com).pcSlide(true).build(),CardButtonArgs.builder().title(测试2).actionUrl(https://open.dingtalk.com).pcSlide(true).build())).title(消息标题).text(消息内容).build());//FeedCard类型talkSender.send(FeedCardArgs.builder().links(Lists.newArrayList(CardLinksArgs.builder().title(测试1).messageUrl(https://open.dingtalk.com).pcSlide(true).picUrl(https://img.alicdn.com/imgextra/i4/O1CN01oWsqXJ1VSf8Bj1DVs_!!6000000002652-2-tps-588-200.png).build(),CardLinksArgs.builder().title(测试2).messageUrl(https://open.dingtalk.com).pcSlide(true).picUrl(https://img.alicdn.com/imgextra/i4/O1CN01oWsqXJ1VSf8Bj1DVs_!!6000000002652-2-tps-588-200.png).build(),CardLinksArgs.builder().title(测试3).messageUrl(https://open.dingtalk.com).pcSlide(true).picUrl(https://img.alicdn.com/imgextra/i4/O1CN01oWsqXJ1VSf8Bj1DVs_!!6000000002652-2-tps-588-200.png).build())).build());2.3 多机器人动态配置如 数据库查询3.0.2 版本开始支持 yml 配置分组机器人查看 2.4 节多机器人使用时需配置对应的机器人群组信息这里采用ApplicationRunner项目启动完成查询数据库并将机器人信息添加到配置算法部分参考了项目https://github.com/AnswerAIL/dingtalk-spring-boot-starterComponentpublicclassRobotConfigimplementsApplicationRunner{AutowiredprivateIMultipleRobotmultipleRobot;//这里可以注入数据库查询service进行查询配置Overridepublicvoidrun(ApplicationArgumentsargs)throwsException{multipleRobot.addGroupRobot(GroupArgs.builder().groupId(111).dingTalkArgs(Lists.newArrayList(DingTalkArgs.builder().accessToken(d4a24b6ea8849ee30bb65638fc6e880d3ec245fb95e9cdbc3630).secret(SEC8cc743fc2286f5209f11623a0bff18d131f47515843fc0cea661152bd).build(),DingTalkArgs.builder().accessToken(421b36a2e9e3103ea41efef6458982526ca46f87f389753cdf5df).secret(SEC3f1ed3e72a0582c40d27ab3a85cd3b8bd0710bd04be3de3fe0a2d6d).build(),DingTalkArgs.builder().accessToken(15a2dba92b815a2fac9231622c8ae0c3d8e9d7cfe3ce5e2ee1549).secret(SEC475ecf41acaa4f1dabe7d32f06e20d2e277307d967c05d4d50e52d69).build()))//轮询算法处理消息发送内置了四种算法可自定义算法.algorithmHandler(newRoundRobinHandler()).build());}}调用与单机器人一样注入IDingTalkSender发送消息时指定群组ID即可AutowiredprivateIDingTalkSendertalkSender;talkSender.send(TextArgs.builder().content(群组机器人测试1).build(),111);talkSender.send(TextArgs.builder().content(群组机器人测试2).build(),111);talkSender.send(TextArgs.builder().content(群组机器人测试3).build(),111);talkSender.send(TextArgs.builder().content(群组机器人测试4).build(),111);2.4 多机器人yml配置自3.0.2版本开始支持 yml 种配置分组机器人如下kangaroohy:ding-talk:access-token:d9b913ef5d9af4687f0dc764684ade17b504547e930ee5976ffd578secret:SEC650d8da822e681b0e8c5a3da71658a82e2f8c83e82f1378e66414groups:group1:# 分组名algorithm-handler:com.kangaroohy.dingtalk.multiple.algorithm.RoundRobinHandler# 发送算法这里轮询可自己实现相关算法robots:-access-token:d8074a31ae7cf539cdf204e1420e9653e63d8d7299d2286d93cee5secret:SECa93355b1e75f63b1159be3e66f6caf964430d104c6e77831da0618-access-token:28f7ca656c91a010a7c52cd12a352541822dd8e4353cef1ac8aa53secret:SECa771faa5e9dde4bc884a596f6f39d42f341ef35513051ad305a67d330group2:algorithm-handler:com.kangaroohy.dingtalk.multiple.algorithm.DingTalkHandlerrobots:-access-token:d8074a31ae7cf539cdfd52e1420e9653e63d8d7299d2286d93cee5secret:SECa93355b1e75f63b1159be3e6c70d504474430d104c6e77831da0618-access-token:28f7ca656c91a010a78d109f2cd12a352541822dd8e4353cef1ac8aa53secret:SECa771faa5e9dde4bc884a596f39d42f341ef35513051ad305a67d330

更多文章