SpringBoot整合钉钉实现消息推送

前言

钉钉作为一款企业级通讯工具,具有广泛的应用场景,包括但不限于团队协作、任务提醒、工作汇报等。

通过Spring Boot应用程序整合钉钉实现消息推送,我们可以实现以下功能:

  • 实时向指定用户或群组发送消息通知。
  • 自定义消息内容和格式,满足不同业务需求。
  • 监控和提醒功能的实现,提高工作效率和沟通效果。

在接下来的部分,我们将逐步介绍如何在Spring Boot中配置和调用钉钉消息推送API,以实现消息推送功能。

钉钉群安装机器人

电脑端登录钉钉,选择一个群聊进行如下的操作:

注:复制生成的签名串,后续将会用到!

复制出来的结果如下:

SEC1cc02e7xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

勾选协议,点击完成即可!

接下来节将会出现如下配置:

注:复制Webhook地址,后续将使用该地址向钉钉群推送消息!

地址如下:

https://oapi.dingtalk.com/robot/send?access_token=89742c23bdxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

到此位置,经过以上步骤,钉钉群安装机器人完成了。

集成钉钉消息推送功能

引入依赖

在项目pom.xml文件中引入依赖,当前版本1.0.3.RELEASE

xml 复制代码
        <dependency>
            <groupId>cn.snowheart</groupId>
            <artifactId>spring-boot-dingtalk-robot-starter</artifactId>
            <version>1.0.3.RELEASE</version>
        </dependency>

配置WebHook地址

在application.yml配置文件中配置钉钉机器人的WebHook地址:

xml 复制代码
dingtalk:
  robot:
    prefix: https://oapi.dingtalk.com/robot/send
    access-token: 89742c23bdxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    secret:
      secret-enabled: true
      secret-token: SEC1cc02e7xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

功能测试

java 复制代码
@RestController
@RequestMapping
@Slf4j
public class DingTalkController {

    @Autowired
    private DingTalkRobotClient dingTalkRobotClient;

    /**
     * 测试发送文本消息
     */
    @GetMapping("/sendMsg")
    public void sendMessage() {
        DingTalkResponse response = dingTalkRobotClient.sendMessage(new TextMessage("公众号:小小开发者!"));
        Assert.assertEquals(response.getErrcode().longValue(), 0L);
        log.info(response.toString());
    }

}

启动项目,访问:http://127.0.0.1:8080/sendMsg 即可发送!

其他相关测试

普通文本通知

java 复制代码
  /**
     * 普通文本通知
     */
    @GetMapping("/sendTextMessage")
    public void sendTextMessage() {
        DingTalkResponse response = dingTalkRobotClient.sendTextMessage(new TextMessage("业务处理异常:构建TextMessage对象发布!"));
        Assert.assertEquals(response.getErrcode().longValue(), 0L);
        log.info(response.toString());
        ThreadUtil.sleep(3000);

        response = dingTalkRobotClient.sendTextMessage("业务处理异常:构建普通字符串发布!");
        Assert.assertEquals(response.getErrcode().longValue(), 0L);
        log.info(response.toString());
        ThreadUtil.sleep(3000);

        response = dingTalkRobotClient.sendTextMessage("业务处理异常:通知指定人!", new String[]{"17767145153"});
        Assert.assertEquals(response.getErrcode().longValue(), 0L);
        log.info(response.toString());
        ThreadUtil.sleep(3000);

        response = dingTalkRobotClient.sendTextMessage("业务处理异常:通知群内所有人!", true);
        Assert.assertEquals(response.getErrcode().longValue(), 0L);
        log.info(response.toString());
        ThreadUtil.sleep(3000);
    }

访问:http://127.0.0.1:8080/sendTextMessage

超链接文本

