前言:

项目中有一个需求,当有新订单产生的时候,希望能够及时通知到业务相关人员进行处理,整体考虑了一下,选用了钉钉机器人提醒功能(公司内部主要也是使用钉钉进行通讯)。

操作:

主要分为两部分进行处理:

一、添加自定义机器人

首先新建一个群

步骤一:【电脑钉钉 】-【群聊】-【群设置】-【智能群助手】-【添加更多】-【添加机器人】-【自定义】-【添加】,编辑机器人名称和选择添加的群组。完成必要的安全设置(至少选择一种),勾选 我已阅读并同意《自定义机器人服务及免责条款》,点击“完成”即可。

(备注:安全设置方式,我选用的是加签,密钥要复制出来,后面要用到)

步骤二:复制出机器人的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 */
7 public static String dingHmacSHA256(String timestamp, String secret) {
8 try {
9 String stringToSign = timestamp + "\n" + secret;
10 Mac mac = Mac.getInstance("HmacSHA256");
11 mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
12 byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
13 String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
14 return sign;
15 } catch (Exception e) {
16 log.error("dingHmacSHA256加密失败", e);
17 }
18 return null;
19 }

业务代码

 1     @Value("${ding.robot.token}")
2 private String robotToken;
3 @Value("${ding.robot.key}")
4 private String robotKey;
5
6 @Autowired
7 private RestTemplate restTemplate;
8
9 /**
10 * 推送钉钉机器人消息
11 * @param type
12 * @return
13 */
14 public String sendDingMsg(String type, String orderId, String serviceName) {
15 String timestamp = String.valueOf(System.currentTimeMillis());
16 String sign = HmacSha256Util.dingHmacSHA256(timestamp, robotKey);
17 // 钉钉机器人地址(配置机器人的webhook)
18 // https://oapi.dingtalk.com/robot/send?access_token=XXXXXX&timestamp=XXX&sign=XXX
19 String dingUrl = "https://oapi.dingtalk.com/robot/send?access_token=" + robotToken + "&timestamp=" + timestamp + "&sign=" + sign;
20
21 //是否通知所有人
22 boolean isAtAll = true;
23
24 //通知具体人的手机号码列表
25 List<String> mobileList = Lists.newArrayList();
26 //mobileList.add("填入手机号,可以具体@到某个人");
27 //mobileList.add("13411111111");
28
29 //钉钉机器人消息内容
30 String content = "【提醒】有一笔新的[" + serviceName + "]服务订单,订单号为" + orderId + ",请及时查看!";
31 //组装请求内容
32 Map<String, Object> reqStr = buildReqStr(content, isAtAll, mobileList);
33 return invokeGeneralApi(dingUrl, reqStr);
34 }
35
36 /**
37 * 组装请求报文
38 * @param content
39 * @return
40 */
41 private Map<String, Object> buildReqStr(String content, boolean isAtAll, List<String> mobileList) {
42 //消息内容
43 Map<String, String> contentMap = Maps.newHashMap();
44 contentMap.put("content", content);
45
46 //通知人
47 Map<String, Object> atMap = Maps.newHashMap();
48 //1.是否通知所有人
49 atMap.put("isAtAll", isAtAll);
50 //2.通知具体人的手机号码列表
51 atMap.put("atMobiles", mobileList);
52
53 Map<String, Object> reqMap = Maps.newHashMap();
54 reqMap.put("msgtype", "text");
55 reqMap.put("text", contentMap);
56 reqMap.put("at", atMap);
57
58 return reqMap;
59 }
60
61 @Override
62 public String invokeGeneralApi(String url, Map<String, Object> params) {
63 String body = "";
64 try {
65 HttpHeaders headers = new HttpHeaders();
66 headers.setContentType(MediaType.APPLICATION_JSON);
67 HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(params, headers);
68 ResponseEntity<String> entity = restTemplate.postForEntity(url, httpEntity, String.class);
69 body = entity.getBody();
70 LOGGER.info("invokeGeneralApi()>>>[{}]", body);
71 } catch (RestClientException e) {
72 LOGGER.error("API调用错误,接口地址:[{}],请求参数:[{}]", url, params, e);
73 }
74 return body;
75 }

三、效果图

官方链接:

添加自定义机器人

自定义机器人安全设置

