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


    故事背景

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

    使用教程

     

    • 1、创建 Ding 群

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

    • 2、添加自定义机器人

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

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

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

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

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

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

    Ps:添加依赖

    1. import com.dingtalk.api.DefaultDingTalkClient;
    2. import com.dingtalk.api.DingTalkClient;
    3. import com.dingtalk.api.request.OapiRobotSendRequest;
    4. import com.dingtalk.api.response.OapiRobotSendResponse;
    5. import com.taobao.api.ApiException;
    6. import org.apache.commons.codec.binary.Base64;
    7. import javax.crypto.Mac;
    8. import javax.crypto.spec.SecretKeySpec;
    9. import java.io.UnsupportedEncodingException;
    10. import java.net.URLEncoder;
    11. import java.security.InvalidKeyException;
    12. import java.security.NoSuchAlgorithmException;
    13. /**
    14. * @author Lux Sun
    15. * @date 2022/7/5
    16. */
    17. public class DingUtil {
    18. private static final String SECRET = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxd2233f6165930cfd78539369";
    19. private static final String URL = "https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxx7e1d6e711a3a5ef8e9908467a0f667";
    20. public static void send(String content) throws ApiException, NoSuchAlgorithmException, UnsupportedEncodingException, InvalidKeyException {
    21. Long timestamp = System.currentTimeMillis();
    22. String stringToSign = timestamp + "\n" + SECRET;
    23. Mac mac = Mac.getInstance("HmacSHA256");
    24. mac.init(new SecretKeySpec(SECRET.getBytes("UTF-8"), "HmacSHA256"));
    25. byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
    26. String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
    27. String signResult = "&timestamp=" + timestamp + "&sign=" + sign;
    28. // 得到拼接后的 URL
    29. String url = URL + signResult;
    30. DingTalkClient client = new DefaultDingTalkClient(url);
    31. OapiRobotSendRequest request = new OapiRobotSendRequest();
    32. request.setMsgtype("text");
    33. OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
    34. text.setContent(content);
    35. request.setText(text);
    36. // OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
    37. // at.setAtMobiles(Arrays.asList("132xxxxxxxx"));
    38. // isAtAll类型如果不为Boolean,请升级至最新SDK
    39. // at.setIsAtAll(true);
    40. // at.setAtUserIds(Arrays.asList("109929","32099"));
    41. // request.setAt(at);
    42. // request.setMsgtype("link");
    43. // OapiRobotSendRequest.Link link = new OapiRobotSendRequest.Link();
    44. // link.setMessageUrl("https://www.dingtalk.com/");
    45. // link.setPicUrl("");
    46. // link.setTitle("时代的火车向前开");
    47. // link.setText("这个即将发布的新版本,创始人xx称它为红树林。而在此之前,每当面临重大升级,产品经理们都会取一个应景的代号,这一次,为什么是红树林");
    48. // request.setLink(link);
    49. //
    50. // request.setMsgtype("markdown");
    51. // OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown();
    52. // markdown.setTitle("杭州天气");
    53. // markdown.setText("#### 杭州天气 @156xxxx8827\n" +
    54. // "> 9度,西北风1级,空气良89,相对温度73%\n\n" +
    55. // "> ![screenshot](https://gw.alicdn.com/tfs/TB1ut3xxbsrBKNjSZFpXXcXhFXa-846-786.png)\n" +
    56. // "> ###### 10点20分发布 [天气](http://www.thinkpage.cn/) \n");
    57. // request.setMarkdown(markdown);
    58. OapiRobotSendResponse response = client.execute(request);
    59. }
    60. }

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

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

    Ps:运行后看如下效果图

    • Tips:最后,其他消息传参方式可见官方文档,其实也非常简单噢~ 
  • 相关阅读:
    土壤含氧量传感器
    巨省钱!制作产品图册的大秘籍!
    Llama3-8B+ LLaMA-Factory 中文微调
    计算机毕业设计Java景区购票管理系统(源码+mysql数据库+系统+lw文档)
    霸榜!这本《程序员如何向架构师转型》在Github已持续置顶两月
    Java可变参数和不可变集合
    面试突击79:Bean 作用域是啥?它有几种类型?
    前端食堂技术周刊第 62 期:11 月登陆浏览器的新特性、VueConf 2022、第 93 次 TC39 会议、TS 挑战
    用docker 连接mysql的过程
    ES6 入门教程 10 对象的扩展 10.1 属性的简洁表示法
  • 原文地址:https://blog.csdn.net/Dream_Weave/article/details/125620962