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

下面是 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日

相关文章

  • SpringBoot Loki安装简介及实战思路

    SpringBoot Loki安装简介及实战思路 1. 简介 Loki是一个针对日志处理的系统,由于Prometheus不是专门用于处理日志的,在日志处理上的性能和扩展性受到限制,于是就有了Loki。Loki是Prometheus旗下的一个项目,使用Go语言编写,将日志收集器的工作委托给客户端工具,将日志转储到后端,并提供基于标签的存储、聚合、查询和告警系统…

    Java 2023年5月26日
    00
  • Java实体类(entity)作用说明

    首先来讲解一下什么是Java实体类。 Java实体类(Entity)作用说明 Java实体类是一种Java类,用于表示业务模型中的数据对象。在Java开发中,除了程序中使用的基本类型和预定义类型外,一般会自定义一些类用于表示具体的数据对象,比如用户、订单等。此时需要使用Java实体类来对数据进行结构化描述和封装。Java实体类通常包含了字段和相应的get/s…

    Java 2023年5月26日
    00
  • java 线程池keepAliveTime的含义说明

    当我们使用Java中的线程池时,线程池使用keepAliveTime参数来确定当线程池中的线程处于空闲状态时,我们希望线程在终止之前可以保持的时间量。如果一段时间内没有任务需要执行,线程则会被清除,以帮助线程池节省资源。 具体来说,keepAliveTime表示在线程池处于空闲状态且当前线程数量超过corePoolSize时,空闲线程等待新任务的最长时间。在…

    Java 2023年5月20日
    00
  • struts2入门(搭建环境、配置、示例)详解

    Struts2入门攻略 Struts2是一个基于MVC架构的Web应用程序开发框架。本攻略将介绍如何搭建Struts2开发环境、配置Struts2框架并开发示例项目。 环境搭建 首先,我们需要准备好开发环境: JDK:Java开发工具包,下载地址:https://www.oracle.com/technetwork/java/javase/downloads…

    Java 2023年5月20日
    00
  • Java多线程常见案例分析线程池与单例模式及阻塞队列

    Java多线程常见案例分析线程池与单例模式及阻塞队列攻略 什么是多线程? 在计算机科学中,多线程(英语:Multithreading)指的是同时运行多个线程执行不同的任务。在线程中,单个处理器(或核心)会执行多个并发执行的任务。这是在现代操作系统中实现并发的一种方式。 什么是线程池? 线程池是预先实例化一定数量的线程,并在它们启动时将它们放入池中。每个任务都…

    Java 2023年5月19日
    00
  • Maven打包跳过测试的5种方式总结

    下面我将详细讲解“Maven打包跳过测试的5种方式总结”的完整攻略。 1. 前言 在开发中,经常需要使用 Maven 进行项目构建,在进行打包时,可能需要跳过测试,以加快构建速度,本文总结了 5 种 Maven 打包跳过测试的方式。 2. Maven 的默认行为 对于 Maven 而言,在执行项目构建时,默认情况下会进行测试,如果测试不通过,则会导致项目构建…

    Java 2023年5月19日
    00
  • 关于@Query注解的用法(Spring Data JPA)

    一、@Query注解的介绍 在Spring Data JPA中,@Query注解可以用来定义自定义查询。它可以定义任何符合JPA中JPQL语法规范的查询语句,并且可以支持任何返回类型,例如实体对象、DTO等。 @Query注解可以有两种使用方式: 直接在Repository接口中,定义方法时使用@Query注解,如: public interface Use…

    Java 2023年6月3日
    00
  • 手把手教你SpringBoot整合Mybatis

    当我们使用Spring Boot开发Web应用时,通常需要使用到Mybatis来操作数据库。本文将手把手教你如何在Spring Boot中整合Mybatis,包括配置Mybatis、编写Mapper接口、使用注解和XML方式进行SQL映射等。 1. 配置Mybatis 首先,我们需要在pom.xml文件中添加Mybatis和Mybatis-Spring的依赖…

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