Java项目中集成钉钉机器人推送消息提醒的更多相关文章

  1. nodejs通过钉钉群机器人推送消息

    nodejs 通过钉钉群机器人推送消息 Intro 最近在用 nodejs 写爬虫,之前的 nodejs 爬虫代码用 js 写的,感觉可维护性太差,也没有智能提示,于是把js改用ts(typescri ...

  2. Java Springboot webSocket简单实现,调接口推送消息到客户端socket

    Java Springboot webSocket简单实现,调接口推送消息到客户端socket 后台一般作为webSocket服务器,前台作为client.真实场景可能是后台程序在运行时(满足一定条件 ...

  3. 最新的极光推送服务器端代码(java服务器后台向手机端自定义推送消息)

    一共两个类 一个Jdpush  一个JpushClientUtil 代码如下   注解都写的很清楚 package com.sm.common.ajpush; import org.slf4j.Log ...

  4. mqtt协议实现 java服务端推送功能(三)项目中给多个用户推送功能

    接着上一篇说,上一篇的TOPIC是写死的,然而在实际项目中要给不同用户 也就是不同的topic进行推送 所以要写活 package com.fh.controller.information.push ...

  5. Python3使用钉钉机器人推送消息(签名方式)

    import time import hmac import hashlib import base64 import urllib import json import requests impor ...

  6. 【OF框架】在Azure DevOps中配置项目持续集成CI服务,推送镜像到Azure容器注册表

    准备工作 开通Azure账号,具有开通服务权限,关键是里面要有钱. 开通Azure DevOps,能够创建组织和项目. 具备一定的DevOps知识,了解CICD概念.Docker基本操作. 一.创建& ...

  7. 钉钉机器人集成Jenkins推送消息模板自定义发送报告

    一.由于公司同样也使用了钉钉.那么在做Jenkins集成自动化部署的时候,也是可以集成钉钉的. 那种Jenkins下载钉钉插件集成,简单设置就可以完成了.我们今天要做的是,定制化的发送消息. 钉钉推送 ...

  8. 在Java项目中整合Scala

    Scala是一个运行在Java JVM上的面向对象的语言.它支持函数编程,在语法上比Java更加灵活,同时通过Akka库,Scala支持强大的基于Actor的多线程编程.具有这些优势,使得我最近很想在 ...

  9. Django 通过APNS推送消息

    最近手上一个项目需要通过APNS向app推送消息,由于后端采用drf框架,在github上找了好多模块,最终发现pzanitti大神的推送模块 django-push-notifications 比较 ...

随机推荐

  1. python函数模块

    python函数模块 学习完本篇,你将会深入掌握 函数相关知识 1.函数定义 2.函数如何调用 3.递归函数以及匿名函数使用 模块相关知识 1.模块如何导入调用 2.函数调用顺序 函数定义 函数代码块 ...

  2. 重学VUE——vue 常用指令有哪些?

    一.什么是指令? 在 vue 中,指令以 v- 开头,是一种特殊的自定义行间属性.指令属性的预期值是一个表达式,指令的职责就是:表达式的值改变时,相应地将某些行为应用到DOM上.只有v-for是一个类 ...

  3. COS控制台进阶 - 文件预览和在线编辑

    导语 | COS控制台新上线了文件预览功能,用户可在控制台内直接预览.编辑文件内容. 前不久,微软发布了 vscode for web 的公告,是基于web的在线代码编辑器,无需下载安装可以直接在we ...

  4. 使用ImageMagick操作gif图

    上篇文章我们已经学习了 GraphicsMagick 中的许多函数,也说过 GraphicsMagick 是 ImageMagick 的一个分支,所以他们很多的函数都是一样的使用方式和效果,相似的内容 ...

  5. TP5框架下实现数据库的备份功能-tp5er/tp5-databackup

    1.安装扩展 方法一: composer require tp5er/tp5-databackup dev-master 方法二 composer.json: "require": ...

  6. jQuery has been removed

    jQuery has been removed, 新的项目不要用jQuery了 这些问题都已经有了解决方案 * $()选择器, * $.ajax, * $dom.on("click" ...

  7. python的列表和java的数组有何异同

    今天面试被问到,自己学习一下. python的列表是可变长的,定义时不需要指定长度:pyhton是弱对象类型,python的列表存储的数据类型可以不相同:python的列表更加灵活,如可以通过''命令 ...

  8. P3211-[HNOI2011]XOR和路径【高斯消元】

    正题 题目链接:https://www.luogu.com.cn/problem/P3211 题目大意 一个\(n\)个点\(m\)条边的无向图,从\(1\)到\(n\)随机游走.求期望路径异或和. ...

  9. Python3入门系列之-----循环语句(for/while)

    前言 for循环在Python中是用的比较多的一种循环方法,小伙伴需要熟练掌握它的使用 本章节将为大家介绍 Python 循环语句的使用.Python 中的循环语句有 for 和 while for循 ...

  10. 利用PATH环境变量 - 提升linux权限~👻

    利用PATH提升linux权限 参考地址:https://www.hackingarticles.in/linux-privilege-escalation-using-path-variable/ ...