java 复制代码
    /**
     * 超链接文本
     */
    @GetMapping("/sendLinkMessage")
    public void sendLinkMessage() {
        DingTalkResponse response = dingTalkRobotClient.sendLinkMessage(new LinkMessage("业务处理异常:AAAAAA",
                "BBBBBB",
                "CCCCCC",
                "DDDDDD"));
        Assert.assertEquals(response.getErrcode().longValue(), 0L);
        log.info(response.toString());
        ThreadUtil.sleep(3000);
}

访问:http://127.0.0.1:8080/sendLinkMessage

Markdown文本推送

java 复制代码
 private static final String markDownDemoText = "业务报警:标题" +
            "# 一级标题\n" +
            "## 二级标题\n" +
            "### 三级标题\n" +
            "#### 四级标题\n" +
            "##### 五级标题\n" +
            "###### 六级标题\n";

    /**
     * markdown文本推送
     */
    @GetMapping("/sendMarkdownMessage")
    public void sendMarkdownMessage() {
        // 构建 markdown 对象用法
        DingTalkResponse response = dingTalkRobotClient.sendMarkdownMessage(new MarkdownMessage("业务处理异常:钉钉markdown消息支持的语法",
                markDownDemoText));
        Assert.assertEquals(response.getErrcode().longValue(), 0L);
        log.info(response.toString());
        ThreadUtil.sleep(3000);

        // 不构建对象
        response = dingTalkRobotClient.sendMarkdownMessage("业务处理异常:钉钉markdown消息支持的语法",
                markDownDemoText);
        Assert.assertEquals(response.getErrcode().longValue(), 0L);
        log.info(response.toString());
        ThreadUtil.sleep(3000);

        // 发送给指定人
        response = dingTalkRobotClient.sendMarkdownMessage("业务处理异常:钉钉markdown消息支持的语法",
                markDownDemoText, new String[]{"19087690186"});
        Assert.assertEquals(response.getErrcode().longValue(), 0L);
        log.info(response.toString());
        ThreadUtil.sleep(3000);
        //发送给全体人
        response = dingTalkRobotClient.sendMarkdownMessage("业务处理异常:钉钉markdown消息支持的语法",
                markDownDemoText, true);
        Assert.assertEquals(response.getErrcode().longValue(), 0L);
        log.info(response.toString());
        ThreadUtil.sleep(3000);
    }

访问:http://127.0.0.1:8080/sendMarkdownMessage

ActionCard 业务推送

java 复制代码
 /**
     * ActionCard业务推送
     */
    @GetMapping("/sendActionCardMessage")
    public void sendActionCardMessage() {
        DingTalkResponse response = dingTalkRobotClient.sendActionCardMessage(new ActionCardMessage("业务报警:This is title", "![screenshot](@lADOpwk3K80C0M0FoA)\n" +
                "**Apple Store** 的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划"));
        Assert.assertEquals(response.getErrcode().longValue(), 0L);
        log.info(response.toString());
        ThreadUtil.sleep(3000);

        response = dingTalkRobotClient.sendActionCardMessage("业务报警:This is title", "![screenshot](@lADOpwk3K80C0M0FoA)\n" +
                "**Apple Store** 的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划");
        Assert.assertEquals(response.getErrcode().longValue(), 0L);
        log.info(response.toString());
        ThreadUtil.sleep(3000);

        response = dingTalkRobotClient.sendActionCardMessage("业务报警:This is title", "![screenshot](@lADOpwk3K80C0M0FoA)\n" +
                        "**Apple Store** 的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划",
                HideAvatarType.HIDE);
        Assert.assertEquals(response.getErrcode().longValue(), 0L);
        log.info(response.toString());
        ThreadUtil.sleep(3000);

        response = dingTalkRobotClient.sendActionCardMessage("业务报警:This is title", "![screenshot](@lADOpwk3K80C0M0FoA)\n" +
                        "**Apple Store** 的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划",
                ActionCardButton.defaultReadButton("https://www.dingtalk.com"));
        Assert.assertEquals(response.getErrcode().longValue(), 0L);
        log.info(response.toString());
        ThreadUtil.sleep(3000);

        response = dingTalkRobotClient.sendActionCardMessage("业务报警:This is title", "![screenshot](@lADOpwk3K80C0M0FoA)\n" +
                        "**Apple Store** 的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划",
                HideAvatarType.HIDE,
                ActionCardButton.defaultReadButton("https://www.dingtalk.com"));
        Assert.assertEquals(response.getErrcode().longValue(), 0L);
        log.info(response.toString());
        ThreadUtil.sleep(3000);
    }

