当前位置: 首页 > 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服务器…...

Asp.Net MVC杂谈之:—步步打造表单验证框架[重排版](1)

在实际使用中,我们可以考虑多种形式来进行这一验证(注:本文目前只研究服务器端验证的情况),最直接的方式莫过于对每个表单值手动用C#代码进行验证了,比如: if(!Int32.TryParse(Request.Form[“age”], out age)){ xxxx… } If(age < xxx || age > xxx){ xxxx… }…...

避开这5个坑!用MediaRecorder+Vue3实现高兼容性语音输入

Vue3MediaRecorder实战&#xff1a;5个关键技巧打造高兼容语音输入方案 在移动优先的时代&#xff0c;语音输入已成为提升用户体验的重要交互方式。但当你兴奋地在Vue3项目中集成MediaRecorder API时&#xff0c;可能会遇到iOS设备上的静默失败、Android机型上的格式兼容性问题…...

ROS Noetic下用Python脚本在Gazebo里动态生成障碍物(附完整代码和常见报错解决)

ROS Noetic下Python脚本动态生成Gazebo障碍物的工程实践 在机器人仿真测试中&#xff0c;动态生成环境障碍物是验证导航算法鲁棒性的关键手段。传统手动拖拽方式效率低下且难以复现特定测试场景&#xff0c;而通过编程控制Gazebo仿真环境则能实现测试流程的自动化与标准化。本文…...

ctfshow-web进阶-命令执行绕过技巧(web71-web74)

1. 命令执行漏洞基础与CTF常见场景 命令执行漏洞&#xff08;Command Execution&#xff09;是Web安全中一种高危漏洞&#xff0c;它允许攻击者在服务器上执行任意系统命令。在CTF比赛中&#xff0c;这类题目通常会模拟真实环境中开发者未对用户输入进行严格过滤的场景。 我刚开…...

Qwen3.5-9B-AWQ-4bit多场景落地:零售货架图分析+缺货识别+SKU自动计数

Qwen3.5-9B-AWQ-4bit多场景落地&#xff1a;零售货架图分析缺货识别SKU自动计数 1. 零售场景中的视觉理解挑战 在零售行业&#xff0c;货架管理一直是运营效率的关键指标。传统的人工巡检方式存在几个明显痛点&#xff1a; 效率低下&#xff1a;一个中型超市需要2-3小时完成…...

Qwen3.5-9B-AWQ-4bit部署教程:Docker容器内路径映射与模型加载权限配置

Qwen3.5-9B-AWQ-4bit部署教程&#xff1a;Docker容器内路径映射与模型加载权限配置 1. 引言 今天我们要探讨的是如何在Docker环境中部署Qwen3.5-9B-AWQ-4bit模型&#xff0c;这是一个支持图像理解的多模态模型。这个模型能够结合上传的图片与文字提示词&#xff0c;输出中文分…...

光伏板缺陷检测实战:从数据集构建到YOLO模型训练全流程解析

1. 光伏板缺陷检测的现实意义 光伏发电作为清洁能源的重要组成部分&#xff0c;其运维效率直接影响发电量收益。我在实地考察中发现&#xff0c;一块被鸟粪覆盖的光伏板&#xff0c;发电效率可能下降30%以上&#xff1b;而热斑效应更会导致组件永久性损伤。传统人工巡检每天最多…...

游戏存档终极备份指南:用Ludusavi保护你的游戏进度

游戏存档终极备份指南&#xff1a;用Ludusavi保护你的游戏进度 【免费下载链接】ludusavi Backup tool for PC game saves 项目地址: https://gitcode.com/gh_mirrors/lu/ludusavi 你是否曾因电脑重装、系统崩溃或误操作而丢失珍贵的游戏存档&#xff1f;数百小时的游戏…...

保姆级教程:用OpenAI Whisper给视频自动生成字幕(附Python代码)

视频创作者必备&#xff1a;用Whisper打造高效字幕工作流 每次剪辑视频最头疼的就是加字幕&#xff1f;作为过来人&#xff0c;我完全理解那种对着时间轴逐帧调整的痛苦。直到发现Whisper这个神器&#xff0c;我的工作效率直接翻了三倍。今天就把这套全自动字幕生成方案完整分享…...

FlexASIO:打破专业音频门槛,让普通设备也能拥有专业级ASIO体验

FlexASIO&#xff1a;打破专业音频门槛&#xff0c;让普通设备也能拥有专业级ASIO体验 【免费下载链接】FlexASIO A flexible universal ASIO driver that uses the PortAudio sound I/O library. Supports WASAPI (shared and exclusive), KS, DirectSound and MME. 项目地址…...