Java-钉钉订阅事件
  2oydjq1h3ln7 2023年11月02日 64 0



文章目录

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


背景

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

什么是钉钉订阅事件

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

钉钉订阅事件的应用场景

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

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

整体思路

查看钉钉文档

我们要先去看一个钉钉的开发文档,可以看到他有一个通讯录事件:添加链接描述

Java-钉钉订阅事件_开发语言


这里就有相关的事件类型,我们需要去取对应的事件类型即可。而且钉钉也有对应的代码示例,可以在钉钉上进行测试调用。

什么是钉钉回调

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

钉钉回调具体实操

创建自己的应用

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

Java-钉钉订阅事件_数据_02

这里加密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填写上

Java-钉钉订阅事件_钉钉_03


Java-钉钉订阅事件_java_04


这两部分的内容。

主要是这两部分进行钉钉解密操作。

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

开发过程中遇到的问题

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

总结

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

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

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


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

2oydjq1h3ln7