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

【微服务】SpringBoot 对接飞书多维表格事件回调监听流程详解

目录

一、前言

二、前置准备

2.1 创建一个应用

2.2 准备一张测试使用的多维表

2.3 获取对接文档

2.4 工程中添加SDK

三、对接过程

3.1 配置Encrypt Key 和 Verification Token

3.2 配置订阅方式

3.3 添加事件

3.4 申请权限

3.5 编写订阅代码

3.6 订阅文档事件

3.7 效果测试

四、在springboot工程中集成

4.1 导入基础以依赖

4.2 自定义一个配置类

4.3 启动服务和效果测试

五、写在文末


一、前言

在上一篇 【微服务】Java 对接飞书多维表格使用详解_飞书 java 多维表格-CSDN博客,分享了基于飞书开放平台对接多维表的过程,紧接着上一篇,本文将分享如何通过飞书提供的事件订阅机制,并集成到SpringBoot项目中对多维表数据的记录变更进行对接的详细流程。

二、前置准备

2.1 创建一个应用

参考上一篇创建应用的详细过程,后面在程序代码中调用API的前提都是基于创建的应用产生的信息。

2.2 准备一张测试使用的多维表

创建一张测试使用的多维表,将这个多维表的权限授权给上一步添加的应用,并提前为多维表添加几条数据

2.3 获取对接文档

通过飞书的开放平台找到事件与订阅部分的对接文档,文档链接:https://open.feishu.cn/document/server-docs/event-subscription-guide/overview

2.4 工程中添加SDK

如果在上一篇对接中添加了,可以忽略,以Java为例,在pom文件中添加如下依赖

<dependency>
    <groupId>com.larksuite.oapi</groupId>
    <artifactId>oapi-sdk</artifactId>
    <version>2.3.6</version>
</dependency>

三、对接过程

接下来按照平台文档提供的操作步骤进行对接

3.1 配置Encrypt Key 和 Verification Token

这两个参数,官方文档说明是可选项,即可以不配,不配的话平台会默认生成两个参数,但如果你对数据传输安全性要求比较高的话,建议做一下配置(参数的位置,我的应用 —> 事件与回调 —> 加密策略)

3.2 配置订阅方式

这一步,表示后续在应用程序中通过哪种方式接收飞书平台的事件消息,平台提供了2种方式:

  • 将事件发送至开发者服务器

    • 这种方式需要开发者按照平台的要求,开发一个webhook接口,部署到IPV4类型服务器上,并在平台的控制台进行配置;

  • 使用长连接接收事件

    • 该方式是飞书 SDK 内提供的能力,你可以通过集成飞书 SDK 与开放平台建立一条 WebSocket 全双工通道(你的服务器需要能够访问公网)。后续当应用订阅的事件发生时,开放平台会通过该通道向你的服务器发送消息。

    • 这也是官方推荐的一种配置方式;

点击进入到我的应用控制台,在订阅方式这里选择 ”长连接” 的方式

3.3 添加事件

这一步表示你需要对接哪些事件,是订阅多维表记录变更的事件?部门员工移除事件?还是一个审批通过的事件呢?即需要为当前应用关联需要处理的事件,这样飞书平台才能在后续将此类变更事件推送到应用程序。

添加事件入口如下,进入到我的应用之后,在事件与回调中,在上一步的基础上,点击右侧的添加事件,选择你要对接的事件进行添加,比如我这里选择的是多维表记录变更的事件。

3.4 申请权限

做完上面添加的监听事件之后,需要重新发布一下应用才能生效

选择版本管理,新增一个版本并点击发布,等待管理员审批通过即可

3.5 编写订阅代码

接下来,需要在代中编写监听程序,从而监听订阅的事件的数据变更,通过平台提供的示例代码直接拿来使用,简单修改下参数,然后运行起来即可,平台提供的参考代码链接:https://open.feishu.cn/document/server-docs/event-subscription-guide/event-subscription-configure-/request-url-configuration-case

完整的参考代码如下,代码中几个核心参数文档上面有描述,这里再单独说明一下:

  • appId

    • 上一篇中创建应用后产生的那个 appId ;

  • appSecret

    • 上一篇中创建应用后产生的那个 appSecret ;

  • Encrypt Key

    • 事件与回调控制台上面那个参数,为空就不填;

  • Verification Token

    • 事件与回调控制台上面那个参数,为空就不填;

