前言:

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

操作:

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

一、添加自定义机器人

首先新建一个群

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

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

步骤二:复制出机器人的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. 使用ImageMagick操作gif图

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

  2. supermvc 操作备要

    模板暂时仅支持smarty,需要指定模板文件   系统配置文件在supermvc文件夹下 sconfig.php 修改项目目录下的conf下的config.php 会覆盖系统默认配置   contro ...

  3. 链式调用+对象属性与遍历+this指向+caller/callee

    之前的作业: 提示: 在开发的时候尽量在函数内部将作用都给调用好,在外部就能够直接使用 链式调用: 正常这样是不行的,因为没有具体返回值:  return 具体的对象,这样的才是链式操作,jquery ...

  4. 启动docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

    启动docker提示: docker: Got permission denied while trying to connect to the Docker daemon socket at uni ...

  5. three.js 模型拖动之DragControls控制器

    需求: 拖动场景内的模型 方案: 增加控制器DragControls 1.引入控制器 import { OrbitControls } from "three/examples/jsm/co ...

  6. 详细的vsftpd配置

    环境:CentOS 5.0 操作系统一.安装:1.安装Vsftpd服务相关部件:[root@KcentOS5 ~]# yum install vsftpd*Dependencies Resolved= ...

  7. VS2013的switch case缩进问题

    原来的   更改设置   改完后    

  8. 深入浅出WPF-06.Binding(绑定)01

    Binding(绑定) 先上图,再解释 针对这个图,我们先来说说什么是Binding. Binding就是一个桥梁,建立在数据和UI之间的桥梁.既然是数据驱动,那么我们就把数据称之为"源&q ...

  9. RabbitMQ 3.9.7 镜像模式集群的搭建

    1. 概述 老话说的好:做人脚踏实地,一步一个脚印,便定能战胜一切困难,最终取得成功!!! 言归正传,之前我们聊了 RabbitMQ 单点服务的安装,今天我们来聊聊 RabbitMQ 3.9.7 镜像 ...

  10. 解决springboot 配置文件未映射静态资源文件 导致shiro拦截静态资源的问题

    ---------------------------------------------------------------------------------------------------- ...