openclaw-skills/lark-vc-agent/SKILL.md
飞书视频会议会中能力:用于让应用机器人真实加入或离开正在进行的会议,并读取当前身份可见的会中事件、发送会中文本消息或会中表情。适用于用户询问正在开的会议发生了什么、谁在发言、是否共享内容,或需要发现当前可读的进行中会议 ID。不负责已结束会议搜索、参会人快照、纪要、逐字稿或录制查询,这些使用 lark-vc 技能。
npx skillsauth add seaworld008/commonly-used-high-value-skills lark-vc-agentInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
相关技能:
../lark-shared/SKILL.md — 认证、身份切换、权限处理../lark-vc/SKILL.md — 视频会议的核心概念(Meeting / Note / Minutes 等),本 skill 直接复用,不再重复定义../lark-shared/SKILL.md 中的权限申请流程,以下方的指引为准。lark-cli 提示 missing required scope(s) / missing_scopes,不要走普通权限申请流程;先提示用户加入早鸟群确认内测权限已开通,再按“应用身份权限配置检查”处理应用权限、安装和数据范围。lark-cli 返回 error.code=20017 / ErrNotInGray,提示用户加入早鸟群:https://go.larkoffice.com/join-chat/2f4nb0e1-fe00-4f67-bed7-25beaf533fbd。+meeting-list-active 和 +meeting-events 缺少权限时,先按上面的内测提示确认功能已开通,再读取 CLI 错误中的 hint,并根据当前调用身份处理:
--as user:按 CLI 提示为当前用户授权 vc:meeting.meetingevent:read。--as bot:请应用开发者开通 vc:meeting.bot.join:write,不要执行 auth login;随后按“应用身份权限配置检查”确认应用发布、安装和数据范围。本 skill 与 lark-vc 并列:
lark-vc 负责"会后查询":搜索历史会议、参会人快照、纪要/逐字稿/录制lark-vc-agent 负责"会中动作":机器人入会 / 读取进行中会议的实时事件 / 发送会中文本或会中表情 / 机器人离会按此分工路由,避免两个 skill 语义混淆。
| 用户意图示例 | 应路由到 |
| ---------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| "帮我入会 123456789"、"代我参会"、"让机器人进会旁听" | 本 skill +meeting-join |
| "会议现在还开着,谁刚加入了"、"会议里谁在发言"、"有人共享屏幕吗"(进行中会议) | 本 skill +meeting-events |
| "我/某个用户现在在哪个会里"、"给我找当前可拉事件的 meeting_id" | 本 skill +meeting-list-active |
| "在会里发一句 xx"、"提示大家 xx"、"反馈听不到/看不到/声音清楚/效果不错"(进行中会议) | 本 skill +meeting-message-send |
| "退出会议"、"让机器人离开" | 本 skill +meeting-leave |
| "昨天那场会有谁参加过"、"搜昨天的会"、"查纪要/逐字稿/录制" | lark-vc |
| "帮我参会,结束后把纪要发到群" 等跨阶段场景 | 按序编排:本 skill(入会 → 读事件)→ 会议结束后用 lark-vc / lark-minutes 拉纪要 → lark-im 发群 |
不要向用户暴露内部身份缩写;对用户只说“用户身份”或“应用身份”。
| 场景 | 使用身份 | 关键规则 |
| ---- | -------- | -------- |
| 查询当前登录用户正在参加的会议 | --as user | 不传 --user-id;拿到的 meeting_id 后续继续用 --as user 读事件 |
| 查询目标用户且应用机器人也在会中的会议 | --as bot --user-id <user_open_id> | --user-id 必须是 ou_...;拿到的 meeting_id 后续继续用 --as bot 读事件 |
| 用户明确要求应用机器人入会/旁听/代参会 | --as bot | 这是写操作,会真实产生入会记录;返回的 meeting.id 后续继续用 --as bot |
硬规则:meeting_id 从哪种身份路径拿到,后续 +meeting-events / +meeting-message-send 就沿用哪种身份,除非用户明确要求切换场景(例如从“仅查询我当前会”改成“让应用机器人入会旁听”)。
+meeting-join。只是查数据不要入会。+meeting-join --meeting-number 只接受 9 位纯数字会议号,不是会议链接整串、也不是 meeting_id。如果用户只是给了 9 位会议号并询问会中内容,先按 +meeting-list-active 的会议号匹配流程找 meeting_id,不要直接入会。meeting.id 必须立刻记录——后续 +meeting-events / +meeting-leave 都靠它,不能用 9 位会议号替代。--as bot 执行真实入会;不要用当前登录用户身份尝试让应用机器人入会。+meeting-join reference 的错误排查段落,重点确认会议号、密码、会议状态、等候室 / 审批以及会议是否禁止当前身份加入。+meeting-events。meeting_id(长数字 ID),不是 9 位会议号。meeting_id 来自用户身份发现时,继续用 --as user;来自应用身份发现或 +meeting-join 时,继续用 --as bot。身份不一致会导致空结果或权限错误。lark-cli vc +detail --meeting-ids <meeting.id> 获取会议产物信息。note_id、minute_token 和用户意图,按 lark-vc 的产物决策读取正文、逐字稿或妙记。vc meeting get --with-participants(见 lark-vc)--page-all,除非用户明确要求“只查一页”,或确实需要控制返回体大小。meeting、identity、events、warnings、has_more、page_token;identity 表示当前读取身份,事件 actor 含 participant_type、role 和可读 label,事件细节保留在 payload。--format pretty(时间线更易读,并带当前身份标签);需要稳定字段做结构化处理时用 --format json;需要流式消费事件时用 --format ndjson。has_more=true、pretty 里的 more available,或返回了非空 page_token,就不能把当前结果当作完整事件流;默认应继续分页,或明确告诉用户当前只是部分结果。page_token,下次增量拉取直接续,不要从头再拉。+meeting-events 来回答一场正在进行中的会议内容,就不能直接复用旧结果。 无论用户是在问“现在/刚刚/最新”的状态,还是让你“总结一下这个会议讲什么”,都必须先重新拉一次当前事件流,确认拿到的是最新信息,再基于最新结果回答。只有在用户明确要求基于某次历史快照继续分析时,才可以复用旧结果。chat_received_items[].message_type == 3 表示会中 reaction;构造 IM post 时,先用 lark-im reaction emoji 白名单 判断同一 item 的 content:白名单内才写成 Feishu post emotion 节点,不在白名单内则保留原始 key 并写成文本节点,例如 [CanNotSee]。普通聊天按文本发送。不要从 pretty/Markdown 重新拼消息,也不要把整条消息退化成纯文本;只降级非法 reaction key。用户已说“发给我 / 推送给我 / 发到我的单聊”时,默认用 bot 身份直接发当前用户;收件人不明确时只补问收件人。meeting_id 时,先用用户身份发现当前会议;如果用户明确要求应用机器人视角,或上下文已经是应用机器人参会流程,再用应用身份发现。若返回多个会议,展示候选并让用户选择。meeting_no == <9位会议号>;匹配到唯一会议后取长数字 meeting_id,再用同一身份查事件。只有用户明确要求“入会 / 让应用机器人旁听 / 代我参会”时才改用 +meeting-join。+meeting-message-send。meeting_id,不是 9 位会议号。若用户只给 9 位会议号,先按当前身份执行 +meeting-list-active 并按 meeting_no 匹配,匹配到唯一会议后再发送;不要为了发消息自动入会。发消息只需 meeting_id,不要先查 +detail。meeting_id 来自用户身份发现,就继续 --as user;来自应用身份发现或应用机器人入会,就继续 --as bot。--text;会中表情 / 反馈使用 --emoji-type。--emoji-type 必须从 reference 里的完整列表中选择,大小写敏感。LOVE、SMILE、THUMBSUP)和 4 个 VC 反馈 key(VC_CanNotSee、VC_NoSound、VC_LooksGood、VC_SoundsClear)。emoji_type,也不要把 natural language 硬编码成不存在的 key;如果用户只给语义,可在完整列表中选择最接近的 key,无法判断时先确认。lark-im。示例:
lark-cli vc +meeting-message-send --as user --meeting-id <meeting_id> --text "稍等,我在看文档"
lark-cli vc +meeting-message-send --as bot --meeting-id <meeting_id> --msg-type reaction --emoji-type LOVE
lark-cli vc +meeting-message-send --as bot --meeting-id <meeting_id> --msg-type reaction --emoji-type VC_NoSound
+meeting-leave --as bot --meeting-id <长数字 meeting_id>;不应因任务完成而执行离会。--meeting-id 必须是长数字会议 ID,通常来自 +meeting-join 返回的 meeting.id,也可以来自应用身份 +meeting-list-active 返回的 meeting_id。如果来自 list-active,必须确认应用机器人当前就在该会中。不接受 9 位会议号。+meeting-join 即可(非真正"不可逆")。+meeting-list-active 用来发现当前进行中的会议,并拿到后续 +meeting-events 需要的长数字 meeting_id。lark-cli vc +meeting-list-active --as user --format json,用于发现当前登录用户正在参加的会议;后续 +meeting-events 继续 --as user。lark-cli vc +meeting-list-active --as bot --user-id <user_open_id> --format json,--user-id 必须是目标用户 open_id,即 ou_...;返回该用户当前正在参加且应用机器人也在会中的会议。它不是全量会议搜索接口。后续 +meeting-events 继续 --as bot。meeting_title / meeting_no / meeting_id 展示候选,等待用户明确选择后再调用 +meeting-events。meeting_no 匹配。匹配失败时,不要自动入会;只有用户明确要求应用机器人真实入会时,才询问或执行 +meeting-join。# 1. 入会,捕获 meeting.id
AS=bot
JOIN=$(lark-cli vc +meeting-join --as "$AS" --meeting-number 123456789 --format json)
MID=$(echo "$JOIN" | jq -r '.data.meeting.id')
# 2. 会中轮询事件
# 沿用入会身份;默认用 --page-all 拉全当前可见事件;下次增量优先复用 page_token
# 典型间隔 10-30 秒
lark-cli vc +meeting-events --as "$AS" --meeting-id "$MID" --page-all --format pretty
# 3. 会后可选:进入 lark-vc 获取会议产物信息,再按 note_id / minute_token 决策读取
lark-cli vc +detail --meeting-ids "$MID"
如果用户随后明确要求退出 / 离开 / 结束参会,再单独调用 lark-cli vc +meeting-leave --as bot --meeting-id "$MID"。
如果已经知道目标用户 open_id,且 bot 已在会中,也可以先发现当前会:
lark-cli vc +meeting-list-active --as bot --user-id <user_open_id> --format json
lark-cli vc +meeting-events --as bot --meeting-id <id> --page-all --format pretty
如果只是回答当前登录用户所在会议发生了什么,使用用户身份一路查:
lark-cli vc +meeting-list-active --as user --format json
lark-cli vc +meeting-events --as user --meeting-id <meeting_id> --page-all --format pretty
Shortcut 是对常用操作的高级封装(lark-cli vc +<verb> [flags])。
| Shortcut | 类型 | 说明 |
| --------------------------------------------------------------- | -- | -------------------------------------------------------------------------- |
| +meeting-join | 写 | Join an in-progress meeting by 9-digit meeting number |
| +meeting-list-active | 读 | List active meetings and discover meeting_id for event reads |
| +meeting-events | 读 | List meeting events visible to the app agent (participant joined/left, transcript, chat, share) |
| +meeting-message-send | 写 | Send an in-meeting text message or reaction emoji |
| +meeting-leave | 写 | Leave a meeting by meeting_id |
+meeting-join:入参格式、写操作可见性风险、入会失败排查。+meeting-list-active:用户身份和应用身份的不同返回范围。+meeting-events:meeting_id 来源、身份延续、分页和错误码(10005 / 20001 / 20002)。+meeting-message-send:会中文本、完整 emoji_type 列表、身份延续和写操作风险。+meeting-leave:meeting_id 的来源与写操作可见性。应用身份 --as bot 报 no permission、missing required scope(s)、missing_scopes、ErrNotInGray 或 20017 时,不要引导用户执行 auth login。按顺序检查:
hint 处理;返回 console_url 时将其原样提供给用户。ErrNotInGray / 20017,再按 VC Agent 内测 privilege / 灰度白名单处理,提示加入早鸟群或联系平台同学开通。用户身份 --as user 调用 +meeting-list-active 或 +meeting-events 报普通 scope 缺失时,按“会议查询权限”处理;其他 shortcut 的 scope 缺失按各自 CLI hint 处理。普通 scope 缺失不表示接口不支持用户身份,只有 CLI 明确表明当前接口不支持用户身份访问时,才按用户意图切换处理:
--as bot,并按上面的应用身份权限配置检查处理。lark-vclark-vc 的 +detaillark-minuteslark-imlark-sharedThis supplement is maintained by the repository sync pipeline. It keeps the imported upstream skill usable inside this curated collection when the upstream source is intentionally concise.
1. Confirm that the user's task matches the skill trigger.
2. Read the relevant project files or user-provided context before acting.
3. Choose the smallest reversible action that advances the task.
4. Run the verification command or manual check that proves the result.
5. Report the outcome, evidence, and any remaining risk.
development
Enumerating failure modes via pre-mortem analysis. Systematically identifies failure scenarios for plans, designs, and features, scoring them with RPN/AP. Does not write code.
testing
Orchestrating specialist AI agent teams as a meta-coordinator. Decomposes requests into minimum viable chains, spawns each as an independent session in AUTORUN modes, and drives to final output. Use when a task spans multiple specialist domains, requires parallel agent execution, or needs hub-and-spoke routing across the skill ecosystem.
development
Converting document formats (Markdown/Word/Excel/PDF/HTML). Converts specs from Scribe and reports from Harvest into distributable formats; generates reusable conversion scripts. Use when converting documents, building accessibility-compliant PDFs, or creating Pandoc/LibreOffice pipelines.
testing
Curating cross-agent knowledge and guarding institutional memory. Extracts patterns from agent journals into METAPATTERNS.md, detects knowledge decay, propagates best practices, prevents organizational forgetting. Use when consolidating cross-agent insights, curating memory, or auditing knowledge decay.