116 lines
3.3 KiB
Markdown
116 lines
3.3 KiB
Markdown
---
|
||
name: biaoshu
|
||
version: 1.0.0
|
||
description: |
|
||
标数 — 飞书知识库剧本表格互动行自动编号与知识点统计技能。
|
||
从知识库文档的内嵌 Sheet 中识别互动行(A列类型非 TL/空),自动在 B列写入顺序编号 ID,
|
||
并支持从 D列提取知识点生成统计报告。
|
||
|
||
**触发场景:**
|
||
- 用户要求给剧本表格互动行"标数""编号""命名 ID"
|
||
- 用户要求统计剧本表格知识点覆盖情况
|
||
- 用户给出知识库链接 + "标数" / "统计知识点" / "加ID"
|
||
metadata:
|
||
requires:
|
||
permissions: ["sheets:spreadsheet"]
|
||
identity: bot
|
||
---
|
||
|
||
# 标数 — 剧本表格互动行编号与知识点统计
|
||
|
||
## 前置条件
|
||
|
||
1. 确认目标文档为飞书知识库 wiki 链接(`/wiki/` 开头)
|
||
2. Bot(App ID: `cli_a931175d41799cc7`)已加入该知识空间
|
||
3. 使用 Bot 身份操作(不触发用户授权)
|
||
|
||
## ID 命名规则
|
||
|
||
- 格式:`{前缀}{序号}`,序号从 01 开始,两位数字补零
|
||
- 默认前缀:`12185`(可自定义)
|
||
- 示例:第一个互动 → `1218501`,第十个 → `1218510`
|
||
|
||
## 互动行识别规则
|
||
|
||
A列值不为空且不为 `TL` 的行即为互动行,按行号从小到大的顺序编号。
|
||
|
||
常见 A列值:
|
||
- `中互动` / `中互动1` ... `中互动N`
|
||
- `核心互动-xxx` / `核心互动X-xxx`
|
||
- 不编号的:`TL` 行、空行
|
||
|
||
## 执行流程
|
||
|
||
### Step 1: 解析知识库链接
|
||
|
||
从用户提供的 wiki URL 中提取 `obj_token` 和 `space_id`:
|
||
```
|
||
格式: https://{domain}/wiki/{obj_token}?...
|
||
```
|
||
|
||
### Step 2: 获取文档结构,定位内嵌 Sheet
|
||
|
||
```
|
||
GET /open-apis/docx/v1/documents/{obj_token}/blocks
|
||
Header: Authorization: Bearer {bot_tenant_access_token}
|
||
```
|
||
|
||
遍历 blocks,找到 `block_type: 30`(内嵌 Sheet)的 block,从 `sheet.token` 中提取:
|
||
- `spreadsheet_token` = token 中 `_` 之前的部分
|
||
- `sheet_id` = token 中 `_` 之后的部分
|
||
|
||
### Step 3: 读取表格数据
|
||
|
||
```
|
||
GET /open-apis/sheets/v2/spreadsheets/{spreadsheet_token}/values/{sheet_id}!A1:I{max_rows}?valueRenderOption=ToString
|
||
```
|
||
|
||
### Step 4: 识别互动行并生成 ID
|
||
|
||
遍历数据行(跳过表头),对 A列不为空且不为 `TL` 的行,按顺序分配编号。
|
||
|
||
### Step 5: 写入 B列
|
||
|
||
使用 values API 逐行写入,range 格式:`{sheet_id}!B{row}:B{row}`
|
||
|
||
```
|
||
PUT /open-apis/sheets/v2/spreadsheets/{spreadsheet_token}/values
|
||
Body: {
|
||
"valueRange": {
|
||
"range": "{sheet_id}!B{row}:B{row}",
|
||
"values": [["{id}"]]
|
||
}
|
||
}
|
||
```
|
||
|
||
### Step 6: 验证
|
||
|
||
回读 B列确认写入正确。
|
||
|
||
## 知识点统计(可选,用户单独要求时执行)
|
||
|
||
读取 D列(知识点列),按出现次数汇总:
|
||
|
||
1. 遍历有 A列标记的互动行(A列≠TL/空),提取 D列知识点
|
||
2. 多行知识点(换行分隔)分别统计
|
||
3. `Over here.` / `Over here!` 合并为 `Over here.` 统一计数
|
||
4. 输出格式:
|
||
|
||
```
|
||
序号 | 行号 | 类型 | 知识点 | 次数
|
||
```
|
||
|
||
## 示例
|
||
|
||
**输入:**
|
||
> https://makee-interactive.feishu.cn/wiki/P9bvw6nXziqzWZkxDmMcOZN4ndc 标数
|
||
|
||
**输出:** 识别 16 个互动行,按序写入 `1218501` ~ `1218516` 到 B列。
|
||
|
||
## 注意事项
|
||
|
||
- 写单个单元格 range 必须用 `B{row}:B{row}` 格式(非 `B{row}`)
|
||
- Bot tenant_access_token 通过飞书应用 App ID + App Secret 获取
|
||
- 数据行范围需根据实际表格调整(跳过公式行和尾部空行)
|
||
- 若 B列已有旧 ID,直接覆盖写入新 ID
|