前言:

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

操作:

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

一、添加自定义机器人

首先新建一个群

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

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

步骤二:复制出机器人的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. Sentry 监控 - Search 搜索查询实战

    系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...

  2. Linux系列(40) - 自动同步时间chrony

    前言 Centos8开始取消了ntp同步时间,改为chrony同步 chrony工具安装 yum -y install chrony 修改配置文件 将配置文件中的同步服务器修改为国内的时间服务器(推荐 ...

  3. requests接口自动化-pytest框架

    pytest框架规则 测试文件以test_开头或者以_test结尾 测试类以Test开头,并且不能带有init方法 测试函数以test_开头 断言使用assert pytest框架运行用例 运行单个文 ...

  4. [转载]提升SQLite数据插入效率低、速度慢的方法

    转载地址:http://blog.csdn.net/chenguanzhou123/article/details/9376537#,如果有侵犯原创,请留言告知,本人会及时删除. 前言 SQLite数 ...

  5. c++ 的学习 第二集函数的重载之3 -利用IDA分析bebug里面

    1. 对项目右击,在文件资源管理器中打开文件夹 2.看debug里面的.exe     这个文件 函数的真实的名字 打开.exe文件就是还是显示,,, 3.debug模式有太多的断点信息还有许多不精简 ...

  6. kubeadm 命令简介

    kubeadm 命令 kubeadm init 启动一个kubernetes主节点 kubeadm join 启动一个kubernetes工作节点并加入到集群中 kubeadm upgrade 更新一 ...

  7. AT4119-[ARC096C]Everything on It【斯特林数,容斥】

    正题 题目链接:https://www.luogu.com.cn/problem/AT4119 题目大意 一个集合\(S=\{k\in[1,n]\cup N\}\),它的所有子集作为元素组成的集合中要 ...

  8. Java基础- 重写,重构和重载

    重写也称为覆盖, 是指子类与父类的方法名相同但是可以有不同的权限(子类权限需大于父类),返回值(J2SE 5.0以后增加的功能,且子类的返回值必须是父类返回值的子类)或者方法实现. 重写体现了子类补充 ...

  9. Rafy 框架 - 实体支持只更新部分变更的字段

    Rafy 快一两年没有大的更新了.并不是这个框架没人维护了.相反,主要是因为自己的项目.以及公司在使用的项目,都已经比较稳定了,也没有新的功能添加.但是最近因为外面使用了 Rafy 的几个公司,找到我 ...

  10. kvm安装window系统及使用NFS动态迁移

    验证是否开启虚拟化 # grep -E 'svm|vmx' /proc/cpuinfo - vmx is for Intel processors - svm is for AMD processor ...