当前位置: 首页 > news >正文

Java-钉钉订阅事件

文章目录

  • 背景
    • 什么是钉钉订阅事件
    • 钉钉订阅事件的应用场景
  • 整体思路
    • 查看钉钉文档
  • 什么是钉钉回调
  • 钉钉回调具体实操
    • 创建自己的应用
    • 钉钉回调
    • 开发过程中遇到的问题
  • 总结

背景

最近需要做一个业务:钉钉组织架构下添加人员之后,要对该人员的数据信息做一个处理,比如:存储表。
于是查阅了有关钉钉的订阅事件,直接让钉钉回调自己的接口即可。也就是当钉钉的组织架构下有人员新增的时候,就让他去调用给他配置的接口(回调)。

什么是钉钉订阅事件

钉钉订阅事件是指钉钉开放平台提供的一种机制,允许开发者订阅企业内部发生的各类事件,例如员工加入、离职、部门变动、审批进度更新等。当这些事件在企业内部发生时,钉钉会向开发者事先指定的回调地址发送相应的通知,开发者可以根据通知进行进一步处理。

钉钉订阅事件的应用场景

钉钉订阅事件广泛应用于企业内部信息的实时监控和处理。以下是几个常见的应用场景:

人事管理:及时了解员工加入、离职以及岗位调整等人事变动,方便进行人力资源管理。
审批流程跟踪:实时获取审批进度更新,帮助相关人员掌握工作流程状态。
部门协作:订阅部门变动事件,及时调整团队工作布局,保持组织结构的同步性。
数据分析与监控:通过订阅特定数据变动事件,实时监控关键业务数据,并进行进一步分析与处理。

整体思路

查看钉钉文档

我们要先去看一个钉钉的开发文档,可以看到他有一个通讯录事件:添加链接描述
在这里插入图片描述
这里就有相关的事件类型,我们需要去取对应的事件类型即可。而且钉钉也有对应的代码示例,可以在钉钉上进行测试调用。

什么是钉钉回调

通俗来将钉钉回调就是让钉钉来订阅我们的一个接口。还是看钉钉的文档介绍。
添加链接描述

钉钉回调具体实操

创建自己的应用

在钉钉上在钉钉开放平台注册并创建一个应用。然后,在应用中创建需要订阅的事件类型,例如员工变动事件、审批进度更新事件等。每个事件都有对应的标识符和描述,开发者可以根据需要选择订阅的事件。在这里插入图片描述

这里加密aes_key和token钉钉自己生成。请求网址就需要自己在代码中写接口。

钉钉回调

具体的可以点击“了解更多”可以查看具体的代码应该怎么使用。这里先给大家看一下我在项目组中的使用。