package com.congge.web;

import com.lark.oapi.core.request.EventReq;
import com.lark.oapi.core.utils.Jsons;
import com.lark.oapi.event.CustomEventHandler;
import com.lark.oapi.event.EventDispatcher;
import com.lark.oapi.service.im.ImService;
import com.lark.oapi.service.im.v1.model.P2MessageReceiveV1;
import com.lark.oapi.ws.Client;
import java.nio.charset.StandardCharsets;

public class Sample {

    // onP2MessageReceiveV1 为接收消息 v2.0;onCustomizedEvent 内的 message 为接收消息 v1.0。
    private static final EventDispatcher EVENT_HANDLER = EventDispatcher.newBuilder("7ZCxxfFBXsCJUa2j0MpfcTYiLkfJXAGG", "")
            .onP2MessageReceiveV1(new ImService.P2MessageReceiveV1Handler() {
                @Override
                public void handle(P2MessageReceiveV1 event) throws Exception {
                    System.out.printf("[ onP2MessageReceiveV1 access ], data: %s\n", Jsons.DEFAULT.toJson(event.getEvent()));
                }
            })
            .onCustomizedEvent("drive.file.bitable_record_changed_v1", new CustomEventHandler() {
                @Override
                public void handle(EventReq event) throws Exception {
                    System.out.printf("[ onCustomizedEvent access ], type: message, data: %s\n", new String(event.getBody(), StandardCharsets.UTF_8));
                }
            })
            .build();

    public static void main(String[] args) {
        String appId = "你的appId ";
        String appSecret = "你的appSecret ";
        Client cli = new Client.Builder(appId, appSecret)
                .eventHandler(EVENT_HANDLER)
                .build();
        cli.start();
    }
}

代码运行起来之后,通过控制台输出日志可以看到已经与平台建立了通信

3.6 订阅文档事件

为了能让你的代码与平台给你正常推送事件消息匹配,还需手动在这里调用一下订阅文档事件的接口,官方客服解释说,只有调用一次,平台才知道后续是针对哪个事件的文档?哪个事件的多维表给你推送事件消息。

API控制台操作文档链接:

https://open.feishu.cn/document/server-docs/docs/drive-v1/event/subscribe?appId=cli_a79f0662f9bd500c

以本次测试使用的多维表为例进行说明,此处控制台中在调试时的几个参数至关重要,这里单独说明:

  • Authorization

    • 这里的token使用用户的token,不要使用tenant的那个token;

  • file_type

    • 这里取值为 bitable;

  • file_token

    • 即多维表格类型的那个token,在上一步中有提到;

    • 即这里的file_token取值为下图中的obj_token值,这个切记;

3.7 效果测试

上述都做完之后,然后回到多维表,删除下面这条数据

很快,在控制台上就能看到这个事件被捕获到了,相关的参数日志信息也输出出来了,后续程序中就可以基于这个输出的事件参数,做进一步的参数解析,从而进行后续的数据和逻辑处理了

四、在springboot工程中集成

细心的伙伴不难发现,官方提供的示例程序是一个main入口的演示代码,在真实的工程中集成时,这种方式肯定是不行的,下面来看怎么在springbooot工程中进行集成使用。

4.1 导入基础以依赖

依赖包含了飞书的SDK以及springboot运行所需的基础依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>2.0.35</version>
</dependency>

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.12.0</version>
</dependency>

<dependency>
    <groupId>com.larksuite.oapi</groupId>
    <artifactId>oapi-sdk</artifactId>
    <version>2.3.6</version>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <scope>provided</scope>
</dependency>

4.2 自定义一个配置类

该类模拟示例代码中的main程序,相当于是通过这个自定义的类启动一个异步任务,完整代码如下:

package com.congge.config;

import com.lark.oapi.core.request.EventReq;
import com.lark.oapi.core.utils.Jsons;
import com.lark.oapi.event.CustomEventHandler;
import com.lark.oapi.event.EventDispatcher;
import com.lark.oapi.service.im.ImService;
import com.lark.oapi.service.im.v1.model.P2MessageReceiveV1;
import com.lark.oapi.ws.Client;
import jakarta.annotation.PostConstruct;
import org.springframework.stereotype.Component;

