skills/ → skills-dev(9), skills-req(10), skills-ops(4), skills-integration(8), skills-biz(4), skills-workflow(7) generate-marketplace.py 改为自动扫描所有 skills-* 目录。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
4.1 KiB
4.1 KiB
name, description
| name | description |
|---|---|
| feishu-docx | 飞书云文档操作。用于创建、编辑云文档,插入内容块,会议纪要生成。当需要操作飞书云文档时使用。 |
飞书云文档 (Docx)
URL 结构
https://xxx.feishu.cn/docx/DoxcXXXXXX
└── document_id
创建文档
def create_document(title, folder_token=None):
url = "https://open.feishu.cn/open-apis/docx/v1/documents"
payload = {"title": title}
if folder_token:
payload["folder_token"] = folder_token
response = requests.post(url, headers=headers, json=payload)
doc = response.json()["data"]["document"]
return {"document_id": doc["document_id"], "url": f"https://feishu.cn/docx/{doc['document_id']}"}
设置权限
def set_permission(document_id, editable=True):
"""设置文档为组织内可编辑/只读"""
url = f"https://open.feishu.cn/open-apis/drive/v1/permissions/{document_id}/public"
payload = {
"external_access_entity": "open",
"link_share_entity": "tenant_editable" if editable else "tenant_readable"
}
requests.patch(url, headers=headers, params={"type": "docx"}, json=payload)
内容块类型
| 类型 | block_type | 示例 |
|---|---|---|
| 段落 | 2 | 普通文本 |
| 一级标题 | 3 | # 标题 |
| 二级标题 | 4 | ## 标题 |
| 三级标题 | 5 | ### 标题 |
| 无序列表 | 13 | - 列表项 |
| 有序列表 | 14 | 1. 列表项 |
| 代码块 | 16 | code |
| 引用 | 18 | > 引用 |
| 分割线 | 22 | --- |
| 图片 | 27 | 需先上传 |
创建内容块
def create_block(document_id, block_id, block_type, content):
url = f"https://open.feishu.cn/open-apis/docx/v1/documents/{document_id}/blocks/{block_id}/children"
if block_type in [3, 4, 5]: # 标题
block = {"block_type": block_type, "heading": {"elements": [{"text_run": {"content": content}}]}}
elif block_type == 2: # 段落
block = {"block_type": 2, "text": {"elements": [{"text_run": {"content": content}}]}}
elif block_type in [13, 14]: # 列表
block = {"block_type": block_type, "bullet/ordered": {"elements": [{"text_run": {"content": content}}]}}
requests.post(url, headers=headers, json={"children": [block], "index": -1})
图片上传
# 1. 上传图片到素材库
def upload_image(file_path, parent_node):
url = "https://open.feishu.cn/open-apis/drive/v1/medias/upload_all"
with open(file_path, 'rb') as f:
files = {'file': f}
data = {'file_name': os.path.basename(file_path), 'parent_type': 'docx_image', 'parent_node': parent_node}
response = requests.post(url, headers={"Authorization": f"Bearer {token}"}, files=files, data=data)
return response.json()["data"]["file_token"]
# 2. 插入图片块
def insert_image(document_id, block_id, file_token):
block = {"block_type": 27, "image": {"token": file_token}}
# ... 同 create_block
会议纪要模板
def create_meeting_notes(title, date, attendees, agenda, decisions, action_items):
doc = create_document(f"{title} - {date}")
doc_id = doc["document_id"]
# 获取根块
root = requests.get(f".../documents/{doc_id}/blocks/{doc_id}").json()
root_id = root["data"]["block"]["block_id"]
# 添加内容
create_block(doc_id, root_id, 3, f"会议纪要:{title}")
create_block(doc_id, root_id, 2, f"日期:{date}")
create_block(doc_id, root_id, 2, f"参会人:{', '.join(attendees)}")
create_block(doc_id, root_id, 4, "议程")
for item in agenda:
create_block(doc_id, root_id, 13, item)
create_block(doc_id, root_id, 4, "决议")
for item in decisions:
create_block(doc_id, root_id, 13, item)
create_block(doc_id, root_id, 4, "待办事项")
for item in action_items:
create_block(doc_id, root_id, 14, item)
return doc
完整工具类
见 ~/.claude/skills/feishu/feishu_docx.py
注意事项
- 创建文档必须指定
folder_token,否则会出现在「与我共享」 - 默认存储到
C80gfkRnzlonQ5d4AhOcOACDnNg(01运营文件夹) - 图片必须先上传到素材库,再插入文档