@ApiOperation("钉钉回调同步变动的人员")@PostMapping(value = "/dingCallback/{id}")public Map<String, String>  dingCallback(@RequestParam(value = "msg_signature", required = false) String msg_signature,@RequestParam(value = "timestamp", required = false) String timeStamp,@RequestParam(value = "nonce", required = false) String nonce,@RequestBody(required = false) JSONObject json,@PathVariable("id") String id){try {// 1. 从http请求中获取加解密参数// 2. 使用加解密类型// Constant.OWNER_KEY 说明:// 1、开发者后台配置的订阅事件为应用级事件推送,此时OWNER_KEY为应用的APP_KEY。// 2、调用订阅事件接口订阅的事件为企业级事件推送,//  此时OWNER_KEY为:企业的appkey(企业内部应用)或 SUITE_KEY(三方应用)Map<String,String> config=  dingProjectConfig.getDingproject().get(id);//回调页面上的获取的值String token=config.get("token");String aesKey = config.get("aesKey");String corpId = config.get("corpId");String tenantId=config.get("tenantId");
//            String appKey=config.get("appId");String appSecret=config.get("secret");DingCallbackCrypto callbackCrypto = new DingCallbackCrypto(token, aesKey, corpId);String encryptMsg = json.getString("encrypt");String decryptMsg = callbackCrypto.getDecryptMsg(msg_signature, timeStamp, nonce, encryptMsg);// 3. 反序列化回调事件json数据JSONObject eventJson = JSON.parseObject(decryptMsg);JSONObject eventType=JSON.parseObject(String.valueOf(eventJson));DingEntity dingEntity = JSONObject.parseObject(JSONObject.toJSONString(eventType),DingEntity.class);String event= dingEntity.getEventType();// 4. 根据EventType分类处理if ("check_url".equals(dingEntity.getEventType())) {// 测试回调url的正确性System.out.println("测试回调url的正确性");} else if ("user_add_org".equals(event)) {//用户增加事件organizationService.insertNewDingInformation(dingEntity,tenantId,corpId,appSecret);} else {// 添加其他已注册的System.out.println("发生了其他事件");}// 5. 返回success的加密数据Map<String, String> successMap = callbackCrypto.getEncryptedMap("success");System.out.println("successMap@@@@@@@@@@@@"+successMap);return successMap;} catch (DingCallbackCrypto.DingTalkEncryptException e) {e.printStackTrace();}return null;}

需要注意的是在代码中需要把H5应用的token、加密aes_Key、appKey、Appsecret填写上
在这里插入图片描述
在这里插入图片描述
这两部分的内容。
主要是这两部分进行钉钉解密操作。

在这段代码中,如果解密成功会有判断的事件,也就是他会判断钉钉的是什么订阅,这里有它的一部分标识,比如:新增人员的标识是user_add_org,等等,这部分是在开篇有介绍过。
在这些if判断中可以去编写自己的代码业务处理逻辑。

开发过程中遇到的问题

1、这里需要特别注意的是token、appKey这些值一定要书写正确,
2、设置回调地址的时候,上面不能有空格
3、多看钉钉帮助文档

总结

钉钉订阅事件的优势和特点

1、实时性:钉钉订阅事件可以在事件发生之后立即通知开发者,保证了信息的实时性和准确性。
2、简化操作:开发者只需要创建订阅事件、配置回调地址和编写业务处理代码,即可轻松实现对企业内部3、变化的订阅,无需频繁查询和轮询。
4、扩展性:钉钉订阅事件支持多种类型的企业内部事件,方便根据具体需求进行订阅和处理,具有很好的扩展性和灵活性。

钉钉订阅事件为企业提供了一种便捷的方式,实时订阅并处理企业内部关键信息的变化。无论是人事管理、审批流程跟踪还是数据分析与监控,都能通过钉钉订阅事件及时获取所需的信息并进行相应的处理。通过合理利用这一功能,企业可以极大地提高工作效率和决策能力,实现更加高效精准的协同合作。

相关文章:

Java-钉钉订阅事件

文章目录 背景什么是钉钉订阅事件钉钉订阅事件的应用场景 整体思路查看钉钉文档 什么是钉钉回调钉钉回调具体实操创建自己的应用钉钉回调开发过程中遇到的问题 总结 背景 最近需要做一个业务&#xff1a;钉钉组织架构下添加人员之后&#xff0c;要对该人员的数据信息做一个处理…...

【DataV/echarts】vue中使用,修改地图和鼠标点击部分的背景色

引入&#xff1a;使用 DataV 引入地图的教程是参考别人的&#xff0c;主要介绍修改地图相关的样式&#xff1b; 引入地图 是参考别人的&#xff0c;这里自己再整理一遍&#xff0c;注意需要安装 5 版本以上的 echarts&#xff1b; DataV 网址&#xff1a;https://datav.aliyun.…...

系统设计类题目汇总四

25 十个异步入库任务&#xff0c;如何保证他们原子入库? 了解了你的问题背景&#xff0c;确保10个异步入库任务原子性执行&#xff08;即要么全部成功&#xff0c;要么全部失败&#xff09;有以下几种方法&#xff1a; 数据库事务&#xff1a; 如果所有的入库操作都是在同一个…...

【C++心愿便利店】No.5---构造函数和析构函数

文章目录 前言一、类的6个默认成员函数二、构造函数三、析构函数 前言 &#x1f467;个人主页&#xff1a;小沈YO. &#x1f61a;小编介绍&#xff1a;欢迎来到我的乱七八糟小星球&#x1f31d; &#x1f4cb;专栏&#xff1a;C 心愿便利店 &#x1f511;本章内容&#xff1a;类…...

微软研究院团队获得首届AI药物研发算法大赛总冠军

编者按&#xff1a;AI 药物研发是人工智能未来应用的重要方向之一。自新冠病毒&#xff08;SARS-CoV-2&#xff09;首次爆发以来&#xff0c;新冠病毒的小分子药物研发备受关注&#xff0c;于近期举行的首届 AI 药物研发算法大赛便聚焦于此。在比赛中&#xff0c;来自微软研究院…...

redis实战篇之导入黑马点评项目

1. 搭建黑马点评项目 链接&#xff1a;https://pan.baidu.com/s/1Q0AAlb4jM-5Fc0H_RYUX-A?pwd6666 提取码&#xff1a;6666 1.1 首先&#xff0c;导入SQL文件 其中的表有&#xff1a; tb_user&#xff1a;用户表 tb_user_info&#xff1a;用户详情表 tb_shop&#xff1a;商户…...

【C++】详解红黑树并模拟实现

前言&#xff1a; 上篇文章我们一起学习了AVL树比模拟实现&#xff0c;我们发现AVL树成功地把时间复杂度降低到了O(logN)。但是同时我们不难发现一个问题&#xff0c;在构建AVL树中我们也付出了不小的代价&#xff0c;频繁的旋转操作导致效率变低。为了解决这个问题&#xff0c…...

Matlab图像处理-最大类间方差阈值选择法(Otsu)

基本思想 最大类间方差阈值选择法又称为Otsu 算法&#xff0c;该算法是在灰度直方图的基础上用最小二乘法原理推导出来的&#xff0c;具有统计意义上的最佳分割阈值。它的基本原理是以最佳阈值将图像的灰度直方图分割成两部分&#xff0c;使两部分之间的方差取得最大值&#x…...

Spring Cloud(Finchley版本)系列教程(三) 服务消费者(Feign)

Spring Cloud(Finchley版本)系列教程(三) 服务消费者(Feign) 一、Feign和OpenFeign的对比 Feign是Netflix公司写的,是SpringCloud组件中的一个轻量级RESTful的HTTP服务客户端,是SpringCloud中的第一代负载均衡客户端。OpenFeign是SpringCloud自己研发的,在Feign的基础上支…...

AI图片生成 discord 使用midjourney

参考: 不用找咒语了&#xff01;Midjourney图生文功能特征解析&#xff0c;玩转Describe命令&#xff0c;快速搞定AI绘画_哔哩哔哩_bilibili 1 登录 discord 2 点发现 找 midjourney 3 创建 服务器 -> 亲自创建 4 选 仅供我和我的朋友使用 5 起个 服务器名字 6 加bot 由于…...

gitlab 点击Integrations出现500错误

背景&#xff1a;在新服务器重新搭建了gitlab&#xff0c;并导入原来gitlab的备份&#xff0c;在项目中点击点击Integrations出现500错误。 解决方法&#xff1a;1.进入新服务器&#xff0c;将 /etc/gitlab/gitlab-secrets.json重命名为 /etc/gitlab/gitlab-secrets.json.bak …...

【2023高教社杯】A题 定日镜场的优化设计 问题分析及数学模型

【2023高教社杯】A题 定日镜场的优化设计 问题分析及数学模型 1 题目 构建以新能源为主体的新型电力系统&#xff0c;是我国实现“碳达峰”“碳中和”目标的一项重要措施。塔式太阳能光热发电是一种低碳环保的新型清洁能源技术[1]。 定日镜是塔式太阳能光热发电站&#xff08;…...

rac异常hang死故障分析(sskgxpsnd2)

x86虚拟化的平台麒麟系统的一套RAC。事件梳理20:24左右&#xff0c;发现一个节点hang死&#xff0c;关闭操作没有响应。关闭hang死节点&#xff0c;另一个节点也发生hang死&#xff0c;然后重启了另一个节点。 无效分析部分 检查gi的alert日志 有一个很大跨度的时间回退 再看…...

2023.9.7 关于 TCP / IP 的基本认知

目录 网络协议分层 TCP/IP 五层&#xff08;四层&#xff09;模型 应用层 传输层 网络层&#xff08;互联网层&#xff09; 数据链路层&#xff08;网络接口层&#xff09; 物理层 网络数据传输的基本流程 网络协议分层 为什么需要分层&#xff1f; 分层之后&#xff0c…...

Python 图片处理

Step1 提取PDF中的图片&#xff0c;并另存 Step2 去除灰色纸张背景 import PyPDF2 from PIL import ImageEnhance,Image,ImageFilter import cv2 import numpy as np from skimage.filters import unsharp_mask from skimage.filters import gaussian from skimage.restora…...

信道估计 | 信道

文章目录 定义分类LS 估计MMSE估计LS vs MMSE 定义 从接收数据中将假定的某个信道模型参数估计出来的过程&#xff0c;如果信道是线性的&#xff0c;信道估计是对系统的冲击响应进行估计&#xff0c;需强调的是&#xff0c;信道估计是信道对输入信号影响的一种数学表示&#x…...

腾讯发布超千亿参数规模的混元大模型;深度学习与音乐分析与生成课程介绍

&#x1f989; AI新闻 &#x1f680; 腾讯发布超千亿参数规模的混元大模型 摘要&#xff1a;腾讯在2023腾讯全球数字生态大会上发布混元大模型&#xff0c;该模型拥有超千亿的参数规模和超2万亿 tokens 的预训练语料。混元大模型将支持多轮对话、内容创作、逻辑推理、知识增强…...

[html]当网站搭建、维护的时候,你会放个什么界面?

效果图&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>网站建设中</title><style>/* 基础样式 */body, html {margin: 0;padding: 0;height: 100%;font-family: Arial, sa…...

javaee spring aop 的五种通知方式

spring配置文件 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xmlns:aop"http://www.springframework.…...

【Redis】3、Redis主从复制、哨兵、集群

Redis主从复制 主从复制&#xff0c;是指将一台Redis服务器的数据&#xff0c;复制到其他的Redis服务器。前者称为主节点(Master)&#xff0c;后者称为从节点(Slave)&#xff1b;数据的复制是单向的&#xff0c;只能由主节点到从节点。 默认情况下&#xff0c;每台Redis服务器…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...