- 移除 TodoItem 中的 priority、created_at 和 updated_at 字段 - 强制每个任务都必须有唯一 id,且由用户负责生成 - 修改合并模式逻辑,merge=true 下保留未提及的旧任务 - 支持已完成和已取消任务重新激活(状态改回 pending 或 in_progress) - 禁止 in_progress 状态退回到 pending,必须标记为 completed 或 cancelled - 优化状态转换校验,允许特定状态间合法切换 - 简化任务变更消息,移除详细的新增/更新/移除统计 - 更新文档和示例,明确 id 必须由用户生成和使用 - 修复和补充测试,增强状态转换和合并模式验证 - 调整任务时间戳生成逻辑,统一使用当前时间及索引 - 该变更提供更合理的任务状态机械及管理模式,提升稳定性和易用性
149 lines
8.1 KiB
Markdown
149 lines
8.1 KiB
Markdown
|
||
# vc +notes
|
||
|
||
> **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。
|
||
|
||
查询会议纪要,支持通过会议 ID、妙记 Token 或日程事件 ID 获取纪要文档、逐字稿、AI 总结、待办和章节。只读操作。
|
||
|
||
本 skill 对应 shortcut:`lark-cli vc +notes`。
|
||
|
||
## 命令
|
||
|
||
```bash
|
||
# 通过会议 ID 查询(逗号分隔支持批量,最多 50 个)
|
||
lark-cli vc +notes --meeting-ids 69xxxxxxxxxxxxx28
|
||
lark-cli vc +notes --meeting-ids 69xxxxxxxxxxxxx28,69xxxxxxxxxxxxx29
|
||
|
||
# 通过妙记 Token 查询(从妙记 URL 中提取)
|
||
lark-cli vc +notes --minute-tokens obbxxxxxxxxxxxxxxxxxx
|
||
lark-cli vc +notes --minute-tokens obbxxxxxxxxxxxxxxxxxx,obbyyyyyyyyyyyyyyyyyy
|
||
|
||
# 指定逐字稿输出目录(仅 --minute-tokens 路径有效)
|
||
lark-cli vc +notes --minute-tokens obbxxxxxxxxxxxxxxxxxx --output-dir ./output
|
||
lark-cli vc +notes --minute-tokens obbxxxxxxxxxxxxxxxxxx --overwrite
|
||
|
||
# 通过日程事件 ID 查询(从 calendar +agenda 获取 event_id)
|
||
lark-cli vc +notes --calendar-event-ids xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_0
|
||
|
||
# 输出格式
|
||
lark-cli vc +notes --meeting-ids 69xxxxxxxxxxxxx28 --format json
|
||
|
||
# 预览 API 调用
|
||
lark-cli vc +notes --meeting-ids 69xxxxxxxxxxxxx28 --dry-run
|
||
```
|
||
|
||
## 参数
|
||
|
||
| 参数 | 必填 | 说明 |
|
||
|------|------|------|
|
||
| `--meeting-ids <ids>` | 三选一 | 会议 ID,逗号分隔支持批量 |
|
||
| `--minute-tokens <tokens>` | 三选一 | 妙记 Token,逗号分隔支持批量 |
|
||
| `--calendar-event-ids <ids>` | 三选一 | 日程事件 ID,逗号分隔支持批量 |
|
||
| `--output-dir <dir>` | 否 | 逐字稿输出目录。未指定时默认落到 `./minutes/{minute_token}/transcript.txt`(与 `minutes +download` 共享目录);显式指定时沿用旧布局 `./{output-dir}/artifact-{title}-{token}/transcript.txt`。仅 `--minute-tokens` 路径有效 |
|
||
| `--overwrite` | 否 | 覆盖已存在的逐字稿文件,仅 `--minute-tokens` 路径有效 |
|
||
| `--dry-run` | 否 | 预览 API 调用,不执行 |
|
||
|
||
## 核心约束
|
||
|
||
### 1. 三种参数互斥
|
||
|
||
每次只能指定一种输入方式。同时传入多种会报错。
|
||
|
||
### 2. 仅支持 user 身份
|
||
|
||
该命令仅支持 `user` 身份,使用前需完成 `lark-cli auth login`。
|
||
|
||
### 3. 批量上限
|
||
|
||
每次最多传入 50 个 ID/Token。
|
||
|
||
### 4. 按路径检查权限
|
||
|
||
不同输入方式需要不同权限,命令会自动检查对应路径所需的 scope:
|
||
|
||
| 输入 | 所需权限 |
|
||
|------|---------|
|
||
| `--meeting-ids` | `vc:meeting.meetingevent:read`、`vc:note:read`、`vc:record:readonly` |
|
||
| `--minute-tokens` | `vc:note:read`、`minutes:minutes:readonly`、`minutes:minutes.artifacts:read`、`minutes:minutes.transcript:export` |
|
||
| `--calendar-event-ids` | `calendar:calendar:read`、`calendar:calendar.event:read`、`vc:meeting.meetingevent:read`、`vc:note:read`、`vc:record:readonly` |
|
||
|
||
## 输出结果
|
||
|
||
### 有纪要文档时
|
||
|
||
返回 `notes` 数组,每条记录包含:
|
||
|
||
| 字段 | 说明 |
|
||
|------|------|
|
||
| `meeting_id` | 会议 ID(`--meeting-ids` / `--calendar-event-ids` 路径) |
|
||
| `minute_token` | **会议对应的妙记 Token**(`--meeting-ids` / `--calendar-event-ids` 路径自动通过录制 API 反查并附加)|
|
||
| `note_id` | **纪要 ID** — 用于继续进入 Note 域(`note +detail` / `note +transcript`) |
|
||
| `note_display_type` | **纪要展示类型**:`unknown` / `normal` / `unified`,区分普通纪要和 unified 纪要 |
|
||
| `note_doc_token` | **AI 智能纪要**文档 Token — AI 生成的总结、待办、章节 |
|
||
| `meeting_notes` | **用户绑定的会议纪要**文档 Token 列表 — 用户主动关联到会议的文档(仅 `--calendar-event-ids` 路径返回) |
|
||
| `verbatim_doc_token` | **逐字稿**文档 Token — 完整的逐句文字记录,含说话人和时间戳;unified 纪要的逐字稿请改用 `note +transcript` |
|
||
| `shared_doc_tokens` | 会中共享文档 Token 列表 |
|
||
| `creator_id` | 创建者 ID |
|
||
| `create_time` | 创建时间(格式化) |
|
||
|
||
> **选择哪个 token?** 用户说"会议纪要""总结""待办""纪要内容" → 返回 `note_doc_token` 和 `meeting_notes`(如有)。用户说"逐字稿""完整记录""谁说了什么" → 见下方「按 `note_display_type` 路由逐字稿」。意图不明确时,展示所有文档链接让用户选择。
|
||
>
|
||
> 📌 不确定该返回哪个 token?参见 [`vc-domain-boundaries.md`](vc-domain-boundaries.md) 的产物链路对比表,了解 AI 总结链路 vs 录制链路的区别。
|
||
|
||
### 按 `note_display_type` 路由逐字稿 / 原始记录
|
||
|
||
逐字稿走哪条路由由 `note_display_type` 决定,**不要只看 `verbatim_doc_token` 是否为空**:
|
||
|
||
| 字段 / 条件 | Agent 动作 |
|
||
|------------|-----------|
|
||
| 用户要纪要正文 / 总结 / 待办 / 章节 | `docs +fetch --api-version v2 --doc <note_doc_token>` |
|
||
| `note_display_type=normal` + 用户要逐字稿 | `docs +fetch --api-version v2 --doc <verbatim_doc_token>` |
|
||
| `note_display_type=unknown` + `verbatim_doc_token` 非空 + 用户要逐字稿 | `docs +fetch --api-version v2 --doc <verbatim_doc_token>`;不要猜成 unified |
|
||
| `note_display_type=unknown` + 无可用逐字稿 token | 先 `note +detail --note-id <note_id>` 复核,再按返回的展示类型路由 |
|
||
| `note_display_type=unified` + 用户要逐字稿 / 原始记录 | `note +transcript --note-id <note_id>` → 切到 [lark-note](../../lark-note/SKILL.md) |
|
||
| `minute_token` 存在 + 用户要音视频媒体 | `minutes +download --minute-tokens <minute_token>` |
|
||
|
||
> **`unified` 纪要的逐字稿不是独立文档**,必须用 `note +transcript` 按 `note_id` 拉取,输出更结构化。即使 unified 也返回了非空 `verbatim_doc_token`,仍以 `note_display_type` 为准。
|
||
|
||
### minute-tokens 路径的 AI 产物
|
||
|
||
通过 `--minute-tokens` 查询时,返回的 `artifacts` 字段包含 AI 内置产物:
|
||
|
||
| 字段 | 说明 |
|
||
|------|------|
|
||
| `artifacts.summary` | AI 总结(JSON 内联) |
|
||
| `artifacts.todos` | 待办事项(JSON 内联,**只读**);每条含 `content`、`is_done` 及 `todo_id`。`todo_id` 仅供 [`minutes +todo`](../../lark-minutes/references/lark-minutes-todo.md) 更新/删除待办时使用,不必展示给用户。**新建**妙记内待办请用 `minutes +todo`,不要用 lark-task |
|
||
| `artifacts.chapters` | 章节纪要(JSON 内联) |
|
||
| `artifacts.keywords` | 妙记推荐关键词(JSON 内联) |
|
||
| `artifacts.transcript_file` | 逐字稿本地文件路径。默认落到 `./minutes/{minute_token}/transcript.txt`(与 `minutes +download` 聚合);显式 `--output-dir` 时走旧布局 `./{output-dir}/artifact-{title}-{token}/transcript.txt` |
|
||
|
||
## 如何获取输入参数
|
||
|
||
| 输入参数 | 获取方式 |
|
||
|---------|---------|
|
||
| `meeting_id` | `vc +search` 搜索历史会议 → 结果中的 `id` 字段 |
|
||
| `minute_token` | 从妙记 URL 中提取,如 `https://sample.feishu.cn/minutes/obbyyyyyyyyyyyyyyyyyy` → `obbyyyyyyyyyyyyyyyyyy` |
|
||
| `calendar_event_id` | `calendar +agenda` 查看日程 → 结果中的 `event_id` 字段 |
|
||
|
||
## 常见错误与排查
|
||
|
||
| 错误现象 | 根本原因 | 解决方案 |
|
||
|---------|---------|---------|
|
||
| `exactly one of ... is required` | 未传入参数或同时传了多种 | 只指定一种输入方式 |
|
||
| `no notes available for this meeting` | 该会议未生成纪要 | 尝试用 `--minute-tokens` 路径 |
|
||
| `121005 no permission` | 非会议参与者无权查看 | 使用 `--minute-tokens` 降级到内置产物 |
|
||
| `missing required scope(s)` | 权限不足 | 按提示运行 `auth login --scope` |
|
||
| `too many IDs` | 超过批量上限 | 分批查询,每批最多 50 个 |
|
||
|
||
## 提示
|
||
- 默认使用 `--format json` 输出,你更佳擅长解析 JSON 数据。
|
||
- 排查参数与请求结构时优先使用 `--dry-run`。
|
||
- `--meeting-ids` 和 `--calendar-event-ids` 路径最终都走纪要详情 API,需要 `vc:note:read` 权限。
|
||
- `--minute-tokens` 路径无纪要权限时会自动降级,**不会报错**,而是下载内置产物到本地。
|
||
|
||
## 参考
|
||
|
||
- [lark-vc](../SKILL.md) — 视频会议全部命令
|
||
- [lark-vc-search](lark-vc-search.md) — 搜索历史会议(获取 meeting_id)
|
||
- [lark-shared](../../lark-shared/SKILL.md) — 认证和全局参数
|