点击蓝字 关注我们
前言
最近应客户需求,软件要对接飞书,本以为是一次简单的接口对接,没想到被文档坑了,折腾了很久。并且网络上也搜不到相关的文章,开发体验很不友好,于是在这里就“对接飞书云文档”这一个步骤,在此记录下来。
因AI能直接编写代码,只需给出接口文档,所以本文不会给出任何代码,仅记录能跑通的流程
飞书注册,创建应用
第一次接触飞书,所以我没有飞书账号,第一步当然是创建账号
进入飞书官网:https://www.feishu.cn/
在右上角登录后,界面大概是这样的

接下来要先创建一个应用,进入飞书开放平台:https://open.feishu.cn/
登录后,点击右上角开发者后台,点击创建企业自建应用,将应用创建(应用名称和描述可随意)

创建完后,点击应用,进入就可以看到应用的 AppID和,AppSecret了

文档查阅(坑)
在飞书开放平台的顶部,有一个开发文档按钮,点击,就可以看到所有的文档了。

因为是对接API,所以顶部选择服务端API

我的需求是客户提出的能拿到云文档数据,先要找到云文档列表相关的接口吧。
所以我通过查阅,在侧边栏找到:云文档 - 云空间 - 文件夹 - 获取文件中的文件清单这一个接口

文档右边是可以直接测试的,不够糟心的是,我开发的时候,这个在线测试正好**出Bug,无法使用,目前是可以用了。
这里要注意一个坑,上图红色部分标出来的,有两种凭证,一种是应用凭证,一种是用户凭证。
而我的需求实际上是获取用户自己的云文档,所以是用户凭证,我最开始接好接口用的是平台凭证,我在飞书里,我自己的账号上,云空间、云盘都新建了文件,结果获取的是空列表。
还有一个要注意的是右边顶部的权限配置,需要将权限开启,不开启跑接口会出现权限错误之类的。
用户授权
因为是要获取用户的云文档,所以需要用户授权。
在侧边栏的:认证及授权 - 获取访问凭证中,获取授权码和获取user_access_token

具体代码我就不列出来了,将文档内容丢给AI,AI可以直接把代码生成了。
其中获取授权码是让用户访问指定的链接,点击确认进行授权,像下面这样

在我的场景中,是桌面软件客户端,飞书是用户自己的飞书(自己新建应用填appid、secret),所以对于授权的链接,有一个重定向URL,就是用户授权完后跳转的链接,经过我的尝试,是可以填写 localhost这些本地链接,所以我在客户端里做了一个服务端接收授权码
这里有一个需要注意的是,重定向链接需要在应用中配置,并且要一模一样,例如我重定向链接为 http://localhost:20001/callback,在飞书对应的应用中,安全设置 - 重定向URL,添加这个链接

没配置的话,或者URL错误会出现20029错误

授权完后可以拿到授权码,通过授权码就可以请求获取接口拿到 user_access_token 了,有了这个凭证,就可以请求其它接口了。
云文档获取
这也是我一开始的需求,要获取用户的云文档,非应用的云文档,所以凭证使用的是 user_access_token
如果要获取应用的,那就获取自建应用获取 tenant_access_token,这个没什么坑,就不描述了
首先看一下用户的云文档,点开飞书云文档后,里面有主页,云盘,知识库,还有一个我的文档库。

在接口文档里面,侧边栏的云文档里,只找到了一个云空间和一个知识库,经过我的尝试,云空间对应云盘,知识库对应知识库(URL带wiki的),没有我的文档库这个东西

所以我退而其次,只使用了云空间,也就是对应网盘的那个,首先是要获取到文档列表,使用 获取文件夹中的文件清单接口
一定要把应用权限都给全,可以在文档右边调试中直接赋予

获取到列表数据,其需要注意的有两个
信息中的type,可以用来判断是文件夹还是文件,以及文件是什么类型
信息中的token,这个是代表当前文件标识,也就是用来获取文件具体信息的
如果发现列表是空数组,但是用户网盘里有文件,那就检查token是否使用的应用token
列表也并不是必须获取,但我的需求是让用户自己选择文件,所以需要获取列表。
如果不获取列表,还可以通过链接来获取文档,因为文档url中也是带了token的,查看这个文档:https://acn44buqqk0r.feishu.cn/base/GAvMbigi9aNtEzsY0DccaVHxnGh?table=tblXnTRqBJvXJTMx&view=vewGPrROVZ
拿到了文档token,接下来就可以获取文档的信息了。
云文档 - 通用,里面有一个获取云文档内容,可以直接将文档获取成Markdown,不过需要注意的是,一些Markdown没有的东西是不会出现的

同样的,不要忘记开权限
而需要获取详细信息,比如各种格式啊,图片啊等等各种信息,使用 云文档 - 文档 - 文档 - 获取文档所有块 接口:https://open.feishu.cn/document/server-docs/docs/docs/docx-v1/document/list

因为文档内容实际上是一个一个块组成的,所以比较复杂,需要注意的是获取的列表中的 block_type 这个参数,非常多的类型,根据不同类型通常要做不同处理。
其中块有个获取块的内容接口,不过目前好像获取所有块返回的数据已经很全了,所以没用到:https://open.feishu.cn/document/server-docs/docs/docs/docx-v1/document-block/get
获取图片
云文档难免会有图片,根据上面提到的block_type,图片是27,返回数据里有 image,并且有图片token,通过这个拿到图片

获取图片文档在 云文档 - 云空间 - 素材 - 下载素材:https://open.feishu.cn/document/server-docs/docs/drive-v1/media/download

通过这个接口可以获取到图片。
其他的类型也是类似方法。
多维表格
用户的需求突然改变,从文档转变成多维表格,所以在这里记录一下。
有了上面获取文档的经验,多维文档的获取就轻松多了。
先看多维表格概述,了解一下结构:https://open.feishu.cn/document/server-docs/docs/bitable-v1/bitable-overview
和文档一样,多维表格的token也通过获取文件拿到,并且也在url。
结构看下面这个图

大致就是先获取数据表,在获取数据表里的字段,再通过字段名称,去拿记录列表。
其中的视图大概只是用来决定页面如何显示的?反正我没用到
首先用列出数据表接口拿到所有的数据表:https://open.feishu.cn/document/server-docs/docs/bitable-v1/app-table/list
items下有个数据表id,通过这个,去拿字段列表:https://open.feishu.cn/document/server-docs/docs/bitable-v1/app-table-field/list
通过字段的名称,去拿记录列表:https://open.feishu.cn/document/docs/bitable-v1/app-table-record/search
没有什么复杂的要求,流程理清楚了,至于其他的,对接API也没什么太大难度,所以本文到这就结束了。
求点赞

求分享

求喜欢

夜雨聆风