Files
karuo-ai/02_卡人(水)/水桥_平台对接/飞书管理/参考资料/飞书JSON格式全手册.md

651 lines
22 KiB
Markdown
Raw Normal View History

# 飞书 JSON 格式全手册
> 基于项目 52 个 `.feishu.json` 实际文件 + 6 个脚本验证 + 飞书开放平台官方文档。
> **版本2.1** | **更新2026-02-22**
> 来源卡若AI 水桥 · 飞书管理
> v2.2 新增:表格列宽 150~520px、表头/首列加粗、首尾去掉 callout、--no-callouts。v2.1:表格列宽 API、code/callout 降级
---
## 零、标准操作流程SOP · 强制)
**以后所有飞书相关文档,均按本手册格式写、转、传。**
### SOP-A写新文档 → 上传飞书
```
1. 先在本地写 Markdown推荐
2. 转成 .feishu.json
python3 脚本/md_to_feishu_json.py /path/to/文章.md
3. 上传到飞书 Wiki
python3 脚本/upload_json_to_feishu_doc.py /path/to/文章.feishu.json --parent <wiki_token> --title "标题"
4. 验证:打开飞书链接检查格式
```
### SOP-BMarkdown 直传(不经 JSON
```
python3 脚本/feishu_article_unified_publish.py --parent <token> --title "标题" --md /绝对路径/文章.md
```
### SOP-C批量目录上传
```
python3 脚本/batch_upload_json_to_feishu_wiki.py /本地目录 --wiki-parent <token>
```
### SOP-D飞书导出 JSON 按原格式回传
```
python3 脚本/upload_json_to_feishu_doc.py /path/to/导出.json
```
### Token 出问题时
```bash
python3 脚本/feishu_token_cli.py get-access-token
python3 脚本/feishu_token_cli.py set-march-token <新token>
```
---
## 一、JSON 文件顶层结构
```json
{
"title": "文档标题.md",
"source": "相对来源路径/文档标题.md",
"children": [ 块1, 块2, ... ]
}
```
| 字段 | 说明 |
|:---|:---|
| `title` | 上传后显示的文档标题 |
| `source` | 本地来源路径(可选,追踪用) |
| `children` | 块数组,顺序即文档顺序 |
**写入 API 时**:只传 `children`;块内不带 `block_id`(服务端生成)。
---
## 二、block_type 完整对照表v2.0 · 已验证)
### 2.1 已验证可写入的块类型(生产代码验证)
| block_type | 类型 | JSON 字段名 | 说明 | 验证来源 |
|:---|:---|:---|:---|:---|
| 1 | 页面根节点 | `page` | 根节点,不通过 children 创建 | 导出 |
| 2 | **正文** | `text` | 最常用,支持富文本 | 脚本+导出 |
| 3 | 一级标题 | `heading1` | `#` | md_to_feishu_json.py |
| 4 | 二级标题 | `heading2` | `##` | 脚本+导出 |
| 5 | 三级标题 | `heading3` | `###` | 脚本+导出 |
| 6 | 四级标题 | `heading4` | `####`,日志日期专用 | 脚本+导出 |
| 7 | 五级标题 | `heading5` | `#####` | API 文档 |
| 8 | 六级标题 | `heading6` | `######` | API 文档 |
| 9-11 | 七~九级标题 | `heading7`~`heading9` | 极少用 | API 文档 |
| 14 | **代码块** | `code` | 支持多语言高亮 | 脚本+导出 |
| 17 | **待办** | `todo` | 可勾选任务 | 脚本+导出 |
| 19 | **高亮块/标注** | `callout` | 带颜色背景区块 | 脚本+导出 |
| 22 | **分割线** | `divider` | 水平线 | 脚本+导出 |
| 24 | **分栏** | `grid` | 多列布局容器 | smart_write_wiki.py |
| 25 | **分栏列** | `grid_column` | grid 的子列 | smart_write_wiki.py |
| 30 | 电子表格 | `sheet` | 文档内表格9×9 上限 | md_to_feishu_json.py |
### 2.2 图片/文件/媒体相关
| block_type | 类型 | JSON 字段名 | 说明 |
|:---|:---|:---|:---|
| 12 | **文件/图片(写入)** | `file` | 先 upload_all 拿 file_token再插入 |
| 18 | **画廊** | `gallery` | 多图显示,单图也可用 |
| 27 | 图片(导出) | `image` | 导出时出现;**写入用 12 file** |
### 2.3 复杂/高级块
| block_type | 类型 | JSON 字段名 | 说明 |
|:---|:---|:---|:---|
| 31 | 表格 | `table` | ⚠️ 带 cells 接口报 9499慎用 |
| 43 | 多维表格 | `board`/`bitable` | 须 bitable:app 权限 |
| 26 | 内嵌 | `iframe` | API 不支持写入,导出可见 |
| 29 | 思维笔记 | `mindnote` | API 不支持写入 |
| 34 | 引用容器 | `quote_container` | 引用嵌套容器 |
| 20 | 会话卡片 | `chat_card` | 群聊卡片 |
### 2.4 列表块(重要说明)
飞书 DocX API 定义了原生列表块类型,但**当前脚本采用正文块 + 前缀符号的方式实现列表**(更稳定):
| 方案 | block_type | 实现方式 | 稳定性 |
|:---|:---|:---|:---|
| **当前方案(推荐)** | 2 (text) | 无序用 `• ` 前缀,有序用 `12` 前缀 | ✅ 稳定 |
| 原生无序列表 | 12 (bullet) | `"bullet": {"elements": [...]}` | ⚠️ 未验证 |
| 原生有序列表 | 13 (ordered) | `"ordered": {"elements": [...]}` | ⚠️ 未验证 |
> **原因**bullet(12) 和 file(12) 可能存在 API 版本差异。当前生产代码中 block_type 12 = file用于图片/文件上传,已验证稳定。列表统一用 text(2) + 前缀实现,确保兼容性。
### 2.5 脚本写入行为v2.1 更新)
**sanitize_blocks 清洗**:写入前自动过滤:
- 空 text(2) 块
- 空 code(14) 块elements 内容为空或空白)
- 空 callout(19) 块
**code/callout 降级保底**`code(14)``callout(19)` 写入飞书 API 失败时,脚本自动将其内容降级为 `text(2)` 正文块写入,内容不丢失。
---
## 三、各 Block 类型详细 JSON 格式
### 3.1 正文块block_type: 2—— 最常用
**最简版**
```json
{"block_type": 2, "text": {"elements": [{"text_run": {"content": "这是一段正文。"}}]}}
```
**带样式版(加粗 + 颜色)**
```json
{
"block_type": 2,
"text": {
"elements": [
{"text_run": {"content": "[重要紧急]", "text_element_style": {"bold": true, "text_color": 5}}},
{"text_run": {"content": " 今日必须完成的核心任务"}}
],
"style": {"align": 1}
}
}
```
**超链接**
```json
{
"block_type": 2,
"text": {
"elements": [
{"text_run": {"content": "项目链接:", "text_element_style": {"bold": true}}},
{"text_run": {"content": "点击查看", "text_element_style": {"link": {"url": "https://cunkebao.feishu.cn/wiki/xxx"}}}}
]
}
}
```
**无序列表(正文块模拟,推荐)**
```json
{"block_type": 2, "text": {"elements": [{"text_run": {"content": "• 第一项要点"}}]}}
{"block_type": 2, "text": {"elements": [{"text_run": {"content": "• 第二项要点"}}]}}
{"block_type": 2, "text": {"elements": [{"text_run": {"content": " • 子项(两空格缩进)"}}]}}
```
**有序列表(正文块模拟,推荐)**
```json
{"block_type": 2, "text": {"elements": [{"text_run": {"content": "1第一步需求分析"}}]}}
{"block_type": 2, "text": {"elements": [{"text_run": {"content": "2第二步方案设计"}}]}}
{"block_type": 2, "text": {"elements": [{"text_run": {"content": "3第三步代码实现"}}]}}
```
**表格TSV 正文回退,生产常用)**
```json
{
"block_type": 2,
"text": {
"elements": [{
"text_run": {
"content": "产品\t价格\t分润\n:---\t:---\t:---\n书籍小程序\t9.9元起\t90%\n会员群\t365元起\t平台收入"
}
}]
}
}
```
---
### 3.2 标题块block_type: 3-11
字段名 = `heading1`~`heading9`,结构完全相同:
```json
{"block_type": 3, "heading1": {"elements": [{"text_run": {"content": "一级大标题"}}]}}
{"block_type": 4, "heading2": {"elements": [{"text_run": {"content": "📋 二级标题"}}]}}
{"block_type": 5, "heading3": {"elements": [{"text_run": {"content": "三级标题"}}]}}
{"block_type": 6, "heading4": {"elements": [{"text_run": {"content": "3月12日 "}}], "style": {"align": 1}}}
{"block_type": 7, "heading5": {"elements": [{"text_run": {"content": "五级标题"}}]}}
{"block_type": 8, "heading6": {"elements": [{"text_run": {"content": "六级标题"}}]}}
```
---
### 3.3 代码块block_type: 14
```json
{
"block_type": 14,
"code": {
"elements": [{"text_run": {"content": "SOUL派对流量入口\n ↓\n触客宝自动接待\n ↓\n存客宝AI分层"}}],
"style": {"language": 1}
}
}
```
**language 枚举值(脚本实测稳定值)**
| 值 | 语言 | 值 | 语言 |
|:---|:---|:---|:---|
| 1 | PlainText流程图/ASCII 推荐) | 2 | Python |
| 3 | JavaScript / TypeScript | 6 | Shell / Bash |
| 8 | SQL | 9 | JSON |
| 11 | HTML / XML | 16 | Go |
| 22 | Rust | — | — |
> `md_to_feishu_json.py` 的 `LANG_MAP` 使用上表值,已验证可正确渲染。飞书 API 官方文档的枚举编号与实测值存在出入,以脚本 `LANG_MAP` 为准。
---
### 3.4 待办块block_type: 17
```json
{"block_type": 17, "todo": {
"elements": [{"text_run": {"content": "Soul 派对→本月突破500在线 🎬 (0%)"}}],
"style": {"done": false, "align": 1}
}}
{"block_type": 17, "todo": {
"elements": [{"text_run": {"content": "运营报表已写入飞书"}}],
"style": {"done": true, "align": 1}
}}
```
---
### 3.5 高亮块/标注block_type: 19
```json
// 蓝色 [执行]
{"block_type": 19, "callout": {
"emoji_id": "sunrise", "background_color": 2, "border_color": 2,
"elements": [{"text_run": {"content": "[执行]", "text_element_style": {"bold": true, "text_color": 7}}}]
}}
// 橙色 [警告]
{"block_type": 19, "callout": {
"emoji_id": "warning", "background_color": 4, "border_color": 4,
"elements": [{"text_run": {"content": "注意Token 2小时过期"}}]
}}
// 绿色 [完成]
{"block_type": 19, "callout": {
"emoji_id": "white_check_mark", "background_color": 3, "border_color": 3,
"elements": [{"text_run": {"content": "已完成:运营报表写入成功"}}]
}}
// 红色 [紧急]
{"block_type": 19, "callout": {
"emoji_id": "fire", "background_color": 6, "border_color": 6,
"elements": [{"text_run": {"content": "紧急:服务器宕机需立即处理"}}]
}}
```
**background_color / border_color 枚举**
| 值 | 颜色 | 常用场景 |
|:---|:---|:---|
| 1 | 白色/无 | 普通引用 |
| 2 | 蓝色 | [执行]、信息提示 |
| 3 | 绿色 | [完成]、成功 |
| 4 | 橙色 | [警告]、注意 |
| 5 | 黄色 | 重点提醒 |
| 6 | 红色 | [紧急]、错误 |
| 7 | 紫色 | 思考、创意 |
**常用 emoji_id**`sunrise`🌅、`warning`⚠️、`white_check_mark`✅、`bulb`💡、`fire`🔥、`star`⭐、`quote`引用、`rocket`🚀、`dart`🎯、`memo`📝
---
### 3.6 分割线block_type: 22
```json
{"block_type": 22, "divider": {}}
```
---
### 3.7 图片/文件块block_type: 12写入专用
```json
{"block_type": 12, "file": {
"file_token": "上传后返回的 file_token",
"view_type": "inline",
"file_name": "进度图表.png"
}}
```
> 两步走:① `POST drive/v1/medias/upload_all`form-data: file_name, parent_type=docx_image, parent_node=obj_token, size, file=binary→ 拿 file_token ② 插入此块
**view_type 枚举**`preview`(预览)、`card`(卡片)、`inline`(行内)
---
### 3.8 画廊块block_type: 18
```json
{"block_type": 18, "gallery": {
"image_list": [
{"file_token": "xxx_file_token_1"},
{"file_token": "xxx_file_token_2"}
],
"gallery_style": {"align": "center"}
}}
```
> 一行最多 6 张图。`align`: `center`(默认)、`left`、`right`
---
### 3.9 分栏布局block_type: 24 + 25
**分栏容器 grid**
```json
{"block_type": 24, "grid": {"column_size": 2}}
```
**分栏列 grid_column**(须作为 grid 的子块插入):
```json
{"block_type": 25, "grid_column": {"width_ratio": 50}}
```
**完整用法(两栏布局)**
```
1. 先创建 grid 块 → 拿到 grid_block_id
2. API 自动生成 column_size 个 grid_column 子块
3. 在每个 grid_column 下插入内容块
```
```python
# 创建分栏(脚本 smart_write_wiki.py 中的实际写法)
grid_block = {"block_type": 24, "grid": {"column_size": 2}}
# 插入后拿到 grid_id再查询其子块拿到两个 column_id
# 然后在 column_id 下分别插入左右内容
```
---
### 3.10 电子表格block_type: 30
```json
{"block_type": 30, "sheet": {"row_size": 5, "column_size": 4}}
```
> 创建空表格,最大 9×9。创建后通过电子表格 API 写入单元格内容。
> **限制**:不能在创建时直接带内容。
**写入单元格**
```
PUT /sheets/v2/spreadsheets/{spreadsheet_token}/values
Body: {"valueRange": {"range": "sheet1!A1:D5", "values": [[...], ...]}}
```
**列宽自动适配v2.1 新增,强制在写完数据后执行)**
```
PUT /sheets/v2/spreadsheets/{spreadsheet_token}/dimension_range
Body:
{
"dimension": {
"sheetId": "<sheet_id>",
"majorDimension": "COLUMNS",
"startIndex": 0,
"endIndex": 1
},
"dimensionProperties": {"pixelSize": 200}
}
```
- 对每一列循环调用pixelSize 按内容自动计算:中文 ≈ 20px/字、ASCII ≈ 9px/字 + 24px 内边距。
- 最小 80px最大 400px。
- **v2.2**:列宽 min 150px、max 520px表头行+首列自动加粗(`PUT .../styles` appendStylesanitize 去掉首尾 callout。
- `feishu_publish_blocks_with_images.py``_auto_resize_sheet_columns` + `_apply_sheet_bold_style` 已封装;`md_to_feishu_json --no-callouts``>` 转正文。
**Markdown 表格分割行兼容v2.1 修复)**
支持 2+ 破折号的分割行,不再要求最少 3 个:
```
|:--|:---| ✅ 有效2 个破折号)
|:---|:---| ✅ 有效3 个破折号)
```
---
### 3.11 表格块block_type: 31 限制)
```json
// 创建空表格(可行)
{"block_type": 31, "table": {"property": {"row_size": 3, "column_size": 4}}}
// 带 cells 创建(⚠️ 返回 9499 报错)
{"block_type": 31, "table": {"property": {"row_size": 3, "column_size": 4}, "cells": [...]}}
```
**表格处理策略(决策树)**
```
Markdown 表格
├── 行列 ≤ 9×9 → 优先用 sheet(30) 创建空表格 + 写入单元格
├── 行列 > 9×9 → 用 text(2) TSV 回退
└── sheet 失败 → 用 text(2) TSV 回退(保底方案)
```
**TSV 回退格式(稳定,推荐兜底)**
```json
{"block_type": 2, "text": {
"elements": [{"text_run": {
"content": "文档名称\t路径\t核心内容\t状态\n:---\t:---\t:---\t:---\n品牌定位画布\t金/品牌定位.md\t一句话定位\t✅ 完成\n人物画像\t金/人物画像.md\tABCD用户画像\t✅ 完成"
}}]
}}
```
---
### 3.12 多维表格block_type: 43
```json
// 导出格式
{"block_type": 43, "board": {"token": "bascnXXXXXXXX"}}
// 写入格式(嵌入文档内)
{"block_type": 43, "bitable": {"token": "bascnXXXXXXXX"}}
```
> ⚠️ 须开通 **bitable:app** 用户身份权限。独立多维表格链接为 `https://cunkebao.feishu.cn/base/{app_token}`。
---
## 四、text_element_style 样式完整参数
```json
{
"text_element_style": {
"bold": true,
"italic": true,
"strikethrough": true,
"underline": true,
"inline_code": true,
"text_color": 5,
"background_color": 2,
"link": {"url": "https://..."}
}
}
```
**text_color 枚举**
| 值 | 颜色 | 场景 |
|:---|:---|:---|
| 1 | 黑色(默认) | 正文 |
| 2 | 深灰 | 次要信息 |
| 3 | 深橙 | |
| 4 | 橙色 | 不重要紧急 |
| 5 | **红色** | **重要紧急标注** |
| 6 | 玫红 | |
| 7 | 紫色 | 执行标注 |
| 8 | 浅蓝 | |
| 9 | 深蓝 | |
| 10 | **绿色** | **重要不紧急标注** |
---
## 五、style 对齐参数
```json
"style": {"align": 1}
```
| 值 | 对齐方式 |
|:---|:---|
| 1 | 左对齐(默认) |
| 2 | 居中 |
| 3 | 右对齐 |
适用于:`text.style``heading*.style``todo.style`
---
## 六、Markdown → 飞书 Block 转换规则(完整版)
| Markdown 写法 | 飞书 block_type | 字段名 | 备注 |
|:---|:---|:---|:---|
| `# 标题` | 3 | heading1 | |
| `## 标题` | 4 | heading2 | |
| `### 标题` | 5 | heading3 | |
| `#### 标题` | 6 | heading4 | |
| `##### 标题` | 7 | heading5 | |
| `###### 标题` | 8 | heading6 | |
| 普通段落 | 2 | text | |
| `**加粗**` | 2 | text + bold=true | elements 拆分 |
| `*斜体*` | 2 | text + italic=true | |
| `~~删除线~~` | 2 | text + strikethrough=true | |
| `` `行内代码` `` | 2 | text + inline_code=true | |
| `[链接](url)` | 2 | text + link.url | |
| `> 引用` | 19 | callout蓝色 | |
| `---` | 22 | divider | |
| ` ```代码``` ` | 14 | code | language 自动识别 |
| `![图](路径)` | 12 | file先 upload_all | 失败保底为文字 |
| `- 无序列表` | 2 | text`• ` 前缀) | 正文块模拟 |
| `1. 有序列表` | 2 | text`1` 前缀) | 正文块模拟 |
| `- [ ]` 未完成 | 17 | todo + done=false | |
| `- [x]` 已完成 | 17 | todo + done=true | |
| Markdown 表格 | 30 或 2 | sheet 或 TSV 回退 | ≤9×9 用 sheet |
---
## 七、日志 TNTWF 格式对应 Block 结构
```json
[
{"block_type": 6, "heading4": {"elements": [{"text_run": {"content": "3月12日 "}}], "style": {"align": 1}}},
{"block_type": 19, "callout": {"emoji_id": "sunrise", "background_color": 2, "border_color": 2,
"elements": [{"text_run": {"content": "[执行]", "text_element_style": {"bold": true, "text_color": 7}}}]}},
{"block_type": 2, "text": {
"elements": [{"text_run": {"content": "[重要紧急]", "text_element_style": {"bold": true, "text_color": 5}}}],
"style": {"align": 1}}},
{"block_type": 17, "todo": {
"elements": [{"text_run": {"content": "Soul 派对→本月突破500在线 🎬 (0%)"}}],
"style": {"done": false, "align": 1}}},
{"block_type": 2, "text": {
"elements": [{"text_run": {"content": "[重要不紧急]", "text_element_style": {"bold": true, "text_color": 10}}}],
"style": {"align": 1}}},
{"block_type": 22, "divider": {}}
]
```
---
## 八、完整文档示例
```json
{
"title": "商业模式总览.md",
"source": "材料/商业模式总览.md",
"children": [
{"block_type": 4, "heading2": {"elements": [{"text_run": {"content": "一、项目背景"}}]}},
{"block_type": 5, "heading3": {"elements": [{"text_run": {"content": "市场痛点"}}]}},
{"block_type": 2, "text": {"elements": [{"text_run": {
"content": "痛点\t描述\n:---\t:---\n资源分散\t80%创业者缺乏有效渠道\n匹配低效\t有效链接率<5%"}}]}},
{"block_type": 22, "divider": {}},
{"block_type": 4, "heading2": {"elements": [{"text_run": {"content": "二、商业模式"}}]}},
{"block_type": 14, "code": {"elements": [{"text_run": {
"content": "SOUL派对流量入口\n ↓\n触客宝自动接待\n ↓\n存客宝AI分层ABCD\n ↓\n精准变现"}}],
"style": {"language": 1}}},
{"block_type": 19, "callout": {"emoji_id": "bulb", "background_color": 2, "border_color": 2,
"elements": [{"text_run": {"content": "核心模式:云阿米巴——不占股、分现钱、稳流量"}}]}},
{"block_type": 2, "text": {"elements": [{"text_run": {"content": "• 产品一:书籍小程序 9.9元起"}}]}},
{"block_type": 2, "text": {"elements": [{"text_run": {"content": "• 产品二:会员群 365元起"}}]}},
{"block_type": 17, "todo": {"elements": [{"text_run": {"content": "完成产品矩阵报价表"}}],
"style": {"done": false, "align": 1}}}
]
}
```
---
## 九、API 接口速查
| 用途 | 方法 | 路径 |
|:---|:---|:---|
| 获取 Wiki 节点 | GET | `wiki/v2/spaces/get_node?token={wiki_token}` |
| 获取文档块列表 | GET | `docx/v1/documents/{doc_id}/blocks` |
| **追加子块(写入)** | POST | `docx/v1/documents/{doc_id}/blocks/{block_id}/children` |
| 批量删除块 | POST | `docx/v1/documents/{doc_id}/blocks/batch_delete` |
| 创建 Wiki 子节点 | POST | `wiki/v2/spaces/{space_id}/nodes` |
| **上传图片/文件** | POST | `drive/v1/medias/upload_all` |
| 创建多维表格 | POST | `bitable/v1/apps` |
| 写入电子表格单元格 | PUT | `sheets/v2/spreadsheets/{token}/values` |
| **设置列宽** | PUT | `sheets/v2/spreadsheets/{token}/dimension_range` |
**追加子块请求体**
```json
{"children": [块1, 块2, ...], "index": 0}
```
> `index: 0` = 最前;不传 = 末尾。**单次 ≤ 50 块**,超出分批。
---
## 十、脚本速查
| 脚本 | 用途 | 命令 |
|:---|:---|:---|
| `md_to_feishu_json.py` | Markdown → .feishu.json | `python3 脚本/md_to_feishu_json.py /path/xxx.md` |
| `upload_json_to_feishu_doc.py` | JSON 按格式上传 | `python3 脚本/upload_json_to_feishu_doc.py /path/xxx.json` |
| `batch_upload_json_to_feishu_wiki.py` | 批量目录上传 | `python3 脚本/batch_upload_json_to_feishu_wiki.py /目录 --wiki-parent <token>` |
| `feishu_article_unified_publish.py` | Markdown 直传 | `python3 脚本/feishu_article_unified_publish.py --parent <t> --title "标题" --md /路径.md` |
| `feishu_wiki_create_doc.py` | 创建 Wiki 子文档 | `python3 脚本/feishu_wiki_create_doc.py --parent <t> --title "标题"` |
| `smart_write_wiki.py` | 智能写入(含分栏) | 脚本内调用 |
---
## 十一、错误排查
| 问题 | 原因 | 解决 |
|:---|:---|:---|
| 9499 `Invalid parameter: cells` | table(31) 带 cells 不支持 | 改用 TSV 正文(2) 或 sheet(30) |
| 1770001 `invalid param` | 字段名/格式错误 | 确认字段名正确;图片先上传再用 token |
| 1770013 | file_token 关联错误 | upload_all 时 parent_node 用正确 obj_token |
| token 过期 | access_token 有效期 2 小时 | `python3 脚本/feishu_token_cli.py get-access-token` |
| 多维表格权限不足 | 未开通 bitable:app | `python3 脚本/feishu_force_reauth.py` |
| 块数 > 50 写入失败 | 单次限制 50 块 | 分批写入,每批 ≤ 50 |
| sheet 超 9×9 报错 | 电子表格创建上限 | 改用 TSV 正文(2) 回退 |
| 写入串月 | wiki_token 路由错误 | 写前校验文档标题含目标月份 |
| 表格列太窄挤压 | 默认列宽约 72px | v2.2min 150px max 520px`_auto_resize_sheet_columns` 自动调用 |
| 表格未识别(显示 `|文字|` | 分割行破折号不足 3 个(`:--` | 脚本 v2.1 已修复,现接受 2+ 破折号 |
| code(14)/callout(19) 写入失败 | API 1770001 | 脚本自动降级为 text(2) 正文块,内容保留 |
---
**版本**2.1 | **整理**卡若AI 水桥 | **更新**2026-02-22
**数据来源**52 个 `.feishu.json` + 6 个脚本 + 飞书开放平台 API 文档
**v2.2 变更**:表格列宽 150~520px表头+首列加粗(`PUT styles`);首尾 callout 去除;`--no-callouts`。**v2.1**:列宽 API、code/callout 降级。