小玩意 - 一篇带你玩转 SpringBoot 钉钉机器人

Posted 放羊的牧码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小玩意 - 一篇带你玩转 SpringBoot 钉钉机器人相关的知识,希望对你有一定的参考价值。

故事背景

为什么想着去捣腾这个玩意呢?因为最近有一些定时任务每天都需要重复的人工去执行、审核,于是就想到了能不能有一个定时任务执行完,但是需要一个机器人通知我,之前想到用邮箱(玩腻了),但是这次想看下 DingTalk 的能力——机器人

使用教程

 

  • 1、创建 Ding 群

首先在钉钉软件里创建一个群聊,这个比较简单就不多说啥了,主要注意的地方是一个群聊至少三个人,但是如何做到 1 个人创建一个群呢?也很简单,只要一开始拉 2 个人进来,然后创建成功后把他们踢出去就行,这样就实现 1 个人在一个群里,就可以和机器人愉快地玩耍啦~

  • 2、添加自定义机器人

因为我们这篇主要讲解的是自定义机器人,其他机器人也半斤八两的操作,所以我们还是拿自定义机器人来举例说明,如图所是,完全傻瓜式操作

Ps1:这一步安全设置有三种安全设置可供选择,这里只演示加签安全设置(推荐)

Ps2:记得先复制来这串密钥,下文会用到

Ps1:这一步也一样,提前复制好 Webhook 信息,下文需要用到

Ps2:当然如果以上密钥和Webhook都忘记了的话,可以重新打开上面的机器人那边可以重新查看的噢

  • 3、开始编码(Java)
<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>alibaba-dingtalk-service-sdk</artifactId>
  <version>2.0.0</version>
</dependency>

Ps:添加依赖

import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiRobotSendRequest;
import com.dingtalk.api.response.OapiRobotSendResponse;
import com.taobao.api.ApiException;
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

/**
 * @author Lux Sun
 * @date 2022/7/5
 */
public class DingUtil 

    private static final String SECRET = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxd2233f6165930cfd78539369";
    private static final String URL = "https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxx7e1d6e711a3a5ef8e9908467a0f667";

    public static void send(String content) throws ApiException, NoSuchAlgorithmException, UnsupportedEncodingException, InvalidKeyException 
        Long timestamp = System.currentTimeMillis();
        String stringToSign = timestamp + "\\n" + SECRET;
        Mac mac = Mac.getInstance("HmacSHA256");
        mac.init(new SecretKeySpec(SECRET.getBytes("UTF-8"), "HmacSHA256"));
        byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
        String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
        String signResult = "&timestamp=" + timestamp + "&sign=" + sign;
        // 得到拼接后的 URL
        String url = URL + signResult;

        DingTalkClient client = new DefaultDingTalkClient(url);
        OapiRobotSendRequest request = new OapiRobotSendRequest();
        request.setMsgtype("text");
        OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
        text.setContent(content);
        request.setText(text);
//        OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
//        at.setAtMobiles(Arrays.asList("132xxxxxxxx"));
        // isAtAll类型如果不为Boolean,请升级至最新SDK
//        at.setIsAtAll(true);
//        at.setAtUserIds(Arrays.asList("109929","32099"));
//        request.setAt(at);

//        request.setMsgtype("link");
//        OapiRobotSendRequest.Link link = new OapiRobotSendRequest.Link();
//        link.setMessageUrl("https://www.dingtalk.com/");
//        link.setPicUrl("");
//        link.setTitle("时代的火车向前开");
//        link.setText("这个即将发布的新版本,创始人xx称它为红树林。而在此之前,每当面临重大升级,产品经理们都会取一个应景的代号,这一次,为什么是红树林");
//        request.setLink(link);
//
//        request.setMsgtype("markdown");
//        OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown();
//        markdown.setTitle("杭州天气");
//        markdown.setText("#### 杭州天气 @156xxxx8827\\n" +
//                "> 9度,西北风1级,空气良89,相对温度73%\\n\\n" +
//                "> ![screenshot](https://gw.alicdn.com/tfs/TB1ut3xxbsrBKNjSZFpXXcXhFXa-846-786.png)\\n"  +
//                "> ###### 10点20分发布 [天气](http://www.thinkpage.cn/) \\n");
//        request.setMarkdown(markdown);
        OapiRobotSendResponse response = client.execute(request);
    

 Ps:中间注释掉的部分,一个是 @ 功能,还有一些是其他的传参内容方式,因为我这边只需要用到 Text 方式即可

DingUtil.send("测试文本消息");

Ps:运行后看如下效果图

  • Tips:最后,其他消息传参方式可见官方文档,其实也非常简单噢~ 

以上是关于小玩意 - 一篇带你玩转 SpringBoot 钉钉机器人的主要内容,如果未能解决你的问题,请参考以下文章

[java基础] 内部类@ 一篇带你玩透(超详解)

MyBatis-Plus - 一篇带你玩转自定义 BaseMapper

MyBatis-Plus - 一篇带你玩转自定义 BaseMapper

MyBatis-Plus - 一篇带你解决自定义 SQL 注入器失效必杀技

MyBatis-Plus - 一篇带你解决自定义 SQL 注入器失效必杀技

五分钟带你玩转spring cloud alibaba实战!springboot注册到nacos