SpringBoot实现钉钉机器人消息推送的示例代码

yizhihongxing

下面是 Spring Boot 实现钉钉机器人消息推送的完整攻略。

1. 准备工作

在开始之前,需要完成以下几个步骤:

  1. 在钉钉工作台上创建一个自定义机器人。
  2. 获取钉钉机器人的 Webhook 值。

2. 新建 Spring Boot 项目

使用 Spring Initializr 创建一个新的 Spring Boot 项目。在这个项目中,我们需要引入以下依赖:

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>1.2.73</version>
</dependency>

<dependency>
  <groupId>com.dingtalk</groupId>
  <artifactId>taobao-sdk-java</artifactId>
  <version>20210420</version>
</dependency>

3. 创建钉钉机器人类和消息类

创建一个名为 DingtalkRobot 的类,用于发送消息和处理异常。代码如下:

import java.util.Collections;

import com.taobao.api.ApiException;
import com.taobao.api.DefaultTaobaoClient;
import com.taobao.api.TaobaoClient;
import com.taobao.api.request.OapiRobotSendRequest;
import com.taobao.api.response.OapiRobotSendResponse;

public class DingtalkRobot {

  private static final String DINGTALK_URL = "https://oapi.dingtalk.com/robot/send";

  private final String accessKey;

  public DingtalkRobot(String accessKey) {
    this.accessKey = accessKey;
  }

  public boolean sendMessage(String message) {
    TaobaoClient client = new DefaultTaobaoClient(DINGTALK_URL, accessKey, "");
    OapiRobotSendRequest request = new OapiRobotSendRequest();
    request.setMsgtype("text");
    request.setText(new OapiRobotSendRequest.Text());
    request.getText().setContent(message);
    request.setAt(new OapiRobotSendRequest.At());
    request.getAt().setAtMobiles(Collections.singletonList("12345678901"));
    request.getAt().setIsAtAll(false);
    try {
      OapiRobotSendResponse response = client.execute(request);
      if ("ok".equals(response.getErrmsg())) {
        return true;
      }
    } catch (ApiException e) {
      e.printStackTrace();
    }
    return false;
  }
}

创建一个名为 DingtalkMessage 的类,用于存储需要发送的消息。这个类包含了通用的消息格式。代码如下:

import java.util.HashMap;
import java.util.Map;

public class DingtalkMessage {

  public static final String MARKDOWN_TYPE = "markdown";
  public static final String TEXT_TYPE = "text";

  private String type;
  private Map<String, Object> content;
  private boolean atAll = false;
  private String[] atMobiles = new String[0];

  public DingtalkMessage() {
    this.type = TEXT_TYPE;
    this.content = new HashMap<>();
  }

  public DingtalkMessage(String type) {
    this.type = type;
    this.content = new HashMap<>();
  }

  public String getType() {
    return type;
  }

  public void setType(String type) {
    this.type = type;
  }

  public Map<String, Object> getContent() {
    return content;
  }

  public void setContent(Map<String, Object> content) {
    this.content = content;
  }

  public boolean isAtAll() {
    return atAll;
  }

  public void setAtAll(boolean atAll) {
    this.atAll = atAll;
  }

  public String[] getAtMobiles() {
    return atMobiles;
  }

  public void setAtMobiles(String[] atMobiles) {
    this.atMobiles = atMobiles;
  }

  public DingtalkMessage addContent(String key, Object value) {
    this.content.put(key, value);
    return this;
  }

  public DingtalkMessage addAtMobile(String mobile) {
    String[] newAtMobiles = new String[atMobiles.length + 1];
    System.arraycopy(atMobiles, 0, newAtMobiles, 0, atMobiles.length);
    newAtMobiles[atMobiles.length] = mobile;
    this.atMobiles = newAtMobiles;
    return this;
  }
}

4. 发送消息

要发送一条消息,可以按照以下步骤操作:

  1. 创建一个 DingtalkRobot 对象,并传入钉钉机器人的 accessKey。
  2. 创建一个 DingtalkMessage 对象。
  3. 设置 DingtalkMessage 的内容和 atMobiles 属性。
  4. 调用 DingtalkRobotsendMessage 方法,发送消息。

示例:

