Sources: ~/.openclaw/skills, ~/.agents/skills, workshop-skills, workspace/skills
122 lines
3.8 KiB
Markdown
122 lines
3.8 KiB
Markdown
---
|
||
name: "feishu-wiki-tools"
|
||
description: "读写飞书知识库:增删查改节点、写入页面、创建早报、记录踩坑,基于 tenant_access_token。"
|
||
metadata:
|
||
author: xf
|
||
version: "1.0.0"
|
||
---
|
||
|
||
# Feishu Wiki Tools
|
||
|
||
飞书知识库读写操作。所有脚本使用 `tenant_access_token`,从 `~/.openclaw/openclaw.json` 读取凭证。
|
||
|
||
## 前置条件
|
||
|
||
- 飞书应用已开通 `wiki:wiki docx:document` 权限
|
||
- 机器人已加入目标知识库并获 `full_access`(参考 `references/auth.md`)
|
||
- 服务器可访问飞书 API
|
||
|
||
## 环境变量
|
||
|
||
| 变量 | 默认值 | 说明 |
|
||
|------|--------|------|
|
||
| `FEISHU_SPACE_ID` | `7664817589230570761` | 知识库 Space ID |
|
||
| `FEISHU_ROOT_NODE` | `LY5wwNWpniOoFwkHHG4cmDvGnSh` | 首页 node token |
|
||
| `FEISHU_DIGEST_PARENT` | `BH8AwLgJhipBcUkehCAcyKvDngE` | 早报父节点 |
|
||
| `FEISHU_SUMMARY_PARENT` | `XunCwlk7JiSTuAkvoKlcq54pnPb` | 每日总结父节点 |
|
||
|
||
## 通用脚本(CRUD)
|
||
|
||
### 初始化 Token
|
||
|
||
```bash
|
||
source scripts/init_token.sh
|
||
```
|
||
设置 `BEARER_TOKEN` 环境变量。其他脚本会自动调用。
|
||
|
||
### 列节点
|
||
|
||
```bash
|
||
python3 scripts/wiki_list.py [parent_node_token]
|
||
```
|
||
不传 parent 则列根目录。
|
||
|
||
### 创建节点
|
||
|
||
```bash
|
||
python3 scripts/wiki_create.py --title "标题" --parent "PARENT_TOKEN" [--obj-type docx]
|
||
```
|
||
|
||
### 读取页面
|
||
|
||
```bash
|
||
python3 scripts/wiki_read.py --node "NODE_TOKEN"
|
||
```
|
||
输出纯文本内容到 stdout。
|
||
|
||
### 写入页面
|
||
|
||
```bash
|
||
python3 scripts/wiki_write.py --node "NODE_TOKEN" --file content.md
|
||
```
|
||
支持 Markdown 转换。
|
||
|
||
> ✅ **表格支持**:`md_to_blocks.py` **完整支持 Markdown 表格语法**(`| ... |`),会转换为飞书原生表格 block(31)+ 单元格 block(32),由 `wiki_write.py` 自动走 descendant API 创建。直接写表格即可,无需改用列表。
|
||
> (2026-08-11 更正:旧版文档误写「不支持表格」,已核实源码 `parse_table()` 完整实现表头/分隔线/行列构建,特此修正。)
|
||
|
||
### 删除页面
|
||
|
||
```bash
|
||
python3 scripts/wiki_delete.py --node "NODE_TOKEN"
|
||
```
|
||
移到回收站(需 `space:document:delete` 权限)。
|
||
|
||
## 特化脚本
|
||
|
||
### 创建早报
|
||
|
||
```bash
|
||
python3 scripts/create_digest.py --title "07.21 周二 早报" --content content.md
|
||
```
|
||
自动挂到 `FEISHU_DIGEST_PARENT` 按周分组下。
|
||
|
||
### 创建方案(方案库)
|
||
|
||
```bash
|
||
python3 scripts/create_plan.py --title "方案标题" --content plan.md
|
||
```
|
||
自动挂到「📋 方案库」节点(`LjXOwVZkriKmQwkjoixcnrSbnhd`);同名节点已存在则跳过不重复创建。
|
||
|
||
### 记录踩坑
|
||
|
||
```bash
|
||
python3 scripts/create_pitfall.py --title "标题" --file content.md
|
||
```
|
||
自动挂到 `踩坑记录合集` 节点下。
|
||
|
||
### 创建每日总结
|
||
|
||
```bash
|
||
python3 scripts/create_summary.py --title "07.21 周二 总结" --content summary.md
|
||
```
|
||
自动挂到 `FEISHU_SUMMARY_PARENT`(🌙 每日总结)下。内容精简,仅含当日「晚星今日动态」。
|
||
|
||
## Block 类型速查
|
||
|
||
- 3=heading1, 4=heading2, 5=heading3
|
||
- 2=text, 12=bullet, 22=divider, 14=code
|
||
- 写入时支持 Markdown → Block 转换(`scripts/md_to_blocks.py`)
|
||
|
||
## 早报模板渲染注意事项(踩坑)
|
||
|
||
`project/morning-digest-skill/templates/digest.md` 由 `scripts/build.py` 用 Jinja2 渲染,环境为 `trim_blocks=True, lstrip_blocks=True`(见 build.py)。因此:
|
||
|
||
- **别用 `{% if %}`/`{% endif %}` 块做行内条件**(如 `{% if item.summary %}:{{ item.summary }}{% endif %}`):trim_blocks 会把该行末尾的换行一起吃掉,导致下一条目粘连到同一行。
|
||
- **改用内联表达式**:`{{ ':' ~ item.summary if item.summary else '' }}`,换行保留、每条独立成行。渲染后务必核对是否有条目挤在一行。
|
||
|
||
## 参考
|
||
|
||
- `references/auth.md` — 鉴权配置完整流程
|
||
- `references/block_types.md` — Docx Block API 参考
|
||
- `references/api_endpoints.md` — Feishu API 端点速查
|