前言:

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

操作:

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

一、添加自定义机器人

首先新建一个群

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

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

步骤二:复制出机器人的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. PHP多文件上传格式化

    文件上传是所有web应用中最常见的功能,而PHP实现这一功能也非常的简单,只需要前端设置表单的 enctype 值为 multipart/form-data 之后,我们就可以通过 $_FILES 获得 ...

  2. 手机访问pc网站自动跳转手机端网站PHP代码

    $agent = $_SERVER['HTTP_USER_AGENT']; if(strpos($agent,"comFront") strpos($agent,"iPh ...

  3. 用Python做了个奇奇怪怪的打篮球游戏

    一.前言 准备编写一个篮球游戏,运动员带球跑,跳起投篮.在每帧图片中包括运动员和篮球,使用多帧图片,实现运动员运球跑动的效果. 运动员运球跑动作每帧图形的宽和高可能不同,例如,跨一大步,和两腿并拢,其 ...

  4. Java基础系列(1)- JDK、JRE、JVM

    Java三大版本(Write Once:Run Anywhere) JavaSE:标准版 JavaME:嵌入式开发 JavaEE:E企业级开发 JDK.JRE.JVM JDK是开发工具包 JRE是编译 ...

  5. Nginx系列(1)- Nginx简介

    公司产品出现瓶颈 公司项目刚上线的时候,并发量小,用户使用少,所以在低并发的情况下,一个jar包启动应用就够了,然后内部tomcat返回内容给用户 但是慢慢的,使用平台的用户越来越多,并发量慢慢增大了 ...

  6. OC源码剖析对象的本质

    1. 类的底层实现 先写一个 Person 类: @interface Person : NSObject @property (nonatomic, copy) NSString *p_name; ...

  7. spring入门3-jdbcTemplate简单使用和声明式事务

    1.JdbcTemplate简单使用 1.1.引入相关依赖包 <dependency> <groupId>mysql</groupId> <artifactI ...

  8. php安全 过滤、验证、转义

    不要相信外部源 $_GET $_POST $_REQUEST $_COOKIE $argv php://stdin php://input file_get_contents() 远程数据库 远程ap ...

  9. Laravel [1045] Access denied for user 'homestead'@'localhost' .env没有配置

    laravel 连接数据库出现错误 PDOException in Connector.php line 55:SQLSTATE[HY000] [1045] Access denied for use ...

  10. 鸿蒙内核源码分析(事件控制篇) | 任务间多对多的同步方案 | 百篇博客分析OpenHarmony源码 | v30.02

    百篇博客系列篇.本篇为: v30.xx 鸿蒙内核源码分析(事件控制篇) | 任务间多对多的同步方案 | 51.c.h .o 进程通讯相关篇为: v26.xx 鸿蒙内核源码分析(自旋锁篇) | 自旋锁当 ...