feishu-cli-toolkit
npx skills add https://github.com/riba2534/feishu-cli --skill feishu-cli-toolkit
Agent 安装分布
Skill 文档
é£ä¹¦ç»¼åå·¥å ·ç®±
è¦ç feishu-cli ç 12 个åè½æ¨¡åï¼æä¾å½ä»¤éæ¥åæ ¸å¿ç¨æ³ãå¤ææ¨¡åç详ç»åèææ¡£å¨ references/ ç®å½ä¸ã
模åéæ¥è¡¨
| # | 模å | æ ¸å¿å½ä»¤ | 详ç»åè |
|---|---|---|---|
| 1 | çµåè¡¨æ ¼ | sheet create/get/read/write/append + V3 å¯ææ¬ |
references/sheet-commands.md |
| 2 | æ¥åæ¥ç¨ | calendar list/get/primary/create-event/event-search/freebusy |
references/calendar-commands.md |
| 3 | ä»»å¡ç®¡ç | task create/complete/delete + subtask/member/reminder + tasklist |
references/task-commands.md |
| 4 | 群è管ç | chat create/get/update/delete/link + chat member |
references/chat-commands.md |
| 5 | ç»æ¿æä½ | board image/import/nodes + doc add-board |
references/board-commands.md |
| 6 | PlantUML | é£ä¹¦ç»æ¿å®å ¨åéè¯æ³ | references/plantuml-safe-subset.md |
| 7 | æä»¶ç®¡ç | file list/mkdir/move/copy/delete/download/upload/version/meta/stats |
â |
| 8 | ç´ æç®¡ç | media upload/download |
â |
| 9 | è¯è®ºç®¡ç | comment list/add/delete/resolve/unresolve + comment reply |
â |
| 10 | ç¥è¯åº | wiki get/export/spaces/nodes/space-get + wiki member |
â |
| 11 | æç´¢ | search messages/appsï¼é User Access Tokenï¼ |
references/search-commands.md |
| 12 | ç¨æ·åé¨é¨ | user info/search/list + dept get/children |
â |
1. çµåè¡¨æ ¼
æ¯æ V2ï¼ç®åäºç»´æ°ç»ï¼å V3ï¼å¯ææ¬ä¸ç»´æ°ç»ï¼ä¸¤å¥ APIã
常ç¨å½ä»¤
# åå»ºè¡¨æ ¼
feishu-cli sheet create --title "æ°è¡¨æ ¼"
# è·åè¡¨æ ¼ä¿¡æ¯
feishu-cli sheet get <token>
# ååºå·¥ä½è¡¨
feishu-cli sheet list-sheets <token>
# V2 读åï¼äºç»´æ°ç»ï¼
feishu-cli sheet read <token> "Sheet1!A1:C10"
feishu-cli sheet write <token> "Sheet1!A1:B2" --data '[["å§å","å¹´é¾"],["å¼ ä¸",25]]'
feishu-cli sheet append <token> "Sheet1!A:B" --data '[["æ°è¡1","æ°è¡2"]]'
# V3 坿æ¬è¯»åï¼ä¸ç»´æ°ç»ï¼
feishu-cli sheet read-plain <token> <sheet_id> "Sheet1!A1:C10"
feishu-cli sheet read-rich <token> <sheet_id> "Sheet1!A1:C10"
feishu-cli sheet write-rich <token> <sheet_id> --data-file data.json
# è¡åæä½
feishu-cli sheet add-rows <token> <sheet_id> --count 5
feishu-cli sheet add-cols <token> <sheet_id> --count 3
feishu-cli sheet delete-rows <token> <sheet_id> --start 2 --end 5
feishu-cli sheet delete-cols <token> <sheet_id> --start 1 --end 3
# æ ·å¼åæ ¼å¼
feishu-cli sheet merge <token> "Sheet1!A1:B2"
feishu-cli sheet unmerge <token> "Sheet1!A1:B2"
feishu-cli sheet style <token> "Sheet1!A1:C3" --bold --bg-color "#FF0000"
# æ¥æ¾æ¿æ¢
feishu-cli sheet find <token> <sheet_id> --find "æ§ææ¬"
feishu-cli sheet replace <token> <sheet_id> --find "æ§ææ¬" --replace "æ°ææ¬"
API éå¶
- 忬¡åå ¥æå¤ 5000 个åå æ ¼ï¼åå æ ¼æå¤§ 50000 å符
- V2 èå´æ ¼å¼ï¼
SheetID!A1:C10ï¼æ¯ææ´åA:Cåæ´è¡1:3 - V3 åå ¥éå¶ï¼å次æå¤ 10 个èå´
详ç»åèï¼è¯»å references/sheet-commands.md è·å V3 å¯ææ¬æ ¼å¼ãå·¥ä½è¡¨ç®¡çãåå
æ ¼å¾çç宿´è¯´æã
æéè¦æ±ï¼sheets:spreadsheet
2. æ¥å忥ç¨
管çé£ä¹¦æ¥åãæ¥ç¨ãåä¸äººåå¿é²æ¥è¯¢ãæ¶é´æ ¼å¼ç»ä¸ä½¿ç¨ RFC3339ï¼å¦ 2024-01-01T10:00:00+08:00ï¼ã
常ç¨å½ä»¤
# æ¥å
feishu-cli calendar list # ååºæ¥å
feishu-cli calendar get <calendar_id> # è·åæ¥å详æ
feishu-cli calendar primary # è·å主æ¥å
# æ¥ç¨ CRUD
feishu-cli calendar create-event \
--calendar-id <id> \
--summary "å¢éå¨ä¼" \
--start "2024-01-21T14:00:00+08:00" \
--end "2024-01-21T15:00:00+08:00" \
--description "讨论æ¬å¨è¿å±"
feishu-cli calendar list-events --calendar-id <id> --start <RFC3339> --end <RFC3339>
feishu-cli calendar get-event --calendar-id <id> --event-id <event_id>
feishu-cli calendar update-event --calendar-id <id> --event-id <event_id> --summary "æ°æ é¢"
feishu-cli calendar delete-event --calendar-id <id> --event-id <event_id>
# æç´¢æ¥ç¨
feishu-cli calendar event-search --calendar-id <id> --query "å¨ä¼"
# å夿¥ç¨é请
feishu-cli calendar event-reply <calendar_id> <event_id> --status accept # accept/decline/tentative
# åä¸äººç®¡ç
feishu-cli calendar attendee add <calendar_id> <event_id> --user-ids id1,id2
feishu-cli calendar attendee list <calendar_id> <event_id>
# å¿é²æ¥è¯¢
feishu-cli calendar freebusy \
--start "2024-01-01T00:00:00+08:00" \
--end "2024-01-02T00:00:00+08:00" \
--user-id <user_id>
详ç»åèï¼è¯»å references/calendar-commands.md è·å宿´åæ°è¯´æã
æéè¦æ±ï¼calendar:calendar:readonlyï¼è¯»åï¼ï¼calendar:calendarï¼åæä½ï¼éåç¬ç³è¯·ï¼
3. ä»»å¡ç®¡ç
管çé£ä¹¦ä»»å¡ï¼V2 APIï¼ï¼å æ¬åä»»å¡ãæåãæéå任塿¸ åãä»»å¡ ID 为 UUID æ ¼å¼ã
常ç¨å½ä»¤
# ä»»å¡ CRUD
feishu-cli task create --summary "宿代ç 审æ¥" --description "è¯¦ç»æè¿°" --due "2024-02-01"
feishu-cli task list [--completed | --uncompleted]
feishu-cli task get <task_id>
feishu-cli task update <task_id> --summary "æ°æ é¢"
feishu-cli task complete <task_id>
feishu-cli task delete <task_id>
# åä»»å¡
feishu-cli task subtask create <task_guid> --summary "å任塿 é¢"
feishu-cli task subtask list <task_guid>
# æå管ç
feishu-cli task member add <task_guid> --members id1,id2 --role assignee # assignee/follower
feishu-cli task member remove <task_guid> --members id1,id2 --role assignee
# æé
feishu-cli task reminder add <task_guid> --minutes 30 # æå 30 åéæéï¼0=æªæ¢æ¶
feishu-cli task reminder remove <task_guid> --ids id1,id2
# 任塿¸
å
feishu-cli tasklist create --name "Sprint 计å"
feishu-cli tasklist list
feishu-cli tasklist get <tasklist_guid>
feishu-cli tasklist delete <tasklist_guid>
详ç»åèï¼è¯»å references/task-commands.md è·å宿´åæ°è¯´æã
æéè¦æ±ï¼task:task:readãtask:task:writeãtask:tasklist:readãtask:tasklist:writeï¼éåç¬ç³è¯·ï¼
4. 群è管ç
å建/管ç群èï¼ç®¡ç群æåã
常ç¨å½ä»¤
# 群è CRUD
feishu-cli chat create --name "项ç®ç¾¤" --user-ids id1,id2 [--chat-type private|public]
feishu-cli chat get <chat_id>
feishu-cli chat update <chat_id> --name "æ°ç¾¤å" [--description "æ°æè¿°"]
feishu-cli chat delete <chat_id>
# è·å群åäº«é¾æ¥
feishu-cli chat link <chat_id> [--validity-period week|year|permanently]
# 群æå管ç
feishu-cli chat member list <chat_id> [--member-id-type open_id|user_id|union_id]
feishu-cli chat member add <chat_id> --id-list id1,id2 [--member-id-type open_id]
feishu-cli chat member remove <chat_id> --id-list id1,id2 [--member-id-type open_id]
详ç»åèï¼è¯»å references/chat-commands.md è·å宿´åæ°å示ä¾ã
æéè¦æ±ï¼im:chatï¼ç¾¤è管çï¼ãim:chat:readonlyï¼è¯»åï¼ãim:chat:memberï¼æåæä½ï¼
5. ç»æ¿æä½
ä¸è½½ç»æ¿å¾çãå¯¼å ¥ Mermaid/PlantUML å¾è¡¨å°ç»æ¿ã
常ç¨å½ä»¤
# ä¸è½½ç»æ¿ä¸º PNG å¾ç
feishu-cli board image <whiteboard_id> output.png
# 导å
¥å¾è¡¨å°ç»æ¿
feishu-cli board import <whiteboard_id> diagram.puml # PlantUML æä»¶
feishu-cli board import <whiteboard_id> diagram.mmd --syntax mermaid # Mermaid æä»¶
feishu-cli board import <whiteboard_id> --source-type content -c "graph TD; A-->B" --syntax mermaid # å
å®¹ç´æ¥å¯¼å
¥
# è·åç»æ¿èç¹å表
feishu-cli board nodes <whiteboard_id>
# å¨ææ¡£ä¸æ·»å 空ç½ç»æ¿
feishu-cli doc add-board <document_id> [--parent-id <block_id> --index 0]
å¾è¡¨å¯¼å ¥åæ°
| åæ° | 说æ |
|---|---|
--syntax |
plantumlï¼é»è®¤ï¼æ mermaid |
--diagram-type |
0=auto, 1=mindmap, 2=sequence, 3=activity, 4=class, 5=er, 6=flowchart, 7=state, 8=component |
--style |
boardï¼é»è®¤ï¼æ classic |
--source-type |
fileï¼é»è®¤ï¼æ content |
-c, --content |
å½ source-type=content æ¶çå¾è¡¨å 容 |
æ¯æç Mermaid ç±»åï¼8 ç§ï¼å ¨é¨å·²éªè¯ï¼
flowchartãsequenceDiagramãclassDiagramãstateDiagram-v2ãerDiagramãganttãpieãmindmap
详ç»åèï¼è¯»å references/board-commands.md è·å宿´è¯´æã
æéè¦æ±ï¼board:boardï¼ç»æ¿æä½ï¼ãdocx:documentï¼ææ¡£ç»æ¿ï¼
6. PlantUML å¾è¡¨çæ
çæéé é£ä¹¦ç»æ¿ç PlantUML å¾è¡¨ãé»è®¤æ¨è Mermaidï¼é£ä¹¦åçæ¯ææ´å¥½ï¼ï¼ä» å¨ Mermaid 䏿¯æçå¾ç±»åï¼ç¨ä¾å¾ãç»ä»¶å¾ãå¤ææ´»å¨å¾ï¼æ¶æç¨ PlantUMLã
å®å ¨åéæ ¸å¿è§å
- å¿
须使ç¨
@startuml/@endumlå è£¹ï¼æç»´å¯¼å¾ç¨@startmindmap/@endmindmapï¼ - ä¸è¦ä½¿ç¨è¡é¦ç¼©è¿ï¼é£ä¹¦ç»æ¿å°ç¼©è¿è¡è§ä¸ºç¬ç«è¡ï¼
- é¿å
skinparamã!defineãé¢è²/åä½/坹齿§å¶ãæ¹åæ§å¶æä»¤ - ç±»å¾é¿å
å¯è§æ§æ è®°ï¼
+ - # ~ï¼ï¼ç¨field : typeæmethod()æ ¼å¼
æ¯æçå¾ç±»å
æ´»å¨å¾/æµç¨å¾ãæ¶åºå¾ãç±»å¾ãç¨ä¾å¾ãç»ä»¶å¾ãER å¾ãæç»´å¯¼å¾
å¯¼å ¥æ¹å¼
- å¨ Markdown ä¸ä½¿ç¨
```plantuml代ç åï¼éè¿feishu-cli doc importå¯¼å ¥ - ç´æ¥éè¿
board importå½ä»¤å¯¼å ¥å°ç»æ¿
详ç»åèï¼è¯»å references/plantuml-safe-subset.md è·åæ¯ç§å¾ç±»åçå®å
¨è¯æ³è§èã
7. æä»¶ç®¡ç
é£ä¹¦äºç©ºé´ï¼Driveï¼æä»¶ç宿´ç®¡çï¼å æ¬æä»¶ CRUDãçæ¬ç®¡çãå æ°æ®åç»è®¡ã
常ç¨å½ä»¤
# ååºæä»¶
feishu-cli file list [folder_token]
# å建æä»¶å¤¹
feishu-cli file mkdir "æä»¶å¤¹å" [--parent <folder_token>]
# ç§»å¨/å¤å¶/å é¤
feishu-cli file move <file_token> --target <folder_token> --type <docx|sheet|file|...>
feishu-cli file copy <file_token> --target <folder_token> --type <type> [--name "æ°å"]
feishu-cli file delete <file_token> --type <type> # ç§»å°åæ¶ç«ï¼30 天坿¢å¤
# ä¸è½½/ä¸ä¼
feishu-cli file download <file_token> -o output.pdf
feishu-cli file upload local_file.pdf --parent <FOLDER_TOKEN> [--name "èªå®ä¹å"]
# çæ¬ç®¡ç
feishu-cli file version list <file_token> [--obj-type docx]
feishu-cli file version create <file_token> --name "v1.0" [--obj-type docx]
feishu-cli file version get <file_token> <version_id>
feishu-cli file version delete <file_token> <version_id>
# å
æ°æ®åç»è®¡
feishu-cli file meta TOKEN1 TOKEN2 --doc-type docx # æ¹éè·åå
æ°æ®
feishu-cli file stats <file_token> --doc-type docx # è·åç»è®¡ä¿¡æ¯
æä»¶ç±»å
docxãdocãsheetãbitableãmindnoteãfolderãfile
æéè¦æ±ï¼drive:drive:readonlyï¼è¯»åï¼ãdrive:driveï¼åæä½ï¼
8. ç´ æç®¡ç
ä¸ä¼ å¾ç/æä»¶å°é£ä¹¦äºç©ºé´ï¼æä¸è½½å·²æç´ æã
常ç¨å½ä»¤
# ä¸ä¼ ç´ æï¼ç¨äºææ¡£ä¸çå¾ç/éä»¶ï¼
feishu-cli media upload image.png \
--parent-type docx_image \
--parent-node <doc_id>
# ä¸è½½ç´ æ
feishu-cli media download <file_token> -o output.png
parent-type åæ°è¯´æ
| å¼ | 说æ |
|---|---|
docx_image |
æ°çææ¡£å¾çï¼é»è®¤ï¼ |
docx_file |
æ°çææ¡£éä»¶ |
doc_image |
æ§çææ¡£å¾ç |
doc_file |
æ§çææ¡£éä»¶ |
sheet_image |
çµåè¡¨æ ¼å¾ç |
comment_image |
è¯è®ºå¾ç |
éå¶
- å¾çæå¤§ 20MBï¼æ¯æ PNG/JPG/JPEG/GIF/BMP/SVG/WEBP
- æä»¶æå¤§ 512MBï¼æ¯æ PDF/DOC/DOCX/XLS/XLSX/PPT/PPTX/ZIP ç
æéè¦æ±ï¼drive:drive:readonlyï¼ä¸è½½ï¼ãdrive:driveï¼ä¸ä¼ ï¼
9. è¯è®ºç®¡ç
管çé£ä¹¦äºææ¡£çè¯è®ºï¼å æ¬å ¨æè¯è®ºãè¯è®ºè§£å³/åæ¶è§£å³ãåå¤ç®¡çã
常ç¨å½ä»¤
# ååºè¯è®º
feishu-cli comment list <file_token> --type docx
# æ·»å å
¨æè¯è®º
feishu-cli comment add <file_token> --type docx --text "è¯è®ºå
容"
# å é¤è¯è®ºï¼ä¸å¯éï¼
feishu-cli comment delete <file_token> <comment_id> --type docx
# è§£å³/åæ¶è§£å³è¯è®º
feishu-cli comment resolve <file_token> <comment_id> --type docx
feishu-cli comment unresolve <file_token> <comment_id> --type docx
# åå¤ç®¡ç
feishu-cli comment reply list <file_token> <comment_id> --type docx
feishu-cli comment reply delete <file_token> <comment_id> <reply_id> --type docx
æ¯æçæä»¶ç±»å
--type åæ°æ¯æï¼docxãdocãsheetãbitable
æéè¦æ±ï¼drive:drive.comment:readonlyï¼è¯»åï¼ãdrive:drive.comment:writeï¼åå
¥ï¼
10. ç¥è¯åº
æ¥çç¥è¯ç©ºé´ãè·åç¥è¯åºèç¹ã导åºç¥è¯åºææ¡£ã管çç©ºé´æåã
常ç¨å½ä»¤
# è·åèç¹ä¿¡æ¯ï¼æ¯æ URL æ tokenï¼
feishu-cli wiki get <node_token>
# 导åºä¸º Markdown
feishu-cli wiki export <node_token> -o doc.md [--download-images --assets-dir ./assets]
# ååºç¥è¯ç©ºé´
feishu-cli wiki spaces [--page-size 20]
# ååºç©ºé´ä¸çèç¹
feishu-cli wiki nodes <space_id> [--parent <node_token>]
# è·å空é´è¯¦æ
feishu-cli wiki space-get <space_id>
# ç©ºé´æå管ç
feishu-cli wiki member add <space_id> --member-type userid --member-id <USER_ID> --role admin
feishu-cli wiki member list <space_id>
feishu-cli wiki member remove <space_id> --member-type userid --member-id <USER_ID> --role admin
éè¦æ¦å¿µ
- ç¥è¯åºä½¿ç¨
node_tokenï¼åºå«äºæ®éææ¡£çdocument_idï¼ - ç®å½èç¹å¯¼åºå
容为
[Wiki ç®å½...]ï¼éç¨wiki nodesè·ååèç¹ - æåè§è²ï¼
adminï¼ç®¡çåï¼ãmemberï¼æåï¼ - æåç±»åï¼
openchatãuseridãemailãopendepartmentidãopenid
æéè¦æ±ï¼wiki:wiki:readonlyï¼è¯»åï¼ãwiki:wikiï¼ç©ºé´æå管çï¼
11. æç´¢
æç´¢é£ä¹¦æ¶æ¯ååºç¨ãéè¦ï¼éè¦ User Access Tokenï¼é App Access Tokenï¼ã
常ç¨å½ä»¤
# æç´¢æ¶æ¯
feishu-cli search messages "å
³é®è¯" \
--user-access-token <token> \
[--chat-ids oc_xxx] \
[--message-type file|image|media] \
[--chat-type group_chat|p2p_chat] \
[--from-type bot|user] \
[--start-time 1704067200] \
[--end-time 1704153600]
# æç´¢åºç¨
feishu-cli search apps "åºç¨å" --user-access-token <token>
User Access Token 说æ
- éè¿
--user-access-tokenåæ°æFEISHU_USER_ACCESS_TOKENç¯å¢åéæä¾ - Token æææçº¦ 2 å°æ¶ï¼Refresh Token æææ 30 天
- ä¸è½ä½¿ç¨ App Access Tokenï¼ä¼æ¥æéé误ï¼
详ç»åèï¼è¯»å references/search-commands.md è·å宿´çéåæ°è¯´æã
12. ç¨æ·åé¨é¨
æ¥è¯¢ç¨æ·ä¿¡æ¯ãéè¿é®ç®±/ææºå·æ¥æ¾ç¨æ·ãååºé¨é¨æåååé¨é¨ã
常ç¨å½ä»¤
# è·åç¨æ·ä¿¡æ¯
feishu-cli user info <user_id> [--user-id-type open_id|union_id|user_id]
# éè¿é®ç®±/ææºå·æ¥è¯¢ç¨æ· ID
feishu-cli user search --email user@example.com
feishu-cli user search --mobile 13800138000
feishu-cli user search --email "a@example.com,b@example.com" # æ¹éæ¥è¯¢
# ååºé¨é¨ä¸çç¨æ·
feishu-cli user list --department-id <dept_id> [--user-id-type open_id]
# è·åé¨é¨è¯¦æ
feishu-cli dept get <department_id> [--department-id-type open_department_id]
# è·ååé¨é¨åè¡¨ï¼æ ¹é¨é¨ä½¿ç¨ "0"ï¼
feishu-cli dept children <department_id> [--department-id-type open_department_id]
æéè¦æ±ï¼contact:user.base:readonlyï¼ç¨æ·ä¿¡æ¯ï¼ãcontact:department.base:readonlyï¼é¨é¨æ¥è¯¢ï¼
éç¨æ³¨æäºé¡¹
æéè¦æ±æ±æ»
| 模å | æé |
|---|---|
| çµåè¡¨æ ¼ | sheets:spreadsheet |
| æ¥å | calendar:calendar:readonlyãcalendar:calendar |
| ä»»å¡ | task:task:readãtask:task:writeãtask:tasklist:readãtask:tasklist:write |
| 群è | im:chatãim:chat:readonlyãim:chat:member |
| ç»æ¿ | board:board |
| æä»¶ | drive:driveãdrive:drive:readonly |
| ç´ æ | drive:driveãdrive:drive:readonly |
| è¯è®º | drive:drive.comment:readonlyãdrive:drive.comment:write |
| ç¥è¯åº | wiki:wiki:readonlyãwiki:wiki |
| æç´¢ | éè¦ User Access Token |
| ç¨æ·/é¨é¨ | contact:user.base:readonlyãcontact:department.base:readonly |
é误å¤ç
| é误 | åå | è§£å³ |
|---|---|---|
rate limit exceeded / 429 |
API é¢çéå¶ | çå¾ å ç§åéè¯ |
no permission |
åºç¨æéä¸è¶³ | æ£æ¥åºç¨æéé ç½® |
invalid parameter |
åæ°æ ¼å¼é误 | æ£æ¥åæ°ç±»ååæ ¼å¼ |
not found |
èµæºä¸åå¨ | æ£æ¥ ID/Token æ¯å¦æ£ç¡® |