由于工作原因需要了解飞书Api等相关操作. 搜索很多资料发现没有特别好写相关操作的,所以今天想写出一些对应操作方便大家查阅
在开发之前强烈建议将开发文档->服务文档->准备开发阅读,会解决开发中很多无法理解的内容. 如果开发时间有限,想要快速开发,那么希望我的文章能帮助你解决问题.
开发者后台
他有什么作用?
开发内容调用api的第一步就是创建一个属于自己或者公司共用的应用.他解决了两个问题:
- 调用api接时候需要身份等相关信息.
- 通过应用的token信息调用是赋予权限.
如何创建?
在开放平台右上角可以看到,之后根据示例进行创建即可
创建后的操作:
当你创建完成一个应用需要点击进去进行内容填充:
1.在 凭证与基础信息->综合信息 中添加应用图标(必须添加否则无法正常使用)
2.在 权限管理->权限配置中选择自己需要开通的相关api权限. 建议最好一次性全部申请,否则后续会出现每次加权,每次申请加版本的情况,非常麻烦
3.在 应用功能->机器人中点击启动机器人,用于后续的文档加权,否则无法进行相关crud的操作(如果对知识库等需要权限相关的文档调用API需要做这一步)
完成上述三步,就可以申请版本上线了(该操作用于将应用激活)
在应用发布->版本管理与发布->创建版本 根据相关提示进行版本创建
创建完成后需要申请线上发布否则该应用无法生效(该申请需要飞书管理员审批)
创建完成后的注意事项
当你创建完成并成功发布以及完成激活之后需要操作:
将该机器人添加到某个群(该群建议在飞书app中进行创建),这一步是为了对接创建应用的第三步(启动机器人)那一项.
创建群并添加机器人
在飞书app中搜索框旁边点击加号键位(+)进行添加群聊,可单独创建(无需拉人).之后添加机器人
注意:如果添加机器人中没有你创建的应用需要检查两个情况:1.应用中是否开启机器人.2.该应用是否通过审批并且状态为已启用
添加群编辑权限
创建机器人以及群等相关操作都是为了添加编辑权限的,否则无法通过api进行相应文档(知识库)编辑,在需要编辑的文档中右上角三个点(…)->管理协作者->添加协作者->搜索群名并添加
接下来就可以开始我们的调用API操作了
操作API
操作之前需要保证:应用已经正常发布以及添加了相关权限.
除第一个API是必要的,其余都是示例,可以按需查看
获取自建应用token信息
该模块用于获取tenant_access_token信息,后续该信息要加入每次的请求头中
注意:该请求中app_id以及app_secret在开发者后台->自建应用->凭证与基础信息->应用凭证中获取
文档地址:
自建应用获取 tenant_access_token
def token_request():
token_url: "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal"
token_json = {
"app_id": app_id,
"app_secret": app_secret
}
token_res = request.post(token_url, json=token_json)
token_json = token_res.json()
if token_res.status_code == 200 and token_json.get("code") == 0:
return token_json.get('tenant_access_token')
else:
return None
知识库:
我更多的业务是在知识库中进行操作的,所以对知识库的理解有一些,如果您也是要对知识库中相关信息进行操作的,那么我下面的内容会对您有一些帮助
知识库中相关名词:
1.space_id(空间id):该id表示了某个知识库中某个知识空间的id信息,唯一且不重复.获取方式为:获取知识空间列表
2.wiki_token(文档token):该id表示了某个文档的token信息,唯一且不重复.获取方式可以在空间中打开某文档获取url中信息. 示例:wikcnrzx8Cifqyt1aa56L6ECSbc
3.obj_token(对象token):该id用于通过API进行对象操作的唯一值标记信息唯一且不重复.获取方式:获取节点信息 通过传递wiki_token信息,为response中obj_token. 不同类型的的token信息对应不同的前缀头
创建节点信息
用于在某空间下创建节点信息
文档地址:创建节点
特别注意: obj_type中doc和docx区别很大,一个是旧文档的操作方式,一个是新文档的操作方式.建议选择为docx.旧文档有很多的问题,
create_url = f"https://open.feishu.cn/open-apis/wiki/v2/spaces/{space_id}/nodes"
create_json = {
"obj_type": obj_type,
"parent_node_token": node_token,
"origin_node_token": node_token,
"node_type": node_type
}
header = {"content-type": "application/json",
"Authorization": "Bearer " + tenant_access_token}
if kwargs:
create_json.update(kwargs["kwargs"])
token_res = request.post(create_url, json=create_json, headers=header)
token_json = token_res.json()
if token_res.status_code == 200 and token_json.get("code") == 0:
return token_json
else:
return None