wecomcli-meeting
何时用:仅当用户明确指向企业微信『在线会议』(含会议号/入会链接、可远程参会)时使用;泛指约会默认先按消歧流程确认,纯日程走 wecomcli-calendar。企微会议全生命周期:创建、查询、搜索、详情(含纪要/待办)、转写原文逐字记录、更新、取消;仅说'开会/约个会'未明确类型时先追问确认,不可臆断直接创建。
git clone --depth 1 https://github.com/Pinvou/pinvou-agent /tmp/wecomcli-meeting && cp -r /tmp/wecomcli-meeting/pinvou3-app/src-tauri/resources/common/bundle/wecom-skills/wecomcli-meeting ~/.claude/skills/wecomcli-meetingSKILL.md
# 企业微信会议技能
> 执行任何 `wecom-cli` 命令前,必须先读取并完成 `wecomcli-shared` 技能的公共前置检查。
本 Skill 负责企业微信会议的全生命周期管理,包括创建、查询、搜索、取消会议,以及会议状态和参会人的管理。
**CRITICAL — 操作执行协议**(每次操作必须遵循):
1. 识别用户意图对应的操作类型(创建/查询/搜索/取消)
2. **用 `File(action="read")` 读取该操作的参考文档**(见下方"操作参考"表)
3. 严格按照参考文档中的工作流和命令格式执行
4. 禁止跳过步骤 2 直接执行命令,即使你认为已经知道如何操作
— 原因:每个操作的参数格式、可选字段和边界行为都在参考文档中精确定义,凭记忆操作极易因参数错误导致调用失败
## 适用范围
### 适用
- 创建 / 新建在线会议(含会议号 / 入会链接,可远程 / 视频参会;含"线下开 + 外地同事远程接入"的会)
- 查看 / 浏览会议列表(最近有什么会、查某时间段的会议)
- 搜索会议(按关键词、会议名找某个会议)
- 查看会议详情(主题、时间、参会人等)
- 更新 / 修改会议(改时间、加减人;不支持更新周期会议)
- 取消会议(不支持取消周期会议)
### 不适用
- 创建、更新、取消周期 / 重复会议(每周 / 每月 / 每天重复)→ 均不支持,引导用户在企业微信客户端手动操作
- 回复 / 拒绝会议邀请(接受 / 拒绝 / 待定,含"拒绝这个会""不参加")→ 不支持,引导用户在企业微信客户端操作或私信发起人
### 易混淆场景路由
- 用户要的是**不含在线会议链接的日程 / 纯线下面对面碰头**(约日程、看今天有什么安排、安排纯线下会议)→ 改用 `wecomcli-calendar`
- 查忙闲 / 约多人共同空闲 → 改用 `wecomcli-calendar`
- 预订 / 查询公司会议室(订会议室、查会议室空不空、查办公楼)→ 会议室查询能力在 `wecomcli-calendar` 技能;创建/更新会议时若要订/换会议室,`读取 wecomcli-calendar 技能` 的会议室查询参考拿 `meeting_room_id` 传入本技能的 create/update
- 用户仅说"开会 / 约个会 / 安排个会 / xx 会"等、**未明确是日程还是在线会议**(创建场景)→ 必须先用文字追问消歧(固定问题"需要创建日程还是会议?",请用户回复"日程 / 会议"),不得臆断直接创建
- **仅给了地点 / 会议室号**(如"在 1605 开会""订个会议室开会")→ 不构成"明确是会议",仍需先用文字询问消歧,不能因带地点就跳过追问
- **查询场景的模糊表述**("最近有什么会 / 有哪些会")→ 严禁追问,日程和会议都查并合并展示;仅当明确提到"在线会议 / 视频会议 / 入会链接 / 会议号 / 腾讯会议 / 远程参会"时才只查会议
## 路由规则
| 用户意图 | 参考文档 |
|---------|---------|
| 新建会议、开个会、安排视频会议 | [meeting-create](references/meeting-create.md) |
| 查会议、我的会议列表、最近有什么会、查某个时间段的会议 | [meeting-list](references/meeting-list.md) |
| 搜索会议、找某个会议、找上周的周会 | [meeting-search](references/meeting-search.md) |
| 查看会议详情、看看参会人 | [meeting-list](references/meeting-list.md) |
| 修改会议、更新会议、改个时间、加人/移除人 | [meeting-update](references/meeting-update.md) |
| 取消会议、不开了 | [meeting-cancel](references/meeting-cancel.md) |
| 查看会议转写原文、逐字记录、把会上说的原话发我、要转写/转录文字、第几段转写 | [meeting-original-get](references/meeting-original-get.md) |
| 总结会议 / 要会议纪要 / 这个会讲了啥 / 看会议待办 / 总结待办 | 见下方核心场景「7. 会议总结(纪要/待办)」,编排 [meeting-list](references/meeting-list.md) 的 get 与 [meeting-original-get](references/meeting-original-get.md) |
| 约日程、日程安排、看看今天有什么安排 | wecomcli-calendar 技能 |
| 查忙闲、看看某人什么时候有空 | wecomcli-calendar 技能 |
| 安排纯线下面对面会议(不含在线会议链接) | wecomcli-calendar 技能 |
> **技能边界(会议 vs 日程)[CRITICAL]**:本技能只创建**含在线会议链接的会议**(含会议号/入会链接,供远程/视频参会)。只要涉及在线会议链接就归本技能;不含在线会议链接的纯线下面对面会议属于日程,使用 `读取 wecomcli-calendar 技能`。用户仅说"会议/会/开个会/约个会/安排个会/xx会/xx会议"等而未明确是日程还是会议时,**必须先用文字追问**,禁止默认直接创建会议:
>
> **问题与选项固定 [CRITICAL]**:消歧确认时,问题与可选项都必须原文照用、严格禁止修改任何内容——问题固定为 `"需要创建日程还是会议?"`,可选项固定为 `日程` / `会议`;不得改写问题措辞、增减或改写选项、翻译,或自行设计其他表述(如"在线会议 / 线上会议 / 视频会议 / 线下会议"等)。
>
> 用文字向用户提问:`需要创建日程还是会议?(请回复:日程 / 会议)`
>
> 用户答「会议」→ 留在本技能创建会议;答「日程」→ 改用 `读取 wecomcli-calendar 技能` 创建日程。
>
> 此文字消歧仅用于「创建」;查询场景严格禁止追问——明确指向在线会议时只查会议,明确是日程/安排时只查日程,模糊表述("会 / xx会 / 最近有什么会"等)则日程和会议都查(见下文「查询消歧」)。
>
> **"会议""会""开会"等词本身不构成"明确" [CRITICAL]**:这些词只表示要碰头议事,并未说明是日程还是会议。禁止仅因 query 里出现"会议"二字就默认归本技能(会议)创建,也禁止反向默认成日程——只要未明确,一律先用文字追问后再路由。只有出现"入会链接 / 会议号 / 视频会议 / 腾讯会议 / 远程参会"等明确信号时才直接归会议。
>
> **同时支持线下与远程参会**(如"线下开、外地同事远程接入")时,因含在线会议链接,归本技能创建——创建会议会同时生成对应日程,无需再去 wecomcli-calendar 技能另建日程。
>
> **仅有地点/会议室号**(如"在 1605 开会""到 A 座会议室碰一下""订个会议室开会")不构成"明确是会议"——会议室里同样可能只是纯线下安排,是日程还是会议仍未知,必须先用文字询问消歧,不能因为带了地点就跳过追问。
> **list vs search 的选择原则**:用户明确提到主题/名称关键词时用 `search`(把关键词传入 `keywords`);只按时间范围或泛浏览时用 `list`,禁止把日期当 `keywords` 喂给 `search`。两者有时可组合:先search 定位,再 list 确认时间段全貌。
> **查询消歧(模糊查询时日程 + 会议都查)[REQUIRED]**:查询场景严格禁止用文字追问"是日程还是会议"——日程/会议消歧追问仅用于创建,查询时一律按以下规则直接处理、不追问。**判定分两个独立维度,不要混为一谈**:
>
> **维度一:查哪一边(日程 / 会议 / 两边都查)**
> - **明确是在线会议** → 用户明确提到"在线会议 / 视频会议 / 入会链接 / 会议号 / 腾讯会议 / 远程参会"等在线会议专属特征时,留在本技能只查会议。
> - **明确是日程 / 安排** → 用户说的明显是日程类内容(如"日程 / 安排 / 我的安排 / 日历",且不带在线会议特征)时,改用 `读取 wecomcli-calendar 技能` 只查日程。
> - **模糊表述无法判定**("会 / xx会 / xx会议 / 开会 / 最近有什么会 / 有哪些会 / 找下 xx会议"等,既可能是日程也可能是会议)→ **日程和会议都要查**:既用本技能查会议,又 `读取 wecomcli-calendar 技能` 查日程。
>
> **维度二:每一边用 `search` 还是 `list`(与维度一独立,逐边各自判断)**
> - **有主题/名称关键词**(如"找下 xx会议""搜一下项目评审会议")→ 该边用 `search`(把关键词传入 `keywords`)。
> - **只有时间/日期或泛浏览无关键词**(如"最近有什么会""查一下明天的会议")→ 该边用 `list`,禁止把日期当 `keywords` 喂给 `search`。
> - 即使"两边都查",也按本维度对每一边各自选择:带关键词时两边都用 `search`,纯时间/泛浏览时两边都用 `list`。
>
> **合并展示**:两边都查时,合并结果后统一展示——按是否含在线会议链接分成「(会议)」(来自会议侧、或日程中 `meeting.meeting_code` 非空者)和「(日程)」(`meeting_code` 为空的纯日程)两部分,同一场会议在两边都出现时按"主题 + 时间"去重只保留一条,末尾汇总"共 N 场,其中会议 X 场、日程 Y 场"。
>
> - 本消歧仅针对查询;创建仍按下文"日程 vs 会议"用文字追问。
**触发表达示例**:
- "帮我开个会" / "安排一场会议" / "创建视频会议"
- "看看我的会议" / "查一下明天的会议" / "最近有什么会"
- "搜一下项目评审会议" / "找找上周的周会"
- "取消那个会议" / "这个会不开了"
- "帮我总结下 xx 会议" / "这个会讲了啥" / "把 xx 会议纪要发我" / "看下这个会的待办" / "按决策点整理下这个会"
## 前置条件
- 需要企业微信账号且已登录
- 取消/更新操作不预先按"是否本人创建"拦截,直接执行命令、由接口返回结果判断能否操作
- 参会人 userid(前缀为 `wo`)组装为 `[{"userid": "woxxx"}]` 对象数组格式传入;用户提供的是姓名时通过 `读取 wecomcli-contact 技能` 解析为 userid
## 核心场景
### 1. 新建会议
以当前用户为发起人创建一场新会议。
**CRITICAL — 执行前必须先读取参考文档**:收到创建会议意图后,第一步立即读取 [`meeting-create`](references/meeting-create.md),按其中的完整工作流(参数补全 → 参会人解析 → 参会人忙闲检查 → 调用创建接口 → 获取详情展示)逐步执行,禁止在未读取参考文档的情况下直接发起任何操作。
> **参会人忙闲检查 [REQUIRED]**:创建 / 更新会议时须在时间敲定前查忙闲,避免约到冲突时间。忙闲接口不在本技能,须 `读取 wecomcli-calendar 技能` 的 [忙闲查询参考](../wecomcli-calendar/references/calendar-freebusy.md) 调`free list`。**创建会议时**:查询对象 = 当前用户自己 + 其他内部参会人(`wo` 前缀),**只有自己也要查**(避免约到自己已占用的时段);外部联系人(`wm`,忙闲不可查)不纳入查询对象、但**不因此跳过**整体检查;仅忙闲接口调用失败时降级放行。**给已有会议加人、不改时间时**:忙闲查询只针对**新增参会人**、且查会议原时段,禁止把当前用户(自己/创建者)和已有参会人纳入——他们正被本会议占用、必然显示"忙",纳入会误报冲突(详见 [meeting-update](references/meeting-update.md) 工作流)。
> **会议室预订 [REQUIRED]**:用户创建会议时提到"订会议室 / 在 1605 开 / 找个会议室 / 某栋楼的会议室"等意图时,会议室查询能力不在本技能——须 `读取 wecomcli-calendar 技能` 的 [会议室查询参考](../wecomcli-calendar/references/calendar-meeting-room.md)(`buildings list` + `rooms search`)查到真实会议室,拿 `meeting_room_id` 传入 `meeting create`(占用)。禁止把会议室名仅写进 `location`、禁止凭记忆/猜测编造 `meeting_room_id`;先订房后建会,详见 [meeting-create](references/meeting-create.md) 步骤 4。
> 详见 [meeting-create](references/meeting-create.md)
### 2. 查询会议列表
**CRITICAL — 执行前必须先读取参考文档**:收到查询会议列表意图后,第一步立即读取 [`meeting-list`](references/meeting-list.md),按其中的完整工作流(时间范围确定 → 拉取列表 → 批量获取详情 → 反查参会人姓名 → 合并输出)执行,禁止在未读取参考文档的情况下直接发起任何操作。
> **模糊查询必须日程 + 会议都查 [CRITICAL]**:若本次是"会 / xx会 / xx会直出好看的网页/落地页/banner/海报/产品介绍页/数据报告/简历/作品集等视觉物料——套一套设计系统,模型自由写自包含 HTML,颜值由规则锁死、不靠模板。用户说"做个网页/页面/落地页/banner/海报/报告页/作品集/简历"或"把这份内容做成网页版"时使用。⚠️ 不含信息检索:查天气/查行情/查股价/查数据请走对应连接器,不是本技能。
【何时用:仅当用户明确指向钉钉/DingTalk(钉钉文档、钉钉日程等)时使用;泛指做文档/表格/待办/审批默认走本地工具,不要误用钉钉】用 dws CLI 管理钉钉:AI表格/AI搜问(找人首选)/目标管理(Agoal)/组织大脑/日历/通讯录/群聊与机器人消息/待办/审批/考勤/日志(日报周报)/DING消息/钉钉文档/云盘/Markdown文件/AI听记/邮箱/在线电子表格(axls)/知识库/白板/开放平台文档/个人IM与OA事件订阅。用户要求操作上述钉钉产品时使用。
【何时用:仅当用户明确指向飞书/Lark(发到飞书、飞书文档等)时使用;泛指做个文档或PPT或表格或方案默认走本地工具,不要误用飞书】飞书多维表格(Base)操作:建表、字段、记录、视图、统计、公式/lookup、表单、仪表盘、应用模式(BaseApp/AppMode 页面与组件)、Workspace 目录、workflow、角色权限;遇到 Base/多维表格/bitable、BaseApp/AppMode 或 /app/ 链接时使用。BaseApp 不走 lark-apps;文件导入转 lark-drive,认证/授权转 lark-shared。
【何时用:仅当用户明确指向飞书/Lark(发到飞书、飞书文档等)时使用;泛指做个文档或PPT或表格或方案默认走本地工具,不要误用飞书】飞书日历:管理日程和会议室。查看/搜索日程、创建/更新日程、管理参会人、查询忙闲和推荐时段、预定会议室。不负责:查询视频会议记录(本 skill 只覆盖日程;lark-vc 技能未随包收录,可 CLI 直连,见意图路由)、待办任务(走 lark-task)。
【何时用:仅当用户明确指向飞书/Lark(发到飞书、飞书文档等)时使用;泛指做个文档或PPT或表格或方案默认走本地工具,不要误用飞书】飞书云文档(Docx/Wiki)与思维笔记内容操作:读取、创建、编辑文档,插入或下载图片附件,查询或回滚历史版本。用户给出文档 URL/token(含 doubao.com 的 /docx/、/wiki/)时使用,按 URL 路径/token 而非域名路由;内嵌表格、多维表格、画板先提取 token 再切对应 skill。文档评论走 lark-drive;表格或 Base 内部数据操作不在本 skill。
【何时用:仅当用户明确指向飞书/Lark(发到飞书、飞书文档等)时使用;泛指做个文档或PPT或表格或方案默认走本地工具,不要误用飞书】飞书云空间:管理 Drive 文件/文件夹,上传下载、复制移动删除、评论、权限、密级标签、版本、改标题,导入 Word/Markdown/Excel/CSV/PPTX/.base 为在线文档;doubao.com 云空间 URL 同走本 skill,不回退 WebFetch。不负责:文档内容编辑(lark-doc)、表格/Base 表内数据(lark-sheets/lark-base)、知识库节点(lark-wiki)。
【何时用:仅当用户明确指向飞书/Lark(发到飞书、飞书文档等)时使用;泛指做个文档或PPT或表格或方案默认走本地工具,不要误用飞书】飞书即时通讯:收发消息和管理群聊。发送和回复消息、搜索聊天记录、管理群聊成员、上传下载图片和文件、管理表情回复、发送应用内/短信/电话加急、发送和处理交互卡片(Interactive Card)与卡片按钮回调(card.action.trigger)。当用户需要发消息、查看或搜索聊天记录、下载聊天中的文件、查看群成员、搜索或创建群聊/话题群、管理标记数据、Feed 置顶与标签数据、处理卡片回调时使用。
【何时用:仅在其他 lark-* 技能遇到认证/授权/身份/配置问题时,或首次使用 lark-cli 时;泛指需求默认走本地工具】lark-cli 共享规则:首次配置(config init)、认证登录(auth login --domain/--scope,split-flow)、登录态查询与撤销(auth status/logout/whoami)、--as user/bot 身份切换、权限不足与 missing_scope 处理、JSON 输出契约与 _notice、update 更新、高风险操作审批(exit 10)。