本文探讨如何通过飞书的 API 来创建多维表。
通过 API 创建的多维表,会把文件夹放到共享空间,如果不想将文件夹放到共享空间,建议手动创建。
查看创建多维表的 API
API 路径,可在飞书开放平台的服务端 API,依次查找云文档>多维表格>多维表格>创建多维表格,或者直接点击:创建多维表API。
如果是在根目录,即我的空间创建多维表,传递多维表的参数名即可;如果是要在指定的文件下创建多维表,则需要多传递一个文件夹的 token 参数,示例如下:
{
"name":"一篇新的多维表格",
"folder_token": "fldbco*****CIMltVc"
}
如何获取文件夹的 token?参考下图:
Tips:如果是使用上一篇通过 API 创建的文件夹,则可直接使用上一篇创建完文件夹返回的 token 传递给 folder_token 参数。
这里我已经创建好了,直接使用即可。
API 调试
在飞书 API 调试台测试新建多维表。
我的文件夹 token 为:AYYvfPya0l60fPd9CvTcFEuFnbc,填入参数,名字就叫做飞书数据类型测试表。
调试结果是报错了,查看说明,没有云空间节点的权限。
在对应的文件查看是否有类似文档授权的方式,给应用授权,结果没找到。
查看关于云文档的权限的常见问题,找到了一个答案:需要应用启用机器人能力,然后在飞书客户端创建群组,将应用添加为群机器人。再在我的空间中找到对应的文件夹,将文件夹分享给刚刚新建的群组。
需要应用启用机器人能力。打开飞书软件,创建新的群组,将应用添加为群机器人。在飞书云文档,我的空间中找到对应的文件夹,将文件夹分享给刚刚新建的群组。
换句话说,文件夹给应用授权需要通过分享给群组,然后在群组里添加应用的机器人,怎么添加呢,需要先在应用后台开启应用的机器人能力。
具体操作见下文。
应用开启机器人能力
到应用中心找到对应的应用,我的应用叫:飞书多维表数据传输,点击进入应用后台。
点击应用能力模块的添加应用能力>按能力添加>点击机器人下面的添加按钮。
添加好机器人之后会新增一个机器人的配置项,如下图标识1。机器人创建好之后,需要新建版本提交申请,如下图标识2,填写版本号、更新说明和申请理由便可提交申请。(注:下图是版本发布成功后的界面)。
创建群组并添加应用机器人
申请通过之后,便可以在群组中添加应用机器人。
先创建一个群组,打开飞书的客户端,如下图,点击创建群组。
在弹窗中配置群名称、群头像、群成员等,点击创建即可,支持创建一人群组,也就是说输入一个群名称,直接点击创建。
创建好群组后,点击群名>点击群机器人>
添加机器人
在弹窗中便可以看到应用的机器人,如果应用没有添加机器人能力,是不会在这里出现的。
直接点击添加即可。
添加完成后在聊天窗口会有一个邀请的提示,表示添加成功。
文件夹分享给群组
打开云文档空间对应的文件夹,右侧点击分享,然后将刚刚添加了应用机器人的群组添加管理权限。
成功新建多维表
配置好权限之后,在 API 调试台,再次发起创建多维表的请求,终于成功了!
请求示例代码
import requests
import json
url = "https://open.feishu.cn/open-apis/bitable/v1/apps"
payload = json.dumps({
"folder_token": "AYYvfPya0l60fPd9CvTcFEuFnbc",
"name": "飞书数据类型测试表"
})
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer t-g1046ff3NIZY52OTZQTQR4CBENWQLRV5KLDSZI22'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
从响应体看,该多维表会创建一个默认的数据表。
{
"code": 0,
"data": {
"app": {
"app_token": "EPYFbi4ThahvLUsJ9nUchaXQnLh",
"default_table_id": "tblu1SpDkQ4qmh7F",
"folder_token": "AYYvfPya0l60fPd9CvTcFEuFnbc",
"name": "飞书数据类型测试表",
"url": "https://xxx.feishu.cn/base/EPYFbi4ThahvLUsJ9nUchaXQnLh"
}
},
"msg": "success"
}
查看文件夹,新增了一个叫“飞书数据类型测试表”的多维表,所有者是对应的应用。
打开该表,可以看到有一个默认的数据表。
至此,完成了多维表的创建。
由于使用 API 创建的多维表的所有者是应用,所以对应的文件会变成一个共享文件夹,和应用一起“协作”。还需要注意的点,通过应用创建的文件夹,如果不需要了,也只能通过应用删除,尽管协作者拥有管理权限。
流程梳理与总结
使用 API 创建多维表,需要先将文件夹分享给添加应用机器人的群组,通过该方式间接将文件夹授权给应用。
首次在群组新增应用机器人,需要先在应用后台开启机器人的能力。
实际使用过程中,可以创建一个群组专门用于文件夹的授权,这样一来,之后直接把文件夹分享给对应的群组,完成授权即可。
操作流程如下:
- 应用添加机器人和创建群组并邀请应用机器人入群视为一次性操作,此后直接调用API为新的文件夹添加协作者权限即可。
文件夹给群组添加协作者权限,需要先获取群组的 chat_id。
找到获取群信息 API 文档,如下图,在右边的调试台,点击选择群组,可以复制 chat_id。
获取到 chat_id,可以保存下来之后反复使用。
调用添加协作者权限 API,为文件夹添加群组协作者
示例代码如下:
import requests
import json
url = "https://open.feishu.cn/open-apis/drive/v1/permissions/AYYvfPya0l60fPd9CvTcFEuFnbc/members?need_notification=true&type=folder"
payload = json.dumps({
"member_id": "oc_4db36e6b4ef56960cae2544ec9ae519c",
"member_type": "openchat",
"perm": "full_access",
"type": "chat"
})
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer t-g1046g9NIJNUNPQY2XLT2V2Q5K5XPMIJTBWKRAQL'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
结合前面新建多维表的代码,将两个 API 的请求代码封装成一个函数,传递关键参数,然后返回需要值。最终参考代码如下:
import requests
import json
def add_folder_permission(access_token,folder_token,chatid,permission_type='full_access'):
"""
功能:给群组开文件夹的协作权限
permission_type:view(阅读)、edit(编辑)、full_access(管理)
"""
url = f"https://open.feishu.cn/open-apis/drive/v1/permissions/{folder_token}/members?need_notification=true&type=folder"
payload = json.dumps({
"member_id": chatid,
"member_type": "openchat",
"perm": "full_access",
"type": "chat"
})
headers = {
'Content-Type': 'application/json',
'Authorization': f'Bearer {access_token}'
}
response = requests.request("POST", url, headers=headers, data=payload)
code = response.json()['code']
if code == 0:
print(f"成功为 {chatid} 开通权限。关联函数:add_folder_permission。")
else:
msg = response.json().get("msg")
raise f"创建文件夹失败,失败信息:{msg}。关联函数:add_folder_permission。"
def cre_bitable(access_token,bitable_name,folder_token=''):
url = "https://open.feishu.cn/open-apis/bitable/v1/apps"
payload = json.dumps({
"folder_token": folder_token,
"name": bitable_name
})
headers = {
'Content-Type': 'application/json',
'Authorization': f'Bearer {access_token}'
}
response = requests.request("POST", url, headers=headers, data=payload)
code = response.json()['code']
if code == 0:
app = response.json().get('data').get('app')
bitable_app_token = app.get('app_token')
bitable_table_id = app.get('default_table_id')
print(f"成功创建多维表,多维表 app_token:{bitable_app_token},默认数据表ID:{bitable_table_id}。关联函数:add_folder_permission。")
return bitable_app_token,bitable_table_id
else:
msg = response.json().get("msg")
raise f"创建文件夹失败,失败信息:{msg}。关联函数:add_folder_permission。"
def get_tenant_access_token(app_id, app_secret):
url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal"
payload = json.dumps({
"app_id": app_id,
"app_secret": app_secret
})
headers = {'Content-Type': 'application/json'}
response = requests.request("POST", url, headers=headers, data=payload)
tenant_access_token = response.json()['tenant_access_token']
print(f'成功获取tenant_access_token:{tenant_access_token}。关联函数:get_table_params。')
return tenant_access_token
def main():
app_id = 'your_app_id'
app_secret = 'your_app_secret'
access_token = get_tenant_access_token(app_id, app_secret)
chatid = 'your_chat_id'
add_folder_permission(access_token,new_folder_token,chatid,permission_type='full_access')
bitable_name = "多维表名称"
folder_token = "your_folder_token"
bitable_app_token,bitable_table_id = cre_bitable(access_token,bitable_name,folder_token)
if __name__ == '__main__':
main()
小结
本文探讨了如何通过 API 创建多维表。
具体操作如下:
- 获得文件夹的权限
- 应用配置:在应用后台开启机器人的能力
- 创建群组:专用于文件夹授权
- 群组配置:添加应用机器人
- 文件夹授权:分享给新建的群组
- 使用 API 创建多维表
其中,应用和群组配置可以视为一次性操作,后续只需要进行文件夹给群组授权,便可以使用 API 创建多维表。