public static void main(String[] args) {
  // 1. 创建一个 DingtalkRobot 对象并传入钉钉机器人的 accessKey
  String accessKey = "钉钉机器人的 accessKey";
  DingtalkRobot robot = new DingtalkRobot(accessKey);

  // 2. 创建一个 DingtalkMessage 对象
  String title = "这是一条测试消息";
  String content = "测试内容...";
  DingtalkMessage message = new DingtalkMessage();
  message.setType(DingtalkMessage.MARKDOWN_TYPE);
  message.addContent("title", title)
         .addContent("text", content)
         .addAtMobile("12345678901");

  // 3. 发送消息
  robot.sendMessage(message);
}

5. 示例代码

下面给出一个更完整的代码示例:

import java.util.Collections;

import com.taobao.api.ApiException;
import com.taobao.api.DefaultTaobaoClient;
import com.taobao.api.TaobaoClient;
import com.taobao.api.request.OapiRobotSendRequest;
import com.taobao.api.response.OapiRobotSendResponse;

public class DingtalkRobot {

  private static final String DINGTALK_URL = "https://oapi.dingtalk.com/robot/send";

  private final String accessKey;

  public DingtalkRobot(String accessKey) {
    this.accessKey = accessKey;
  }

  public boolean sendMessage(DingtalkMessage message) {
    TaobaoClient client = new DefaultTaobaoClient(DINGTALK_URL, accessKey, "");
    OapiRobotSendRequest request = new OapiRobotSendRequest();
    request.setMsgtype(message.getType());
    switch (message.getType()) {
      case DingtalkMessage.TEXT_TYPE:
        request.setText(new OapiRobotSendRequest.Text());
        request.getText().setContent((String) message.getContent().get("text"));
        break;
      case DingtalkMessage.MARKDOWN_TYPE:
        request.setMarkdown(new OapiRobotSendRequest.Markdown());
        request.getMarkdown().setTitle((String) message.getContent().get("title"));
        request.getMarkdown().setText((String) message.getContent().get("text"));
        break;
      default:
        throw new IllegalArgumentException("Unsupported message type");
    }
    if (message.isAtAll()) {
      request.setAt(new OapiRobotSendRequest.At().setIsAtAll(true));
    } else {
      request.setAt(new OapiRobotSendRequest.At().setAtMobiles(convertToJavaList(message.getAtMobiles())));
    }
    try {
      OapiRobotSendResponse response = client.execute(request);
      if ("ok".equals(response.getErrmsg())) {
        return true;
      }
    } catch (ApiException e) {
      e.printStackTrace();
    }
    return false;
  }

  private <T> java.util.List<T> convertToJavaList(T[] arr) {
    if (arr == null) {
      return Collections.emptyList();
    }
    return java.util.Arrays.asList(arr);
  }
}

import java.util.HashMap;
import java.util.Map;

public class DingtalkMessage {

  public static final String MARKDOWN_TYPE = "markdown";
  public static final String TEXT_TYPE = "text";

  private String type;
  private Map<String, Object> content;
  private boolean atAll = false;
  private String[] atMobiles = new String[0];

  public DingtalkMessage() {
    this.type = TEXT_TYPE;
    this.content = new HashMap<>();
  }

  public DingtalkMessage(String type) {
    this.type = type;
    this.content = new HashMap<>();
  }

  public String getType() {
    return type;
  }

  public void setType(String type) {
    this.type = type;
  }

  public Map<String, Object> getContent() {
    return content;
  }

  public void setContent(Map<String, Object> content) {
    this.content = content;
  }

  public boolean isAtAll() {
    return atAll;
  }

  public void setAtAll(boolean atAll) {
    this.atAll = atAll;
  }

  public String[] getAtMobiles() {
    return atMobiles;
  }

  public void setAtMobiles(String[] atMobiles) {
    this.atMobiles = atMobiles;
  }

  public DingtalkMessage addContent(String key, Object value) {
    this.content.put(key, value);
    return this;
  }

  public DingtalkMessage addAtMobile(String mobile) {
    String[] newAtMobiles = new String[atMobiles.length + 1];
    System.arraycopy(atMobiles, 0, newAtMobiles, 0, atMobiles.length);
    newAtMobiles[atMobiles.length] = mobile;
    this.atMobiles = newAtMobiles;
    return this;
  }
}

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

  public static void main(String[] args) {
    String accessKey = "钉钉机器人的 accessKey";
    DingtalkRobot robot = new DingtalkRobot(accessKey);
    String title = "这是一条测试消息";
    String content = "测试内容...";
    DingtalkMessage message = new DingtalkMessage();
    message.setType(DingtalkMessage.MARKDOWN_TYPE);
    message.addContent("title", title)
         .addContent("text", content)
         .addAtMobile("12345678901");
    robot.sendMessage(message);
  }
}

