FEISHU_APP_ID + FEISHU_APP_SECRET,或 ~/.feishu-cli/config.yaml)board:whiteboard(画板读写)和 docx:document(文档中添加画板)feishu-cli auth status 确认认证状态正常在飞书文档中创建画板并绘制可视化图表。支持两种模式:
模式方式适用场景精排绘图board create-notes — JSON 描述节点坐标、颜色、连线架构图、看板、自定义布局图表导入board import — Mermaid/PlantUML 代码自动渲染标准流程图、时序图等 8 种图表
需求推荐方式说明精确控制节点位置、颜色、坐标board create-notes(本技能)完全自定义布局,适合架构图、看板从 Mermaid/PlantUML 代码快速生成图board import 或 doc import服务端自动排版,无需手动计算坐标在文档中内嵌简单图表feishu-cli-write / feishu-cli-import 的 Mermaid 支持Markdown 中写 Mermaid 代码块,导入时自动转画板
简单判断:如果你只需要"画个流程图"且不关心精确坐标,优先用 Mermaid;如果需要"精排"或"自定义配色布局",用 create-notes。
这是画板的核心能力,通过 JSON 精确控制每个节点的位置、大小、颜色和连线。
bash
# 1. 创建文档(或使用已有文档)
feishu-cli doc create --title "架构图" -o json
# → document_id
# 2. 在文档中添加画板
feishu-cli doc add-board <document_id> -o json
# → whiteboard_id
# 3. 创建节点(先形状,再连接线)
feishu-cli board create-notes <whiteboard_id> shapes.json -o json
# → node_ids(用于连接线引用)
feishu-cli board create-notes <whiteboard_id> connectors.json -o json
# 4. 截图验证
feishu-cli board image <whiteboard_id> output.png
关键原则:先创建所有形状节点获取 ID,再创建连接线引用这些 ID。
在深入 JSON 格式细节之前,先看一个最小的完整示例——两个矩形节点通过一条箭头连接:
bash
# shapes.json — 两个形状节点
cat > /tmp/minimal_shapes.json << 'EOF'
[
{"type":"composite_shape","x":100,"y":100,"width":160,"height":40,
"composite_shape":{"type":"round_rect"},
"text":{"text":"服务 A","font_size":14,"font_weight":"regular","horizontal_align":"center","vertical_align":"mid"},
"style":{"fill_color":"#3399ff","fill_opacity":100,"border_style":"none"},
"z_index":10},
{"type":"composite_shape","x":400,"y":100,"width":160,"height":40,
"composite_shape":{"type":"round_rect"},
"text":{"text":"服务 B","font_size":14,"font_weight":"regular","horizontal_align":"center","vertical_align":"mid"},
"style":{"fill_color":"#509863","fill_opacity":100,"border_style":"none"},
"z_index":10}
]
EOF
feishu-cli board create-notes $BOARD_ID /tmp/minimal_shapes.json -o json
# → 返回 node_ids: ["o1:1", "o1:2"]
# connector.json — 一条从服务 A 指向服务 B 的连线
cat > /tmp/minimal_connector.json << 'EOF'
[
{"type":"connector","width":1,"height":1,"z_index":50,
"connector":{"shape":"polyline",
"start":{"arrow_style":"none","attached_object":{"id":"o1:1","position":{"x":1,"y":0.5},"snap_to":"right"}},
"end":{"arrow_style":"triangle_arrow","attached_object":{"id":"o1:2","position":{"x":0,"y":0.5},"snap_to":"left"}}},
"style":{"border_color":"#646a73","border_opacity":100,"border_style":"solid","border_width":"narrow"}}
]
EOF
feishu-cli board create-notes $BOARD_ID /tmp/minimal_connector.json -o json
这就是 create-notes 的基本模式: 形状定义位置和样式 → 连接线通过 ID 引用形状。下面是各字段的详细说明。
最常用的节点类型,支持矩形、圆角矩形等:
json
{
"type": "composite_shape",
"x": 100, "y": 100, "width": 200, "height": 50,
"composite_shape": {"type": "round_rect"},
"text": {
"text": "节点文本",
"font_size": 14,
"font_weight": "regular",
"horizontal_align": "center",
"vertical_align": "mid"
},
"style": {
"fill_color": "#8569cb",
"fill_opacity": 100,
"border_style": "none"
},
"z_index": 10
}
注意:多余字段会导致 2890002 invalid arg 错误,保持最小格式。
连接两个已创建的形状节点:
json
{
"type": "connector",
"width": 1, "height": 1, "z_index": 50,
"connector": {
"shape": "polyline",
"start": {
"arrow_style": "none",
"attached_object": {
"id": "<source_node_id>",
"position": {"x": 1, "y": 0.5},
"snap_to": "right"
}
},
"end": {
"arrow_style": "triangle_arrow",
"attached_object": {
"id": "<target_node_id>",
"position": {"x": 0, "y": 0.5},
"snap_to": "left"
}
}
},
"style": {
"border_color": "#646a73",
"border_opacity": 100,
"border_style": "solid",
"border_width": "narrow"
}
}
方向start positionstart snap_toend positionend snap_to→ 左到右{x:1, y:0.5}``right``{x:0, y:0.5}``left↓ 上到下{x:0.5, y:1}``bottom``{x:0.5, y:0}``top← 右到左{x:0, y:0.5}``left``{x:1, y:0.5}``right↑ 下到上{x:0.5, y:0}``top``{x:0.5, y:1}``bottom
position 是归一化坐标(0-1),表示节点边缘上的连接点位置。一个节点连多条线时,调整 position 避免重叠(如扇出: x:0.25、 x:0.5、 x:0.75)。
为不同实体类型使用不同颜色,让图表一目了然:
用途填充色边框色适用对象强调/标题#8569cb—核心服务、标题栏紫色辅助#eae2fe``#8569cbAPI、中间层绿色正向#509863—成功、输出、完成绿色辅助#d5e8d4``#509863处理步骤蓝色服务#3399ff—主服务、入口蓝色辅助#cce5ff``#3399ff子服务、组件橙色并发#ffc285—并发处理、Worker橙色辅助#fff0e3``#ffc285并发子任务红色告警#ef4444—错误、降级、告警红色辅助#ffe0e0``#ef4444容错处理灰色输入#f5f5f5``#616161用户、外部输入连接线—#646a73普通连线
z_index用途fill_opacity0-1背景色带(分区底色)≤25%2-3次级区域≤60%10常规形状节点100%50连接线border_opacity=100
背景色带 fill_opacity 必须 ≤60%,否则遮挡上层节点。
绘制复杂图表时的布局规划方法:
bash
# 从 JSON 文件(推荐,复杂图表)
feishu-cli board create-notes <whiteboard_id> nodes.json -o json
# 内联 JSON(简单场景)
feishu-cli board create-notes <whiteboard_id> '<json_array>' --source-type content -o json
将 Mermaid 或 PlantUML 代码自动渲染为飞书画板(服务端排版):
bash
# 从内容导入 Mermaid
feishu-cli board import <whiteboard_id> \
--source-type content \
-c "graph TD; A-->B-->C" \
--syntax mermaid
# 从文件导入 PlantUML
feishu-cli board import <whiteboard_id> diagram.puml --syntax plantuml
# 指定图表类型(通常 auto 即可)
feishu-cli board import <whiteboard_id> diagram.mmd --syntax mermaid --diagram-type 6
类型声明diagram-type流程图flowchart TD6时序图sequenceDiagram2类图classDiagram4状态图stateDiagram-v20 (auto)ER 图erDiagram5甘特图gantt0 (auto)饼图pie0 (auto)思维导图mindmap1
{text}(被识别为菱形节点)par...and...end(飞书不支持)bash
# 下载画板为 PNG 图片
feishu-cli board image <whiteboard_id> output.png
# 获取画板所有节点(JSON)
feishu-cli board nodes <whiteboard_id>
# 在文档中添加空画板
feishu-cli doc add-board <document_id> -o json
画板 API 不支持修改或删除已有节点,修改需要重建:
board nodes 导出原始节点id、 locked、 children、 text_color_type、 fill_color_type、 border_color_type、 start_object/ end_object)详细的清洗字段列表和 Redraw 流程见 references/node-api.md。
权限说明board:whiteboard画板读写docx:document文档中添加画板
错误码含义常见原因2890001invalid formatJSON 格式错误2890002invalid arg包含未公开字段(如 sticky_note 类型)或格式不对2890003record missingwhiteboard_id 不存在2890006rate limited超过 50 req/s
2890002 invalid arg(最常见):
JSON 中包含了 API 不支持的字段。只使用以下安全字段:
composite_shape 节点: type, x, y, width, height, composite_shape, text, style, z_indexconnector 节点: type, width, height, z_index, connector, styletext 对象: text, font_size, font_weight, horizontal_align, vertical_alignstyle 对象: fill_color, fill_opacity, border_style, border_color, border_width, border_opacity排查步骤:逐步删减 JSON 字段,定位导致错误的多余字段。常见陷阱包括 id、 locked、 children、 text_color_type 等只读字段。
画板创建失败:
board:whiteboard 权限whiteboard_id 来自 doc add-board 的返回值,而非 document_idfeishu-cli auth status 确认 Token 有效Mermaid 导入降级为代码块:
--verbose 查看具体的服务端错误信息{text}、 par...and...end 语法、参与者过多(>8)bash
# 1. 创建文档和画板
DOC_ID=$(feishu-cli doc create --title "架构图" -o json | python3 -c "import sys,json;print(json.load(sys.stdin)['document_id'])")
BOARD_ID=$(feishu-cli doc add-board $DOC_ID -o json | python3 -c "import sys,json;print(json.load(sys.stdin)['whiteboard_id'])")
# 2. 创建形状节点
cat > /tmp/shapes.json << 'EOF'
[
{"type":"composite_shape","x":50,"y":50,"width":150,"height":40,
"composite_shape":{"type":"round_rect"},
"text":{"text":"客户端","font_size":14,"font_weight":"regular","horizontal_align":"center","vertical_align":"mid"},
"style":{"fill_color":"#f5f5f5","fill_opacity":100,"border_style":"solid","border_color":"#616161","border_width":"narrow"},
"z_index":10},
{"type":"composite_shape","x":300,"y":50,"width":150,"height":40,
"composite_shape":{"type":"round_rect"},
"text":{"text":"API 网关","font_size":14,"font_weight":"bold","horizontal_align":"center","vertical_align":"mid"},
"style":{"fill_color":"#3399ff","fill_opacity":100,"border_style":"none"},
"z_index":10},
{"type":"composite_shape","x":550,"y":50,"width":150,"height":40,
"composite_shape":{"type":"round_rect"},
"text":{"text":"数据库","font_size":14,"font_weight":"regular","horizontal_align":"center","vertical_align":"mid"},
"style":{"fill_color":"#509863","fill_opacity":100,"border_style":"none"},
"z_index":10}
]
EOF
feishu-cli board create-notes $BOARD_ID /tmp/shapes.json -o json
# → 返回 node_ids: ["o1:1", "o1:2", "o1:3"]
# 3. 创建连接线(引用上面返回的 ID)
cat > /tmp/connectors.json << 'EOF'
[
{"type":"connector","width":1,"height":1,"z_index":50,
"connector":{"shape":"polyline",
"start":{"arrow_style":"none","attached_object":{"id":"o1:1","position":{"x":1,"y":0.5},"snap_to":"right"}},
"end":{"arrow_style":"triangle_arrow","attached_object":{"id":"o1:2","position":{"x":0,"y":0.5},"snap_to":"left"}}},
"style":{"border_color":"#646a73","border_opacity":100,"border_style":"solid","border_width":"narrow"}},
{"type":"connector","width":1,"height":1,"z_index":50,
"connector":{"shape":"polyline",
"start":{"arrow_style":"none","attached_object":{"id":"o1:2","position":{"x":1,"y":0.5},"snap_to":"right"}},
"end":{"arrow_style":"triangle_arrow","attached_object":{"id":"o1:3","position":{"x":0,"y":0.5},"snap_to":"left"}}},
"style":{"border_color":"#646a73","border_opacity":100,"border_style":"solid","border_width":"narrow"}}
]
EOF
feishu-cli board create-notes $BOARD_ID /tmp/connectors.json -o json
# 4. 截图验证
feishu-cli board image $BOARD_ID /tmp/architecture.png
节点类型完整字段、connector 高级参数、Redraw 清洗字段等详细信息见 references/node-api.md。