钉钉机器人发送消息,集成SpringBoot

使用教程

  • 官方文档:自定义机器人接入 - 钉钉开放平台
  • 需要下载电脑版钉钉 官网地址

  • 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 Y* @date 2022/7/6*/
public class DingUtil {//钉钉上添加机器人的时候会有密钥private static final String secret= "xxxxxxxxxxxxxx";//注册机器人的时候会有webhookprivate static final String webhook = "xxxxxxxxxxxxx";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;// 得到拼接后的 URLString 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);OapiRobotSendResponse response = client.execute(request);}
}

PS:此处只使用了Text方式发送消息,一般只需要这个就可以了。

  • 如需选择更多的类型请看下文
package com.hjy.mall.common.consts;import com.alibaba.fastjson.JSONObject;
import com.hjy.mall.common.util.Builder;//消息类型
public enum MsgTypeEnum {TXT(Builder.of(JSONObject::new).with(JSONObject::put,"msgtype","text").build()),MARKDOWN(Builder.of(JSONObject::new).with(JSONObject::put,"msgtype","markdown").build());MsgTypeEnum(JSONObject result) {this.result = result;}private JSONObject result;public JSONObject getResult() {return result;}public void setResult(JSONObject result) {this.result = result;}
}

PS:钉钉消息发送

package com.hjy.mall.common.util;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.hjy.mall.common.consts.MsgTypeEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.net.URLEncoder;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;@Slf4j
public class DingDingUtil {/**** 生成时间戳和验证信息*/private static String encode(String secret) throws Exception {//获取时间戳Long timestamp = System.currentTimeMillis();//把时间戳和密钥拼接成字符串,中间加入一个换行符String stringToSign = timestamp + "\n" + secret;//声明一个Mac对象,用来操作字符串Mac mac = Mac.getInstance("HmacSHA256");//初始化,设置Mac对象操作的字符串是UTF-8类型,加密方式是SHA256mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));//把字符串转化成字节形式byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));//新建一个Base64编码对象Base64.Encoder encoder = Base64.getEncoder();//把上面的字符串进行Base64加密后再进行URL编码String sign = URLEncoder.encode(new String(encoder.encodeToString(signData)),"UTF-8");//System.out.println(timestamp);//System.out.println(sign);String result = "&timestamp=" + timestamp + "&sign=" + sign;return result;};/** param: message 要发送的信息** return: void 无返回值** 作用:把传入的message发送给钉钉机器人** */public static void dingRequest(String title, String message, String webhook, String secret, MsgTypeEnum type){CloseableHttpClient httpClient = HttpClientBuilder.create().build();String url = null;try {url = webhook + encode(secret);} catch (Exception e) {e.printStackTrace();}HttpPost httpPost = new HttpPost(url);//设置http的请求头,发送json字符串,编码UTF-8httpPost.setHeader("Content-Type", "application/json;charset=utf8");//生成json对象传入字符JSONObject result = null;switch(type){case TXT:result = type.getResult();JSONObject text = new JSONObject();Map<String, Boolean> at = new HashMap<>();text.put("content", message);result.put("text", text);//result.put("msgtype", "text");at.put("isAtAll", true);result.put("at", at);break;case MARKDOWN:result = type.getResult();JSONObject markdown = new JSONObject();Map<String, Boolean> markdownAt = new HashMap<>();markdown.put("title", title);markdown.put("text", message);result.put("markdown", markdown);//result.put("msgtype", "markdown");markdownAt.put("isAtAll", true);result.put("at", markdownAt);break;default:break;}//JSONObject result = new JSONObject();String jsonString = JSON.toJSONString(result);StringEntity entity = new StringEntity(jsonString, "UTF-8");//设置http请求的内容httpPost.setEntity(entity);// 响应模型CloseableHttpResponse response = null;try {// 由客户端执行(发送)Post请求response = httpClient.execute(httpPost);// 从响应模型中获取响应实体HttpEntity responseEntity = response.getEntity();//System.out.println("响应状态为:" + response.getStatusLine());if (responseEntity != null) {log.info("钉钉响应内容长度为:{}",responseEntity.getContentLength());log.info("钉钉响应内容为:{}", EntityUtils.toString(responseEntity));//System.out.println("响应内容长度为:" + responseEntity.getContentLength());//System.out.println("响应内容为:" + EntityUtils.toString(responseEntity));}} catch (Exception e) {log.error(e.getMessage(),e);//e.printStackTrace();} finally {try {// 释放资源if (httpClient != null) {httpClient.close();}if (response != null) {response.close();}} catch (Exception e) {log.error(e.getMessage(),e);//e.printStackTrace();}}}
}

感谢大家的支持!!!

【钉钉机器人发送消息,集成SpringBoot】相关推荐

  1. C# 钉钉群机器人发送消息代码实现