上面的代码演示了一个用于发送钉钉机器人消息的示例。如果你需要发送多条消息,只需要创建多个 DingtalkMessage 对象,并循环调用 DingtalkRobotsendMessage 方法即可。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot实现钉钉机器人消息推送的示例代码 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • 详解Spring MVC如何测试Controller(使用springmvc mock测试)

    以下是关于“详解Spring MVC如何测试Controller(使用springmvc mock测试)”的完整攻略,其中包含两个示例。 详解Spring MVC如何测试Controller(使用springmvc mock测试) Spring MVC是一个基于Java的Web框架,它可以帮助我们快速开发Web应用程序。在开发过程中,我们需要对Control…

    Java 2023年5月17日
    00
  • java.lang.Void 与 void的比较及使用方法介绍

    Java中的Void和void Java中的Void和void是两个容易混淆的概念,但实际上它们是有着明显的区别的。 Void 先来看看Void。Void是Java中的一个类,不同于基本类型(如int和double),它不能进行实例化。Void类只有一个实例,即常量Void.TYPE,表示的是空类型。 我们可以用Void类来定义一个返回值类型为void的方法…

    Java 2023年5月26日
    00
  • Spring Security登录添加验证码的实现过程

    实现Spring Security登录添加验证码的过程大体可以分为以下几步: 添加验证码依赖 首先需要在pom.xml文件中添加相关依赖,以下是一个基本的配置: <dependency> <groupId>com.google.code.kaptcha</groupId> <artifactId>kaptcha…

    Java 2023年5月20日
    00
  • 微信小程序实现书架小功能

    下面我将为你详细讲解如何在微信小程序中实现书架小功能。 1. 准备工作 在开始实现之前,你需要安装并配置好微信小程序开发工具,同时了解一些基本的微信小程序开发知识。如果你还没有完成这些准备工作,可参考官方文档进行学习。 2. 创建页面 首先,需要在小程序中创建一个页面来展示书架。在微信小程序开发者工具中,点击新建页面,命名为bookshelf。同时,在根目录…

    Java 2023年5月23日
    00
  • SpringBoot+Vue项目新手快速入门指南

    SpringBoot+Vue项目新手快速入门指南 SpringBoot和Vue是两个非常流行的开发框架,它们可以帮助我们快速构建高效、可靠的Web应用程序。在本文中,我们将介绍如何使用SpringBoot和Vue构建一个完整的Web应用程序。 步骤一:创建SpringBoot项目 我们首先需要创建一个SpringBoot项目。以下是一个示例: 打开Intel…

    Java 2023年5月15日
    00
  • Java Validation方法入参校验实现过程解析

    Java Validation方法入参校验实现过程 前言 在实际的开发工作中,对于传入的参数进行校验非常重要,对于一个好的程序员来说,必须具备对参数进行验证的能力。Java提供了校验的解决方案,可以快速开发和验证传递给方法的数据。 步骤 1. 引入Validation框架 在你的Maven项目的POM文件中添加以下依赖: <dependency>…

    Java 2023年5月20日
    00
  • Android后端服务器的搭建方法

    下面我就来详细讲解Android后端服务器的搭建方法,并提供两条实例。 环境准备 首先,我们需要准备好以下环境:- 一台云服务器或本地服务器- 操作系统:Ubuntu或CentOS- 使用LNMP或LAMP的服务器环境,也可以使用Docker等其他方式搭建服务器环境- 支持PHP、MySQL等相关软件 搭建过程 接下来,我们可以按照以下步骤来进行Androi…

    Java 2023年5月20日
    00
  • servlet监听实现统计在线人数功能 附源码下载

    这里提供一个基于Servlet监听器的统计在线人数的实现方法,如果学习Java Web开发,这是一道需要掌握的入门练习题目。 实现思路 编写一个Servlet监听器,实现 ServletContextAttributeListener 接口 在监听器中编写监听器方法,实现当用户绘制request时添加ServletContextListener储存在线人数,…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部