Java项目中集成钉钉机器人推送消息提醒
前言:
项目中有一个需求,当有新订单产生的时候,希望能够及时通知到业务相关人员进行处理,整体考虑了一下,选用了钉钉机器人提醒功能(公司内部主要也是使用钉钉进行通讯)。
操作:
主要分为两部分进行处理:
一、添加自定义机器人
首先新建一个群
步骤一:【电脑钉钉 】-【群聊】-【群设置】-【智能群助手】-【添加更多】-【添加机器人】-【自定义】-【添加】,编辑机器人名称和选择添加的群组。完成必要的安全设置(至少选择一种),勾选 我已阅读并同意《自定义机器人服务及免责条款》,点击“完成”即可。
(备注:安全设置方式,我选用的是加签,密钥要复制出来,后面要用到)
文章图片
步骤二:复制出机器人的Webhook地址(格式如下截图),可用于向这个群发送消息。并点击【完成】,自定义机器人就添加成功了。
文章图片
二、代码部分
主要分为两部分进行处理:
首先在application中配置accessToken和密钥
#集成钉钉服务 ding: robot: token: 对应Webhook中的access_token值 key: 对应安全设置->加签方式中的密钥
添加加密方式
1/** 2* 钉钉自定义机器人安全设置 3* 把timestamp+"\n"+密钥当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64 encode,最后再把签名参数再进行urlEncode,得到最终的签名(需要使用UTF-8字符集) 4* @param secret 5* @return 6*/ 7public static String dingHmacSHA256(String timestamp, String secret) { 8try { 9String stringToSign = timestamp + "\n" + secret; 10Mac mac = Mac.getInstance("HmacSHA256"); 11mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256")); 12byte[] signData = https://www.it610.com/article/mac.doFinal(stringToSign.getBytes("UTF-8")); 13String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8"); 14return sign; 15} catch (Exception e) { 16log.error("dingHmacSHA256加密失败", e); 17} 18return null; 19}
业务代码
1@Value("${ding.robot.token}") 2private String robotToken; 3@Value("${ding.robot.key}") 4private String robotKey; 5 6@Autowired 7private RestTemplate restTemplate; 8 9/** 10* 推送钉钉机器人消息 11* @param type 12* @return 13*/ 14public String sendDingMsg(String type, String orderId, String serviceName) { 15String timestamp = String.valueOf(System.currentTimeMillis()); 16String sign = HmacSha256Util.dingHmacSHA256(timestamp, robotKey); 17// 钉钉机器人地址(配置机器人的webhook) 18// https://oapi.dingtalk.com/robot/send?access_token=XXXXXX×tamp=XXX&sign=XXX 19String dingUrl = "https://oapi.dingtalk.com/robot/send?access_token=" + robotToken + "×tamp=" + timestamp + "&sign=" + sign; 20 21//是否通知所有人 22boolean isAtAll = true; 23 24//通知具体人的手机号码列表 25List mobileList = Lists.newArrayList(); 26//mobileList.add("填入手机号,可以具体@到某个人"); 27//mobileList.add("13411111111"); 28 29//钉钉机器人消息内容 30String content = "【提醒】有一笔新的[" + serviceName + "]服务订单,订单号为" + orderId + ",请及时查看!"; 31//组装请求内容 32Map reqStr = buildReqStr(content, isAtAll, mobileList); 33return invokeGeneralApi(dingUrl, reqStr); 34} 35 36/** 37* 组装请求报文 38* @param content 39* @return 40*/ 41private Map buildReqStr(String content, boolean isAtAll, List mobileList) { 42//消息内容 43Map contentMap = Maps.newHashMap(); 44contentMap.put("content", content); 45 46//通知人 47Map atMap = Maps.newHashMap(); 48//1.是否通知所有人 49atMap.put("isAtAll", isAtAll); 50//2.通知具体人的手机号码列表 51atMap.put("atMobiles", mobileList); 52 53Map reqMap = Maps.newHashMap(); 54reqMap.put("msgtype", "text"); 55reqMap.put("text", contentMap); 56reqMap.put("at", atMap); 57 58return reqMap; 59} 60 61@Override 62public String invokeGeneralApi(String url, Map params) { 63String body = ""; 64try { 65HttpHeaders headers = new HttpHeaders(); 66headers.setContentType(MediaType.APPLICATION_JSON); 67HttpEntity
三、效果图
文章图片
官方链接:
添加自定义机器人
自定义机器人安全设置
【Java项目中集成钉钉机器人推送消息提醒】
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 赢在人生六项精进二阶Day3复盘
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- 六项精进20180530
- 2020-12(完成事项)
- Java|Java基础——数组