import java.nio.charset.StandardCharsets;

@Component
public class SampleListenerTask {

    @PostConstruct
    public void start(){
        String appId = "你的appId ";
        String appSecret = "你的appSecret ";
        Client cli = new Client.Builder(appId, appSecret)
                .eventHandler(EVENT_HANDLER)
                .build();
        cli.start();
        System.out.println("监听飞书多维表程序启动...");
    }

    // onP2MessageReceiveV1 为接收消息 v2.0;onCustomizedEvent 内的 message 为接收消息 v1.0。
    private static final EventDispatcher EVENT_HANDLER = EventDispatcher.newBuilder("7ZCxxfFBXsCJUa2j0MpfcTYiLkfJXAGG", "")
            .onP2MessageReceiveV1(new ImService.P2MessageReceiveV1Handler() {
                @Override
                public void handle(P2MessageReceiveV1 event) throws Exception {
                    System.out.printf("[ onP2MessageReceiveV1 access ], data: %s\n", Jsons.DEFAULT.toJson(event.getEvent()));
                }
            })
            .onCustomizedEvent("drive.file.bitable_record_changed_v1", new CustomEventHandler() {
                @Override
                public void handle(EventReq event) throws Exception {
                    System.out.printf("[ onCustomizedEvent access ], type: message, data: %s\n", new String(event.getBody(), StandardCharsets.UTF_8));
                }
            })
            .build();

}

4.3 启动服务和效果测试

将工程运行起来,通过控制台输出日志可以看到已经与飞书平台建立了通信连接

然后和上面操作类似,我们在测试的多维表中添加一条数据,通过控制台输出日志可以看到,程序已经捕捉到多维表的数据变化,后续只需要根据实际需要解析参数进行数据处理即可。

五、写在文末

本文通过案例和代码操作详细介绍了如何对接飞书多维表格事件回调监听流程,希望对看到的伙伴有用哦,本篇到此结束,感谢观看。


http://www.kler.cn/a/421263.html

相关文章:

  • 重生之我在异世界学编程之C语言:选择结构与循环结构篇
  • JavaScript 键盘控制移动
  • Unity AssetBundles(AB包)
  • 6.824/6.5840 Lab 1: MapReduce
  • Jmeter进阶篇(28)结合AI做性能测试:开启性能测试自动化新篇章
  • AI 无人自动直播手机软件:备卓越的实时互动功能,革新直播体验的智能助手
  • 基于Linux的逻辑订阅发布搭建
  • 多线程运行时,JVM(Java虚拟机)的内存模型
  • Runway 技术浅析(七):视频技术中的运动跟踪
  • [TLS] 使用 OpenSSL 命令行测试 TLS13 0-RTT
  • 关于机器学习领域的预测算法/模型基础入门
  • 【论文笔记】Frequency Domain Model Augmentation for Adversarial Attack
  • BioDeepAV:一个多模态基准数据集,包含超过1600个深度伪造视频,用于评估深度伪造检测器在面对未知生成器时的性能。
  • 【ETCD】ETCD用户密码认证
  • HTML5技术贴:现代网页开发的革命
  • 迁移学习!超高创新!GASF-AlexNet-MSA,基于格拉姆角场和AlexNet结合多头注意力机制的故障识别程序
  • 数据结构 - 排序(四):排序算法总结与对比
  • KVCKVO
  • uniapp:封装商品列表为组件并使用
  • 基于Redis海量数据场景分布式ID架构实践
  • 【智慧社区、智慧城市、智慧园区】智慧楼宇系统需求建设方案,智慧楼宇详细设计方案,智慧楼宇系统建设汇报方案(PPT)
  • 位图的学习
  • 遇到问题:hive中的数据库和sparksql 操作的数据库不是同一个。
  • 网络安全课程学习笔记
  • 【Python网络爬虫笔记】8- (BeautifulSoup)抓取电影天堂2024年最新电影,并保存所有电影名称和链接
  • 如何调用百度文心一言API实现智能问答