@amaster.ai/pi-lark 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/skills/lark-approval/references/lark-approval-initiate.md +2 -5
- package/skills/lark-approval/references/lark-approval-instances-initiated.md +6 -0
- package/skills/lark-approval/references/lark-approval-tasks-query.md +9 -0
- package/skills/lark-approval/references/lark-approval-tasks-rollback.md +8 -2
- package/skills/lark-apps/SKILL.md +25 -7
- package/skills/lark-apps/references/lark-apps-access-scope-set.md +1 -1
- package/skills/lark-apps/references/lark-apps-automation.md +164 -0
- package/skills/lark-apps/references/lark-apps-db-execute.md +186 -2
- package/skills/lark-apps/references/lark-apps-db.md +3 -3
- package/skills/lark-apps/references/lark-apps-get.md +43 -0
- package/skills/lark-apps/references/lark-apps-html-publish.md +7 -2
- package/skills/lark-apps/references/lark-apps-init.md +1 -2
- package/skills/lark-apps/references/lark-apps-openapi-key.md +1 -1
- package/skills/lark-apps/references/lark-apps-release-create.md +3 -1
- package/skills/lark-apps/references/lark-apps-role.md +133 -0
- package/skills/lark-base/SKILL.md +7 -3
- package/skills/lark-base/references/dashboard-block-data-config.md +28 -2
- package/skills/lark-base/references/lark-base-cell-value.md +9 -4
- package/skills/lark-base/references/lark-base-dashboard-block-get-data.md +7 -7
- package/skills/lark-base/references/lark-base-dashboard.md +11 -2
- package/skills/lark-base/references/lark-base-data-query.md +9 -7
- package/skills/lark-base/references/lark-base-field-create.md +4 -2
- package/skills/lark-base/references/lark-base-field-json.md +52 -15
- package/skills/lark-base/references/lark-base-field-update.md +4 -2
- package/skills/lark-base/references/lark-base-view-set-filter.md +3 -1
- package/skills/lark-calendar/SKILL.md +89 -31
- package/skills/lark-calendar/references/lark-calendar-create.md +8 -39
- package/skills/lark-calendar/references/lark-calendar-room-find.md +5 -9
- package/skills/lark-calendar/references/lark-calendar-rsvp.md +1 -5
- package/skills/lark-calendar/references/lark-calendar-schedule-clear-time.md +59 -0
- package/skills/lark-calendar/references/lark-calendar-schedule-fuzzy-time.md +88 -0
- package/skills/lark-calendar/references/lark-calendar-schedule-meeting.md +67 -210
- package/skills/lark-calendar/references/lark-calendar-suggestion.md +1 -5
- package/skills/lark-calendar/references/lark-calendar-update.md +2 -7
- package/skills/lark-doc/SKILL.md +1 -1
- package/skills/lark-doc/references/lark-doc-fetch.md +4 -2
- package/skills/lark-doc/references/lark-doc-mindnote.md +17 -2
- package/skills/lark-doc/references/lark-doc-whiteboard.md +4 -0
- package/skills/lark-doc/references/lark-doc-xml-extended-blocks.md +35 -0
- package/skills/lark-doc/references/lark-doc-xml.md +3 -2
- package/skills/lark-drive/SKILL.md +20 -8
- package/skills/lark-drive/references/lark-drive-comment-location.md +16 -4
- package/skills/lark-drive/references/lark-drive-comments-guide.md +16 -8
- package/skills/lark-drive/references/lark-drive-delete.md +35 -11
- package/skills/lark-drive/references/lark-drive-export.md +39 -10
- package/skills/lark-drive/references/lark-drive-files-list.md +27 -2
- package/skills/lark-drive/references/lark-drive-inspect.md +2 -0
- package/skills/lark-drive/references/lark-drive-list-comments.md +125 -0
- package/skills/lark-drive/references/lark-drive-member-add.md +1 -1
- package/skills/lark-drive/references/lark-drive-move.md +5 -3
- package/skills/lark-drive/references/lark-drive-permission-guide.md +12 -0
- package/skills/lark-drive/references/lark-drive-pull.md +3 -3
- package/skills/lark-drive/references/lark-drive-push.md +33 -6
- package/skills/lark-drive/references/lark-drive-status.md +12 -14
- package/skills/lark-drive/references/lark-drive-task-result.md +58 -5
- package/skills/lark-drive/references/lark-drive-workflow-knowledge-organize.md +26 -20
- package/skills/lark-drive/references/lark-drive-workflow.md +2 -1
- package/skills/lark-event/SKILL.md +2 -1
- package/skills/lark-event/references/lark-event-approval.md +170 -0
- package/skills/lark-im/SKILL.md +5 -4
- package/skills/lark-im/references/lark-im-messages-reply.md +1 -1
- package/skills/lark-im/references/lark-im-messages-send.md +1 -1
- package/skills/lark-mail/SKILL.md +12 -9
- package/skills/lark-mail/references/lark-mail-forward.md +1 -1
- package/skills/lark-mail/references/lark-mail-message-modify.md +48 -0
- package/skills/lark-mail/references/lark-mail-message-trash.md +41 -0
- package/skills/lark-mail/references/lark-mail-reply-all.md +1 -1
- package/skills/lark-mail/references/lark-mail-reply.md +1 -1
- package/skills/lark-mail/references/lark-mail-watch.md +1 -1
- package/skills/lark-markdown/SKILL.md +3 -2
- package/skills/lark-markdown/references/lark-markdown-create.md +22 -2
- package/skills/lark-minutes/SKILL.md +19 -4
- package/skills/lark-minutes/references/lark-minutes-download.md +0 -2
- package/skills/lark-minutes/references/lark-minutes-search.md +0 -2
- package/skills/lark-minutes/references/lark-minutes-speaker-replace.md +0 -2
- package/skills/lark-minutes/references/lark-minutes-summary.md +0 -2
- package/skills/lark-minutes/references/lark-minutes-todo.md +2 -4
- package/skills/lark-minutes/references/lark-minutes-update.md +0 -2
- package/skills/lark-minutes/references/lark-minutes-upload.md +10 -10
- package/skills/lark-shared/SKILL.md +26 -8
- package/skills/lark-sheets/SKILL.md +98 -29
- package/skills/lark-sheets/references/lark-sheets-batch-update.md +18 -9
- package/skills/lark-sheets/references/lark-sheets-changeset.md +105 -0
- package/skills/lark-sheets/references/lark-sheets-chart.md +4 -2
- package/skills/lark-sheets/references/lark-sheets-conditional-format.md +2 -0
- package/skills/lark-sheets/references/lark-sheets-filter-view.md +1 -1
- package/skills/lark-sheets/references/lark-sheets-float-image.md +6 -6
- package/skills/lark-sheets/references/lark-sheets-formula-translation.md +12 -3
- package/skills/lark-sheets/references/lark-sheets-formula-verify.md +77 -0
- package/skills/lark-sheets/references/lark-sheets-history.md +93 -0
- package/skills/lark-sheets/references/lark-sheets-pivot-table.md +7 -2
- package/skills/lark-sheets/references/lark-sheets-range-operations.md +44 -14
- package/skills/lark-sheets/references/lark-sheets-read-data.md +3 -3
- package/skills/lark-sheets/references/lark-sheets-sheet-structure.md +4 -4
- package/skills/lark-sheets/references/lark-sheets-visual-standards.md +4 -4
- package/skills/lark-sheets/references/lark-sheets-workbook.md +29 -4
- package/skills/lark-sheets/references/lark-sheets-write-cells.md +21 -11
- package/skills/lark-slides/SKILL.md +29 -18
- package/skills/lark-slides/references/asset-planning.md +16 -5
- package/skills/lark-slides/references/examples.md +57 -227
- package/skills/lark-slides/references/iconpark.md +2 -2
- package/skills/lark-slides/references/lark-slides-create.md +21 -2
- package/skills/lark-slides/references/lark-slides-media-upload.md +0 -1
- package/skills/lark-slides/references/lark-slides-pptx-template-workflows.md +89 -0
- package/skills/lark-slides/references/lark-slides-replace-pages.md +1 -1
- package/skills/lark-slides/references/lark-slides-replace-slide.md +1 -1
- package/skills/lark-slides/references/lark-slides-screenshot.md +11 -8
- package/skills/lark-slides/references/lark-slides-whiteboard.md +31 -30
- package/skills/lark-slides/references/lark-slides-xml-get.md +100 -0
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +9 -7
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md +4 -4
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +12 -10
- package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +14 -13
- package/skills/lark-slides/references/planning-layer.md +32 -2
- package/skills/lark-slides/references/slides_chart_demo.xml +1 -0
- package/skills/lark-slides/references/slides_xml_schema_definition.xml +8 -3
- package/skills/lark-slides/references/troubleshooting.md +7 -25
- package/skills/lark-slides/references/validation-checklist.md +18 -9
- package/skills/lark-slides/references/visual-planning.md +4 -3
- package/skills/lark-slides/references/xml-format-guide.md +65 -1
- package/skills/lark-slides/references/xml-schema-quick-ref.md +7 -3
- package/skills/lark-slides/scripts/xml_text_overlap_lint.py +907 -54
- package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +876 -5
- package/skills/lark-task/SKILL.md +1 -0
- package/skills/lark-task/references/lark-task-create.md +14 -1
- package/skills/lark-vc/SKILL.md +6 -3
- package/skills/lark-vc/references/lark-vc-recording.md +0 -2
- package/skills/lark-vc/references/vc-domain-boundaries.md +9 -1
- package/skills/lark-vc-agent/SKILL.md +25 -15
- package/skills/lark-vc-agent/references/lark-vc-agent-meeting-events.md +65 -37
- package/skills/lark-vc-agent/references/lark-vc-agent-meeting-leave.md +1 -1
- package/skills/lark-vc-agent/references/lark-vc-agent-meeting-list-active.md +8 -8
- package/skills/lark-whiteboard/references/lark-whiteboard-workflow.md +5 -2
- package/skills/lark-wiki/SKILL.md +7 -3
- package/skills/lark-wiki/references/lark-wiki-move-to-drive.md +122 -0
- package/skills/lark-wiki/references/lark-wiki-move.md +5 -3
- package/skills/lark-wiki/references/lark-wiki-node-get.md +1 -1
- package/skills/lark-wiki/references/lark-wiki-node-list.md +9 -2
- package/skills/lark-calendar/references/lark-calendar-agenda.md +0 -78
- package/skills/lark-calendar/references/lark-calendar-freebusy.md +0 -124
- package/skills/lark-calendar/references/lark-calendar-search-event.md +0 -29
- package/skills/lark-sheets/references/lark-sheets-core-operations.md +0 -103
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-create.md +0 -220
|
@@ -13,6 +13,7 @@ metadata:
|
|
|
13
13
|
**CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md),其中包含认证、权限处理**
|
|
14
14
|
|
|
15
15
|
> **任务搜索技巧**:先区分用户是否**特地指定使用搜索 skill**,以及是否真的提供了**查询关键字**(例如任务名称、关键词、片段描述)。如果用户特地指定使用搜索 skill,或明确给出了任务查询关键字,则目标是**任务**时优先使用 `+search`。如果用户没有特地指定使用搜索 skill,且意图里没有查询关键字,只有范围条件(例如“今年以来”“已完成”“由我创建”“我关注的”),并且使用 `+search` 与 `+get-related-tasks` / `+get-my-tasks` 都能达到目的时,应优先使用列表型能力,而不是搜索型能力。其中,“与我相关 / 我关注的 / 由我创建”等优先考虑 `+get-related-tasks`;“我负责的 / 分配给我”的列表优先考虑 `+get-my-tasks`。不要把时间范围词(例如“今年以来”)本身误当成 `query` 去走搜索。
|
|
16
|
+
> **任务搜索相关性提示**:`+search` 当前不会自动判断搜索结果与搜索发起人的相关性。如果用户明确要求搜索“与我相关”的任务,必须先识别具体关系,获取当前用户的 `open_id`,并显式传入对应的 `--assignee`(负责人)、`--creator`(创建人)或 `--follower`(关注人)过滤条件;不能只依赖 `query` 期待自动返回与当前用户相关的任务。
|
|
16
17
|
> **任务清单搜索技巧**:任务清单也遵循同样的判断逻辑。先区分用户是否**特地指定使用搜索 skill**,以及是否真的提供了**清单查询关键字**(例如清单名称、关键词、片段描述)。如果用户特地指定使用搜索 skill,或明确给出了清单查询关键字,则优先使用 `+tasklist-search`。如果用户没有特地指定使用搜索 skill,且意图里没有查询关键字,只有范围条件(例如“由我创建的任务清单”“今年以来创建的清单”),并且使用搜索或原生列取清单都能达到目的时,应优先使用原生 `tasklists.list` 接口列取清单(先 `schema task.tasklists.list`,再 `lark-cli task tasklists list --as user ...`),再按 `creator`、`created_at` 等字段做本地筛选和分页控制。
|
|
17
18
|
> **意图区分补充**:像“搜索飞书中今年以来我关注的任务”这类表达,虽然字面带有“搜索”,但如果没有真正的查询关键字,且本质是在限定“与我相关 + 时间范围”,则应优先走 `+get-related-tasks`;像“搜索飞书中由我创建的任务清单”这类表达,如果没有清单关键字,且本质是在限定“清单范围 + 创建者”,则应优先走原生 `tasklists.list` 后筛选,而不是直接走搜索型 shortcut。
|
|
18
19
|
> **用户身份识别**:在用户身份(user identity)场景下,如果用户提到了“我”(例如“分配给我”、“由我创建”),请默认获取当前登录用户的 `open_id` 作为对应的参数值。
|
|
@@ -46,7 +46,20 @@ lark-cli task +create --summary "Test Task" --dry-run
|
|
|
46
46
|
1. Confirm with the user: task summary, due date, assignee, and tasklist if necessary.
|
|
47
47
|
- **Crucial Rule for Assignee**: If the user explicitly or implicitly says "create a task for me" (给我创建一个任务), or "help me create a task" (帮我新建/创建一个任务), you MUST assign the task to the current logged-in user. You can get the current user's `open_id` by executing `lark-cli auth status` (it already outputs JSON by default, so do not add `--json`) or `lark-cli contact +get-user` first, extracting `.identities.user.openId` (from `auth status`) or `.data.user.open_id` (from `contact +get-user`), and then passing it to the `--assignee` parameter.
|
|
48
48
|
2. Execute `lark-cli task +create --summary "..." ...`
|
|
49
|
-
3.
|
|
49
|
+
3. Judge success by `ok == true` in the stdout JSON (the success envelope has no `code` field — do not test `code == 0`), then report the result: task ID (`data.guid`) and summary.
|
|
50
|
+
|
|
51
|
+
Example success response:
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"ok": true,
|
|
56
|
+
"identity": "user",
|
|
57
|
+
"data": {
|
|
58
|
+
"guid": "e297d3d0-4b60-4a5f-a4d4-xxxxxxxxxxxx",
|
|
59
|
+
"url": "https://applink.larkoffice.com/client/todo/detail?guid=e297d3d0-4b60-4a5f-a4d4-xxxxxxxxxxxx"
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
50
63
|
|
|
51
64
|
> [!CAUTION]
|
|
52
65
|
> This is a **Write Operation** -- You must confirm the user's intent before executing.
|
package/skills/lark-vc/SKILL.md
CHANGED
|
@@ -56,7 +56,7 @@ lark-cli vc +search --query "站会" --start <start_time> --end <end_time>
|
|
|
56
56
|
|
|
57
57
|
- **视频会议(Meeting)**:飞书视频会议实例,通过 meeting_id 标识。已结束的会议支持通过关键词、时间段、参会人、组织者、会议室等条件搜索(见 `+search`)。
|
|
58
58
|
- **会议纪要(Note)**:视频会议结束后生成的结构化文档,通过 `note_id` 标识,包含纪要文档(总结、待办)和逐字稿文档。`note_display_type` 区分**普通纪要(`normal`)**和 **unified 纪要**;已知 `note_id` 的直查与 unified 原始记录请用 [lark-note](../lark-note/SKILL.md)。
|
|
59
|
-
- **妙记(Minutes)**:来源于飞书视频会议的录制产物或用户上传的音视频文件,支持视频/音频的转写,包含总结、待办、章节和文字记录,通过 minute_token
|
|
59
|
+
- **妙记(Minutes)**:来源于飞书视频会议的录制产物或用户上传的音视频文件,支持视频/音频的转写,包含总结、待办、章节和文字记录,通过 minute_token 标识。妙记带有**原始会议录制视频**,会后**不会自动授权给参会人**,需管理员授权或参会人主动申请;而智能纪要及其逐字稿会后自动授权给参会人。
|
|
60
60
|
- **纪要文档(MainDoc)**:AI 智能纪要的主文档,包含 AI 生成的总结和待办,对应 `note_doc_token`。
|
|
61
61
|
- **用户会议纪要(MeetingNotes)**:用户主动绑定到日程的纪要文档,对应 `meeting_note`。需先通过 [`calendar +meeting`](../lark-calendar/references/lark-calendar-meeting.md) 由 `event_id` 获取。
|
|
62
62
|
- **逐字稿(VerbatimDoc)**:会议的逐句文字记录,包含说话人和时间戳。
|
|
@@ -65,12 +65,15 @@ lark-cli vc +search --query "站会" --start <start_time> --end <end_time>
|
|
|
65
65
|
|
|
66
66
|
| 用户意图 | 必须读取的产物 | 禁止 |
|
|
67
67
|
|---------|-------------|------|
|
|
68
|
-
| 提炼/总结/重新总结/整理会议内容/回顾会议 | 为降低 token 消耗,非必须不得获取 AI
|
|
69
|
-
| 查看待办/章节 | AI 纪要(`note_doc_token
|
|
68
|
+
| 提炼/总结/重新总结/整理会议内容/回顾会议 | 为降低 token 消耗,非必须不得获取 AI 纪要。必须使用原始对话记录(按下方逐字稿路由取得),基于原始对话独立分析。两类产物都存在且用户未指定时,默认用智能纪要的逐字稿;用户明确要妙记时才用妙记文字记录(Transcript) | 禁止直接搬运 AI 纪要(`note_doc_token`)的总结作为最终输出 |
|
|
69
|
+
| 查看待办/章节 | 默认 AI 纪要(`note_doc_token`);仅存在妙记或用户明确要妙记时用妙记产物 — AI 待办更友好(含提出人和负责人),章节按话题划分更结构化 | — |
|
|
70
70
|
| 查看纪要链接/文档地址 | 仅返回文档链接,无需读取内容 | — |
|
|
71
71
|
| 直接看 AI 总结结果 | AI 纪要(`note_doc_token`) | — |
|
|
72
72
|
| 谁说了什么/完整发言记录 | 原始对话记录(按下方逐字稿路由取得) | — |
|
|
73
73
|
|
|
74
|
+
> **智能纪要 vs 妙记的选择规则**(总结/待办/逐字稿等重复产物通用):只存在一类 → 用存在的那类;两类都存在且用户明确指定(如"看妙记逐字稿")→ **语义指向哪个走哪个,不要改道**;两类都存在但用户未指定 → **默认智能纪要及其逐字稿**(会后自动授权给参会人,访问门槛低于含原始录制视频、需申请授权的妙记)。完整说明见 [`references/vc-domain-boundaries.md`](references/vc-domain-boundaries.md) 的「产物选择决策」。
|
|
75
|
+
|
|
76
|
+
|
|
74
77
|
> **逐字稿路由**:先用 `vc +detail` 拿到 `note_id`,再 [`note +detail`](../lark-note/SKILL.md) 看 `note_display_type`,**不要只看 `verbatim_doc_token` 是否为空**。具体路由以 [lark-note](../lark-note/SKILL.md) 的 `note_display_type` 规则为准。
|
|
75
78
|
>
|
|
76
79
|
> **为什么"提炼/总结"必须从原始对话记录出发?** AI 纪要是模型对会议的二次压缩,可能遗漏讨论细节、争论过程和隐含决策。用户要求"提炼"或"重新总结"时,期望的是基于原始对话的独立分析,而非对 AI 产物的重新排版。
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
# vc +recording
|
|
3
3
|
|
|
4
|
-
> **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。
|
|
5
4
|
|
|
6
5
|
通过 meeting_id 或 calendar_event_id 查询对应的 minute_token。这是 VC 域和 Minutes 域之间的桥梁命令。只读操作。
|
|
7
6
|
|
|
@@ -151,4 +150,3 @@ lark-cli minutes +download --minute-tokens <minute_token>
|
|
|
151
150
|
- [lark-vc](../SKILL.md) — 视频会议全部命令
|
|
152
151
|
- [lark-vc-search](lark-vc-search.md) — 搜索历史会议(获取 meeting_id)
|
|
153
152
|
- [lark-minutes-detail](../../lark-minutes/references/lark-minutes-detail.md) — 获取会议纪要
|
|
154
|
-
- [lark-shared](../../lark-shared/SKILL.md) — 认证和全局参数
|
|
@@ -30,6 +30,8 @@
|
|
|
30
30
|
| 逐字稿 | `verbatim_doc_token` | 飞书文档 | 完整的逐句发言记录(含说话人、时间戳)— **仅 `note_display_type=normal` 时是可读的独立文档**;`unified` 纪要的逐字稿用 `note +transcript --note-id <note_id>` 拉取(见下方 [Note 域](#note-域)) |
|
|
31
31
|
| 共享文档 | `shared_doc_token` | 飞书文档 | 会中投屏共享的文档信息 |
|
|
32
32
|
|
|
33
|
+
> **授权特性**:智能纪要总结文档及其逐字稿文档(总结文档尾部会挂逐字稿链接与会中投屏共享文档链接)在会后**自动授权给参会人**,参会人通常可直接读取,无需额外申请。
|
|
34
|
+
|
|
33
35
|
此外,还存在**用户会议纪要(MeetingNotes)**,对应 `meeting_note` 字段。这是用户主动绑定到日程的纪要文档,通常用于会前记录会议相关内容,与智能纪要文档相互独立。仅通过 [`calendar +meeting --event-ids`](../../lark-calendar/references/lark-calendar-meeting.md) 路径返回。
|
|
34
36
|
|
|
35
37
|
#### 链路二:开启「录制」
|
|
@@ -43,6 +45,8 @@
|
|
|
43
45
|
| Chapter(章节) | 按讨论话题划分的核心内容摘要 |
|
|
44
46
|
| Transcript(文字记录) | 整场会议最原始的逐人发言记录 |
|
|
45
47
|
|
|
48
|
+
> **授权特性**:妙记带有**原始会议录制视频**,会后**不会自动授权给参会人**,需管理员主动授权或参会人主动申请后才能读取(含其 Summary/Todo/Chapter/Transcript 等产物)。因此当同一场会议既有智能纪要又有妙记时,参会人访问**智能纪要及其逐字稿**的门槛通常低于妙记。
|
|
49
|
+
|
|
46
50
|
#### 两条链路的独立性
|
|
47
51
|
|
|
48
52
|
- 智能纪要(AI 总结链路)和妙记(录制链路)**相互独立、互不影响**。
|
|
@@ -54,7 +58,11 @@
|
|
|
54
58
|
> - **用户要求"提炼/总结/重新总结/整理/回顾"会议内容时** → **内容总结必须从逐字稿/文字记录出发,基于原始对话独立分析**。禁止直接搬运 AI 纪要的总结作为最终输出——那只是对 AI 产物的重新排版,不是独立提炼。
|
|
55
59
|
> - **用户要求查看待办或章节时** → **应参考 AI 产物的待办和章节**,因为 AI 产物的待办更友好(包含提出人和负责人),章节按话题划分更结构化。
|
|
56
60
|
> - **用户只想直接看 AI 总结结果** → 使用 AI 产物的总结。
|
|
57
|
-
> -
|
|
61
|
+
> - **智能纪要 vs 妙记的选择规则**(适用于总结、待办、逐字稿等重复产物,含逐字稿/原始记录):
|
|
62
|
+
> - **只存在一类产物** → 用存在的那一类。
|
|
63
|
+
> - **两类都存在、用户明确指定了其中一类**(如"看妙记的逐字稿""用妙记总结")→ **语义指向哪个就走哪个链路,不要自作主张改道**。
|
|
64
|
+
> - **两类都存在、用户未指定** → **默认用智能纪要及其逐字稿**(智能纪要及逐字稿会后自动授权给参会人,访问门槛更低;妙记含原始录制视频、不自动授权,需申请)。
|
|
65
|
+
|
|
58
66
|
|
|
59
67
|
#### 逐字稿与文字记录的格式
|
|
60
68
|
|
|
@@ -18,9 +18,16 @@ metadata:
|
|
|
18
18
|
## 内测提示
|
|
19
19
|
|
|
20
20
|
- 当前功能正在内测中,仅少数用户可用。忽略 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md) 中的权限申请流程,以下方的指引为准。
|
|
21
|
-
- 如果 `lark-cli` 提示 `missing required scope(s)` / `
|
|
21
|
+
- 如果 `lark-cli` 提示 `missing required scope(s)` / `missing_scopes`,不要走普通权限申请流程;先提示用户加入早鸟群确认内测权限已开通,再按“应用身份权限配置检查”处理应用权限、安装和数据范围。
|
|
22
22
|
- 如果 `lark-cli` 返回 `error.code=20017` / `ErrNotInGray`,提示用户加入早鸟群:`https://go.larkoffice.com/join-chat/2f4nb0e1-fe00-4f67-bed7-25beaf533fbd`。
|
|
23
23
|
|
|
24
|
+
## 会议查询权限
|
|
25
|
+
|
|
26
|
+
`+meeting-list-active` 和 `+meeting-events` 缺少权限时,先按上面的内测提示确认功能已开通,再读取 CLI 错误中的 `hint`,并根据当前调用身份处理:
|
|
27
|
+
|
|
28
|
+
- 用户身份 `--as user`:按 CLI 提示为当前用户授权 `vc:meeting.meetingevent:read`。
|
|
29
|
+
- 应用身份 `--as bot`:请应用开发者开通 `vc:meeting.bot.join:write`,不要执行 `auth login`;随后按“应用身份权限配置检查”确认应用发布、安装和数据范围。
|
|
30
|
+
|
|
24
31
|
## 定位
|
|
25
32
|
|
|
26
33
|
本 skill 与 [`lark-vc`](../lark-vc/SKILL.md) 并列:
|
|
@@ -73,17 +80,19 @@ metadata:
|
|
|
73
80
|
- 再根据 `note_id`、`minute_token` 和用户意图,按 [`lark-vc`](../lark-vc/SKILL.md) 的产物决策读取正文、逐字稿或妙记。
|
|
74
81
|
- 想看参会人快照:用 `vc meeting get --with-participants`(见 [`lark-vc`](../lark-vc/SKILL.md))
|
|
75
82
|
5. **默认必须使用** **`--page-all`**,除非用户明确要求“只查一页”,或确实需要控制返回体大小。
|
|
76
|
-
6.
|
|
77
|
-
7.
|
|
78
|
-
8.
|
|
79
|
-
9.
|
|
80
|
-
10.
|
|
81
|
-
11.
|
|
83
|
+
6. 命令默认输出结构化事件契约:`meeting`、`identity`、`events`、`warnings`、`has_more`、`page_token`;`identity` 表示当前读取身份,事件 actor 含 `participant_type`、`role` 和可读 `label`,事件细节保留在 `payload`。
|
|
84
|
+
7. 输出格式默认优先 `--format pretty`(时间线更易读,并带当前身份标签);需要稳定字段做结构化处理时用 `--format json`;需要流式消费事件时用 `--format ndjson`。
|
|
85
|
+
8. **必须识别分页信号**:只要响应里出现 `has_more=true`、pretty 里的 `more available`,或返回了非空 `page_token`,就不能把当前结果当作完整事件流;默认应继续分页,或明确告诉用户当前只是部分结果。
|
|
86
|
+
9. 保留响应里的 `page_token`,下次增量拉取直接续,不要从头再拉。
|
|
87
|
+
10. **只要你是基于** **`+meeting-events`** **来回答一场正在进行中的会议内容,就不能直接复用旧结果。** 无论用户是在问“现在/刚刚/最新”的状态,还是让你“总结一下这个会议讲什么”,都必须先重新拉一次当前事件流,确认拿到的是最新信息,再基于最新结果回答。只有在用户明确要求基于某次历史快照继续分析时,才可以复用旧结果。
|
|
88
|
+
11. **会中聊天 / 互动转发到 IM 时基于 JSON 事件构造 IM post。** `chat_received_items[].message_type == 3` 表示会中 reaction;构造 IM post 时,先用 [`lark-im` reaction emoji 白名单](../lark-im/references/lark-im-reactions.md) 判断同一 item 的 `content`:白名单内才写成 Feishu post `emotion` 节点,不在白名单内则保留原始 key 并写成文本节点,例如 `[CanNotSee]`。普通聊天按文本发送。不要从 pretty/Markdown 重新拼消息,也不要把整条消息退化成纯文本;只降级非法 reaction key。用户已说“发给我 / 推送给我 / 发到我的单聊”时,默认用 bot 身份直接发当前用户;收件人不明确时只补问收件人。
|
|
89
|
+
12. 用户直接问“这个会议讲了什么 / 现在讲到哪了”且上下文没有明确 `meeting_id` 时,先用用户身份发现当前会议;如果用户明确要求应用机器人视角,或上下文已经是应用机器人参会流程,再用应用身份发现。若返回多个会议,展示候选并让用户选择。
|
|
90
|
+
13. 用户直接提供 **9 位会议号** 并询问会中事件/会议内容时,默认把它当作 active meeting 的筛选条件:先按当前身份查 active meetings,并在返回里匹配 `meeting_no == <9位会议号>`;匹配到唯一会议后取长数字 `meeting_id`,再用同一身份查事件。只有用户明确要求“入会 / 让应用机器人旁听 / 代我参会”时才改用 `+meeting-join`。
|
|
82
91
|
|
|
83
92
|
### 3. 发送会中文本或会中表情(写操作)
|
|
84
93
|
|
|
85
94
|
1. 用户明确要求在当前进行中的会议里发送提示、说明、会中表情,或反馈“听不到 / 看不到 / 声音清楚 / 效果不错”时,用 `+meeting-message-send`。
|
|
86
|
-
2. 输入是长数字 `meeting_id`,不是 9 位会议号。若用户只给 9 位会议号,先按当前身份执行 `+meeting-list-active` 并按 `meeting_no`
|
|
95
|
+
2. 输入是长数字 `meeting_id`,不是 9 位会议号。若用户只给 9 位会议号,先按当前身份执行 `+meeting-list-active` 并按 `meeting_no` 匹配,匹配到唯一会议后再发送;不要为了发消息自动入会。发消息只需 `meeting_id`,不要先查 `+detail`。
|
|
87
96
|
3. 身份必须延续:`meeting_id` 来自用户身份发现,就继续 `--as user`;来自应用身份发现或应用机器人入会,就继续 `--as bot`。
|
|
88
97
|
4. 文本消息使用 `--text`;会中表情 / 反馈使用 `--emoji-type`。`--emoji-type` 必须从 reference 里的完整列表中选择,大小写敏感。
|
|
89
98
|
5. 支持普通 Feishu reaction emoji(如 `LOVE`、`SMILE`、`THUMBSUP`)和 4 个 VC 反馈 key(`VC_CanNotSee`、`VC_NoSound`、`VC_LooksGood`、`VC_SoundsClear`)。
|
|
@@ -119,13 +128,14 @@ lark-cli vc +meeting-message-send --as bot --meeting-id <meeting_id> --msg-type
|
|
|
119
128
|
|
|
120
129
|
```bash
|
|
121
130
|
# 1. 入会,捕获 meeting.id
|
|
122
|
-
|
|
131
|
+
AS=bot
|
|
132
|
+
JOIN=$(lark-cli vc +meeting-join --as "$AS" --meeting-number 123456789 --format json)
|
|
123
133
|
MID=$(echo "$JOIN" | jq -r '.data.meeting.id')
|
|
124
134
|
|
|
125
135
|
# 2. 会中轮询事件
|
|
126
|
-
#
|
|
136
|
+
# 沿用入会身份;默认用 --page-all 拉全当前可见事件;下次增量优先复用 page_token
|
|
127
137
|
# 典型间隔 10-30 秒
|
|
128
|
-
lark-cli vc +meeting-events --as
|
|
138
|
+
lark-cli vc +meeting-events --as "$AS" --meeting-id "$MID" --page-all --format pretty
|
|
129
139
|
|
|
130
140
|
# 3. 会后可选:进入 lark-vc 获取会议产物信息,再按 note_id / minute_token 决策读取
|
|
131
141
|
lark-cli vc +detail --meeting-ids "$MID"
|
|
@@ -137,7 +147,7 @@ lark-cli vc +detail --meeting-ids "$MID"
|
|
|
137
147
|
|
|
138
148
|
```bash
|
|
139
149
|
lark-cli vc +meeting-list-active --as bot --user-id <user_open_id> --format json
|
|
140
|
-
lark-cli vc +meeting-events --as bot --meeting-id <
|
|
150
|
+
lark-cli vc +meeting-events --as bot --meeting-id <id> --page-all --format pretty
|
|
141
151
|
```
|
|
142
152
|
|
|
143
153
|
如果只是回答当前登录用户所在会议发生了什么,使用用户身份一路查:
|
|
@@ -167,9 +177,9 @@ Shortcut 是对常用操作的高级封装(`lark-cli vc +<verb> [flags]`)。
|
|
|
167
177
|
|
|
168
178
|
## 应用身份权限配置检查
|
|
169
179
|
|
|
170
|
-
应用身份 `--as bot` 报 `no permission`、`missing required scope(s)`、`
|
|
180
|
+
应用身份 `--as bot` 报 `no permission`、`missing required scope(s)`、`missing_scopes`、`ErrNotInGray` 或 `20017` 时,不要引导用户执行 `auth login`。按顺序检查:
|
|
171
181
|
|
|
172
|
-
1.
|
|
182
|
+
1. 确认内测权限后,按 CLI 错误中的 `hint` 处理;返回 `console_url` 时将其原样提供给用户。
|
|
173
183
|
2. 应用已发布并安装到当前租户。
|
|
174
184
|
3. 开放平台“权限可访问的数据范围”已开通并保存。
|
|
175
185
|
4. 数据范围选择“按条件筛选”,条件配置为:**会议的归属者 包含 与应用的可用范围一致**。
|
|
@@ -177,7 +187,7 @@ Shortcut 是对常用操作的高级封装(`lark-cli vc +<verb> [flags]`)。
|
|
|
177
187
|
|
|
178
188
|
## 用户身份被拒绝时
|
|
179
189
|
|
|
180
|
-
用户身份 `--as user`
|
|
190
|
+
用户身份 `--as user` 调用 `+meeting-list-active` 或 `+meeting-events` 报普通 scope 缺失时,按“会议查询权限”处理;其他 shortcut 的 scope 缺失按各自 CLI `hint` 处理。普通 scope 缺失不表示接口不支持用户身份,只有 CLI 明确表明当前接口不支持用户身份访问时,才按用户意图切换处理:
|
|
181
191
|
|
|
182
192
|
1. 如果用户只是查询当前登录用户所在的进行中会议,说明当前接口链路不支持用户身份访问,改用应用身份流程;需要目标用户 open_id,并要求应用机器人已在会中或先按用户确认执行入会。
|
|
183
193
|
2. 如果用户明确要求应用机器人入会、旁听、代参会或读取应用机器人可见事件,直接切到 `--as bot`,并按上面的应用身份权限配置检查处理。
|
|
@@ -14,17 +14,14 @@
|
|
|
14
14
|
## 命令
|
|
15
15
|
|
|
16
16
|
```bash
|
|
17
|
-
#
|
|
18
|
-
lark-cli vc +meeting-events --as <same_identity> --meeting-id
|
|
17
|
+
# 默认用法:全量拉取当前身份可见事件;输出易读时间线
|
|
18
|
+
lark-cli vc +meeting-events --as <same_identity> --meeting-id <id> --page-all --format pretty
|
|
19
19
|
|
|
20
20
|
# 指定时间范围,并拉全该时间窗内当前可见事件
|
|
21
|
-
lark-cli vc +meeting-events --as <same_identity> --meeting-id
|
|
21
|
+
lark-cli vc +meeting-events --as <same_identity> --meeting-id <id> --start 2026-04-17T15:00:00+08:00 --end 2026-04-17T16:00:00+08:00 --page-all --format pretty
|
|
22
22
|
|
|
23
23
|
# 基于上一次保存的 page_token 继续查新增事件
|
|
24
|
-
lark-cli vc +meeting-events --as <same_identity> --meeting-id
|
|
25
|
-
|
|
26
|
-
# 调试或控制返回体大小时,显式只查一页
|
|
27
|
-
lark-cli vc +meeting-events --as <same_identity> --meeting-id 69xxxxxxxxxxxxx28 --page-size 20 --format json
|
|
24
|
+
lark-cli vc +meeting-events --as <same_identity> --meeting-id <id> --page-token <last_page_token> --page-all --format pretty
|
|
28
25
|
```
|
|
29
26
|
|
|
30
27
|
## 参数
|
|
@@ -54,9 +51,10 @@ lark-cli vc +meeting-events --as <same_identity> --meeting-id 69xxxxxxxxxxxxx28
|
|
|
54
51
|
|
|
55
52
|
### 2. 身份来源是读取事件的权限锚点
|
|
56
53
|
|
|
57
|
-
-
|
|
58
|
-
-
|
|
59
|
-
-
|
|
54
|
+
- `+meeting-events` 支持 `--as user` 和 `--as bot`。
|
|
55
|
+
- 用户身份路径:用户身份发现的会议继续用用户身份读取。
|
|
56
|
+
- 应用身份路径:应用机器人必须在会中或参会过;不要拿任意 `meeting_id` 直接查。
|
|
57
|
+
- 不要在拿到 `meeting_id` 后随意切换身份。身份不一致时,常见结果是空列表、`no permission` 或 `bot is not in meeting`。
|
|
60
58
|
|
|
61
59
|
### 3. 读取事件前必须先拿到可见的 meeting_id
|
|
62
60
|
|
|
@@ -67,21 +65,21 @@ lark-cli vc +meeting-events --as <same_identity> --meeting-id 69xxxxxxxxxxxxx28
|
|
|
67
65
|
lark-cli vc +meeting-join --as bot --meeting-number 123456789
|
|
68
66
|
|
|
69
67
|
# 再查询事件
|
|
70
|
-
lark-cli vc +meeting-events --as bot --meeting-id <
|
|
68
|
+
lark-cli vc +meeting-events --as bot --meeting-id <id>
|
|
71
69
|
```
|
|
72
70
|
|
|
73
71
|
如果应用机器人已经在会中,也可以先通过 active meeting 找会:
|
|
74
72
|
|
|
75
73
|
```bash
|
|
76
74
|
lark-cli vc +meeting-list-active --as bot --user-id <user_open_id> --format json
|
|
77
|
-
lark-cli vc +meeting-events --as bot --meeting-id <
|
|
75
|
+
lark-cli vc +meeting-events --as bot --meeting-id <id> --page-all --format pretty
|
|
78
76
|
```
|
|
79
77
|
|
|
80
|
-
|
|
78
|
+
如果要查询当前登录用户所在会议:
|
|
81
79
|
|
|
82
80
|
```bash
|
|
83
81
|
lark-cli vc +meeting-list-active --as user --format json
|
|
84
|
-
lark-cli vc +meeting-events --as user --meeting-id <
|
|
82
|
+
lark-cli vc +meeting-events --as user --meeting-id <id> --page-all --format pretty
|
|
85
83
|
```
|
|
86
84
|
|
|
87
85
|
若应用机器人已离会、未入会、或会议已经无法再判断身份,后端通常会报:
|
|
@@ -104,18 +102,19 @@ lark-cli vc +meeting-events --as user --meeting-id <meeting_id> --page-all --for
|
|
|
104
102
|
|
|
105
103
|
执行准则:
|
|
106
104
|
|
|
107
|
-
- **默认命令模板**:`lark-cli vc +meeting-events --as <same_identity> --meeting-id <
|
|
105
|
+
- **默认命令模板**:`lark-cli vc +meeting-events --as <same_identity> --meeting-id <id> --page-all --format pretty`
|
|
108
106
|
- 如果你发现自己执行成了不带 `--page-all` 的单页查询,而响应里又出现 `has_more=true` / `more available` / 非空 `page_token`,应立刻意识到这只是部分结果。
|
|
109
|
-
- 遇到上述情况,默认补救方式是继续使用返回的 `page_token` 续拉,例如:`lark-cli vc +meeting-events --as <same_identity> --meeting-id <
|
|
107
|
+
- 遇到上述情况,默认补救方式是继续使用返回的 `page_token` 续拉,例如:`lark-cli vc +meeting-events --as <same_identity> --meeting-id <id> --page-token <returned_page_token> --page-all --format pretty`
|
|
110
108
|
- 只有在用户明确要求“就看第一页”“先不要翻页”时,才不要默认带 `--page-all`
|
|
111
109
|
- 只要你是基于 `+meeting-events` 来回答一场**正在进行中的会议内容**,就不能直接复用上一次查询结果。无论用户是在问“现在是谁在说话”“刚刚发生了什么”“最新事件有哪些”,还是让你“总结一下这个会议讲什么”,都必须先重新执行一次 `+meeting-events`,确认拿到的是最新事件流,再回答用户。只有在用户明确要求基于某次历史快照继续分析时,才可以复用旧结果。
|
|
112
110
|
|
|
113
|
-
### 5.
|
|
111
|
+
### 5. 输出格式差异
|
|
114
112
|
|
|
115
|
-
- `--format
|
|
116
|
-
- `--format
|
|
113
|
+
- `--format json`:结构化契约,顶层包含 `meeting`、`identity`、`events`、`has_more`、`page_token`。`identity` 表示当前读取身份;事件 actor 统一含 `participant_type`、`role`、`label`;每条事件保留 `payload` 便于追溯细节。
|
|
114
|
+
- `--format pretty`:默认推荐格式,输出当前身份和逐条时间线,适合快速理解“发生了什么”。
|
|
115
|
+
- `--format ndjson`:输出事件行,并带 metadata 行,适合流式消费。
|
|
117
116
|
|
|
118
|
-
|
|
117
|
+
**选型原则**:只在 `pretty`、`json`、`ndjson` 之间选择。目标是告诉用户“发生了什么”时,用 `--page-all --format pretty`;需要稳定字段给 agent 做结构化消费、总结、转发或二次处理时用 `--format json`;需要流式消费时用 `--format ndjson`。
|
|
119
118
|
|
|
120
119
|
> **注意**:pretty 输出中的正文文本会做单行转义,真实换行会显示为 `\n`,避免打乱时间线布局。
|
|
121
120
|
|
|
@@ -132,10 +131,10 @@ lark-cli vc +meeting-events --as user --meeting-id <meeting_id> --page-all --for
|
|
|
132
131
|
|
|
133
132
|
执行准则:
|
|
134
133
|
|
|
135
|
-
- 如果上下文已有明确 `meeting_id`
|
|
136
|
-
- 如果上下文没有明确 `meeting_id`,先按用户当前意图选择身份:问“我/当前用户所在会议”用 `lark-cli vc +meeting-list-active --as user --format
|
|
134
|
+
- 如果上下文已有明确 `meeting_id`,沿用该 `meeting_id` 的来源身份执行 `+meeting-events --page-all --format json`。
|
|
135
|
+
- 如果上下文没有明确 `meeting_id`,先按用户当前意图选择身份:问“我/当前用户所在会议”用 `lark-cli vc +meeting-list-active --as user --format json`;问“应用机器人可见的目标用户会议”用 `lark-cli vc +meeting-list-active --as bot --user-id <user_open_id> --format json`。返回多个会议时先让用户选择。
|
|
137
136
|
- 如果上下文只有 9 位会议号,先按当前身份执行 `+meeting-list-active` 并按 `meeting_no` 匹配;匹配到唯一会议后再查事件。不要为了总结会议而自动调用 `+meeting-join`。
|
|
138
|
-
- 这类问题拿到 `meeting_id`
|
|
137
|
+
- 这类问题拿到 `meeting_id` 后,用同一身份执行 `lark-cli vc +meeting-events --as <same_identity> --meeting-id <id> --page-all --format json` 拉取最新事件流。
|
|
139
138
|
- 如果事件中出现共享文档线索,例如:
|
|
140
139
|
- `magic_share_started`
|
|
141
140
|
- `share_doc.title`
|
|
@@ -159,7 +158,10 @@ lark-cli vc +meeting-events --as user --meeting-id <meeting_id> --page-all --for
|
|
|
159
158
|
|
|
160
159
|
| 字段 | 说明 |
|
|
161
160
|
|------|------|
|
|
162
|
-
| `
|
|
161
|
+
| `meeting` | 会议身份与时间状态,包含 `id/topic/meeting_no/start_time/end_time/status` |
|
|
162
|
+
| `identity` | 当前读取身份,包含 `id/name/participant_type/label` |
|
|
163
|
+
| `events` | 结构化事件列表;每条事件含参与者 `actors` 和事件细节 `payload` |
|
|
164
|
+
| `warnings` | 非阻断告警列表;事件列表本身仍可使用 |
|
|
163
165
|
| `has_more` | 是否还有下一页 |
|
|
164
166
|
| `page_token` | 下一页游标 |
|
|
165
167
|
|
|
@@ -174,6 +176,32 @@ lark-cli vc +meeting-events --as user --meeting-id <meeting_id> --page-all --for
|
|
|
174
176
|
| `magic_share_started` | 开始共享内容 / 文档 |
|
|
175
177
|
| `magic_share_ended` | 结束共享 |
|
|
176
178
|
|
|
179
|
+
### Forwarding meeting chat and reactions to IM
|
|
180
|
+
|
|
181
|
+
转发到 IM 时,Agent 必须先用 `+meeting-events --format json` 的结构化事件构造完整 Feishu `post` 内容,再调用 IM 发送 shortcut。不要解析 pretty/Markdown 输出,也不要先生成纯文本或 Markdown 后再期望 IM 侧二次识别 reaction。
|
|
182
|
+
|
|
183
|
+
对 `event_type == "chat_received"` 的事件逐项处理 `payload.chat_received_items`:
|
|
184
|
+
|
|
185
|
+
- `message_type == 3` 是会中 reaction;构造 IM `post` 内容时,以 [`lark-im` reaction emoji 列表](../../lark-im/references/lark-im-reactions.md) 作为 IM `emotion` 白名单。白名单内的 key 写成 `{"tag":"emotion","emoji_type":"<content>"}`,例如 `JIAYI`、`THUMBSUP`、`OK`。
|
|
186
|
+
- 对不在 IM reaction emoji 白名单内的 reaction key,保留原始 key 但写成文本节点,例如 `{"tag":"text","text":"[<content>]"}`;不应直接写入 `emotion.emoji_type`,否则 IM 发送会失败。
|
|
187
|
+
- 不要大小写归一化或猜测映射;`content` 是原始 reaction key,必须原样判断。
|
|
188
|
+
- 其他聊天消息写成文本节点:`{"tag":"text","text":"<content>"}`。
|
|
189
|
+
- 最终调用 `im +messages-send --msg-type post --content '<post-json>'`,其中 `<post-json>` 应混合使用可渲染 `emotion` 节点和文本 fallback;不要用 `--markdown` 承载会中 reaction。
|
|
190
|
+
- 如果 IM 返回 `message_content_emotion_tag's emoji_type is invalid`,只降级非法 reaction key,不要把整条消息退化成纯文本。
|
|
191
|
+
- 如果用户原始请求已经明确“发给我 / 推送给我 / 发到我的聊天框 / 发到我的单聊”,这已经覆盖本次收件人、内容和发送动作,直接发送给当前用户,不要再二次询问“是否发送”。
|
|
192
|
+
- 默认用应用身份 `--as bot` 发送;只有用户明确要求“用本人身份 / 用户身份发送”时才切到 `--as user`。
|
|
193
|
+
- 如果用户要求发给某个群或其他人但收件人不可唯一确定,只询问缺失的收件人信息。
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
lark-cli vc +meeting-events \
|
|
197
|
+
--as <same_identity> \
|
|
198
|
+
--meeting-id <id> \
|
|
199
|
+
--page-all \
|
|
200
|
+
--format json
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
如果用户已经要求“发给我”,`<open_id>` 使用当前用户的 open_id;需要解析时先用用户查询能力获取当前用户信息。构造 IM post 时只发送用户请求范围内的会中内容,不要把前一条自然语言预览当作发送内容。
|
|
204
|
+
|
|
177
205
|
## pretty 输出示例
|
|
178
206
|
|
|
179
207
|
```text
|
|
@@ -197,28 +225,29 @@ lark-cli vc +meeting-events --as user --meeting-id <meeting_id> --page-all --for
|
|
|
197
225
|
|
|
198
226
|
## Agent 组合场景
|
|
199
227
|
|
|
200
|
-
### 场景 1
|
|
228
|
+
### 场景 1:入会后读取会中发生了什么
|
|
201
229
|
|
|
202
230
|
```bash
|
|
203
231
|
# 第 1 步:加入会议,记录返回的 meeting.id
|
|
204
|
-
lark-cli vc +meeting-join --as bot --meeting-number 123456789
|
|
232
|
+
JOIN=$(lark-cli vc +meeting-join --as bot --meeting-number 123456789 --format json)
|
|
233
|
+
MID=$(echo "$JOIN" | jq -r '.data.meeting.id')
|
|
205
234
|
|
|
206
|
-
# 第 2
|
|
207
|
-
lark-cli vc +meeting-events --as bot --meeting-id
|
|
235
|
+
# 第 2 步:用 meeting.id 读取当前可见事件
|
|
236
|
+
lark-cli vc +meeting-events --as bot --meeting-id "$MID" --page-all --format pretty
|
|
208
237
|
```
|
|
209
238
|
|
|
210
239
|
### 场景 1b:应用机器人已在会中,先发现 meeting_id 再读事件
|
|
211
240
|
|
|
212
241
|
```bash
|
|
213
242
|
lark-cli vc +meeting-list-active --as bot --user-id <user_open_id> --format json
|
|
214
|
-
lark-cli vc +meeting-events --as bot --meeting-id <
|
|
243
|
+
lark-cli vc +meeting-events --as bot --meeting-id <id> --page-all --format pretty
|
|
215
244
|
```
|
|
216
245
|
|
|
217
246
|
### 场景 1c:当前登录用户正在会中,先发现 meeting_id 再读事件
|
|
218
247
|
|
|
219
248
|
```bash
|
|
220
249
|
lark-cli vc +meeting-list-active --as user --format json
|
|
221
|
-
lark-cli vc +meeting-events --as user --meeting-id <
|
|
250
|
+
lark-cli vc +meeting-events --as user --meeting-id <id> --page-all --format pretty
|
|
222
251
|
```
|
|
223
252
|
|
|
224
253
|
### 场景 2:过滤某段时间内的事件
|
|
@@ -226,7 +255,7 @@ lark-cli vc +meeting-events --as user --meeting-id <meeting_id> --page-all --for
|
|
|
226
255
|
```bash
|
|
227
256
|
lark-cli vc +meeting-events \
|
|
228
257
|
--as <same_identity> \
|
|
229
|
-
--meeting-id <
|
|
258
|
+
--meeting-id <id> \
|
|
230
259
|
--start 2026-04-17T15:00:00+08:00 \
|
|
231
260
|
--end 2026-04-17T16:00:00+08:00 \
|
|
232
261
|
--page-all \
|
|
@@ -240,7 +269,7 @@ lark-cli vc +meeting-events \
|
|
|
240
269
|
# 这次直接从该游标继续拉新增事件
|
|
241
270
|
lark-cli vc +meeting-events \
|
|
242
271
|
--as <same_identity> \
|
|
243
|
-
--meeting-id <
|
|
272
|
+
--meeting-id <id> \
|
|
244
273
|
--page-token <last_page_token> \
|
|
245
274
|
--page-all \
|
|
246
275
|
--format pretty
|
|
@@ -257,12 +286,11 @@ lark-cli vc +meeting-events \
|
|
|
257
286
|
| 错误现象 | 根本原因 | 解决方案 |
|
|
258
287
|
|---------|---------|---------|
|
|
259
288
|
| `--meeting-id is required` | 未传入 `--meeting-id` | 传入长数字 `meeting.id` |
|
|
260
|
-
| `not
|
|
261
|
-
|
|
|
262
|
-
|
|
|
263
|
-
| `20001 meeting_status_MEETING_END` | 会议已结束且已超出后端允许的 5 分钟宽限窗口 | 本接口不再适合继续拉取事件。先用 `lark-cli vc +detail --meeting-ids <meeting.id>` 获取会议产物信息,再根据 `note_id` / `minute_token` 和用户意图选择纪要正文、逐字稿或妙记;参会人请用 `lark-cli vc meeting get --params '{"meeting_id":"<meeting.id>"}' --with-participants` |
|
|
289
|
+
| `10005 bot is not in meeting` | 使用应用身份读取,但应用机器人从未真实入会该会议;或会议已结束但应用机器人从未在会中出现过 | 如果 `meeting_id` 来自用户身份发现,改回 `--as user`;如果确实要应用身份读取,先让应用机器人入会或确认它曾参会后再用 `--as bot`。**如果只是想看参会人快照,改用 `lark-cli vc meeting get --params '{"meeting_id":"<meeting.id>"}' --with-participants`** |
|
|
290
|
+
| 用户身份无权限 / 不可见 | 当前用户不是该会议的可见参与者,或 `meeting_id` 不是从用户身份路径获得 | 不要反复执行 `auth login`。先确认 `meeting_id` 是否来自 `+meeting-list-active --as user`;如果用户明确要切到应用身份,再通过 `+meeting-list-active --as bot --user-id <user_open_id>` 获取应用身份可读的 `meeting_id`,或在用户明确同意后让应用机器人入会,再用 `+meeting-events --as bot` 读取 |
|
|
291
|
+
| `20001 meeting_status_MEETING_END` | 会议已结束且已超出后端允许的 5 分钟宽限窗口 | 本接口不再适合继续拉取事件。先用 `lark-cli vc +detail --meeting-ids <meeting.id>` 获取会议产物信息,再根据 `note_display_type` / `note_id` / `minute_token` 和用户意图选择纪要正文、逐字稿或妙记;参会人请用 `lark-cli vc meeting get --params '{"meeting_id":"<meeting.id>"}' --with-participants` |
|
|
264
292
|
| `20002 meeting not exist` | `meeting_id` 错误,或会议实例当前已不可获取(常见于把 9 位会议号当 meeting_id 传) | 确认传入的是长数字 `meeting_id`,不是 9 位会议号 |
|
|
265
|
-
| 应用身份权限不足 | 应用权限、租户安装、权限可访问的数据范围或 VC Agent privilege 未配置完整 | 不要执行 `auth login
|
|
293
|
+
| 应用身份权限不足 | 应用权限、租户安装、权限可访问的数据范围或 VC Agent privilege 未配置完整 | 不要执行 `auth login`。请应用开发者开通 `vc:meeting.bot.join:write`;再检查应用发布/安装和权限可访问的数据范围,均正确仍失败时再排查内测灰度权限 |
|
|
266
294
|
| `HTTP 404` / `HTTP 500` | 服务端当前无法找到或处理该会议实例 | 换一个正在进行且 bot 可见的 meeting_id,或排查后端问题 |
|
|
267
295
|
|
|
268
296
|
## 提示
|
|
@@ -46,7 +46,7 @@ lark-cli vc +meeting-leave --as bot --meeting-id 69xxxxxxxxxxxxx28 --dry-run
|
|
|
46
46
|
## 输出结果
|
|
47
47
|
|
|
48
48
|
接口成功返回时,默认输出:`Left meeting <meeting-id> successfully.`。
|
|
49
|
-
`--format json`
|
|
49
|
+
`--format json` 返回标准 `{ok, identity, data}` 信封,例如 `{"ok":true,"identity":"bot","data":{}}`,不是带 `code` / `msg` 的 API 原始响应体。
|
|
50
50
|
|
|
51
51
|
## 如何获取输入参数
|
|
52
52
|
|
|
@@ -29,7 +29,7 @@ lark-cli vc +meeting-list-active --as bot --user-id ou_xxx --format json
|
|
|
29
29
|
| 用户身份 | `--as user` | 当前登录用户正在参加的会议 | 继续 `+meeting-events --as user` |
|
|
30
30
|
| 应用身份 | `--as bot --user-id <user_open_id>` | 目标用户正在参加、且应用机器人也在会中的会议 | 继续 `+meeting-events --as bot` |
|
|
31
31
|
|
|
32
|
-
硬规则:`meeting_id` 从哪种身份路径拿到,后续 `+meeting-events`
|
|
32
|
+
硬规则:`meeting_id` 从哪种身份路径拿到,后续 `+meeting-events` 就沿用哪种身份。不要把应用身份拿到的 `meeting_id` 改用用户身份读事件,也不要把用户身份拿到的 `meeting_id` 强制切到应用身份。
|
|
33
33
|
|
|
34
34
|
应用身份返回空,不代表目标用户不在任何会议中,只能说明没有找到“目标用户在会中且应用机器人也在会中”的当前会。
|
|
35
35
|
|
|
@@ -38,22 +38,22 @@ lark-cli vc +meeting-list-active --as bot --user-id ou_xxx --format json
|
|
|
38
38
|
```bash
|
|
39
39
|
# 方式 1:先让应用机器人入会,直接从 join 响应拿 meeting.id
|
|
40
40
|
lark-cli vc +meeting-join --as bot --meeting-number 123456789 --format json
|
|
41
|
-
lark-cli vc +meeting-events --as bot --meeting-id <
|
|
41
|
+
lark-cli vc +meeting-events --as bot --meeting-id <id> --page-all --format pretty
|
|
42
42
|
|
|
43
43
|
# 方式 2:应用机器人已经在会中时,用应用身份发现 meeting_id
|
|
44
44
|
lark-cli vc +meeting-list-active --as bot --user-id <user_open_id> --format json
|
|
45
|
-
lark-cli vc +meeting-events --as bot --meeting-id <
|
|
45
|
+
lark-cli vc +meeting-events --as bot --meeting-id <id> --page-all --format pretty
|
|
46
46
|
|
|
47
|
-
# 方式 3
|
|
47
|
+
# 方式 3:查询当前登录用户所在会议发生了什么
|
|
48
48
|
lark-cli vc +meeting-list-active --as user --format json
|
|
49
|
-
lark-cli vc +meeting-events --as user --meeting-id <
|
|
49
|
+
lark-cli vc +meeting-events --as user --meeting-id <id> --page-all --format pretty
|
|
50
50
|
```
|
|
51
51
|
|
|
52
52
|
## 多会议选择
|
|
53
53
|
|
|
54
54
|
- 如果返回多个会议,不要自动挑第一个。
|
|
55
55
|
- 向用户展示每个候选的 `meeting_title` / `meeting_no` / `meeting_id`,等待用户选择。
|
|
56
|
-
-
|
|
56
|
+
- 选择后用同一身份执行 `+meeting-events` 读取事件。
|
|
57
57
|
|
|
58
58
|
## 9 位会议号匹配
|
|
59
59
|
|
|
@@ -80,10 +80,10 @@ lark-cli vc +meeting-list-active --as bot --user-id <user_open_id> --format json
|
|
|
80
80
|
|---------|---------|---------|
|
|
81
81
|
| `--user-id is required when --as bot` | 应用身份未传目标用户 | 传入目标用户 open_id |
|
|
82
82
|
| 用户身份返回空列表 | 当前登录用户没有可见的进行中会议 | 确认用户是否在会中,或是否切错身份 |
|
|
83
|
-
|
|
|
83
|
+
| 用户身份无权限 / 不可见 | 当前登录用户没有可见的进行中会议,或当前身份无法读取该会议 | 不要反复执行 `auth login`。确认用户是否在会中、是否切错 profile;用户明确要查询应用机器人可见的会议时,再拿目标用户 open_id 执行 `+meeting-list-active --as bot --user-id <user_open_id>` |
|
|
84
84
|
| 应用身份返回空列表 | 没有满足“目标用户在会中且应用机器人也在会中”的当前会 | 先让应用机器人入会,或确认 `user_id` 和会议状态 |
|
|
85
85
|
| `--user-id` 格式错误 | 传入了 internal user_id 或其他非 `ou_...` 值 | 改传目标用户 open_id |
|
|
86
|
-
| 应用身份权限不足 | 应用权限、租户安装、权限可访问的数据范围或 VC Agent privilege 未配置完整 | 不要执行 `auth login
|
|
86
|
+
| 应用身份权限不足 | 应用权限、租户安装、权限可访问的数据范围或 VC Agent privilege 未配置完整 | 不要执行 `auth login`。请应用开发者开通 `vc:meeting.bot.join:write`;再检查应用发布/安装和权限可访问的数据范围,均正确仍失败时再排查内测灰度权限 |
|
|
87
87
|
|
|
88
88
|
## 参考
|
|
89
89
|
|
|
@@ -47,11 +47,14 @@
|
|
|
47
47
|
|
|
48
48
|
**然后按图表类型 × 身份选路径**,读对应文件按其完整 workflow 执行(含读 scene 指南、生成内容、渲染审查、交付):
|
|
49
49
|
|
|
50
|
+
按上到下匹配, 命中即停:
|
|
51
|
+
|
|
50
52
|
| 图表类型 | 身份 | 路径 |
|
|
51
53
|
|--------------------|-------------------------------------|------------------------------------------------|
|
|
52
54
|
| 思维导图、时序图、类图、饼图、甘特图 | 任何身份 | [`../routes/mermaid.md`](../routes/mermaid.md) |
|
|
53
|
-
|
|
|
54
|
-
| 其他图表 | `
|
|
55
|
+
| 鱼骨图、金字塔图、流程图 | `Doubao` / `Seed` | [`../routes/dsl.md`](../routes/dsl.md) |
|
|
56
|
+
| 其他图表 | `Claude` / `Gemini` / `GPT` / `GLM` / `Doubao` / `Seed` | [`../routes/svg.md`](../routes/svg.md) |
|
|
57
|
+
| 其他图表 | `Other` | [`../routes/dsl.md`](../routes/dsl.md) |
|
|
55
58
|
|
|
56
59
|
> **⚠️ SVG 路径失败回退**:走 `routes/svg.md` 时,碰到以下情况之一 → **丢弃当前 SVG,改读 `routes/dsl.md` 从零重画,不要逐行修补**:
|
|
57
60
|
> - 渲染命令直接报错(语法级崩溃,不是 `--check` 的 warn/error)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: lark-wiki
|
|
3
|
-
version: 1.0.
|
|
3
|
+
version: 1.0.3
|
|
4
4
|
description: "飞书知识库:管理知识空间、空间成员和文档节点。创建和查询知识空间、查看和管理空间成员、管理节点层级结构、在知识库中组织文档和快捷方式。当用户需要在知识库中查找或创建文档、浏览知识空间结构、查看或管理空间成员、移动或复制节点时使用。当用户给出 doubao.com 的 /wiki/ URL/token 时,也应直接使用本 skill,不要因为域名不是飞书而回退到 WebFetch;路由依据是 URL 路径模式和 token,而不是域名。不负责:上传文件到知识库节点下(走 lark-drive)、编辑文档/表格/Base 内容(走 lark-doc / lark-sheets / lark-base)。"
|
|
5
5
|
metadata:
|
|
6
6
|
requires:
|
|
@@ -24,7 +24,8 @@ metadata:
|
|
|
24
24
|
|
|
25
25
|
## 快速决策
|
|
26
26
|
|
|
27
|
-
- 用户要**整理 / 盘点 / 归类 / 重构知识库、个人文档库、文档库目录或 Wiki 节点结构**,或要生成整理方案、目标目录树、移动计划时,不要只使用 Wiki 节点 API。必须先阅读 [`../lark-drive/references/lark-drive-workflow-
|
|
27
|
+
- 用户要**整理 / 盘点 / 归类 / 重构知识库、个人文档库、文档库目录或 Wiki 节点结构**,或要生成整理方案、目标目录树、移动计划时,不要只使用 Wiki 节点 API。必须先阅读 [`../lark-drive/references/lark-drive-workflow.md`](../lark-drive/references/lark-drive-workflow.md),再按其中 `Workflow Registry` 进入 [`knowledge_organize`](../lark-drive/references/lark-drive-workflow-knowledge-organize.md) workflow;该 workflow 负责 Drive / Wiki / 个人文档库的统一入口解析、资源盘点、分类计划、写前确认和结果验证。
|
|
28
|
+
- 用户要把**已有 Wiki 节点移出知识库,放到 Drive 文件夹或“我的空间”根目录**:使用 `wiki +move-to-drive`,不要使用 `wiki +move` 或 `drive +move`。这是会改变节点归属和权限继承的写操作,执行前确认源节点与目标位置。
|
|
28
29
|
- 用户给的是知识库 URL(`.../wiki/<token>`),且后续要查成员/加成员/删成员:先调用 `lark-cli wiki spaces get_node --params '{"token":"<wiki_token>"}'` 获取 `space_id`,后续成员接口统一使用 `space_id`。
|
|
29
30
|
- 用户要**删除**知识空间(`wiki +delete-space`)但只给了名称或 URL:**不能**把名称 / URL 原样传给 `--space-id`,必须先解析出真实 `space_id`。解析方式:
|
|
30
31
|
- URL(`.../wiki/<token>`):`lark-cli wiki spaces get_node --params '{"token":"<wiki_token>"}' --format json`,读 `data.node.space_id`。
|
|
@@ -34,6 +35,8 @@ metadata:
|
|
|
34
35
|
- 用户明确选定后再执行 `lark-cli wiki +delete-space --space-id <ID> --yes`(高风险写操作,必须显式 `--yes`)。
|
|
35
36
|
- 反例:不要把 wiki URL / 名称直接当 `--space-id`(如 `--space-id "https://.../wiki/<wiki_token>"`);务必先用 `wiki spaces get_node` 解析出 `data.node.space_id` 再传。
|
|
36
37
|
- 用户要在知识库中创建新节点,优先使用 `lark-cli wiki +node-create`。
|
|
38
|
+
- 用户要列出 Wiki 节点:先用 `wiki +space-list --as user` 拿数字 `space_id`,再用 `wiki +node-list --space-id <space_id>`。不要把 wiki URL、node token、doc token、名称直接当 `--space-id`。钻子节点时 `--parent-node-token` 必须是 wiki node token;如果用户给的是 docx/sheet/base URL,先用 `wiki +node-get --node-token <url>` 解析出 `node_token`。
|
|
39
|
+
- `wiki +node-list` 命中 `invalid_parameters`、`not_found`、`permission_denied` 时,不要重复调用同一参数;按 hint 修 `space_id` / `parent_node_token` / 权限。只有 `rate_limit` 才做退避重试。
|
|
37
40
|
- 用户说“给知识库添加成员/管理员”:先把目标解析成“用户 / 群 / 部门 / 应用”四类之一,再决定 `--member-type`,不要先调 `wiki +member-add` 再根据报错反推类型。
|
|
38
41
|
- 用户说“部门 + bot”:这是已知不支持路径。不要继续尝试 `wiki +member-add --as bot`;直接提示必须改成 `--as user`,或明确告知当前要求无法完成。
|
|
39
42
|
- 用户说“用户 / 群 / 应用 + 添加成员”:先解析对应 ID,再执行 `wiki +member-add`。
|
|
@@ -47,6 +50,7 @@ Shortcut 是对常用操作的高级封装(`lark-cli wiki +<verb> [flags]`)
|
|
|
47
50
|
| Shortcut | 说明 |
|
|
48
51
|
|----------|------|
|
|
49
52
|
| [`+move`](references/lark-wiki-move.md) | Move a wiki node, or move a Drive document into Wiki |
|
|
53
|
+
| [`+move-to-drive`](references/lark-wiki-move-to-drive.md) | Move a wiki node to a Drive folder and poll the async task |
|
|
50
54
|
| [`+node-create`](references/lark-wiki-node-create.md) | Create a wiki node with automatic space resolution |
|
|
51
55
|
| [`+delete-space`](references/lark-wiki-delete-space.md) | Delete a wiki space, polling the async delete task when needed |
|
|
52
56
|
| [`+space-list`](references/lark-wiki-space-list.md) | List all wiki spaces accessible to the caller |
|
|
@@ -74,7 +78,7 @@ Shortcut 是对常用操作的高级封装(`lark-cli wiki +<verb> [flags]`)
|
|
|
74
78
|
- `我的文档库` / `My Document Library` / `我的知识库` / `个人知识库` / `my_library` 都应视为 **Wiki personal library**,不是 Drive 根目录
|
|
75
79
|
- 处理这类目标时,先解析 `my_library` 对应的真实 `space_id`,再执行 `wiki +move`、`wiki +node-create` 或其他 Wiki 写操作
|
|
76
80
|
- 不要因为缺少显式 `space_id` 就退化成 `drive +move`
|
|
77
|
-
- 如果用户明确说的是 Drive
|
|
81
|
+
- 如果用户明确说的是 Drive 文件夹、云空间(云盘/云存储)根目录、`我的空间`,再按源对象分流:源对象是 Wiki 节点时用 `wiki +move-to-drive`,源对象已在 Drive 时用 `drive +move`
|
|
78
82
|
|
|
79
83
|
## API Resources
|
|
80
84
|
|