    本文属于个人原创作品.个人总结,谢绝转载.抄袭.如果您有疑问或者希望沟通交流,可以联系QQ:865562060. 一.开始接入 1.开始接入钉钉之前,首先需要了解企业接入钉钉的概述:https://o ...

  2. Python用钉钉机器人发送消息并艾特多人

    继续水文章.今天主要是吐槽一下钉钉的接口文档 前几天碰见个需求: 从jira接口查出每日未完成的任务 用钉钉机器人把任务发送到钉钉工作群里,并标注是谁的任务.任务标题 发送时,艾特对应的人员 给每个人 ...

  3. 钉钉机器人怎么设置自动回复_项目部署成功后触发钉钉机器人发送消息提醒——入门配置...

    钉钉建好一个群 打开群设置, 找到群机器人 添加一个你想要的机器人 可以使用自定义 自定义机器人可以自定义头像,名字,生成一个webhook(https post的请求地址) 到这里, 钉钉机器人设置 ...

  4. WinForm开发钉钉(1) 调用机器人发送消息到钉钉群

    此文章借鉴钉钉系列教程http://blog.csdn.net/wxbluethink/article/details/77435242,增加自己的理解,记录钉钉通过调用机器人发送消息到钉钉群. 环境 ...

  5. python 使用钉钉机器人发送消息至钉钉

    如果你在使用钉钉,并且经常需要发送某些消息到钉钉群中,例如在监控某些数据,当出现异常的时候,及时发送消息通知钉钉群:或者在完成某些操作,发送消息到钉钉群中,那么我们可以使用钉钉机器人,实现自动化信息同 ...

  6. Flowable集成钉钉实现抄送发送消息

    项目地址:https://gitee.com/lwj/flowable.git 分支flowable-base 视频地址:https://www.bilibili.com/video/av797746 ...

  7. Java 利用钉钉机器人发送消息并艾特指定人

    钉钉机器人发送消息 1.引入钉钉机器人到钉钉群 2.利用群里钉钉机器人的webHook发送钉钉消息 根据webHook 我们可以看出,通过机器人发送钉钉消息,实际上就是一个http请求,事实上,所有的 ...

  8. Python使用飞书群机器人发送消息

    原创文|Space9 机器人简单介绍 飞书群中的自定义机器人是通过webhook的形式将你要发送的消息即时发送到群聊中 在群聊中添加机器人 进入群聊,打开群设置,找到群机器人,并点击添加机器人.选择C ...

  9. 基于odoo12 框架使用飞书机器人发送消息

    基于odoo12 框架使用飞书机器人发送消息 发送消息主要是注意请求体的context的构造. import requests import json params = {"receive_ ...

最新文章

  1. project euler之甚至斐波那契数字(Even Fibonacci numbers)
  2. eclips mysql jndi_Eclipse +Tomcat配置JNDI数据源
  3. python sqllite远程_Python实现Sqlite将字段当做索引进行查询的方法
  4. 深度学习之Batch Normalization
  5. 转换uptime_句型转换
  6. 怒怼腾讯加班的应届生本人回应:已找到新工作
  7. 云服务器 ECS > 网络 > 经典网络迁移至专有网络
  8. HTML的基本知识-和常用标签-以及相对路径和绝对路径的区别
  9. 卸载软件 Geek Uninstaller
  10. 关于matlab中数据拟合的一些函数polyfit()
  11. 在线JS代码调试工具JSFiddle和JSBin、菜鸟在线编辑器
  12. 赵小楼《天道》《遥远的救世主》深度解析(90)谈经论道说心安
  13. r语言算巢式设计方差分析_R语言学习笔记(七):方差分析
  14. jy-12-SPRINGMYBATIS02——云笔记05-刘苍松
  15. 力扣 旋转字符串 C语言 题解
  16. [附源码]Python计算机毕业设计SSM快递代收系统(程序+LW)
  17. 错误 1 error LNK1107: 文件无效或损坏: 无法在 0x320 处读取的————解决方案
  18. Linux:快速查看IP地址及修改IP地址
  19. 仓库摆放示意图_仓库摆放原则?
  20. springboot根据request.getSession().getServletContext().getRealPath(“/“); 访问项目静态资源问题

热门文章

  1. matlab 五连珠,我是初学者,想求哪位大神帮帮我把这个小游戏程序简单写写注释,五连珠游戏...
  2. 计算机专业的学生应该怎样提高自己的编程能力?
  3. 《操作系统》期末考试卷3参考答案
  4. vue 登录页vue模板_Vue材质设计管理员模板
  5. 字符串数组char[]和字符串指针char*的讨论
  6. 2005年1月7日0:34:06
  7. ffmpeg编译裁剪移植到arm-linux
  8. 大数据算法可能塑造更恶劣的互联网世界
  9. 域名升级访问中拿笔记好_有道云笔记被微信屏蔽,微信:部分链接内容有色情问题...
  10. Python公司年会抽奖