【微服务】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\n", 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\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 {@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\n", 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\n", new String(event.getBody(), StandardCharsets.UTF_8));}}).build();}

4.3 启动服务和效果测试

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

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

五、写在文末

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

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

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

相关文章

【优选算法篇】两队接力跑:双指针协作解题的艺术(下篇)

文章目录 须知 &#x1f4ac; 欢迎讨论&#xff1a;如果你在学习过程中有任何问题或想法&#xff0c;欢迎在评论区留言&#xff0c;我们一起交流学习。你的支持是我继续创作的动力&#xff01; &#x1f44d; 点赞、收藏与分享&#xff1a;觉得这篇文章对你有帮助吗&#xff1…

Y20030018基于Java+Springboot+mysql+jsp+layui的家政服务系统的设计与实现 源代码 文档

家政服务系统的设计与实现 1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取 1.摘要 随着人们生活水平的提高&#xff0c;老龄化、少子化等多重因素影响&#xff0c;我国对家政服务人群的需求与日俱增。家政服务行业对我国的就业和社会效益贡献也与日俱增&#…

南京仁品耳鼻喉专科医院:12月启动公益义诊月

专业医疗资源送至“家门口”&#xff01;南京仁品耳鼻喉专科医院启动公益义诊月 随着2024年即将步入尾声&#xff0c;南京仁品耳鼻喉医院为回馈社会&#xff0c;提升公众健康福祉&#xff0c;将于12月隆重推出“三甲专家公益义诊月”活动。此次活动旨在通过汇聚众多耳鼻喉领域…

ospf协议(动态路由协议)

ospf基本概念 定义 OSPF 是典型的链路状态路由协议&#xff0c;是目前业内使用非常广泛的 IGP 协议之一。 目前针对 IPv4 协议使用的是 OSPF Version 2 &#xff08; RFC2328 &#xff09;&#xff1b;针对 IPv6 协议使用 OSPF Version 3 &#xff08; RFC2740 &#xff09;。…

现代网络架构PCI DSS合规范围确定和网络分割措施实施探讨

本文为atsec和作者技术共享类文章&#xff0c;旨在共同探讨信息安全业界的相关话题。未经许可&#xff0c;任何单位及个人不得以任何方式或理由对本文的任何内容进行修改。转载请注明&#xff1a;atsec信息安全和作者名称 1 引言 支付卡行业数据安全标准 &#xff08;P…

鸿蒙开发:自定义一个任意位置弹出的Dialog

前言 鸿蒙开发中&#xff0c;一直有个问题困扰着自己&#xff0c;想必也困扰着大多数开发者&#xff0c;那就是&#xff0c;系统提供的dialog自定义弹窗&#xff0c;无法实现在任意位置进行弹出&#xff0c;仅限于CustomDialog和Component struct的成员变量&#xff0c;这就导致…

深入浅出:开发者如何快速上手Web3生态系统

Web3作为互联网的未来发展方向&#xff0c;正在逐步改变传统互联网架构&#xff0c;推动去中心化技术的发展。对于开发者而言&#xff0c;Web3代表着一个充满机遇与挑战的新领域&#xff0c;学习和掌握Web3的基本技术和工具&#xff0c;将为未来的项目开发提供强大的支持。那么…

Q-2A型金相试样切割机

产品概述 在金相试样制备过程中&#xff0c;试样材料的切割是试样制备的首道重要工序,本机利用高速旋转的薄片砂轮来截取试样&#xff0c;适直切割较硬的金属材料&#xff0c;本机有冷却装置&#xff0c;用来带走切割时所产生的热量&#xff0c;避免试样过热而改变组织。 主要…

Ubuntu环境中RocketMQ安装教程

参考教程 https://blog.csdn.net/weixin_56219549/article/details/126143231 1、安装JDK&#xff0c;并配置环境变量&#xff08;略&#xff09; 2、下载RocketMQ安装包 RocketMQ下载地址&#xff0c;选择二进制包下载 unzip rocketmq-all-5.0.0-ALPHA-bin-release.zip 使…