访问:http://127.0.0.1:8080/sendActionCardMessage

FeedCard 消息推送

java 复制代码
    /**
     * FeedCard 消息推送
     * @throws InterruptedException
     */
    @GetMapping("/sendFeedCardMessage")
    public void sendFeedCardMessage()  {
        ArrayList<FeedCardMessageItem> items = new ArrayList<>();
        items.add(new FeedCardMessageItem("业务处理异常:成为架构师的路上,看这一篇文章就足够了,因为......",
                "http://mp.weixin.qq.com/s/CPUaB60pue0Zf3fUL9xqvw",
                "https://mmbiz.qpic.cn/mmbiz_jpg/YriaiaJPb26VMtfgPvTsM9amH5hf3pmTbf40ia6OLE845icrDb0vt4AsMnTyva5mMMpwwxnkVR5UjCEI8ADvSic1qWQ/640"));

        items.add(new FeedCardMessageItem("业务处理异常:想成为一名Web开发者?你应该学习Node.js而不是PHP",
                "http://mp.weixin.qq.com/s/x8dm9e7gwLXSEzxE6sQYow",
                "https://mmbiz.qpic.cn/mmbiz_jpg/YriaiaJPb26VND0Q0hSBOoyVkr9cXQrFjWI7hOzax1IxIibqanXYD4W8nyeYX5iaicjgiaqia7ly94iawOsGwehbKGwGsA/640"));

        DingTalkResponse  response = dingTalkRobotClient.sendFeedCardMessage(new FeedCardMessage(items));
        Assert.assertEquals(response.getErrcode().longValue(), 0L);
        log.info(response.toString());
        ThreadUtil.sleep(3000);

        response = dingTalkRobotClient.sendFeedCardMessage(items);
        Assert.assertEquals(response.getErrcode().longValue(), 0L);
        log.info(response.toString());
        ThreadUtil.sleep(3000);
    }

访问:http://127.0.0.1:8080/sendFeedCardMessage

总结

通过本文的介绍,我们深入了解了如何使用Spring Boot应用集成钉钉实现消息的推送,实现了实时消息通知和提醒功能;在实际应用中,钉钉消息推送功能可以帮助企业提高内部沟通效率,及时传达重要信息和通知,提升团队协作和工作效率。

希望本文对您了解和应用钉钉消息推送功能有所帮助,如果你觉得本文对你有帮助,请点赞分享,让更多人受益!

源码获取

本文代码获取方式:

后台回复【消息推送】即可获取!

相关推荐
STARSpace888814 天前
SpringBoot 整合个推推送
java·spring boot·后端·消息推送·个推
linweidong2 个月前
4399 Go开发面试题及参考答案(下)
排序算法·http状态码·消息推送·topk·go并发·tcp握手·并发模型
岁岁岁平安5 个月前
消息推送与 WebSocket 学习
网络·websocket·消息推送
z日火9 个月前
集成钉钉消息推送功能
钉钉·消息推送
东阳马生架构1 年前
Netty基础—7.Netty实现消息推送服务二
websocket·netty·消息推送
悟空码字1 年前
使用免费的飞书机器人,实现消息推送实时通知
飞书·消息推送·群机器人
悟空码字1 年前
使用免费的微信机器人,实现消息推送实时通知
微信·消息推送·群机器人
DieSnowK1 年前
[C++][第三方库][Websocket]详细讲解
服务器·开发语言·c++·websocket·第三方库·长连接·消息推送
『 时光荏苒 』2 年前
webSocker消息推送,ajax轮询
前端·websocket·ajax·消息推送