小玩意 - 一篇带你玩转 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 = "×tamp=" + 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 钉钉机器人的主要内容,如果未能解决你的问题,请参考以下文章
MyBatis-Plus - 一篇带你玩转自定义 BaseMapper
MyBatis-Plus - 一篇带你玩转自定义 BaseMapper
MyBatis-Plus - 一篇带你解决自定义 SQL 注入器失效必杀技