传输控制协议(TCP)

传输控制协议是Internet一个重要的传输层协议。TCP提供面向连接、可靠、有序、字节流传输服务。 1、TCP报文段结构 注&#xff1a;TCP默认采用累积确认机制。 2、三次握手、四次挥手 &#xff08;1&#xff09;当客户向服务器发送完最后一个数据段后&#xff0c;发送一个FIN段…

我们来学mysql -- 事务之概念(原理篇)

事务的概念 题记一个例子一致性隔离性原子性持久性 题记 在漫长的编程岁月中&#xff0c;存在一如既往地贯穿着工作&#xff0c;面试的概念这类知识点&#xff0c;事不关己当然高高挂起&#xff0c;精准踩坑时那心情也的却是日了&#x1f436;请原谅我的粗俗&#xff0c;遇到B…

2024 ccpc 辽宁省赛 E(构造 思维?)L(二分+一点点数论知识?)

E 题意&#xff1a; 可以注意到&#xff1a; 我的两种方格都四个方格的大小。 所以 如果存在一种摆放方式 那么 4|nm。 再考虑一种特殊的情况 22 &#xff0c;此时虽然我的积是4 但是无法摆放的。 1>对于 4 | n,或者 4 | m.我直接摆放第二种方格就可以了。 如果我n 是4 的…

自定义类型: 结构体、枚举 、联合

目录 结构体 结构体类型的声明 匿名结构体 结构的自引用 结构体变量的定义和初始化 结构体成员变量的访问 结构体内存对齐 结构体传参 位段 位段类型的声明 位段的内存分配 位段的跨平台问题 位段的应用 枚举 枚举类型的定义 枚举的优点 联合体(共用体) 联合…

更多开源创新 挑战OpenAI-o1的模型出现和AI个体模拟突破

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

说说Elasticsearch查询语句如何提升权重?

大家好&#xff0c;我是锋哥。今天分享关于【说说Elasticsearch查询语句如何提升权重&#xff1f;】面试题。希望对大家有帮助&#xff1b; 说说Elasticsearch查询语句如何提升权重&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Elasticsearch 中&…

基于协同推荐的黔醉酒业白酒销售系统

文末获取源码和万字论文 摘 要 基于协同推荐的黔醉酒业白酒销售系统主要针对黔醉酒业的具体业务需求所设计&#xff0c;现阶段阶段我国大型企业都会有自己的电商平台以及销售管理系统&#xff0c;其功能对于中小型过于冗长复杂&#xff0c;成本也不是中小型企业能够承受的&…

【Redis】—0.1、Ubuntu20.04源码编译部署redis6.2.7

1、Redis下载 创建redis的目录&#xff1a;mkdir -p /data/db/redis 下载redis&#xff1a;https://redis.io/download/ 2、上传文件到目录后解压 tar xvf redis-6.2.7.tar.gz 3、安装redis的依赖软件更新gcc&#xff0c;装一系列软件包&#xff0c;gcc&#xff0c;g和make。 s…

Kubernetes——part11 云原生中间件上云部署 Rocketmqkafkazookeeper

Rocketmq rocketmq角色 RocketMQ由四部分构成&#xff1a;Producer、Consumer、Broker和NameServer 启动顺序&#xff1a;NameServer->Broker 为了消除单点故障&#xff0c;增加可靠性或增大吞吐量&#xff0c;可以在多台机器上部署多个nameserver和broker&#xff0c;并…

软件架构4+1视图详解

软件架构41视图详解 1. 用例视图&#xff08;场景视图&#xff09;2. 逻辑视图3. 开发视图4. 进程视图&#xff08;运行视图&#xff09;5. 物理视图&#xff08;部署视图&#xff09;6. 总结 软件架构是软件系统的骨架&#xff0c;它决定了系统的结构、行为和属性。为了更好地…

【开源免费】基于Vue和SpringBoot的校园资料分享平台(附论文)

博主说明&#xff1a;本文项目编号 T 059 &#xff0c;文末自助获取源码 \color{red}{T059&#xff0c;文末自助获取源码} T059&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…