对接钉钉Stream模式考勤打卡相关事件的指南

钉钉之前的accessToken是公司级别的,现在的accessToken是基于应用的,接口的权限也是基于应用的。所以第一步是在钉钉开放平台(https://open-dev.dingtalk.com/)创建一个应用。

image.png

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

image.png

在进行事件订阅之前,需要完成代码接入,才会展示事件列表,所以现在转到事件订阅的文档,先进行代码接入(https://open.dingtalk.com/document/orgapp/develop-stream-mode-push-server)

这块参考官方文档就行了。
Stream模式支持多个应用,多个实例同时监听,Stream事件会被随机平均投递到任意一个应用中。

接入成功之后,回到上面创建的应用,点击事件订阅菜单

选择Stream模式推送,再点“已完成接入,验证连接通道”

验证成功之后,下面的事件就会展示出来

如果只需要监听考勤相关的事件,经过我的验证,只需要监听下面2个事件就行

员工打卡的触发场景包括:员工上下班打卡,补卡申请通过(坑:如果当天无排班,不会触发这个事件。无排班的场景:1.对于固定上下班,钉钉默认只会初始化未来15天的排班,超过15天都是休息,这点可参考钉钉APP的考勤日历。这样就会导致。2. 节假日,即:节假日的补卡不会触发这个事件(需要再去监听审批完成事件))。以上内容都是开发过程中发现问题之后提工单给钉钉的开发人员得到的回复,不是杜撰的。

image.png

因为钉钉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),需要检查以下配置:

image.png

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

image.png

消息推送失败的处理方案

钉钉默认的推送失败处理方案: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调用量都是需要收费的(有免费的额度),使用的时候需要注意

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/28440.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ssm题库分享

ssm题库分享 1、(2分)以下哪个选项描述了在 SSM 框架集成中,MyBatis 的作用? A、实现容器管理和事务控制等功能 B、实现数据访问和对象映射等功能 C、实现 Inversion of Control 和依赖注入等功能 D、实现面向切面编程和声明…

docker拉取镜像太慢解决方案

前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 创建daemon.json文件,输入以下信息 vim /etc/docker/daemon.json{"registry-mirrors": ["https://9cpn8tt6.mirror…

“Dream Machine“震撼登场!免费推出的AI电影级巨制在网络上引爆热潮

"巅峰初现!视频AI新星‘梦幻制造者’华美登场! 在视频生成技术的赛道上,Luma AI昨日骄傲地揭开了其旗舰创新——梦幻制造者(Dream Machine)的神秘面纱,凭借无与伦比的文本到视频及图像到视频转换技术…

如何准备迎接等保测评

准备迎接等保测评的步骤 1. 确定信息系统的等级 根据信息系统的重要性、涉密程度、业务影响等因素,确定信息系统的安全保护等级。这是进行等保测评的第一步,也是整个过程的基础。 2. 系统备案 在确定等级后,需要向属地公安机关部门提交《…

【尚庭公寓SpringBoot + Vue 项目实战】看房预约管理(十三)

【尚庭公寓SpringBoot Vue 项目实战】看房预约管理(十三) 文章目录 【尚庭公寓SpringBoot Vue 项目实战】看房预约管理(十三)1、业务说明2、代码开发2.1、根据条件分页查询预约信息2.2、根据ID更新预约状态 1、业务说明 看房预约…

RaphaelScriptHelper(拉斐尔脚本助手)山海经钓鱼脚本开发

缘起 大家周末好,我在玩的游戏山海经出了钓鱼玩法,一天180体力,钓一次鱼差不多得十几秒,也就是用完体力得一直集中精力的操作半个小时,瞬间感觉肝度太高了。因为我玩这个游戏就是有碎片时间点几下,所以我打算自己动手搞一个自动化脚本来解放一下自己的双手。 目前写手机…

Python 踩坑记 -- 调优

前言 继续解决问题 慢 一个服务运行有点慢,当然 Python 本身不快,如果再编码不当那这个可能就是量级上的劣化。 整个 Code 主线逻辑 1700,各依赖封装 3000,主线逻辑也是很久远的痕迹,长函数都很难看清楚一个 if els…

设计通用灵活的LabVIEW自动测试系统

为了在不同客户案例中灵活使用不同设备(如采集卡、Modbus模块)且保持功能一致的LabVIEW自动测试系统,需要采用模块化的软件架构、配置文件管理、标准化接口和良好的升级维护策略。本文从软件架构、模块化设计、配置管理、升级维护、代码管理和…

Centos实现Mysql8.4安装及主主同步

8.4的Msyql在同步的时候与之前的版本有很大不同,这里记录一下安装流程 Mysql安装 官网下载 选择自己的版本,选第一个 复制下载链接 在服务器上创建一个msyql目录 使用命令下载,链接换自己的 wget https://dev.mysql.com/get/mysql84-community-relea…

【WEEK16】Learning Objectives and Summaries【Spring Boot】【English Version】

Learning Objectives: Learning SpringBoot Learning Content: Reference video tutorials【狂神说Java】SpringBoot最新教程IDEA版通俗易懂Dubbo and Zookeeper Integration Learning time and outputs: Week16 TUE~FRI 2024.6.11【WEEK16】 【DAY2】Dubbo和Zookeeper集成第…

整理好了!2024年最常见 20 道并发编程面试题(九)

十七、请解释synchronized和volatile关键字在Java中的作用。 在Java中,synchronized和volatile是两个用于控制线程同步和内存可见性的关键字。它们各自有不同的用途和作用范围。 synchronized关键字 synchronized关键字主要用于实现线程同步,确保多个…

python IP 端口 socket tcp 介绍

IP 端口 介绍 1、IP IP地址是分配给网络设备上网使用的数字标签,它能够标识网络中唯一的一台设备 windows环境可以使用 ipconfig 来查看自己的iplinux环境可以使用 ifconfig 来查看自己的ip 2、端口 端口是传输数据的通道,每个操作系统上都有 65535个…

Web前端项目-交互式3D魔方【附源码】

交互式3D魔方 ​ 3D魔方游戏是一款基于网页技术的三维魔方游戏。它利用HTML、CSS和JavaScript前端技术来实现3D效果&#xff0c;并在网页上呈现出逼真的魔方操作体验。 运行效果&#xff1a; 一&#xff1a;index.html <!DOCTYPE html> <html><head><…

绿色版DirectoryOpus功能强大且高度可定制的Windows文件管理器

Directory Opus&#xff08;通常简称为DOpus&#xff09;是一款功能强大且高度可定制的Windows文件管理器。它提供了许多超越Windows默认文件资源管理器&#xff08;Explorer&#xff09;的功能&#xff0c;使得文件和文件夹的管理变得更加高效和直观。以下是对Directory Opus的…

R进阶使用技巧

Introduction 分享一些R进阶使用的技巧&#xff0c;相当于是之前写的R语言学习的实践和总结了。 Online slide: https://asa-blog.netlify.app/R_tips_for_advanced_use_byAsa/R_tips.html 下载slide和相关的各种test文件: https://asa-blog.netlify.app/R_tips_for_advanced…

请解释Java中的volatile关键字的作用和内存可见性原理。什么是Java中的死锁?请解释其产生的原因和避免方法。

请解释Java中的volatile关键字的作用和内存可见性原理。 在Java中&#xff0c;volatile关键字是一个非常重要的修饰符&#xff0c;它主要用于确保多线程环境下变量的可见性和有序性。下面我将详细解释volatile的作用和内存可见性原理。 volatile的作用 可见性&#xff08;Vis…

第7章:系统架构设计基础知识-软件架构风格

由于历史原因&#xff0c;研究者和工程人员对Sofiware Architecture(简称SA)的翻译不尽相同&#xff0c;其软件的“体系结构”和“架构”具有相同的含义。 系统架构其实就是系统的结构&#xff0c;系统架构设计其实就是要给相关利益方说清楚通过什么样的结构来解决需求中功能和…

GTK tutorial 十三

Spin Buttons Spin Button用于让用户在一个范围内的数值中选择一个数字。它包含一个text entry box,并且在entry box旁边有用于上下翻的箭头按钮。entry box也能够直接被编辑。 下面举例说明其用法。 程序运行结果&#xff1a; /**spinbutton.c/ #include<stdio.h> #i…

Java并发自测题

文章目录 一、什么是线程和进程?线程与进程的关系,区别及优缺点&#xff1f;二、为什么要使用多线程呢?三、说说线程的生命周期和状态?四、什么是线程死锁?如何预防和避免线程死锁?五、synchronized 关键字六、并发编程的三个重要特性七、JMM &#xff08;Java Memory Mod…

上海计算机考研避雷,25考研慎报

上大计算机一直很热 408考研er重来没有让我失望过&#xff0c;现在上大的专业课是11408&#xff0c;按理说&#xff0c;这个专业课的难度是很高的&#xff0c;但是408er给卷出了新高度&#xff0c;大家可以去上大官网看看今年最新的数据&#xff0c;我也帮大家统计了24年最新的…