feishu-bitable
npx skills add https://github.com/alextangson/feishu_skills --skill feishu-bitable
Agent 安装分布
Skill 文档
é£ä¹¦å¤ç»´è¡¨æ ¼å ¨è½æå
ä½ æ¯é£ä¹¦å¤ç»´è¡¨æ ¼èªå¨åä¸å®¶ï¼è´è´£éè¿ Bitable API å®ç°æ°æ®æä½ãç»æç®¡çãè§å¾é ç½®åæéæ§å¶ã
ä¸ãAPI åºç¡ä¿¡æ¯
| é¡¹ç® | å¼ |
|---|---|
| Base URL | https://open.feishu.cn/open-apis/bitable/v1 |
| è®¤è¯æ¹å¼ | Authorization: Bearer {tenant_access_token} |
| Content-Type | application/json |
å ³é®åæ°è·å
| åæ° | è·åæ¹å¼ |
|---|---|
app_token |
å¤ç»´è¡¨æ ¼ URL ä¸ /base/ åé¢çå符串 |
table_id |
è°ç¨ååºæ°æ®è¡¨ API è·åï¼æä» URL 忰䏿å |
äºãè®°å½æä½ï¼CRUDï¼
1. æ°å¢åæ¡è®°å½
POST /apps/{app_token}/tables/{table_id}/records
{
"fields": {
"åç§°": "æµè¯è®°å½",
"éé¢": 100,
"æ¥æ": 1770508800000,
"ç¶æ": "è¿è¡ä¸"
}
}
宿µå¿æ³ï¼æ°å¼ç±»åä¸è¦ä¼ åç¬¦ä¸²ï¼æ¥æå¿ é¡»æ¯ 13 使¯«ç§æ¶é´æ³ã
2. æ¹éæ°å¢è®°å½
POST /apps/{app_token}/tables/{table_id}/records/batch_create
{
"records": [
{ "fields": { "åç§°": "è®°å½1" } },
{ "fields": { "åç§°": "è®°å½2" } }
]
}
宿µå¿æ³ï¼å次æå¤ 500 æ¡ãéè¿æå®å¯ä¸ç´¢å¼å段å¯å®ç°å¹çæ§åå ¥ï¼Upsertï¼ã
3. æ´æ°è®°å½
PUT /apps/{app_token}/tables/{table_id}/records/{record_id}
{
"fields": { "ç¶æ": "已宿" }
}
4. æ¹éæ´æ°è®°å½
POST /apps/{app_token}/tables/{table_id}/records/batch_update
宿µå¿æ³ï¼å次请æ±ä¸é建议æ§å¶å¨ 500 æ¡ä»¥å ã
5. æ¹éå é¤è®°å½
POST /apps/{app_token}/tables/{table_id}/records/batch_delete
{ "records": ["rec_1", "rec_2"] }
宿µå¿æ³ï¼å次请æ±ä¸é 500 æ¡ãç¨äºèªå¨åæ¸ çæµè¯æ°æ®æè¿æ¶æµæ°´ã
6. æ¥è¯¢è®°å½
POST /apps/{app_token}/tables/{table_id}/records/search
{
"field_names": ["åç§°", "éé¢"],
"filter": {
"conjunction": "and",
"conditions": [
{ "field_name": "ç¶æ", "operator": "is", "value": ["è¿è¡ä¸"] }
]
},
"sort": [
{ "field_name": "éé¢", "desc": true }
]
}
宿µå¿æ³ï¼Filter è¯æ³è¾ä¸ºå¤æï¼å»ºè®®å¯¹ç §ææ¡£è°è¯ã
ä¸ãåæ®µç±»ååå ¥æ ¼å¼ï¼å ³é®ï¼
ä¸ååæ®µç±»åçæ°æ®æ ¼å¼ä¸åï¼åéæ ¼å¼ä¼å¯¼è´ API æ¥éã
宿´å段类åå¯¹ç §è¡¨
| type | ui_type | 䏿å | åå ¥æ ¼å¼ | ç¤ºä¾ |
|---|---|---|---|---|
| 1 | Text | å¤è¡ææ¬ | å符串 | "åå
¬ç¨å" |
| 1 | é®ç®± | å符串 | "test@example.com" |
|
| 2 | Number | æ°å | æ°å¼ | 100 |
| 2 | Currency | è´§å¸ | æ°å¼ | 1280.50 |
| 2 | Progress | è¿åº¦ | æ°å¼(0~1) | 0.25 |
| 2 | Rating | è¯å | æ°å¼(1~5) | 3 |
| 3 | SingleSelect | åé | å符串 | "æ¯åº" |
| 4 | MultiSelect | å¤é | å符串æ°ç» | ["é¤é¥®","交é"] |
| 5 | DateTime | æ¥æ | æ¯«ç§æ¶é´æ³ | 1770508800000 |
| 7 | Checkbox | å¤éæ¡ | å¸å°å¼ | true |
| 11 | User | 人å | 对象æ°ç» | [{"id":"ou_xxx"}] |
| 13 | Phone | çµè¯ | å符串 | "13800138000" |
| 15 | Url | è¶ é¾æ¥ | 对象 | {"text":"åç§°","link":"https://..."} |
| 17 | Attachment | éä»¶ | 对象æ°ç» | [{"file_token":"xxx"}] |
| 18 | SingleLink | ååå ³è | å符串æ°ç» | ["recuxxx"] |
| 21 | DuplexLink | ååå ³è | å符串æ°ç» | ["recuxxx"] |
| 22 | Location | å°çä½ç½® | å符串 | "116.397,39.903" |
䏿¯æ API åå ¥çåæ®µç±»å
以ä¸å段ç±ç³»ç»èªå¨ç»´æ¤ï¼ä¸éè¦ä¹ä¸è½éè¿ API åå ¥ï¼
- æ¥æ¾å¼ç¨ (type=19)ãå ¬å¼ (type=20)ãå建æ¶é´ (type=1001)ãæåæ´æ°æ¶é´ (type=1002)ãå建人 (type=1003)ãä¿®æ¹äºº (type=1004)ãèªå¨ç¼å· (type=1005)ãæé® (type=3001)
æ¥æåæ®µè½¬æ¢ï¼æå¸¸è¸©åï¼
æ¥æå¿ é¡»è½¬ä¸º 13 使¯«ç§çº§æ¶é´æ³ï¼
import datetime
ts = int(datetime.datetime(2026, 2, 9).timestamp() * 1000)
# â 1770508800000
åãåæ®µç®¡ç
7. è·ååæ®µå表
GET /apps/{app_token}/tables/{table_id}/fields
宿µå¿æ³ï¼è¿ååæ®µç type å ui_nameï¼æ¯å®ç°”éç¨éé
娔çåºç¡ã卿éé
ä¸å项ç®çå¤ç»´è¡¨æ ¼ç»æã
8. æ°å¢å段
POST /apps/{app_token}/tables/{table_id}/fields
{ "field_name": "æ°å段", "type": 1 }
宿µå¿æ³ï¼æ°å¢å段åéè¦å ç§éç´¢å¼çæã
9. æ´æ°å段é ç½®
PUT /apps/{app_token}/tables/{table_id}/fields/{field_id}
宿µå¿æ³ï¼ä¿®æ¹åé/å¤éåæ®µæ¶éæä¾å®æ´ç property ç»æï¼å
嫿æé项ï¼ã
10. æå ¥å ¬å¼å段
POST /apps/{app_token}/tables/{table_id}/fields
{
"type": 20,
"field_name": "婿¶¦",
"property": { "formula_expression": "[è¥æ¶]-[ææ¬]" }
}
宿µå¿æ³ï¼å ¬å¼è¯æ³éµå¾ªé£ä¹¦æ åï¼ä¸æ¯æè·¨è¡¨å¼ç¨ã
11. æå ¥å ³èåæ®µ
POST /apps/{app_token}/tables/{table_id}/fields
{
"type": 18,
"field_name": "å
³è客æ·",
"property": { "table_id": "tblXXX", "multiple": true }
}
宿µå¿æ³ï¼å®ç°å ³ç³»åæ°æ®åºï¼RDBMSï¼è½åçæ ¸å¿ã
äºãæ°æ®è¡¨ç®¡ç
12. å建å¤ç»´è¡¨æ ¼
POST /open-apis/bitable/v1/apps
{ "name": "æ°æ®åºåç§°" }
宿µå¿æ³ï¼Bitable å±äºç¬ç«åºç¨ï¼è·¯å¾ä¸ Docx ä¸åã
13. è·åè¡¨çº§å æ°æ®
GET /apps/{app_token}/tables/{table_id}
宿µå¿æ³ï¼å å«è®°å½æ»æ°ãæ¯å¦ææªåæ¥çå¤é¨å¼ç¨çãç¨äºå·¡æ£æ°æ®åºå¥åº·åº¦ã
14. æ°æ®è¡¨éå½å
PATCH /apps/{app_token}/tables/{table_id}
{ "name": "æ°è¡¨å" }
15. å¤å¶å¤ç»´è¡¨æ ¼
POST /open-apis/drive/v1/files/{file_token}/copy
宿µå¿æ³ï¼è½ç¶æ¯ Drive æ¥å£ï¼ä½éç¨äº Bitable æä»¶çæ´ä½å éãæ°é¡¹ç®ç«é¡¹æ¶ä»æ 忍¡æ¿å¿«éå éã
å ãè§å¾ç®¡ç
16. åå»ºçæ¿è§å¾
POST /apps/{app_token}/tables/{table_id}/views
{ "view_name": "仿¥çæ¿", "view_type": "kanban" }
17. å建çç¹è§å¾
{ "view_name": "é¡¹ç®ææ", "view_type": "gantt" }
宿µå¿æ³ï¼çç¹å¾éæå®å¼å§/ç»ææ¥æåæ®µã
18. å建表åè§å¾
{ "view_type": "form" }
宿µå¿æ³ï¼çæåç URL å¯éè¿æºå¨äººååï¼å®¢æ·å¡«å®ç´è¾¾æ°æ®åºã
19. 设置è§å¾ç鿡件
PATCH /apps/{app_token}/tables/{table_id}/views/{view_id}
{
"property": {
"filter_info": {
"conditions": [
{ "field_name": "ç¶æ", "operator": "is", "value": ["è¿è¡ä¸"] }
]
}
}
}
宿µå¿æ³ï¼é常éåå卿 Dashboardã
20. 管çè§å¾æ¾ç¤ºå
POST /apps/{app_token}/tables/{table_id}/views/{view_id}/display_fields
宿µå¿æ³ï¼éè¿é ç½®æ¾éï¼æå大表çå è½½ä¸é 读ä½éªã
21. å建仪表ç
POST /apps/{app_token}/dashboards/copy
宿µå¿æ³ï¼ç®åä¸»è¦æ¯æä»æ¨¡æ¿å¤å¶ãç«é¡¹åèªå¨æå»ºæ°æ®å¤§å±ã
ä¸ãè§è²ä¸æé
22. è·åè§è²å表
GET /apps/{app_token}/roles
宿µå¿æ³ï¼èªå¨åå®¡è®¡è°æ¥æå¯¼åºæéãä¼ä¸çº§å®å ¨ç®¡æ§çåºç³ã
23. å建èªå®ä¹è§è²
POST /apps/{app_token}/roles
宿µå¿æ³ï¼éé
å role_configuration ç²¾ç»è®¾ç½®å段æéãå¯ä¸ºä¾åºå卿å建”ä»
å¯çèªå·±æ°æ®”çæéç»ã
24. è§è²æå管ç
POST /apps/{app_token}/roles/{role_id}/members
宿µå¿æ³ï¼æ¯ææ¹éæ·»å ï¼å¤§å¹ éä½è¿ç»´ææ¬ãèªå¨å°æ°å ¥èæåå å ¥ç¹å®æéç»ã
25. 管çå使é
æéï¼docs:permission.setting:write_only
宿µå¿æ³ï¼è°ç¨äºææ¡£éç¨æéæ¥å£å³å¯ã项ç®å®ç»åèªå¨å ³éç¼è¾æé转为åªè¯»ã
å «ãç»è®¡ä¸é«çº§
26. è·åç»è®¡ä¿¡æ¯
GET /apps/{app_token}/tables/{table_id}/statistics
宿µå¿æ³ï¼æ¯ç´æ¥æåè®°å½æ´è½»éãéåå®æææ¥”æ¨æ¥æ°å¢è®¢åæ°”ã
27. èªå¨å工使µè§¦å
宿µå¿æ³ï¼API åå ¥è®°å½åæ ·è½è§¦åå¤ç»´è¡¨æ ¼å é¨ç”èªå¨å婿”ï¼æ éé¢å¤æéï¼ã
ä¹ãéä»¶ä¸ä¼ æµç¨
ä¸ä¼ æä»¶å°å¤ç»´è¡¨æ ¼éä»¶åæ®µï¼éè¦ä¸¤æ¥ï¼
第 1 æ¥ï¼ä¸ä¼ æä»¶è·å file_token
POST https://open.feishu.cn/open-apis/drive/v1/medias/upload_all
Content-Type: multipart/form-data
- file: æä»¶
- file_name: "invoice.jpg"
- parent_type: "bitable_file"
- parent_node: "{app_token}"
- size: æä»¶å¤§å°ï¼åèï¼
第 2 æ¥ï¼å° file_token åå ¥éä»¶åæ®µ
{
"fields": {
"éä»¶åæ®µå": [{"file_token": "è¿åçfile_token"}]
}
}
åãé误å¤ç
| é误ç | å«ä¹ | è§£å³æ¹æ¡ |
|---|---|---|
| 0 | æå | â |
| 1254043 | æ æé | å¨å¤ç»´è¡¨æ ¼ä¸æ·»å åºç¨ |
| 1254044 | app_token æ æ | æ£æ¥å¤ç»´è¡¨æ ¼ URL ä¸ç token |
| 1254045 | table_id æ æ | è°ç¨ååºæ°æ®è¡¨ API éæ°è·å |
| 1254607 | åæ®µå¼æ ¼å¼é误 | æ£æ¥å段类ååå¼çæ ¼å¼æ¯å¦å¹é |
| 99991663 | token è¿æ | éæ°è·å tenant_access_token |
| 99991400 | é¢çéå¶ | çå¾ 1 ç§åéè¯ |