OpenClaw 飞书 Skill 开发完全指南
作者: OpenClaw 社区
版本: 1.0
更新时间: 2026-03-11
适用版本: OpenClaw 2026.3.2+ | 飞书插件 @openclaw/feishu@2026.3.7+
📋 目录
- 前言
- [什么是 Skill](#什么是 Skill)
- [飞书 Skill 架构解析](#飞书 Skill 架构解析)
- [Skill 开发环境准备](#Skill 开发环境准备)
- [创建第一个飞书 Skill](#创建第一个飞书 Skill)
- [SKILL.md 编写详解](#SKILL.md 编写详解)
- 工具集成开发
- 进阶技能开发
- 调试与测试
- 发布与分享
- 最佳实践
- 常见问题
前言
在 OpenClaw 中,Skill(技能) 是扩展 AI 助手能力的核心机制。通过开发飞书 Skill,你可以让 AI 助手:
- 📝 自动创建和编辑飞书云文档
- 📊 操作多维表格(Bitable)数据
- 📁 管理飞书云空间文件
- 📚 维护知识库(Wiki)内容
- 👥 管理权限和协作
- 🔔 发送定制化消息通知
本教程将带你从零开始,掌握飞书 Skill 的完整开发流程。
学完本教程你将能够:
✅ 理解 OpenClaw Skill 的设计原理
✅ 创建自定义飞书业务技能
✅ 集成飞书 API 实现复杂功能
✅ 调试和优化 Skill 性能
✅ 发布技能到社区市场
什么是 Skill
Skill 的定义
Skill 是一个自包含的功能包,它为 AI 助手提供:
- 领域知识 - 特定业务场景的专业知识
- 工作流程 - 多步骤任务的执行指南
- 工具集成 - 与外部系统(如飞书 API)的交互能力
- 资源包 - 脚本、模板、参考文档等
Skill vs 插件 vs 工具
| 概念 | 层级 | 作用 | 示例 |
|---|---|---|---|
| 插件 (Plugin) | 最高层 | 提供通道和基础能力 | @openclaw/feishu |
| 工具 (Tool) | 中间层 | 提供具体 API 操作 | feishu_doc, feishu_drive |
| 技能 (Skill) | 最底层 | 提供业务场景指导 | feishu-doc, feishu-wiki |
关系图:
插件 (feishu)
└── 工具层 (feishu_doc, feishu_drive, feishu_wiki...)
└── 技能层 (feishu-doc, feishu-drive, feishu-wiki...)
└── 用户请求:"帮我创建一个会议纪要文档"
Skill 的触发机制
Skill 通过 YAML Frontmatter 中的 description 字段自动触发:
yaml
---
name: feishu-doc
description: |
Feishu document read/write operations.
Activate when user mentions Feishu docs, cloud docs, or docx links.
---
当用户消息匹配描述中的关键词时,Skill 会被激活并加载到上下文中。
飞书 Skill 架构解析
现有 Skill 结构
查看已安装的飞书 Skill:
bash
ls -la /root/.openclaw/extensions/feishu/skills/
输出:
drwxr-xr-x 6 root root 4096 Mar 10 14:24 .
drwxr-xr-x 5 root root 4096 Mar 10 14:24 ..
drwxr-xr-x 3 root root 4096 Mar 10 14:24 feishu-doc
drwxr-xr-x 2 root root 4096 Mar 10 14:24 feishu-drive
drwxr-xr-x 2 root root 4096 Mar 10 14:24 feishu-perm
drwxr-xr-x 2 root root 4096 Mar 10 14:24 feishu-wiki
标准目录结构
skill-name/
├── SKILL.md # 必需:技能定义文件
├── scripts/ # 可选:可执行脚本
│ ├── helper.py
│ └── processor.sh
├── references/ # 可选:参考文档
│ ├── api-docs.md
│ └── schema.md
└── assets/ # 可选:资源文件
├── template.docx
└── logo.png
SKILL.md 文件结构
markdown
---
name: skill-name
description: |
技能描述,用于触发判断
---
# 技能标题
## 使用说明
详细说明...
## 工具调用
```json
{ "action": "read", "doc_token": "ABC123" }
工作流程
步骤 1...
步骤 2...
---
## Skill 开发环境准备
### 1. 确认 OpenClaw 版本
```bash
openclaw --version
# 输出:2026.3.3
2. 检查飞书插件
bash
ls -la /root/.openclaw/extensions/feishu/
确保包含:
- ✅
package.json- 插件配置 - ✅
index.ts- 入口文件 - ✅
skills/- 技能目录 - ✅
src/- 源代码
3. 验证工具可用性
bash
# 测试飞书工具是否加载
openclaw tools list | grep feishu
预期输出:
✅ feishu_doc
✅ feishu_drive
✅ feishu_wiki
✅ feishu_bitable
4. 准备开发目录
bash
# 创建技能开发目录
mkdir -p /root/.openclaw/skills-dev
cd /root/.openclaw/skills-dev
# 初始化技能模板
python3 /home/dongwei/openclaw/scripts/init_skill.py my-first-skill \
--path . \
--resources scripts,references
创建第一个飞书 Skill
实战案例:会议纪要自动生成器
我们将创建一个名为 meeting-minutes 的 Skill,功能是:
- 根据会议录音转写文本自动生成结构化纪要
- 创建飞书云文档并格式化内容
- 自动@参会人员并设置提醒
Step 1: 初始化技能
bash
# 创建技能目录
mkdir -p /root/.openclaw/extensions/feishu/skills/meeting-minutes
# 创建基础文件结构
cd /root/.openclaw/extensions/feishu/skills/meeting-minutes
mkdir -p scripts references assets
Step 2: 编写 SKILL.md
创建 SKILL.md 文件:
markdown
---
name: meeting-minutes
description: |
会议纪要自动生成技能。使用场景:用户需要整理会议录音/聊天记录、
创建结构化会议纪要文档、@参会人员并设置跟进任务。
触发词:"会议纪要"、"会议总结"、"meeting minutes"、"整理会议"
---
# 会议纪要生成器
## 功能概述
本技能帮助你将会议内容快速整理成结构化的飞书文档。
## 使用流程
### 1. 提供会议内容
用户可以提供:
- 会议录音转写文本
- 聊天记录导出
- 口头描述会议要点
### 2. 调用飞书文档工具
使用 `feishu_doc` 工具创建文档:
```json
{
"action": "create",
"title": "会议纪要 - {{会议主题}} - {{日期}}",
"folder_token": "{{文件夹 ID}}",
"owner_open_id": "{{用户 open_id}}"
}
3. 格式化文档内容
使用标准模板:
markdown
# {{会议主题}}
## 📅 基本信息
- **时间:** {{开始时间}} - {{结束时间}}
- **地点:** {{会议室/线上链接}}
- **参会人:** {{名单}}
- **记录人:** {{姓名}}
## 🎯 会议目标
{{目标描述}}
## 📝 讨论要点
### 议题一:{{标题}}
- 发言人:{{姓名}}
- 关键观点:
- 观点 1
- 观点 2
- 结论:{{结论}}
### 议题二:{{标题}}
...
## ✅ 行动项 (Action Items)
| 任务 | 负责人 | 截止日期 | 状态 |
|------|--------|----------|------|
| {{任务 1}} | {{姓名}} | {{日期}} | 待开始 |
| {{任务 2}} | {{姓名}} | {{日期}} | 进行中 |
## 📌 下次会议
- 时间:{{预定时间}}
- 议题:{{预定议题}}
---
*本纪要由 OpenClaw 自动生成*
4. 写入文档内容
json
{
"action": "write",
"doc_token": "{{文档 Token}}",
"content": "{{上述模板填充后的内容}}"
}
5. 设置提醒(可选)
使用 feishu_bitable 创建跟进任务:
json
{
"app_token": "{{任务管理 App Token}}",
"table_id": "{{表格 ID}}",
"fields": {
"任务名称": "{{任务描述}}",
"负责人": [{"id": "{{用户 ID}}"}],
"截止日期": {{时间戳}},
"状态": "待开始"
}
}
参考文档
注意事项
-
必须传入
owner_open_id,否则用户无法访问文档 -
行动项表格使用
create_table_with_values一步创建 -
长会议内容分批次写入,避免单次请求过大
Step 3: 创建参考文档
创建
references/meeting-template.md:markdown# 会议纪要模板规范 ## 标准结构 1. 基本信息(时间、地点、参会人) 2. 会议目标 3. 讨论要点(按议题分组) 4. 行动项(表格形式) 5. 下次会议安排 ## 格式化规则 ### 标题层级 - H1: 会议主题 - H2: 主要章节(基本信息、讨论要点、行动项) - H3: 子议题 ### 列表使用 - 无序列表:观点罗列 - 有序列表:流程步骤 - 任务列表:行动项 ### 表格规范 | 列名 | 必填 | 说明 | |------|------|------| | 任务 | ✅ | 具体行动描述 | | 负责人 | ✅ | @用户 | | 截止日期 | ✅ | YYYY-MM-DD | | 状态 | ✅ | 待开始/进行中/已完成 | ## 示例文档 https://xxx.feishu.cn/docx/ABC123example
Step 4: 创建辅助脚本(可选)
创建 scripts/format_minutes.py:
python
#!/usr/bin/env python3
"""
会议纪要格式化脚本
将原始文本转换为结构化 Markdown
"""
import sys
import re
from datetime import datetime
def parse_meeting_text(raw_text: str) -> dict:
"""解析会议文本,提取关键信息"""
result = {
'title': '',
'date': datetime.now().strftime('%Y-%m-%d'),
'attendees': [],
'topics': [],
'action_items': []
}
# 提取标题
title_match = re.search(r'会议主题 [::]\s*(.+)', raw_text)
if title_match:
result['title'] = title_match.group(1).strip()
# 提取参会人
attendees_match = re.search(r'参会人 [::]\s*(.+)', raw_text)
if attendees_match:
attendees_str = attendees_match.group(1)
result['attendees'] = [
name.strip()
for name in re.split(r'[,,]', attendees_str)
]
# 提取议题
topic_pattern = r'(?:议题 | 话题)[\d]*[::]\s*(.+?)(?=\n\n|\n(?:议题 | 话题)|$)'
topics = re.findall(topic_pattern, raw_text, re.DOTALL)
result['topics'] = [t.strip() for t in topics]
# 提取行动项
action_pattern = r'([@]?\w+)[::]\s*(.+?)(?:\n|$)'
actions = re.findall(action_pattern, raw_text)
for person, task in actions:
if any(kw in task.lower() for kw in ['负责', '跟进', '完成', '处理']):
result['action_items'].append({
'owner': person,
'task': task.strip()
})
return result
def generate_markdown(data: dict) -> str:
"""生成 Markdown 格式会议纪要"""
md = f"# {data['title']}\n\n"
md += f"## 📅 基本信息\n"
md += f"- **时间:** {data['date']}\n"
md += f"- **参会人:** {', '.join(data['attendees'])}\n\n"
md += "## 📝 讨论要点\n\n"
for i, topic in enumerate(data['topics'], 1):
md += f"### 议题{i}: {topic}\n\n"
md += "## ✅ 行动项\n\n"
md += "| 任务 | 负责人 | 状态 |\n"
md += "|------|--------|------|\n"
for item in data['action_items']:
md += f"| {item['task']} | {item['owner']} | 待开始 |\n"
return md
if __name__ == '__main__':
if len(sys.argv) < 2:
print("Usage: format_minutes.py <input_file>")
sys.exit(1)
with open(sys.argv[1], 'r', encoding='utf-8') as f:
raw_text = f.read()
data = parse_meeting_text(raw_text)
markdown = generate_markdown(data)
print(markdown)
Step 5: 测试技能
bash
# 查看技能文件结构
tree /root/.openclaw/extensions/feishu/skills/meeting-minutes/
# 预期输出:
# meeting-minutes/
# ├── SKILL.md
# ├── scripts/
# │ └── format_minutes.py
# └── references/
# └── meeting-template.md
SKILL.md 编写详解
YAML Frontmatter 规范
yaml
---
name: skill-name # 必需:技能名称(小写,连字符分隔)
description: | # 必需:触发描述
详细描述技能用途和触发场景。
包含:
- 技能做什么
- 何时使用(触发词/场景)
- 支持的功能列表
---
好的 description 示例
yaml
description: |
飞书文档操作技能。支持创建、读取、编辑、删除云文档。
使用场景:用户需要管理飞书文档时,如"创建一个周报文档"、
"读取会议纪要"、"更新项目计划"。支持 Markdown 格式、
表格创建、图片上传。
差的 description 示例 ❌
yaml
description: |
这是一个很好的技能,可以帮助你处理文档。
# 问题:太模糊,没有说明具体功能和触发场景
Body 内容组织
推荐结构
markdown
# 技能标题
## 功能概述
简要说明技能用途(100 字以内)
## 使用场景
- 场景 1:描述 + 示例用户请求
- 场景 2:描述 + 示例用户请求
## 工具调用
### 工具 1
```json
{ "action": "...", "params": "..." }
工具 2
...
工作流程
- 步骤一
- 步骤二
- 步骤三
参考文档
注意事项
⚠️ 重要提示...
### 编写最佳实践
#### ✅ 应该做的
1. **使用祈使句**
```markdown
✅ "调用 feishu_doc 工具创建文档"
❌ "你可以调用 feishu_doc 工具来创建文档"
-
提供具体示例
markdown✅ 示例: ```json { "action": "create", "title": "周报 - 2026-W10" } -
说明限制和边界
markdown⚠️ 注意:Markdown 表格不支持,使用 `create_table` 工具代替 -
引用参考文档
markdown详细 API 参数见 [飞书文档 API](references/api.md)
❌ 不应该做的
- 不要重复工具已有的说明
- 不要包含过时的信息
- 不要写长篇大论的理论
- 不要包含测试代码或调试信息
工具集成开发
理解现有工具
feishu_doc 工具
支持的操作:
| Action | 说明 | 示例 |
|---|---|---|
read |
读取文档 | {"action": "read", "doc_token": "ABC123"} |
write |
写入文档 | {"action": "write", "doc_token": "ABC123", "content": "# Title"} |
create |
创建文档 | {"action": "create", "title": "New Doc", "owner_open_id": "ou_xxx"} |
append |
追加内容 | {"action": "append", "doc_token": "ABC123", "content": "..."} |
list_blocks |
列出块 | {"action": "list_blocks", "doc_token": "ABC123"} |
create_table |
创建表格 | {"action": "create_table", "doc_token": "ABC123", "row_size": 3, "column_size": 2} |
upload_image |
上传图片 | {"action": "upload_image", "doc_token": "ABC123", "url": "https://..."} |
完整参数参考:
json
{
"action": "create",
"title": "文档标题",
"folder_token": "文件夹 ID(可选)",
"owner_open_id": "用户 open_id(必需)"
}
feishu_drive 工具
支持的操作:
| Action | 说明 | 示例 |
|---|---|---|
list |
列出文件夹 | {"action": "list", "folder_token": "fld_xxx"} |
info |
获取文件信息 | {"action": "info", "file_token": "ABC123", "type": "docx"} |
create_folder |
创建文件夹 | {"action": "create_folder", "name": "New Folder"} |
move |
移动文件 | {"action": "move", "file_token": "ABC123", "folder_token": "fld_xxx"} |
delete |
删除文件 | {"action": "delete", "file_token": "ABC123", "type": "docx"} |
⚠️ 重要限制: 机器人没有根文件夹概念,只能访问已共享的文件夹。
feishu_wiki 工具
Wiki-文档工作流:
1. 获取 Wiki 节点 → feishu_wiki { action: "get", token: "wiki_xxx" }
↓ 返回 obj_token
2. 读取文档内容 → feishu_doc { action: "read", doc_token: "obj_token" }
↓ 获取内容
3. 编辑文档 → feishu_doc { action: "write", doc_token: "obj_token", content: "..." }
工具调用模式
模式 1:单次调用
json
{
"action": "read",
"doc_token": "ABC123"
}
模式 2:链式调用
json
// 步骤 1: 创建文档
{
"action": "create",
"title": "新文档",
"owner_open_id": "ou_xxx"
}
// → 返回 doc_token
// 步骤 2: 写入内容
{
"action": "write",
"doc_token": "返回的 token",
"content": "# 内容"
}
// 步骤 3: 创建表格
{
"action": "create_table",
"doc_token": "返回的 token",
"row_size": 3,
"column_size": 2
}
模式 3:条件调用
markdown
## 读取流程
1. 先用 `action: "read"` 获取纯文本
2. 检查响应中的 `block_types` 字段
3. 如果包含 "table" 或 "image",使用 `action: "list_blocks"` 获取完整数据
进阶技能开发
案例 1:项目周报自动生成
需求: 每周五自动收集团队成员的工作汇报,生成结构化周报文档。
Skill 设计:
markdown
---
name: weekly-report-generator
description: |
周报自动生成技能。使用场景:收集团队成员工作汇报、
生成结构化周报文档、统计项目进度、@相关人员提醒提交。
触发词:"周报"、"weekly report"、"工作总结"
---
# 周报生成器
## 工作流程
### 1. 收集汇报内容
从以下来源收集:
- 飞书群聊消息(关键词:"本周工作"、"已完成")
- 多维表格(任务完成记录)
- 用户直接输入
### 2. 分类整理
按以下维度分类:
- ✅ 已完成任务
- 🔄 进行中任务
- ⚠️ 风险/问题
- 📅 下周计划
### 3. 创建周报文档
```json
{
"action": "create",
"title": "团队周报 - {{年份}}W{{周数}}",
"folder_token": "fld_team_reports",
"owner_open_id": "{{manager_open_id}}"
}
4. 格式化内容
markdown
# 团队周报 - {{年份}}W{{周数}}
## 📊 本周概览
- 完成任务:{{数量}}
- 进行中:{{数量}}
- 风险项:{{数量}}
## ✅ 已完成
{{完成列表}}
## 🔄 进行中
{{进行列表}}
## ⚠️ 风险与问题
{{风险列表}}
## 📅 下周计划
{{计划列表}}
---
生成时间:{{时间戳}}
5. 发送通知
使用 feishu 消息工具发送到管理群:
json
{
"channel": "feishu",
"target": "oc_management_group",
"message": "本周周报已生成:{{文档链接}}"
}
### 案例 2:知识库自动维护
**需求:** 自动整理项目文档,维护知识库结构。
**Skill 设计:**
```markdown
---
name: wiki-organizer
description: |
知识库整理技能。使用场景:整理项目文档、维护 Wiki 结构、
迁移过时内容、创建索引页面。
触发词:"整理知识库"、"更新 Wiki"、"文档归档"
---
# 知识库整理助手
## 核心功能
### 1. 扫描知识库结构
```json
{
"action": "spaces"
}
// → 返回所有空间列表
{
"action": "nodes",
"space_id": "7xxx"
}
// → 返回节点树
2. 识别问题
检查项:
- 孤立页面(无父节点)
- 过时内容(超过 90 天未更新)
- 重复页面(标题相似度>80%)
- 死链(引用不存在的文档)
3. 生成整理报告
创建临时文档列出问题:
json
{
"action": "create",
"title": "知识库整理报告 - {{日期}}",
"owner_open_id": "{{user_id}}"
}
4. 执行整理
根据用户确认执行:
-
移动节点到新位置
-
重命名冲突页面
-
删除重复内容
-
更新索引页
案例 3:权限批量管理
需求: 新项目启动时,批量设置文档权限。
Skill 设计:
markdown--- name: permission-manager description: | 权限批量管理技能。使用场景:新项目权限初始化、 离职员工权限回收、跨部门文档共享。 触发词:"设置权限"、"共享文档"、"权限管理" --- # 权限管理器 ## 权限模板 ### 项目模板 | 角色 | 权限级别 | 范围 | |------|----------|------| | 项目经理 | full_access | 全部文档 | | 核心成员 | edit_access | 负责模块 | | 普通成员 | read_access | 公共文档 | | 外部顾问 | read_access | 指定文档 | ## 批量操作流程 ### 1. 准备人员列表 从飞书联系人获取: ```json { "action": "members", "chat_id": "oc_project_group" }
2. 应用权限模板
对每个文档执行:
json
{
"action": "update_perm",
"doc_token": "{{文档 token}}",
"user_id": "{{用户 ID}}",
"permission": "edit_access"
}
3. 验证结果
抽样检查权限是否正确应用。
---
## 调试与测试
### 本地测试方法
#### 方法 1:模拟用户请求
```bash
# 在 OpenClaw 中测试
openclaw chat "帮我创建一个会议纪要文档,主题是项目启动会"
观察:
- Skill 是否正确触发
- 工具调用参数是否正确
- 返回结果是否符合预期
方法 2:查看日志
bash
# 实时查看日志
tail -f /tmp/openclaw/openclaw-2026-03-11.log | grep -i "skill"
# 筛选特定技能
grep "meeting-minutes" /tmp/openclaw/openclaw-2026-03-11.log
方法 3:使用调试模式
bash
# 启用详细日志
export OPENCLAW_LOG_LEVEL=debug
openclaw gateway restart
常见问题排查
问题 1: Skill 不触发
症状: 用户提到相关关键词,但 Skill 未激活
排查步骤:
bash
# 1. 检查 SKILL.md 的 description
cat /root/.openclaw/extensions/feishu/skills/your-skill/SKILL.md | head -10
# 2. 确认描述中包含触发词
# description 应该包含:"会议纪要"、"meeting" 等关键词
# 3. 查看日志确认触发
grep "skill.*trigger" /tmp/openclaw/openclaw-*.log
解决方案:
yaml
# 修改 description,增加触发词
description: |
会议纪要生成技能。触发词:会议纪要、会议总结、
meeting minutes、整理会议、周报生成
问题 2: 工具调用失败
症状: Skill 触发但工具返回错误
排查步骤:
bash
# 查看工具调用日志
grep "feishu_doc" /tmp/openclaw/openclaw-*.log | tail -20
# 检查返回错误
grep "error" /tmp/openclaw/openclaw-*.log | tail -10
常见错误:
| 错误信息 | 原因 | 解决方案 |
|---|---|---|
invalid_doc_token |
Token 格式错误 | 检查 URL 提取逻辑 |
permission_denied |
权限不足 | 确认用户已授权 |
rate_limit_exceeded |
请求超限 | 添加延迟或重试 |
owner_open_id required |
缺少必需参数 | 从元数据获取用户 ID |
问题 3: 文档创建后无法访问
症状: 文档创建成功,但用户看不到
原因: 未设置 owner_open_id
解决方案:
json
// ❌ 错误
{
"action": "create",
"title": "新文档"
}
// ✅ 正确
{
"action": "create",
"title": "新文档",
"owner_open_id": "ou_36d97b69edad87978b74341b96900607"
}
从 inbound metadata 获取用户 ID:
javascript
// 在 Skill 中说明
// 从 sender_id 或 user_open_id 字段获取
性能优化
1. 减少上下文占用
markdown
# ❌ 冗长版本(占用大量 token)
## 什么是飞书文档
飞书文档是飞书提供的一款在线协作文档工具,
支持多人实时编辑、评论、版本历史等功能。
它可以帮助团队高效协作...
# ✅ 简洁版本
飞书文档:在线协作文档工具,支持多人编辑、评论。
2. 使用参考文档
将详细内容移到 references/ 目录:
markdown
# SKILL.md 中
详细 API 参数见 [API 文档](references/api.md)
# references/api.md 中
(详细内容,不占用主上下文)
3. 脚本代替说明
markdown
# ❌ 用文字描述复杂逻辑
首先获取 A,然后判断 B,如果 B 为真则...
# ✅ 提供脚本
执行 `scripts/process.py` 处理逻辑
发布与分享
打包技能
bash
# 使用打包脚本
python3 /home/dongwei/openclaw/scripts/package_skill.py \
/root/.openclaw/extensions/feishu/skills/meeting-minutes
输出:
✅ Validation passed
✅ Packaged to: meeting-minutes.skill
验证打包结果
bash
# 查看打包文件
ls -lh meeting-minutes.skill
# 解压查看内容
unzip -l meeting-minutes.skill
分享给社区
方式 1: GitHub 发布
- Fork OpenClaw 仓库
- 将技能添加到
skills/目录 - 提交 Pull Request
- 等待审核合并
方式 2: 直接分享
bash
# 发送 .skill 文件给用户
# 用户解压到 ~/.openclaw/skills/ 目录
版本管理
在 SKILL.md 中添加版本信息:
markdown
---
name: meeting-minutes
version: 1.0.0
changelog: |
v1.0.0 - 初始版本
- 支持会议纪要生成
- 支持行动项表格创建
- 支持@参会人员
---
最佳实践
设计原则
1. 单一职责
每个 Skill 只解决一类问题:
markdown
✅ meeting-minutes - 专注会议纪要
✅ weekly-report - 专注周报生成
✅ permission-manager - 专注权限管理
❌ all-in-one - 什么都能做但都不精
2. 渐进式披露
markdown
# SKILL.md 保持简洁(<500 行)
核心流程 + 关键示例
# references/ 存放详情
- api-reference.md
- templates.md
- troubleshooting.md
3. 容错设计
markdown
## 错误处理
如果文档已存在:
1. 提示用户是否覆盖
2. 或追加时间戳创建新版本
如果用户无权限:
1. 明确告知缺少的权限
2. 提供申请权限的链接
命名规范
bash
# 技能名称
✅ meeting-minutes
✅ weekly-report
✅ permission-manager
❌ MeetingMinutes # 不要驼峰
❌ meeting_minutes # 不要下划线
❌ 会议纪要 # 不要中文
文档结构
skill-name/
├── SKILL.md # <500 行,核心逻辑
├── scripts/ # 可执行脚本
│ └── processor.py # 复杂逻辑脚本化
├── references/ # 参考文档
│ ├── api.md # API 详细说明
│ ├── templates.md # 模板集合
│ └── examples.md # 使用示例
└── assets/ # 资源文件
└── template.docx # 文档模板
测试清单
在发布前检查:
- SKILL.md 语法正确
- YAML frontmatter 格式正确
- 所有引用的参考文档存在
- 脚本可执行且无错误
- 工具调用参数完整
- 错误处理逻辑完善
- 示例可正常运行
- 文档无拼写错误
常见问题
Q1: Skill 和 Tool 有什么区别?
A:
- Tool 是底层 API 封装,提供具体操作能力
- Skill 是业务场景指导,告诉 AI 何时及如何使用 Tool
例如:
feishu_doc(Tool) - 提供create,read,write等操作meeting-minutes(Skill) - 指导 AI 在用户需要会议纪要时调用feishu_doc.create()
Q2: 如何调试 Skill 触发问题?
A:
bash
# 1. 启用调试日志
export OPENCLAW_LOG_LEVEL=debug
# 2. 查看触发日志
grep "skill.*trigger\|skill.*load" /tmp/openclaw/openclaw-*.log
# 3. 检查 description 是否包含触发词
cat SKILL.md | grep -A5 "description"
Q3: 技能文件应该放在哪里?
A:
推荐位置:
/root/.openclaw/extensions/feishu/skills/your-skill/
也可以放在:
/root/.openclaw/skills/your-skill/
Q4: 如何引用外部 API 文档?
A:
使用 references/ 目录:
markdown
# SKILL.md 中
详见 [飞书 API 文档](references/feishu-api.md)
# references/feishu-api.md
(粘贴或整理 API 文档内容)
Q5: Skill 会影响性能吗?
A:
- 未触发时: 只加载 ~100 字的 metadata,几乎无影响
- 触发后: 加载完整 SKILL.md,占用上下文
- 优化方法: 使用 references 分流详细内容
Q6: 可以调用外部 API 吗?
A:
可以,通过 scripts/ 中的脚本:
python
# scripts/fetch-data.py
import requests
response = requests.get('https://api.example.com/data')
print(response.json())
在 Skill 中说明:
markdown
执行 `scripts/fetch-data.py` 获取外部数据
附录
附录 A: 完整 Skill 示例
查看完整示例:
bash
cat /root/.openclaw/extensions/feishu/skills/feishu-doc/SKILL.md
附录 B: 飞书 API 速查
| 操作 | Tool | Action | 必需参数 |
|---|---|---|---|
| 创建文档 | feishu_doc | create | title, owner_open_id |
| 读取文档 | feishu_doc | read | doc_token |
| 写入文档 | feishu_doc | write | doc_token, content |
| 创建表格 | feishu_doc | create_table | doc_token, row_size, column_size |
| 列出文件 | feishu_drive | list | (可选 folder_token) |
| 创建文件夹 | feishu_drive | create_folder | name |
| 获取 Wiki | feishu_wiki | get | token |
| 创建节点 | feishu_wiki | create | space_id, title |
附录 C: 工具命令
bash
# 查看已加载的技能
openclaw skills list
# 查看工具列表
openclaw tools list
# 测试技能触发
openclaw chat "帮我创建一个文档"
# 查看日志
tail -f /tmp/openclaw/openclaw-*.log
附录 D: 参考资源
| 资源 | 链接 |
|---|---|
| OpenClaw 官方文档 | https://docs.openclaw.ai |
| 飞书开放平台 | https://open.feishu.cn |
| Skill Creator 指南 | /home/dongwei/openclaw/skills/skill-creator/SKILL.md |
| 飞书插件源码 | /root/.openclaw/extensions/feishu/ |
| 示例 Skills | /root/.openclaw/extensions/feishu/skills/ |
本教程最后更新:2026-03-11
基于 OpenClaw 2026.3.3 编写