【微服务】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() {@Overridepublic void handle(P2MessageReceiveV1 event) throws Exception {System.out.printf("[ onP2MessageReceiveV1 access ], data: %s
    

    “, 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
    ", 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/subscribeappId=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 {@PostConstructpublic 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() {@Overridepublic void handle(P2MessageReceiveV1 event) throws Exception {System.out.printf("[ onP2MessageReceiveV1 access ], data: %s
", Jsons.DEFAULT.toJson(event.getEvent()));}}).onCustomizedEvent("drive.file.bitable_record_changed_v1", new CustomEventHandler() {@Overridepublic void handle(EventReq event) throws Exception {System.out.printf("[ onCustomizedEvent access ], type: message, data: %s
", new String(event.getBody(), StandardCharsets.UTF_8));}}).build();}

4.3 启动服务和效果测试

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

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

五、写在文末

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

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

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

相关文章

从0开始边做边学,用vue和python做一个博客,非规范化项目,怎么简单怎么弄,跑的起来有啥毛病解决啥毛病(三)

基础的内容都差不多了&#xff0c;开始研究文章详情页的内容设计&#xff0c;程序员嘛肯定要用markdown编辑了&#xff0c;找了一些发现这个md-editor看着还不错&#xff0c;文档介绍页比较清晰&#xff0c;用着也比较简单。 md-editor安装配置使用Mock.js模拟请求接口mock.js …

pdf转word/markdown等格式——MinerU的部署:2024最新的智能数据提取工具

一、简介 MinerU是开源、高质量的数据提取工具&#xff0c;支持多源数据、深度挖掘、自定义规则、快速提取等。含数据采集、处理、存储模块及用户界面&#xff0c;适用于学术、商业、金融、法律等多领域&#xff0c;提高数据获取效率。一站式、开源、高质量的数据提取工具&…

SWIRL:有望成为2025年顶级AI搜索引擎

现在几乎每家公司都会有内部文档系统&#xff0c;如阿里的语雀、钉钉&#xff0c;字节的飞书&#xff0c;Confluence&#xff0c;印象笔记等等都可以提供给B端在局域网部署。因此&#xff0c;如果能把搜索功能做得高效&#xff0c;就能提高自家产品的竞争力。 想象一下&#xf…

Android环境搭建

Android环境搭建 第一步&#xff1a;安装 Homebrew 执行以下命令来安装 Homebrew&#xff1a; /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"检测是否安装成功&#xff1a; brew --version第二步&#xff1a;安装 No…

【Homework】【8】Learning resources for DQ Robotics in MATLAB

作业任务 创建一个名为“VS050RobotDH”的类&#xff0c;该类代表Denso VS050机器人&#xff0c;其DH参数如下表所示&#xff0c;并且完全由旋转关节组成。&#xff08;请记住第6课的内容&#xff09; θ \theta θ d d d a a a α \alpha α − π -\pi −π0.3450 π 2 \fra…

jenkins邮件的配置详解

Jenkins邮件的配置涉及多个步骤和细节,以下是详细的配置指南: 一、前期准备 确定邮件服务:明确Jenkins将要使用的邮件服务,如QQ邮箱、163邮箱、公司邮箱(基于Microsoft 365或Exchange Server)等。获取SMTP配置信息:根据邮件服务类型,获取相应的SMTP服务器地址、端口号…

算法-字符串-43.字符串相乘

一、题目 二、思路解析 1.思路&#xff1a; 1.双重for循环&#xff0c;倒序依次相乘 2.在倒序处理进位问题 3.最后返回参数的类型是string&#xff0c;用StringBuilder拼接&#xff0c;再转换为字符串 2.常用方法&#xff1a; 1.equals,比较对象内容是否一致 "0".eq…

Clip使用

简单使用 img {width: 300px;height: 300px;clip-path: polygon(50% 0%, 0% 100%, 100% 100%) } 图片如下&#xff1a; img {width: 300px;height: 300px;clip-path: polygon(0% 0%, 100% 100%, 50% 100%) } 图片如下&#xff1a; 我们给出对应的点&#xff0c;浏览器就能进…

oracle 11g中如何快速设置表分区的自动增加

在很多业务系统中&#xff0c;一些大表一般通过分区表的形式来实现数据的分离管理&#xff0c;进而加快数据查询的速度。分区表运维管理的时候&#xff0c;由于人为操作容易忘记添加分区&#xff0c;导致业务数据写入报错。所以我们一般通过配置脚本或者利用oracle内置功能实现…

Rnnoise和SpeexDsp两种降噪方式有什么区别?

在蒙以CourseMaker 7.0软件中&#xff0c;增加了两种降噪模式&#xff0c;一种是Rnnoise&#xff0c;一种是SpeexDsp&#xff0c;这两种降噪模式有什么区别呢&#xff1f; Rnnoise 基于神经网络。当噪声与 rnnoise 的模型训练的噪声匹配时&#xff0c;它的效果非常好。比如说&…

Android 使用 Canvas 和 Paint 实现圆角图片

学习笔记 效果展示: 全部代码: public class YuanActivity extends AppCompatActivity {private ActivityYuanBinding binding;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 通过 DataBinding 获取布局文件binding …

Android SurfaceFlinger layer层级

壁纸作为显示的最底层窗口它是怎么显示的 1. SurfaceFlinger layer层级 锁屏状态dump SurfaceFlinger &#xff0c;adb shell dumpsys SurfaceFlinger Display 0 (active) HWC layers: -----------------------------------------------------------------------------------…

【机器学习】机器学习的基本分类-监督学习-Lasso 回归(Least Absolute Shrinkage and Selection Operator)

Lasso 回归是一种线性回归方法&#xff0c;通过引入 ​ 正则化&#xff08;绝对值惩罚项&#xff09;约束回归系数&#xff0c;既能解决多重共线性问题&#xff0c;又具有特征选择能力。 1. Lasso 回归的目标函数 Lasso 的目标是最小化以下损失函数&#xff1a; 其中&#xff…

如何防御ARP欺骗 保护IP安全

在数字化浪潮席卷全球的今天&#xff0c;网络安全威胁如同暗流涌动&#xff0c;时刻考验着我们的防范能力。其中&#xff0c;ARP欺骗攻击作为一种隐蔽性强、成本低廉且危害严重的网络攻击手段&#xff0c;成为众多网络安全事件中的一颗“毒瘤”。那么我们究竟是如何防御ARP欺骗…

子网划分实例

看到有人问这个问题&#xff1a; 想了一下&#xff0c;这是一个子网划分的问题&#xff1a; 处理方法如图&#xff1a; 这是一个子网划分的问题 设备1用三层交换机&#xff0c;端口设置为路由模式&#xff0c;设备2和设备3为傻瓜交换机模式 设备2和设备3下挂设备都是26为掩码&…

消息中间件-Kafka3-kafkaJavaClient小例

消息中间件-Kafka3-kafkaJavaClient小例 Kafak Java Client private static final String KAFKA_TOPIC "kafak-test";private static String bootstrapServers "localhost:9092";private static AdminClient client null;static {Properties config n…

怎么获取Java高并发经验与系统设计技能?

如何获得高并发经验&#xff1f; 这是系统邀请我回答的一个问题&#xff0c;由此也引发了我的一些思考&#xff1a;为什么人人都想要获得高并发经验&#xff1b;想拥有高并发系统设计技能&#xff1f; 其原因LZ认为主要有以下三点&#xff1a; 涨薪&#xff1a;有高并发系统设…

【Java】类似王者荣耀游戏

r77683962/WangZheYouDianRongYao 运行效果图&#xff1a; 类似王者荣耀游戏运行效果图_哔哩哔哩_bilibili

HTML Input 文件上传功能全解析:从基础到优化

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【项目实战】基于python+爬虫的电影数据分析及可视化系统

注意&#xff1a;该项目只展示部分功能&#xff0c;如需了解&#xff0c;文末咨询即可。 本文目录 1.开发环境2 系统设计 2.1 设计背景2.2 设计内容 3 系统页面展示 3.1 用户页面3.2 后台页面3.3 功能展示视频 4 更多推荐5 部分功能代码 5.1 爬虫代码5.2 电影信息代码 1.开发环…