对接钉钉Stream模式考勤打卡相关事件的指南
钉钉之前的accessToken是公司级别的,现在的accessToken是基于应用的,接口的权限也是基于应用的。所以第一步是在钉钉开放平台(https://open-dev.dingtalk.com/)创建一个应用。

创建好应用之后,因为我们后续还需要调用钉钉不少服务端api,这些api都要求这个应用被授予了相应的权限,所以我们先给当前这个应用授予足够多的权限(全部都勾上)。

在进行事件订阅之前,需要完成代码接入,才会展示事件列表,所以现在转到事件订阅的文档,先进行代码接入(https://open.dingtalk.com/document/orgapp/develop-stream-mode-push-server)
这块参考官方文档就行了。
Stream模式支持多个应用,多个实例同时监听,Stream事件会被随机平均投递到任意一个应用中。
接入成功之后,回到上面创建的应用,点击事件订阅菜单
选择Stream模式推送,再点“已完成接入,验证连接通道”
验证成功之后,下面的事件就会展示出来
如果只需要监听考勤相关的事件,经过我的验证,只需要监听下面2个事件就行
员工打卡的触发场景包括:员工上下班打卡,补卡申请通过(坑:如果当天无排班,不会触发这个事件。无排班的场景:1.对于固定上下班,钉钉默认只会初始化未来15天的排班,超过15天都是休息,这点可参考钉钉APP的考勤日历。这样就会导致。2. 节假日,即:节假日的补卡不会触发这个事件(需要再去监听审批完成事件))。以上内容都是开发过程中发现问题之后提工单给钉钉的开发人员得到的回复,不是杜撰的。

因为钉钉Stream事件返回的数据结构与考勤接口返回的数据不一致,如果需要更多的信息,需要对接钉钉考勤相关的接口。
所以我目前对于这块的设计是这样的:
接收到打卡事件之后,拿到userId和打卡时间,拿这2个参数再去查询考勤详情数据(https://open.dingtalk.com/document/orgapp/obtain-the-attendance-update-data),相当于Stream事件只作为我去钉钉拉取数据的一个触发器,请假、加班、出差、外出事件也是一个意思,拿到请假时间范围之后,去查询这段时间的考勤数据
- 如果发现有些请假类型的数据没有收到推送(或者通过https://open.dingtalk.com/document/orgapp/queries-the-column-value-of-the-attendance-report 查到某个字段的value是null),需要检查以下配置:

把带薪年休假啥的都加进来

消息推送失败的处理方案
钉钉默认的推送失败处理方案:https://open.dingtalk.com/document/orgapp/obtain-the-event-list-of-failed-push-messages
我们只需要写一个SpringTask任务定时拉取就行
要注意的一点是这个接口的数据需要通过getBody读取
public JSONArray getStreamCallBackFailedResult() {DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/call_back/get_call_back_failed_result");OapiCallBackGetCallBackFailedResultRequest req = new OapiCallBackGetCallBackFailedResultRequest();req.setHttpMethod("GET");OapiCallBackGetCallBackFailedResultResponse rsp;try {rsp = client.execute(req, getAccToken());if (Objects.equals(SUCCESS_CODE, rsp.getErrcode())) {JSONObject body = JSON.parseObject(rsp.getBody());return body.getJSONArray("failed_list");}} catch (ApiException e) {log.warn("[请求钉钉接口失败]获取推送失败的数据", e);}return null;
}
调用量的问题
Stream推送量和付费API调用量都是需要收费的(有免费的额度),使用的时候需要注意

相关文章:
对接钉钉Stream模式考勤打卡相关事件的指南
钉钉之前的accessToken是公司级别的,现在的accessToken是基于应用的,接口的权限也是基于应用的。所以第一步是在钉钉开放平台(https://open-dev.dingtalk.com/)创建一个应用。 创建好应用之后,因为我们后续还需要调用钉…...
CRMEB PRO企业微信通讯录配置
企业微信通讯录配置 登录企业微信管理后台 企业微信 1、点击【管理工具】找到【通讯录同步】点击进入 2、点击【开启API接口同步】 进入设置【通讯录同步】页面后,权限一栏,勾选【API编辑通讯录】勾选【开启手动编辑】; 3、点击下图箭头所…...
直播新篇章 | 金仓数据库“零距离”探索与知识挑战双重奏
KING大咖成就计划 全新进阶!!!携手知识竞答挑战赛震撼来袭~为您带来一场别开生面的金仓数据库探索之旅与知识竞答盛宴! 直 播 活 动 01 大咖引领,KING BASE产品“零距离”体验 您是否对金仓数据库充满好奇🧐…...
List的介绍
1. 什么是List List是一个接口,继承自Collection。 Collection也是一个接口,该接口中规范了后序容器中常用的一些方法。 Iterable也是一个接口,表示实现该接口的类是可以逐个元素进行遍历。 2. 常见接口介绍 List中提供了好的方法&#x…...
Uniapp获取具体地理位置
使用uniapp自带uni.getLocation获取当前定位经纬度 再调用高德逆地理编码API,查到具体位置信息 https://restapi.amap.com/v3/geocode/regeo?location${longitude},${latitude}&key${key}&extensionsall 但是个人申请的key,有配额限制 最多每…...
Kafka基础教程
Kafka基础教程 资料来源:Apache Kafka - Introduction (tutorialspoint.com) Apache Kafka起源于LinkedIn,后来在2011年成为一个开源Apache项目,然后在2012年成为一流的Apache项目。Kafka是用Scala和Java编写的。Apache Kafka是基于发布-订…...
视频智能分析平台智能边缘分析一体机安防监控平台打手机检测算法工作原理介绍
智能边缘分析一体机的打手机检测算法是一种集成了计算机视觉和人工智能技术的先进算法,专门用于实时监测和识别监控画面中的打手机行为。以下是关于该算法的详细介绍: 工作原理 1、视频流获取: 智能边缘分析一体机首先通过连接的视频监控设…...
辅助构造函数相关学习以及php实现
https://mp.weixin.qq.com/s/J9hgLTxYi7ZJdFVG2VszQg 对这个文章进行摘要生成 ### 总体概要 文章阐述了在对象创建过程中,辅助构造函数(或称为“多个”构造函数)的重要性,它们为代码增加了功能性逻辑,并允许根据需求调…...
Linux中nginx.conf如何配置【搬代码】
Nginx 是一个独立的软件。 它是一款高性能的 Web 服务器、反向代理服务器和负载均衡器等,具有强大的功能和广泛的应用场景。它通常需要单独进行安装和配置来发挥其作用。 下载网址:http://nginx.org/en/download.html nginx.conf写法: #配置…...
Django REST framework序列化器详解:普通序列化器与模型序列化器的选择与运用
系列文章目录 Django入门全攻略:从零搭建你的第一个Web项目Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解Django ORM深度游ÿ…...
红队内网攻防渗透:内网渗透之内网对抗:隧道技术篇防火墙组策略ICMPDNSSMB协议出网判断C2上线解决方案
红队内网攻防渗透 1. 内网隧道技术1.1 学隧道前先搞清楚的知识1.2 常用的隧道技术1.3 判断协议出网的命令1.4 C2上线-开防火墙入站只80&出站只放ICMP1.4.1 icmp隧道上线CS后门1.4.1 icmp隧道上线MSF后门1.5 C2上线-开防火墙入站只80&出站只放DNS1.5.1 DNS隧道上线CS后门…...
【Autoware】Autoware.universe安装过程与问题记录
😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Autoware.universe安装过程与问题记录。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下…...
JavaScript的学习之旅之基本数据类型
目录 一、字面量(常量)和变量 二、标识符 三、数据类型 1.String类型 2.Number类型 四、布尔值类型 五、Null和Undefined类型 一、字面量(常量)和变量 字面量:不可变的数据,一般位于等式的右边 变量&…...
oracle开放某些视图给特定用户,查询报视图不存在问题
以sysdba身份登录到Oracle数据库。 创建新用户。例如,创建一个名为new_user的用户,密码为password: CREATE USER new_user IDENTIFIED BY password;为新用户分配表空间和临时表空间。例如,将表空间users和临时表空间temp分配给新…...
es 更新索引mapping和setting
1.关闭索引 curl -X POST "localhost:9200/your_index_name/_close"2.修改setting 配置 无法更新一些默认数据,按照需求构建,我这边是构建增加了分词器 "settings": {"index": {"creation_date": "1718850346547…...
广告联盟流量变现app开发
广告联盟流量变现App的开发是一个涉及多个方面的综合性项目。以下是一个简要的开发流程和相关考虑因素: 市场分析与定位: 首先,需要对目标用户群体进行深入研究,了解他们的需求和偏好1。分析当前市场上的竞争对手和流行的广告模式…...
【Python高级编程】pickle`文件处理:序列化与反序列化
使用pickle模块可以在Python中方便地序列化和反序列化Python对象。以下是一个例子,展示了如何处理pickle文件,包括如何保存数据到pickle文件和从pickle文件加载数据。假设我们有一些数据需要保存并在之后加载。 示例代码 保存数据到 pickle 文件 impo…...
如何在 Linux 上安装 Docker Desktop
如何在 Linux 上安装 Docker Desktop Docker 是一个用于开发、部署和运行应用程序的开放平台。Docker Desktop 是 Docker 在 macOS 和 Windows 上的官方客户端,现在也支持 Linux 系统。本文将详细介绍如何在 Linux 上安装 Docker Desktop。 系统要求 在开始安装之…...
勒索病毒猖狂,请提前做好安全防护,德迅卫士保护你的安全
随着互联网的飞速发展,网络安全问题日益凸显。其中,勒索病毒作为一种极具危害性的网络安全威胁,已经引起了广泛关注。为了帮助大家更好地预防和应对勒索病毒攻击,我们特地为您精心准备了这份超实用的勒索病毒自救预防指南。让我们…...
Pycharm怎么默认终端连接远程服务器
因为经常需要从宿舍到学校内通勤,期间所有连接都会中断,所以每次开SSH特别麻烦,每次终端自动切换到本地: 每次都得点一下Start SSH Session 想要默认终端连接远程服务器,需要点File->Setting->Tools->SSH T…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
WEB3全栈开发——面试专业技能点P7前端与链上集成
一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染(SSR)与静态网站生成(SSG) 框架,由 Vercel 开发。它简化了构建生产级 React 应用的过程,并内置了很多特性: ✅ 文件系…...
Vue3 PC端 UI组件库我更推荐Naive UI
一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用,前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率,还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库(Naive UI、Element …...
字符串哈希+KMP
P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...
