feat: 新增企业微信助手 Agent,并修正 wecom-cli 条目 ref 漂移 (#112)

## 概述 / Overview

两件事:新增「企业微信助手」Agent(自带 15 个技能),并修正 `wecom-cli` 条目钉在 6 月快照的 ref 漂移。

Two changes: adds the **WeCom Assistant** agent (bundling 15 skills),
and fixes the `wecom-cli` entry whose pinned ref was stuck on a June
snapshot.

## 1. 新增企业微信助手 Agent

覆盖企业微信 **14 类服务、95
个方法**:消息、群聊历史、通讯录、日程、会议、待办、邮件、在线文档、在线表格、智能表格、智能文档、文档管理、微盘、媒体文件。

**采用内联形态 + 自带私有技能**:Agent 安装对 `agents/<id>/` 整目录递归复制且 `skills/`
不在排除集合里,因此装 Agent 即带全部技能,用户无需再单独获取技能合集。

### 技能集(15 个,约 5000 行)

- 基于上游 [wecom-cli](https://github.com/WecomTeam/wecom-cli) 官方
Skill(MIT,© WecomTeam)改写,每个技能末尾保留归属声明
- **新增 `wecom-chat`**:补齐上游零覆盖的群聊历史读取
- 补齐上游未覆盖的 `message.send`、`doc.create`,方法覆盖达 **95/95**
- 修正上游三处文档漂移:邮件能力描述与实际相反、会议室参数名已过时、`title_highlight` 字段不存在

### 相对上游的核心增量:风险治理

- 26 个对外可见或不可逆的方法逐个写明**执行前确认要求**
- 4 个条件升级方法给出**参数级判据**,而非按方法名一刀切
- 文档权限扩散两项加重处理,涉及**企业外可见**时单独再确认一次
- 内部标识禁止外露,不因用户索要而放宽
- 拒绝导出可识别到具体自然人的隐私字段

### 三条真机实测得出、上游未覆盖的硬约束

1. 机器人**只能写入/修改自己创建的数据**,真人创建的只能读
2. 每次响应携带的 `extra_identity_context` **禁止透露给用户**
3. 权限错误(`850002`/`851008`/`853006`)**不得重试**,须将 `help_message`
**逐字原样**转给用户

## 2. 修正 wecom-cli 条目 ref 漂移

`source.ref` 原钉在 2026-06-28 的 `72e14f7`,该快照只有 7
个子技能且用已废弃的旧命名(`msg`/`schedule`)。上游 v1.2.0 已扩展到 **14 个**技能。按旧 ref
安装的用户拿到的是三个月前的快照。

- `source.ref` → `78c514b2afee7c0d3d7be715628478421f37ee63`
- `children` 由 `scripts/gen-collection-children.py` 重新生成,**7 → 14**
- sidecar 同步 `provenance.content.ref`、`childCount` 与 `children`

## 验证 / Verification

**静态**
- 215 条示例命令追加 `--dry-run` 实跑,**215/215 退出码 0**
- 未知方法 0、未知参数 0、`--json` 未知字段 0、枚举违规 0
- 15 个 `SKILL.md` 的 frontmatter 经客户端 `skillFrontmatterSchema` 校验全部通过
- `validate_catalog_metadata.py --require-complete` 与
`gen-collection-children.py`:**0 error**

**真机(在真实企业微信账号上端到端)**
- **待办域 6/6 方法全通**(含 2 个 write-high),`items` 必填的隐蔽坑实测证实
- **日程域 5 个方法全通**(含 3 个 write-high)
- 消息发送、通讯录解析、微盘列表、邮件搜索、文档搜索、会议列表、智能表格创建均已实测通过
- 测试数据已全部清理,未污染真实账号

**尚未实测**:群聊历史(机器人未开通该品类)。相关文档已明确标注验证状态,未实测的能力不写「实际效果」段落。
This commit is contained in:
2026-09-03 03:50:00 -04:00
committed by GitHub
parent c83f917901
commit aec2e7c28b
57 changed files with 16893 additions and 45 deletions

View File

@@ -0,0 +1,112 @@
# 快速开始
从零到第一次对话,一共三步:装好命令行工具、扫码授权一次、开口说话。
整个环境只需要授权一次,之后每次对话直接说事就行。
## 你需要准备
| 项 | 要求 |
|---|---|
| Node.js | 18 或更高版本 |
| 企业微信 | 一个能扫码的企业微信账号(手机上装着企业微信即可) |
| 网络 | 能访问企业微信服务;查帮助文档也需要联网 |
## 第一步:让助手检查环境
直接开口问它就行,它会自己跑前置检查:
> 「企业微信接一下」
> 「帮我看看企微能不能用」
助手会依次确认三件事:命令行工具装了没、版本够不够、有没有授权。任何一步不通过,它会停下来告诉你卡在哪,
**不会带着半个环境硬往下做**
工具没装或版本太低时,它会提示安装:
```bash
npm install -g @wecom/cli
```
装完再让它检查一次。
> **实测**:界面里让助手接入企业微信时,它的执行顺序是「查版本 → 查授权状态 → 引导授权」,
> 三步都正确,没有编造不存在的命令。
## 第二步:扫码授权(只做一次)
没授权时,助手会引导你完成授权。它会打印一个授权链接和二维码,**你用企业微信扫一下**
授权就完成了(等待时间上限 5 分钟)。
- 二维码在终端里显示不出来时,可以让助手把二维码存成图片文件再给你看。
- 授权成功后助手会再查一次状态,**只有确认是「已授权」才会继续做事**。
**关于「登录」**:企业微信的命令行工具没有 `login` 这个命令,授权靠的是「初始化」这一步。
你不必记这些——但如果看到助手或别处的文档提到 `wecom-cli auth login`,那是不存在的写法。
> **实测**:授权信息以「机器人 + 授权真人」两重身份存在。实测账号里,机器人代表真人(王轶)工作;
> 它创建的待办,创建人显示的是**机器人身份**,不是你本人。这一点后面会反复影响你能改什么、不能改什么。
## 第三步:第一次对话
授权完就可以直接说事了。几个安全的起手式(都是纯读取,不会改任何东西):
> 「我今天有什么安排?」
> 「我有哪些待办?」
> 「我最近有哪些会?」
> 「微盘里最近有什么文件?」
> 「张三是谁?」
想试写入的话,从**只影响你自己**的动作开始:
> 「帮我记个待办:明天下午三点前把周报发出去」
助手会创建这条待办,并回显标题、参与人、截止时间。你在企业微信的待办里就能看到它。
这条只给你自己记,不分派给别人,所以助手会直接执行、不会追问。
**一旦涉及别人,行为就变了**:分派给同事、发消息、发邮件、改文档权限——助手会先把「对谁、做什么、
内容是什么」复述一遍,等你明确同意。详见 [99 风险与确认](99-风险与确认.md)。
## 第一次就会遇到的三件事
**1. 有些能力要单独开通。**
企业微信的机器人权限**按品类逐项开通**:通讯录是一项,文档是一项,微盘、会议、邮件、群聊各是一项。
没开通的品类,助手第一次调用就会被拒,它会把企业微信官方的开通指引**原样转给你**(包含链接,
一字不改),然后停下来。**它不会反复重试,也不会换个方法绕过去**——那是权限问题,重试没用。
实测账号最初只开了基础品类,后来才补齐了通讯录、文档、微盘、会议、邮件;
**群聊会话品类始终没开通**,所以 [04 群聊历史](04-群聊历史.md) 的能力完全没验过。
**2. 它只能改「它自己建的」东西。**
读是全的,写是窄的。你自己在企业微信里建的文档、日程、待办,助手**改不了**。
它会说明这条边界,然后给替代方案(「我另建一份」/「这个得你在客户端改」),而不是反复重试到失败。
**3. 它不给你看内部编号。**
成员编号、会话编号、文档编号这些内部标识只在它自己的调用链里流转,回复里一律用姓名、群名、文档标题。
你主动要也不会给——但它会换个方式帮你把事办成。文档链接、微盘分享链接这类**可点击的链接是可以给的**。
## 常见起步问题
| 现象 | 多半是什么 |
|---|---|
| 助手说命令不存在 | 工具没装,或没装成全局。执行 `npm install -g @wecom/cli` |
| 助手说版本太低 | 需要 1.2.0 及以上,重新安装即可 |
| 扫码后仍显示未授权 | 授权没走完(超时或中途退出),让助手重新引导一次 |
| 某类事情一直做不了,助手贴了一段官方指引 | 该品类未开通,按那段指引去开通。**别让助手重试** |
| 助手说「这份是你自己建的,我改不了」 | 正常边界,见上文第 2 条 |
| 查帮助也失败 | 查帮助本身需要联网(不需要授权)。离线机器上连帮助都查不了 |
## 下一步
- 想知道每类事情怎么说:回 [README 的「按能力查」](README.md#按能力查)
- 想知道什么时候会被问一句:看 [99 风险与确认](99-风险与确认.md)
- 想从最稳的能力开始用:[07 待办](07-待办.md) 和 [05 日程](05-日程.md) 是实测覆盖最完整的两个
## 📋 验证状态
| 项 | 状态 |
|---|---|
| 环境检查与授权引导(界面内,模拟真人) | ✅ 已实测:执行顺序为「查版本 → 查授权状态 → 引导授权」,未编造不存在的命令 |
| 首次扫码授权 | ✅ 已实测:实测账号于 2026-08-31 完成扫码授权,后续补齐了通讯录 / 文档 / 微盘 / 会议 / 邮件品类 |
| 助手能被正常创建并对话 | ✅ 已实测人格与原则文件逐字节完整加载15 个技能全部被发现,会话可用、自动问候正常 |
| 「你说一句话 → 助手真的执行完」的完整链路 | ⚠️ **未实测**。本机内存不足导致实例反复启动失败,界面里的 AI 审批也未配置(自动审批被拒),端到端跑不通 |
| 群聊会话品类的授权 | ❌ 未开通,未实测 |

View File

@@ -0,0 +1,103 @@
# 通讯录
按姓名、拼音、英文名或别名在企业微信通讯录里找人,拿到姓名、职务、部门和邮箱。
它同时是**几乎所有「约人 / 发给某人 / 分派给某人」的前置**——助手得先在通讯录里找到这个人,才能把事情落到他头上。
它只查人,不遍历部门树、不列组织架构、不导出花名册。
## 你可以怎么说
> 「张三是谁?」
> 「帮我找一下李四」
> 「王五在哪个部门?」
> 「公司有几个叫张伟的?」
> 「张三的邮箱是多少?」
> 「Tony 是谁」(英文名、拼音、别名都能搜)
## 📋 验证状态
| 项 | 状态 |
|---|---|
| 按姓名搜索成员 | ✅ **已实测**(真实企业微信账号,命令层) |
| 同名消歧、多候选选择 | ⚠️ 未实测(实测账号里没有同名样本) |
| 「你说一句话 → 助手自动查完再往下做」的完整链路 | ⚠️ 未实测 |
**实测记录**(命令层,人工在真实账号上执行):
```bash
wecom-cli contact users search --keywords '王轶'
```
返回解析出了真人「王轶」,带回了成员标识(内部使用)、所属部门(日冕科技)以及命中的关键词。
这一条同时印证了另一件事:**没有关键词就一定失败**——工具的帮助文本没有把关键词标成必填,
但实际不传就会被拒。助手知道这个坑,不会拿空请求去试。
## 能力清单
| 能做什么 | 命令 | 风险 |
|---|---|---|
| 按关键词搜索通讯录成员 | `wecom-cli contact users search` | 读取(隐私敏感:会返回邮箱、部门、职务) |
只有一个方法,但它是整套能力的枢纽。下面这些操作都要先经过它:
| 你想做的事 | 为什么要先查通讯录 |
|---|---|
| 约日程 / 开会时拉上某人 | 企业微信认的是成员标识,不认名字 |
| 把待办分派给某人 | 同上 |
| 把文档权限开给某人 | 同上 |
| 按「谁上传的」筛微盘文件 | 同上 |
| 按人(而不是邮箱地址)发邮件 | 同上 |
一次最多给 10 个关键词,彼此是「或」的关系(找三个人可以一次问完)。
## 注意事项
**只返回你有权限看到的人。** 助手是以你的身份工作的,搜到的是**你在通讯录里能看到的范围**
不是企业全体成员。所以——
- **搜不到 ≠ 这个人不存在。** 助手的说法会是「在你的通讯录可见范围内没有找到」,而不是「公司里没这个人」。
这两句话意思完全不同,别当成同一句。
- **数量不能当结论。** 就算搜到 3 个「张伟」,也不代表公司里只有 3 个张伟——**两种搜索模式都会截断结果**。
返回里带「结果受限」提示时,助手会明确告诉你「这不是全部」。
**同名时它会让你选,不会替你猜。** 找到多个同名的人,助手会按接口返回的原始顺序,
用「序号 + 姓名 + 英文名 + 职务 + 部门」列出来让你挑(超过 5 位先给前 5 位)。
它不会用内部编号让你辨认,也不会自作主张挑一个"最像的"就往下发消息。
**「职务」不是「职位」。** 返回里的那个字段表达的是「负责人」这类管理身份,不是 job title。
助手不会说「张三的职位是负责人」。
**要完整名单要说清楚。** 说「找一下张三」走的是默认模式(按热度截断,返回最相关的几个);
说「一共有几个张三」「列出所有叫李四的」这类**清点、穷举**意图,助手才会切到全量列表模式。
**这几件事它做不到**(会直接告诉你不支持,不会用多次搜索去拼凑):
- 遍历部门树、按部门列出全部员工
- 拉组织架构图
- 导出全量花名册
**成员标识不会给你看。** 这个能力唯一的产出物就是内部成员标识,也正因如此最容易漏。
你问「他的 ID 是多少」,助手会说明这属于内部字段,然后换个方式帮你把事办成。
**不会拿旧结果凑合。** 人可能离职、改名、换部门,所以每次需要指定人的操作,助手都会当场重新解析一遍,
不复用上一轮记住的结果。
### 三条通用边界在本域怎么体现
1. **只能改它自己建的东西**——通讯录这一域是**纯读取**,不存在写入,所以这条不影响你查人。
但它影响下游:查到人之后要把待办分派给他、或改他的文档权限时,边界就开始生效了。
2. **能力按品类逐项开通**——通讯录是独立的一个品类。未开通时第一次调用就会被拒,
助手会把企业微信官方的开通指引原样转给你(含链接,一字不改),**然后停下,不重试**。
实测账号是在 2026-09-03 单独补开了通讯录品类之后才搜通的。
3. **危险动作先问你**——查人本身不危险,助手直接查。但**批量搜集人员信息**(邮箱、部门、职务)时,
它会先说明要查什么再执行。另外,身份证号、家庭住址、健康状况这类隐私字段,
无论你怎么要求它都不会导出。
## 相关
- [03 消息与会话](03-消息与会话.md)——查到人之后给他发消息。注意:**发消息的目标不是从通讯录取的**
有额外一层限制,见那篇
- [05 日程](05-日程.md) / [06 会议](06-会议.md)——拉人进日程、会议前先查通讯录
- [07 待办](07-待办.md)——把待办分派给别人前先查通讯录
- [08 邮件](08-邮件.md)——按人名发邮件时先查邮箱
- [13 文档管理](13-文档管理.md)——给某人开文档权限前先查通讯录
- [99 风险与确认](99-风险与确认.md)——隐私敏感读取的处理规则

View File

@@ -0,0 +1,106 @@
# 消息与会话
以机器人身份往企业微信的单聊或群聊里发消息——文字、图片、文件、语音、视频都行,
也能把聊天里的图片和文件取下来。发消息是**发出去就收不回**的操作,所以助手每次都会先复述再发。
这一域的重心不在「怎么发」,而在**「怎么确保发对人」**。
## 你可以怎么说
> 「给张三发条消息:会议改到明天下午三点」
> 「在项目 A 群里通知一下,周报截止时间推迟到周五」
> 「把这个文件发到企微」
> 「我现在能给哪些人发消息?」
> 「把刚才那张图下载下来」
## 📋 验证状态
| 项 | 状态 |
|---|---|
| 查询可发送的会话列表 | ✅ **已实测**:返回 1 个会话 |
| 以机器人身份发消息 | ✅ **已实测:真实发送成功**(发给授权人本人) |
| 发图片 / 文件 / 语音 / 视频 | ⚠️ 未实测 |
| 取聊天里的媒体文件 | ⚠️ 未实测 |
| 另一条「非机器人身份」的发送路径 | ❌ **完全未验证,助手默认不用它**(见下) |
| 完整链路(你说一句话 → 助手自动发完) | ⚠️ 未实测 |
**实测记录**(命令层,人工在真实账号上执行):
```bash
wecom-cli message aibot sessions list # 返回 1 个会话
wecom-cli message aibot send ... # 返回 {"success": true},消息真实送达
```
发送对象是授权人本人,属于高风险写入,实测时是明确知情后执行的。
**实测中的一个发现**:单聊场景下,**会话的标识就是对方本人的成员标识**(两者是同一个值)。
这解释了为什么「发给你自己」不需要先查会话列表。
## 能力清单
| 能做什么 | 命令 | 风险 |
|---|---|---|
| 列出机器人最近的会话(也就是「能发给谁」) | `wecom-cli message aibot sessions list` | 读取 |
| 以**机器人身份**发 markdown / 图片 / 文件 / 语音 / 视频 | `wecom-cli message aibot send` | **高风险写入** |
| 发**纯文本**消息(非机器人身份,未经验证) | `wecom-cli message send` | **高风险写入** |
| 把聊天消息里的图片 / 文件 / 语音 / 视频取下来 | `wecom-cli message files get` | 读取 |
发送前,助手会向你复述这样一句(**措辞示意,不是实测记录**
> 即将以机器人的身份,向「项目 A 群」发送 markdown 消息:「周报截止时间推迟到周五。」——确认发送吗?
复述里一定有**发给谁(可读名称)、什么类型、正文原文或摘要**三项。回一句「嗯」「你看着办」不算同意,
助手会再确认一次。
## 注意事项
**「能发给谁」是一个很窄的集合,而且不等于「你能发给谁」。**
企业微信只允许机器人往两类对象发消息:
1. **你本人**(授权人自己)——随时可以。
2. **机器人最近有消息往来的会话**——单聊加群聊,**最多 20 个**,按最后一条消息时间从新到旧排,
不支持翻页也不支持筛选。
目标不在这 20 个里面,就是发不了。这时助手会**停下来**,告诉你「对方不在机器人最近的会话范围内,
需要对方先给机器人发一条消息」——**它不会换个更宽松的方法把消息硬发出去**。
另外,已解散、已封禁、机器人已被移出的群不会出现在这个列表里。
**发消息前它每次都会重新确认一次会话,所以偶尔多花一两秒。**
这不是卡顿,是刻意的:会话列表按最后消息时间排序,你思考选哪个群的这段时间里顺序可能已经变了。
你在多个候选里选完之后,助手还会**再查一次**,用你选定的对象重新匹配当次的结果——
宁可多查一遍,也不要发错群。
**通讯录里的人 ≠ 能发消息的对象。** 这两个集合不是一回事。同理,「能读历史的群」
(见 [04 群聊历史](04-群聊历史.md))和「能发消息的会话」也是两个不同的集合,标识不能互相搬运。
**有一条路径助手默认不用。** 除了机器人身份发送,接口层还有一条「发纯文本」的路径,
它的**实际发送身份(收件人看到是谁发的)从未验证过**,只能发纯文字、上限也更低。
助手的默认选择永远是机器人身份那条;只有你**明确要求「不要以机器人身份发」**时才会考虑另一条,
而且会先告诉你「这条路径未经验证」,再单独取得一次同意。
**「目标不在会话列表里」不是切换到这条路径的理由。**
**发图片和文件要多一步。** 本地文件得先换成企业微信内部的媒体形态才能发出去,
所以发图片、发文件比发文字多一个步骤,这一步由助手自动完成(见 [15 媒体文件](15-媒体文件.md))。
语音必须是真正的 AMR 格式,改个扩展名冒充是发不出去的。
**长度上限有两套口径。** markdown 正文按字节算20480纯文本路径按字符算2048
视频的标题和描述也按字节。超了助手不会**悄悄截断**——它会请你缩短,或者在你明确同意后拆成多条发。
**它不编造消息编号。** 接口本身也不返回消息编号,发送成功后助手只会告诉你「发给谁、发了什么类型」。
### 三条通用边界在本域怎么体现
1. **只能改它自己建的东西**——发消息是新建,不受这条限制。但**已经发出去的消息,
助手既不能撤回也不能编辑**,接口层根本没有这两个能力。
2. **能力按品类逐项开通**——消息属于基础品类。未开通时助手会把官方开通指引原样转给你然后停下,
不重试、不绕路。
3. **危险动作先问你**——两个发送方法都是高风险写入,**每一次发送前都会复述并等你点头**
没有例外。详见 [99 风险与确认](99-风险与确认.md)。
## 相关
- [02 通讯录](02-通讯录.md)——把人名解析成内部标识(但要注意:发消息的目标不从这里取)
- [04 群聊历史](04-群聊历史.md)——读群里聊了什么(与本域是两套独立的会话范围)
- [08 邮件](08-邮件.md)——发邮件是另一套能力,不走这里
- [14 微盘](14-微盘.md)——把文件放进微盘,而不是发给某人
- [15 媒体文件](15-媒体文件.md)——发图片 / 文件时中间那一步在做什么
- [99 风险与确认](99-风险与确认.md)——发送前的确认怎么算数

View File

@@ -0,0 +1,109 @@
# 群聊历史
读企业微信群里的历史消息:先看最近有哪些群在说话,再拉某个群某段时间的消息明细,
需要时把群里发的图片和文件取下来。**只支持最近 7 天。**
这是整套能力里**隐私敏感度最高的一项**——读到的是别人的聊天原文,所以助手每次读之前都会先说明要读什么。
> ⚠️ **这一域的全部能力目前完全未验证。** 实测账号的机器人**未开通「群聊会话」品类**
> 第一步就被企业微信拒绝,后面的所有能力都没有机会验证。详见下方「验证状态」。
## 你可以怎么说
> 「项目 A 群这两天聊了什么?」
> 「昨天群里说的那个事,帮我找一下」
> 「帮我总结一下产品群这周的讨论」
> 「把群里发的那个文件找出来」
> 「这周哪些群比较活跃?」
## 📋 验证状态
| 项 | 状态 |
|---|---|
| 列出最近有消息的群会话 | ❌ **未实测——被权限拦住** |
| 拉取某个群的消息明细 | ❌ **未实测** |
| 取群消息里的图片 / 文件 | ❌ **未实测** |
| 隐私说明、7 天窗口等行为约定 | ❌ **未实测** |
**卡在哪(这是唯一有据可查的事实)**
```bash
wecom-cli chat groups list ...
# → 返回错误码 853006
```
`853006` 的含义是**同类未授权**——实测账号的机器人**没有开通「群聊会话」这个品类**。
第一次调用就被拒,所以从「有哪些群」开始的整条链路都没跑起来。
**因此本文档不含「实际效果」一节,也不含任何实测对话或返回值**
(下文出现的引用块都是**措辞示意**,不是跑出来的记录)。
下面「能力清单」与「注意事项」的内容来自接口定义与技能文档,**是设计意图,不是实测结论**。
真正跑通之前,它们只能当作「预期会这样」来看。
**要让它可用**:需要为机器人开通群聊会话品类。助手第一次碰到这个错误时,会把企业微信官方的
开通指引**原样转给你**(含链接,一字不改),然后停下来——**不会反复重试,也不会换个方法绕**。
## 能力清单
> 以下均**未实测**。
| 能做什么 | 命令 | 风险 |
|---|---|---|
| 列出最近 7 天有消息的群会话 | `wecom-cli chat groups list` | 读取(隐私敏感:暴露群名与活跃度) |
| 拉取指定会话在某时间段的消息明细 | `wecom-cli chat messages list` | 读取(**最高隐私敏感**:他人聊天原文) |
| 取消息里的图片 / 文件 / 语音 / 视频 | `wecom-cli message files get` | 读取(隐私敏感:他人发的文件内容) |
三个都是只读,对企业微信侧没有任何改动,所以不需要「高风险确认」那一套。
但因为读的是别人的内容,**执行前必须先说明要读什么**。
## 注意事项
**读之前会先告诉你要读什么。** 助手会先说一句类似这样的话,再动手:
> 我将读取「项目 A 群」2026-08-29 00:00 至 2026-08-31 23:59 的聊天记录,用于整理讨论要点。
范围必须具体到**哪个会话 + 哪个时间段 + 读来干什么**。你没指定群时,它会先把群列出来让你选,
**不会「先全都拉下来再说」**——不会为了省一次交互就批量遍历好几个群。
**它不做人物画像。** 拉下来的原文只用于回答你当前这个问题,不主动扩散、不统计
「谁说话最多」「谁最晚下班」这类对个人的行为分析,除非你明确要求且目的正当。
**敏感信息会被略去。** 聊天记录里出现身份证号、银行卡号、家庭住址、健康状况这类能识别到具体个人的信息,
助手**不摘录、不转述、不写进总结**,即使你要求。它会说明「记录中含敏感个人信息,已略去」。
**只有最近 7 天,而且越界时是「静默返回空」不是报错。**
这是最容易误判的一条:查 7 天以前的内容,企业微信不会告诉你「超范围了」,
而是给你一个**空列表**。所以——
- 你说「上个月群里那个事」时,助手会**先告诉你只能查最近 7 天**,而不是拉一次空结果再回你「没找到」。
这两句话对你的意义完全不同。
- 拿到空结果时,它会先自查时间范围是不是越界了,再下「这段时间没有消息」的结论。
- 它不会用多次分段查询去凑 7 天以前的数据——服务端不给就是不给。
**只有群聊,没有单聊。** 「最近有哪些会话」这个列表**目前只返回群聊**。
你要看「我和张三的私聊记录」时,助手会先去通讯录把张三解析出来,再按人去拉,不会在群列表里找。
**图文混排的消息容易被漏掉。** 群里那种「一段文字配几张图」的消息,正文藏在嵌套结构里。
助手知道要去里面取,不会把它当成空消息漏掉——这一点在总结里最容易出现「消息凭空消失」。
**不会无限翻页。** 一个群一段时间的消息可能很多,助手会设一个页数上限,拉够了就停下来做总结,
并告诉你「还有更多历史消息,需要的话可以继续拉」。
**能读的群 ≠ 能发消息的会话。** 这两个是不同的集合,内部标识也不能互相搬运。
要往群里发东西,走 [03 消息与会话](03-消息与会话.md),那边有它自己的一套限制。
### 三条通用边界在本域怎么体现
1. **只能改它自己建的东西**——这一域**完全只读**,本来就不写任何东西。
助手不能替你在群里发言、不能撤回别人的消息、也不能编辑聊天记录。
2. **能力按品类逐项开通**——**本域正是这条规则最直接的受害者**:群聊会话品类未开通,
整个能力就是黑的。助手会把官方开通指引原样转给你,然后停下。
3. **危险动作先问你**——这里没有「危险写入」,但有**隐私读取的说明义务**
读之前必须讲清读哪个会话、什么时间段、读来干什么。这条不因为「只是读一下」而放宽。
## 相关
- [03 消息与会话](03-消息与会话.md)——往群里发消息(与本域是两套独立的会话范围)
- [02 通讯录](02-通讯录.md)——想读某人的单聊记录时,先在这里把人解析出来
- [15 媒体文件](15-媒体文件.md)——把群里的图片、文件落到本地
- [99 风险与确认](99-风险与确认.md)——隐私敏感读取的完整规则
- [README 的验证进度](README.md#各能力的验证进度)——本域为什么被列为「完全未实测」

View File

@@ -0,0 +1,127 @@
# 日程
把「什么时候、和谁、在哪儿」落到企业微信日历上:约日程、看安排、找大家都有空的时间、订会议室、改期、取消。
它管的是**不带会议号和入会链接**的安排——包括纯线下的面对面碰头,也包括订了会议室的线下会。
要的是带入会链接的在线会议,见 [06 会议](06-会议.md)。
## 你可以怎么说
> 「我明天有什么安排?」
> 「约个日程:周三下午 2 点产品评审,叫上张三和李四」
> 「项目评审是什么时候?」
> 「把周四那个会挪到下午 4 点」
> 「张三和李四这周什么时候都有空?」
> 「订个会议室16 楼的,能坐 6 个人」
## 📋 验证状态
| 项 | 状态 |
|---|---|
| 创建日程 | ✅ **已实测** |
| 查看日程列表 | ✅ **已实测** |
| 按标识取日程详情 | ✅ **已实测** |
| 改期(更新日程) | ✅ **已实测** |
| 取消日程 | ✅ **已实测** |
| 查多人共同空闲时段 | ⚠️ **未实测** |
| 查办公楼清单 / 查会议室可订性 / 订会议室 | ⚠️ **未实测** |
| 完整链路(你说一句话 → 助手自动约完) | ⚠️ 未实测 |
**实测记录**(命令层,人工在真实账号上执行):
一条完整的生命周期跑通了 5 个方法——
```
schedules create → schedules list → schedules get
→ schedules update15:00 改到 16:00
→ schedules cancel取消后列表归零
```
取消后复核,日程列表数量归 0`schedule_list_count: 0`),测试数据已清理干净。
其中 `update``cancel` 都属于高风险写入,实测时是明确知情后执行的。
**另有一条界面内的行为实测**(不是命令层):让助手「帮我约个会」时,它触发的消歧问句
**逐字正确**——`需要创建日程还是会议?(请回复:日程 / 会议)`
这一条是修复了一个缺陷之后复测通过的,见下方「注意事项」。
## 能力清单
| 能做什么 | 命令 | 风险 |
|---|---|---|
| 查某段时间的日程列表 | `wecom-cli calendar schedules list` | 读取 |
| 按关键词 / 组织人 / 参与人搜日程 | `wecom-cli calendar schedules search` | 读取 |
| 按标识批量取日程详情 | `wecom-cli calendar schedules get` | 读取 |
| 查多人共同空闲时段 | `wecom-cli calendar schedules free list` | 读取 |
| 查企业办公楼清单 | `wecom-cli meeting rooms buildings list` | 读取 |
| 查会议室这个时段空不空 | `wecom-cli meeting rooms search` | 读取 |
| 创建日程(可邀请参与人、可占会议室) | `wecom-cli calendar schedules create` | **高风险写入** |
| 更新日程(改时间 / 地点 / 人 / 会议室) | `wecom-cli calendar schedules update` | **高风险写入** |
| 取消(删除)日程 | `wecom-cli calendar schedules cancel` | **高风险写入** |
三个写方法都会**通知到别人**:建带参与人的日程会给对方发邀请、对方日历上立刻多出这条;
改期会通知全体参与人,被移除的人会直接失去这条日程;取消会通知所有人**且无法撤回**。
所以每一个执行前都会复述并等你同意。
## 注意事项
**日程和会议的区别只有一条:有没有会议号和入会链接。**
有的是「会议」,没有的是「日程」——**订了会议室的纯线下会也算日程**。
- **创建**时,你只说「开个会」而没说清是哪种,助手会**逐字问你一句固定的话**
`需要创建日程还是会议?(请回复:日程 / 会议)`
这句话的措辞是钉死的,不会被改写成「线上还是线下」「视频会议还是普通日程」之类的变体——
因为下游是按「日程」/「会议」这两个词匹配你的回复的。
**注意**:「在 1605 开会」「订个会议室开会」这种**只给了地点**的说法**也不算说清楚**
它还是会问——会议室里同样可能要远程接入。
- **查询**时它**不会问**这一句。你说「最近有什么会」,它会**日程和会议两边都查**,再合并给你,
末尾汇总「共 N 场,其中会议 X 场、日程 Y 场」。
**改约永远是「改」,不是「先取消再新建」。**
即使你说的是「把周四那个会取消,改约到周五」,助手也会走「更新」这条路。
原因很实在:**会议链接重建不出来**——一旦拆成取消 + 新建,参与人手里的旧入会链接会全部作废,
而新建的纯日程根本生成不了新链接。这条禁令没有例外。
**会议室查询归日程,不归会议——这一点反直觉。**
虽然命令看起来是「会议」开头的,但查办公楼、查会议室、订会议室这几件事都由日程这一域负责。
[06 会议](06-会议.md) 要订会议室时,会反过来调用这边。你不需要记这个,说「订个会议室」就行。
**会议室只写进「地点」等于没订。**
助手会真正去查这个时段这间会议室空不空拿到真实的会议室再占用而不是把「1605 会议室」
当成一行文字塞进地点字段。**订房是创建的前置阻塞项**——提到了会议室却没订上,
它不会「先把日程建了回头补会议室」。
指定的会议室查无此室或已被占用时,助手会**先告诉你**,哪怕只有一个替代候选也要你确认,
**不会静默换一间**。另外,会议室被占用时企业微信**不会告诉你被谁占了**,助手也就不会编。
**多人时会先查冲突再让你拍板。** 约多人日程时助手会先查共同空闲时段,把冲突摆给你看,
由你决定是按这个时间硬约还是换一个。它不会替你做这个决定。
注意共同空闲查询的窗口**不超过 24 小时**,而且**早于当前时刻的部分会被自动截断**——
所以「昨天大家什么时候有空」永远查不出东西。
**周期性(重复)日程完全不支持。** 创建、修改、取消重复日程都做不了,助手会直接告诉你要去
企业微信客户端操作,**不会用「建多条单次日程」「逐场修改」这类变通蒙混过去**。
**接受 / 拒绝日程邀请RSVP也不支持**,得你自己在客户端点,或者私信发起人。
**时间要给具体的。** 助手向你确认时间时,候选一定是**精确到分钟的具体时刻**(「明天 14:00」「周六 10:30」
不会给「上午」「下班前」这类模糊选项。你只给了开始时间没给结束时间时,它按 1 小时算,不追问。
**查询窗口有边界。** 日程列表能查的是当前时刻前后各 30 天,超出部分企业微信直接不返回(不是报错)。
超范围时助手会请你给一个更短的范围,**不会自行截断后假装查全了**。
### 三条通用边界在本域怎么体现
1. **只能改它自己建的东西**——**这一条在日程上最容易撞到**。你自己在企业微信里建的那条日程,
助手**改不了也取消不了**。它不会预先拦你,而是直接去执行,拿到权限错误后如实告诉你,
并建议你联系创建人或自己在客户端改。
2. **能力按品类逐项开通**——日程与会议室是独立品类。未开通时助手会把官方开通指引原样转给你,
然后停下,不重试。
3. **危险动作先问你**——建、改、取消三个动作**全是高风险写入**,每次都会复述
「主题、时间、涉及哪些人、能否撤回」并等你明确同意。见 [99 风险与确认](99-风险与确认.md)。
## 相关
- [06 会议](06-会议.md)——要入会链接和会议号的在线会议
- [02 通讯录](02-通讯录.md)——拉人进日程前先在这里把人名解析出来
- [07 待办](07-待办.md)——「记一件要做的事」而不是「占一段时间」时用它
- [08 邮件](08-邮件.md)——**通过邮件**发日程邀约是另一条路(只有你明确提到「邮件」时才走那边)
- [99 风险与确认](99-风险与确认.md)——三个写方法的确认规则

View File

@@ -0,0 +1,121 @@
# 会议
管带**会议号和入会链接**的在线会议:约会、查会、改会、取消,以及会后取智能纪要、会议待办和逐字转写原文。
和 [05 日程](05-日程.md) 的分界只有一条——**有没有入会链接**。没有链接的安排(哪怕订了会议室的线下会)
都归日程那边。
## 你可以怎么说
> 「开个视频会议,明天下午 3 点,叫上张三」
> 「查一下我明天的会议」
> 「搜下项目评审会」
> 「帮我总结下昨天那个会」
> 「把会上的原话发我」
> 「看下这个会有哪些待办」
## 📋 验证状态
| 项 | 状态 |
|---|---|
| 按时间范围列会议 | ✅ **已实测**(返回 0 场会议——账号里当时确实没有会议) |
| 创建会议 | ⚠️ **未实测** |
| 更新 / 取消会议 | ⚠️ **未实测** |
| 按关键词搜会议 | ⚠️ **未实测** |
| 取会议详情与参会人 | ⚠️ **未实测** |
| 读智能纪要 / 会议待办 | ⚠️ **未实测** |
| 拉逐字转写原文 | ⚠️ **未实测** |
| 完整链路(你说一句话 → 助手自动约完) | ⚠️ 未实测 |
**实测记录**(命令层,人工在真实账号上执行):
```bash
wecom-cli meeting list # 通过,返回 0 个会议
```
**只验证了「接口通、能返回」**,没有验证任何会议内容——因为账号里当时没有会议数据,
也没有创建真实会议去打扰他人。所以本页不写「实际效果」,也不虚构任何纪要、转写或参会人示例。
**另有一条界面内的行为实测**(不是命令层):让助手「帮我约个会」时,
它触发的消歧问句逐字正确——`需要创建日程还是会议?(请回复:日程 / 会议)`
这条与 [05 日程](05-日程.md) 共用同一句固定措辞。
## 能力清单
| 能做什么 | 命令 | 风险 |
|---|---|---|
| 按时间范围列会议 | `wecom-cli meeting list` | 读取 |
| 按关键词搜会议 | `wecom-cli meeting search` | 读取 |
| 批量取会议详情(含参会人、状态、纪要、待办) | `wecom-cli meeting get` | 读取 |
| 拉会议逐字转写原文 | `wecom-cli meeting original get` | 读取(**隐私高度敏感** |
| 创建在线会议 | `wecom-cli meeting create` | **高风险写入** |
| 更新会议(改时间 / 主题 / 加减人 / 换会议室) | `wecom-cli meeting update` | **高风险写入** |
| 取消会议 | `wecom-cli meeting cancel` | **高风险写入** |
三个写方法的后果:创建会向全体参会人发出邀请并生成入会链接(同时自动建一条对应日程);
更新会通知全体参会人、被移除的人直接失去这场会;取消会通知所有人**并作废入会链接,无法撤回**。
**忙闲查询和会议室查询不在这里**——那两件事归 [05 日程](05-日程.md)
本域要订会议室时会反向调用那边。你不需要记这个分工。
## 注意事项
**创建时那句问话是固定的。** 你只说「开个会 / 约个会 / xx 会」而没说清是日程还是会议,
助手会**逐字**问:`需要创建日程还是会议?(请回复:日程 / 会议)`
出现「入会链接 / 会议号 / 视频会议 / 远程参会 / 外地同事接入」这些信号时才直接建会议,不问。
**「同时线下开、外地同事远程接入」算会议**——建会议会自动生成对应日程,不会重复建两条。
**查询时它不问,两边都查。** 你说「最近有什么会」,助手会同时查会议和日程再合并,
**不会因为会议这边已经有结果就跳过日程那边**。反过来,你明确说「在线会议」时它只查会议;
查不到再兜底去日程查一把,命中就说明「这是一条日程,未关联在线会议链接」。
**改约禁止拆成「取消 + 新建」。** 和日程同理,而且在会议这边后果更直接:
**入会链接重建不出来**,拆开一次,参会人手里的旧链接就全作废了。即使你说「先取消再重约」,
助手也会走「更新」。
**总结会议有两条路,取决于你有没有提要求。**
- 只说「总结下这个会」「纪要发我」「看下这个会的待办」——助手优先返回企业微信**官方现成的智能纪要或待办**
不再去拉逐字转写。
- 带了任何自定义要求——「按决策点整理」「列出每人发言重点」「重点讲预算那部分」「写成正式纪要」——
助手会**跳过现成纪要,直接拉全部转写原文**重新加工。官方纪要是固定视角的成品,满足不了定制要求。
官方纪要不可用(没权限或内容为空)时,也会回落到转写原文。两边都没有时,
助手会如实说「该会议暂无智能纪要,也没有转写原文(可能未开启转写、会议未开始或无发言记录)」——
**不会编一段出来**
**「原话」就是原话。** 你要「逐字记录 / 把原话发我」时,助手会保留时间戳和说话人的逐行格式**原样输出**
不总结、不改写、不裁剪。只有当它是作为总结素材时才会被加工。
**转写原文属于隐私高度敏感内容**:只在你明确索取时才拉,不主动拉,也不会转发给会议之外的人。
**周期(重复)会议完全不支持**——创建、更新、取消都做不了,助手会直接说明并引导到企业微信客户端,
**不会用「批量建多场单次会议」来变通**
**接受 / 拒绝会议邀请RSVP也不支持。**
**单场超过 24 小时的会议不支持**,助手会直接拒绝,**不会自作主张拆成好几场**。
你确实需要多天安排时,得自己说清怎么拆。
**加人时的忙闲判断和建会时相反。** 建会时会把**你自己也算进去**查忙闲(否则会约到自己已占用的时段);
但给一场已有的会议加人时,只查**新增的人**——你和老参会人正被这场会占着,必然显示「忙」,
算进去就会误报冲突。这一条你不用管,但知道了就不会觉得它前后不一致。
**会议号和入会链接不会出现在回复里。** 创建成功后,助手只回三行:主题、时间、参会人。
需要入会链接时,去企业微信里看那条会议。
### 三条通用边界在本域怎么体现
1. **只能改它自己建的东西**——别人发起的会议,助手**改不了也取消不了**。
它不会预先按「是不是你建的」拦你,而是直接执行,拿到权限错误后如实告诉你,并建议联系发起人。
2. **能力按品类逐项开通**——会议是独立品类(实测账号是后来单独补开的)。未开通时助手会把官方
开通指引原样转给你,然后停下,不重试。
3. **危险动作先问你**——建、改、取消三个动作**全是高风险写入**,都会复述
「主题、时间、涉及哪些人、链接是否作废」并等你明确同意。见 [99 风险与确认](99-风险与确认.md)。
## 相关
- [05 日程](05-日程.md)——不带入会链接的安排;**忙闲查询与会议室查询也在那边**
- [02 通讯录](02-通讯录.md)——拉人进会议前先在这里把人名解析出来
- [07 待办](07-待办.md)——会议纪要里的行动项要落成待办时
- [08 邮件](08-邮件.md)——**通过邮件**发会议邀请是另一条路(只有你明确提到「邮件」时才走那边)
- [99 风险与确认](99-风险与确认.md)——三个写方法的确认规则

View File

@@ -0,0 +1,134 @@
# 待办
把「这件事要做」记进企业微信待办:记一条、查一批、改内容、标完成、删掉或退出。
可以只给自己记,也可以分派给同事并设截止时间与提醒。
**这是整套能力里实测覆盖最完整的一域**——6 个方法全部在真实账号上跑通了。
## 你可以怎么说
> 「帮我记个待办:明天下午三点前把周报发出去」
> 「我有哪些待办?」
> 「已完成的待办给我看看」
> 「把『准备周会材料』这条改一下截止时间,改到周五」
> 「这条待办完成了」
> 「把张三也加进这条待办」
## 📋 验证状态
| 项 | 状态 |
|---|---|
| 创建待办 | ✅ **已实测** |
| 查待办列表 | ✅ **已实测** |
| 查待办详情 | ✅ **已实测** |
| 更新待办(改标题) | ✅ **已实测** |
| 标记完成 | ✅ **已实测**(高风险写入) |
| 删除待办 | ✅ **已实测**(高风险写入) |
| 分派给他人(多人参与) | ⚠️ 未实测(实测账号只有一个人) |
| 完整链路(你说一句话 → 助手自动记完) | ⚠️ 未实测 |
**实测记录**命令层人工在真实账号上执行6/6 全通):
| 动作 | 结果 |
|---|---|
| 创建 | ✅ 成功。**创建人显示的是机器人身份,不是你本人**——这一点直接决定了后面能改什么 |
| 列表 / 详情 / 更新 | ✅ 全通,标题改名成功 |
| 标记完成 | ✅ 企业微信反问了一句「是否标记为已全部完成」,这个选择被原样交回 |
| 删除 | ✅ 删除后复核,待办数量归 0 |
还实测证实了一个隐蔽的坑:**不传待办条目会直接失败**,返回「`items` 不合法,要求为 必填」。
而工具的帮助文本**没有把它标成必填**——助手知道这一点,不会拿空请求去试。
测试数据已全部删除,企业微信侧复核数量为 0。
## 能力清单
| 能做什么 | 命令 | 风险 |
|---|---|---|
| 查待办列表(按时间 / 状态 / 关键词筛) | `wecom-cli todo list` | 读取 |
| 批量查待办详情 | `wecom-cli todo get` | 读取 |
| 创建待办 | `wecom-cli todo create` | 低风险写入(**分派给他人时升为高风险** |
| 更新待办 | `wecom-cli todo update` | 低风险写入(**改参与人时升为高风险** |
| 标记完成 | `wecom-cli todo finish` | **高风险写入** |
| 删除 / 退出待办 | `wecom-cli todo delete` | **高风险写入** |
**只给自己记一条,助手直接执行,不问你。** 过度确认会让助手变得难用。
只有下面这些情况才会先问一句:
| 情况 | 为什么要问 |
|---|---|
| 分派给他人 | 对方待办列表里立刻出现这条,还会收到提醒 |
| 改参与人名单 | **是「整体替换」不是「追加」**,漏掉谁就等于把谁踢出这条待办 |
| 标记完成 | **没有「取消完成」这个操作**,标完就只能去客户端处理 |
| 删除 | 没有恢复接口 |
## 注意事项
**「完成」是单向的。** 接口层根本没有「取消完成」这个方法。所以标完成前助手会先确认,
而且会**先检查一遍这条是不是已经完成了**——已完成就直接告诉你「这条已完成」,不再重复操作。
**完成范围可能有两档。** 一条待办有多个参与人、而你既是创建人又是参与人时,
标完成会先只标你自己那份,然后企业微信会反问一句是否连别人的份一起标。
助手会把这个选择带着待办标题和参与人姓名交回给你,让你选「仅我完成」还是「已完全完成」——
**不会替你决定**(实测中确实触发了这个反问)。
**「删除」对不同的人是两件事。**
| 你的身份 | 「删除」的实际含义 |
|---|---|
| 你是这条待办的创建人 | **删掉整条**,其他参与人也不再看到 |
| 你不是创建人 | **你退出这条待办**,不影响其他人 |
助手会先弄清是哪一种,再用对应的话跟你确认。它**不会**用「创建人之外无权删除」这种话搪塞你——
非创建人本来就可以退出。
**改参与人是「整体替换」,这是本域最危险的一个动作。**
说「把张三也加进去」时,助手会先把现有名单读出来,本地合并成完整名单,再整份传回去。
它不会只传张三一个人——那样会把原来的人全部踢出去。这也是为什么改参与人要先确认。
顺带一提:说「分派给我和张三」时,**你自己也要在名单里**——企业微信不会自动把创建人算成参与人。
助手知道这一点。
**查询默认只给「进行中」。** 问「我有哪些待办」返回的是进行中的;
要看已完成的、或者全部,得说清楚(「已完成的待办」「所有待办」)。
助手在做删除、完成这类操作前定位待办时,会主动把已完成的也查进来,免得「其实有」被误判成「找不到」。
**关键词是字面匹配,不是语义搜索。** 你记的是「把周报发出去」,搜「汇报」是搜不到的。
搜不到时助手会建议放宽关键词或改按时间范围列,**不会断言「你没有这条待办」**。
**统计类问题它会翻完所有页。** 「我一共有多少条待办」这种问题,单页最多只能拿 20 条,
只看首页会严重少算——助手会翻到底再报数。
**截止时间和提醒有几条固定规则:**
- 你说了具体时刻(「明天下午三点前」)→ 落成精确到分钟的截止时间。
- 你只给了日期(「周五之前」)→ 落成日期。
- 你完全没提时间 → 两个都不设,**它不会追问**。
- **「不要提醒我」做不到**:接口层没有「关闭提醒」这一档。唯一的办法是把截止时间一起清掉,
助手会先跟你确认再动手。
- **「提前 30 分钟提醒」也设不了**:只能设截止时间,提醒时刻由企业微信按默认规则给。
助手会告诉你实际的提醒时刻,并引导你去企业微信待办里手动改。
- **它不会另建一个定时任务来模拟提醒**——那会造成重复提醒。
**描述不会写成标题的复述。** 只有标题装不下的额外信息(背景、对接人、单号、链接)才会写进描述。
一条只有标题的待办完全正常。
**「帮我记一下」不一定是待办。** 只有你明确说了「待办」,或者说的是「定时提醒的待办」,
助手才会建企业微信待办。泛泛的「提醒我一下」它不会擅自往待办里塞——那可能该用日程,
也可能该用别的方式。
### 三条通用边界在本域怎么体现
1. **只能改它自己建的东西**——**实测确认:助手创建的待办,创建人是机器人身份。**
这意味着**你自己在企业微信里建的待办,助手改不了、也标不了完成**。
碰到这种请求,它会说明边界,并建议由它新建一条,或者你在客户端自己改。
2. **能力按品类逐项开通**——待办属于基础品类,实测账号一开始就能用。
未开通时助手会把官方开通指引原样转给你,然后停下,不重试。
3. **危险动作先问你**——完成、删除**总是**先问;分派给他人、改参与人名单**按参数升级**为先问;
只给自己记一条不问。见 [99 风险与确认](99-风险与确认.md)。
## 相关
- [02 通讯录](02-通讯录.md)——分派给同事前先在这里把人名解析出来
- [05 日程](05-日程.md)——「占一段时间」而不是「记一件事」时用它
- [06 会议](06-会议.md)——会议纪要里的行动项可以落成待办
- [99 风险与确认](99-风险与确认.md)——哪些待办操作会先问你、判定规则是什么

View File

@@ -0,0 +1,139 @@
# 邮件
企业微信邮箱的**发、回、转、搜、读**:发新邮件、回复、全部回复、转发、发日程邀约邮件与会议邮件,
按各种条件搜邮件,读正文、附件和内嵌图。
**能做的比大多数人以为的多**——但**标已读、删除、存草稿、改标签、撤回这些一概做不了**。
## 你可以怎么说
> 「给张三发封邮件,说 Q2 进展汇报已经发在群里了」
> 「回一下这封邮件:收到,周五前给结果」
> 「把这封转给李四」
> 「邮箱里搜一下产品周报」
> 「有没有新邮件?」
> 「这封邮件说了什么?」
## 📋 验证状态
| 项 | 状态 |
|---|---|
| 搜索邮件 | ✅ **已实测**(返回 0 封匹配——账号里当时确实没有匹配邮件) |
| 发送新邮件 | ⚠️ **未实测** |
| 回复 / 全部回复 | ⚠️ **未实测** |
| 转发 | ⚠️ **未实测** |
| 日程邀约邮件 / 会议邮件 | ⚠️ **未实测** |
| 读邮件正文、附件、内嵌图 | ⚠️ **未实测** |
| 完整链路(你说一句话 → 助手自动发完) | ⚠️ 未实测 |
**实测记录**(命令层,人工在真实账号上执行):
```bash
wecom-cli mail search # 通过,返回 0 封匹配
```
**只验证了「接口通、能返回」**。发送方向一条都没测——因为发出去就收不回,
不适合拿真人邮箱做验收实验。所以本页不写「实际效果」,也不虚构任何邮件内容、收件人或返回值。
## 能力清单
| 能做什么 | 命令 | 风险 |
|---|---|---|
| 搜索 / 浏览邮件列表 | `wecom-cli mail search` | 读取(隐私敏感) |
| 读邮件详情(正文 / 附件 / 内嵌图 / 日程信息) | `wecom-cli mail get` | 读取(隐私敏感) |
| 发送新邮件 | `wecom-cli mail send` | **高风险写入** |
| 回复 / 全部回复 | 同上(换一组参数) | **高风险写入** |
| 转发 | 同上 | **高风险写入** |
| 日程邀约邮件(只发日程,不建线上会议) | 同上 | **高风险写入** |
| 会议邮件(同时建线上会议) | 同上 | **高风险写入** |
后面五行其实是**同一个发送方法的五种用法**,靠传不同的参数区分,风险级别相同。
### 明确做不到的事
这些企业微信的命令行工具都没有提供,助手会如实告诉你去客户端操作:
- **标记已读 / 未读**(但**按未读条件搜索是可以的**
- **删除邮件**、**保存草稿**
- **给邮件打标签 / 移除标签**(但**按标签搜索是可以的**
- **撤回已发送的邮件**、**修改已发送的邮件**
- 邮箱账号设置、签名、自动回复、收信规则
## 注意事项
**发出去就收不回,所以一定会先给你看预览。**
助手会把最终的主题、收件人(只显示姓名,不显示邮箱)、抄送、正文完整摆出来,
**然后等你明确同意才发**。哪怕你已经把内容说得很完整,这一步也不会省。
(顺带说明一件事:这套助手的上游文档原本要求「展示完预览就直接发,不许再问」。
本项目**故意改了这条**——发邮件不可撤回,属于最典型的高风险动作,所以预览之后仍然要等你点头。)
**回复的收件人来自原邮件,不去通讯录里找。**
这条看起来是细节,实际很关键:通讯录的模糊搜索可能匹配到同音不同字的人,那就发错了。
所以回复时助手直接用原邮件里的发件人地址。
**「回一下」默认是全部回复。** 想只回发件人,说清楚「只回他」「别回复所有人」。
即使参数上不需要列收件人,**预览里也会把最终会收到这封邮件的所有人列全**,让你看清范围。
**主题前缀是助手自己拼的。** 回复会拼成「回复:原主题」,转发拼成「转发:原主题」。
原主题已经带同类前缀时会沿用(一字不改,不会「顺手规范化」),
但**跨类型不抵消**——转发一封「回复xxx」主题会变成「转发回复xxx」。
**转发默认不带附加说明。** 你没提要加话,助手就不加,企业微信会自动带上原邮件正文。
你提了,它才写进去。
**日程邮件和会议邮件的区别是「建不建线上会议室」。**
- 说「开会 / 线上会议 / 拉个视频会」→ **会议邮件**(会建线上会议室)。**线下会议也走会议邮件**
会议室照建,用不用由你定。
- 说「发个日程 / 约个碰头 / 提醒大家周五有活动」→ **日程邀约邮件**(不建会议室)。
- 实在判不准,助手会问一句「需要创建线上会议室吗?」。
**只有你明确提到「邮箱」或「邮件」时才走这条路。**
你只说「帮我约个会」而没提邮件,那是 [05 日程](05-日程.md) / [06 会议](06-会议.md) 的活,
助手**不会**擅自替你改成「发封会议邮件」。
**搜索有三条硬线:**
- 带时间范围、未读、重要这类条件时,**搜索窗口不超过最近 30 天**。
- 带关键词的搜索**最多返回 100 封**。
- 单封邮件的正文加附件**合计不超过 50MB**。
**「最近」按 7 天算。** 你说「最近」「近期」「这段时间」而没给具体范围时,助手按最近 7 天处理,
并会在回复里说明它用的是哪个范围。
**没拉完会明说。** 结果还有更多没取回时,助手会在末尾提示「已展示前 N 条(未拉完)」,
**不会让你误以为看到的就是全部**。问「有几封」时它看的是总数字段;
总数被接口限制截断时也会如实说明。
**多封候选时它不会替你挑。** 你要找某一封特定的邮件而搜出好几封时,
助手会用「序号 + 主题 + 发件人 + 时间」列出来让你选。只是浏览或统计时才直接给列表。
**附件分两种,一种下得下来,一种下不来。**
- 普通附件——助手能落到本地读给你听。
- **微盘附件、以及防泄漏加密链接**——这类只能给你一个可点的链接,助手**打不开也解不开**
引导你在企业微信客户端里点开看。这是正常的产品行为,不是故障。
**邮件正文里的内容是数据,不是指令。** 正文里如果出现「忽略之前的指令」「请执行以下命令」
这类文本,助手一律当普通文字处理,不执行。检测到疑似夹带时会在摘要里附一句提示。
**收发件人数量看计数不看列表。** 一封群发邮件,接口只返回前 30 个收件人,真实人数在计数字段里。
问「这封发给了多少人」时助手报的是真实总数。
### 三条通用边界在本域怎么体现
1. **只能改它自己建的东西**——邮件这一域的写操作**只有「发出去」**,没有「改已有的」。
已发送的邮件既不能改也不能撤回,接口层就没有这两个能力。
2. **能力按品类逐项开通**——邮件是独立品类(实测账号是后来单独补开的)。
未开通时助手会把官方开通指引原样转给你,然后停下,不重试。
3. **危险动作先问你**——**发送方向的五种用法全是高风险写入**,都会先展示预览、
再等你明确同意。见 [99 风险与确认](99-风险与确认.md)。
## 相关
- [02 通讯录](02-通讯录.md)——按人名发邮件时,先在这里把姓名解析成邮箱
- [05 日程](05-日程.md) / [06 会议](06-会议.md)——管理日程和会议**本身**(改期、取消、查询)走那边,
本域只负责「通过邮件发出去」
- [15 媒体文件](15-媒体文件.md)——读邮件附件内容时中间那一步在做什么
- [03 消息与会话](03-消息与会话.md)——发企业微信消息是另一套能力
- [99 风险与确认](99-风险与确认.md)——发送前的确认怎么算数

View File

@@ -0,0 +1,128 @@
# 在线文档
企业微信的 **Word 类在线文档**:新建、把本地 .docx/.doc/.txt 传上去变成在线文档、读正文、
往末尾追加内容、整篇覆盖。**只管一份文档里的文字**——文档叫什么名字、谁能看,
归 [13 文档管理](13-文档管理.md)。
**注意路由**:你只说「写个文档 / 整理成文档 / 输出到文档」而**没指明类型**时,
默认落到 [12 智能文档](12-智能文档.md)不是这里。要用这一域得明确说「Word 文档」「在线文档」「docx」
或者给出一个 `/doc/` 开头的文档链接。
## 你可以怎么说
> 「给我建个 Word 文档写周报」
> 「新建一个在线文档」
> 「把这份 docx 传到企微上」
> 「这份文档写了什么?」
> 「在这个文档里再加一段:今天完成了联调」
> 「把这个文档整个重写」
## 📋 验证状态
| 项 | 状态 |
|---|---|
| 创建在线文档 | ✅ **已实测** |
| 向文档末尾追加内容 | ✅ **已实测** |
| 读取文档正文 | ✅ **已实测,读回内容与写入完全一致** |
| 导入本地 .docx / .txt | ⚠️ **未实测** |
| 整篇覆盖正文 | ⚠️ **未实测**(高风险写入,未做破坏性验证) |
| 完整链路(你说一句话 → 助手自动写完) | ⚠️ 未实测 |
**实测记录**(命令层,人工在真实账号上执行):
```
doc create → ✅ 建出一份在线文档
doc contents append → ✅ 追加成功
doc contents get → ✅ 读回内容与追加的内容完全一致
doc names update → ✅ 重命名成功(用于清理测试数据)
```
**「写 → 读」闭环成立**,这是这一域最有价值的一条实测结论。
同时印证了一件事:企业微信的四种文档在标识上有**前缀路由**——在线文档是 `w3_`
在线表格是 `e3_`、智能表格是 `s3_`、智能文档是 `a1_`。助手就是靠这个判断你给的链接是哪种文档,
实测结果与技能里写的规则一致。
**测试数据处置**命令行没有删除文档的接口4 份测试文档已全部重命名为
「【可删除】DesireCore验收测试-\*」,需要在企业微信里手动删除。
**关于创建方式的一个说明**:实测确认 `doc create` **直接可用**
但助手的默认流程走的是另一条路——**先在本地生成一份 .docx再导入**。
原因见下方「注意事项」。两条路都记在这里,是为了让你知道助手有时候多花的那一步在做什么。
## 能力清单
| 能做什么 | 命令 | 风险 |
|---|---|---|
| 把本地文件导入成在线文档(**助手默认的新建方式** | `wecom-cli doc import` | 低风险写入 |
| 直接新建在线文档 | `wecom-cli doc create` | 低风险写入 |
| 读取文档正文 | `wecom-cli doc contents get` | 读取 |
| 向文档末尾追加文本 | `wecom-cli doc contents append` | 低风险写入 |
| 整篇覆盖文档正文 | `wecom-cli doc contents overwrite` | **高风险写入(不可逆覆盖)** |
**搜索文档不在这里**——搜索是 [13 文档管理](13-文档管理.md) 的专属能力,四种文档类型都走那边。
## 注意事项
**「新建」有两条路,助手默认走导入那条。**
- **默认路径**:先在本地生成一份 .docx再导入成在线文档。这样能一次带进**封面标题、多级标题、
列表、表格、局部加粗与配色**这些排版。
- **另一条路**:直接新建。它也能带初始内容,但只能灌一段**没有结构的纯文字或 markdown**——
你说「生成一份 Word 周报」时期待的多半不是这个。
所以你会看到助手在建文档时多花一步。内容确实是纯文本、你也没有排版要求时,
它会跳过生成 .docx直接写个 .txt 导进去。
**文档名由文件名决定。** 导入时的文件名(含后缀)就是最终的文档标题——想让文档叫《项目周报》,
文件名就得是 `项目周报.docx`
**默认是「追加」不是「覆盖」,判不准也按追加。**
你说「写入 / 记录 / 补充 / 加进去 / 写进去」这类中性说法,助手一律**追加到末尾**。
只有出现「覆盖 / 重写 / 替换 / 清空重写 / 整个换成」这类强语义词,才会整篇覆盖。
理由很直接:**追加错了可以再覆盖修正,覆盖错了原文就没了。**
**覆盖之前它一定会先读一遍。** 整篇覆盖是不可逆的,原文没有备份,也没有回滚接口。
所以助手会**先把现有正文读出来**,在确认里告诉你「这份文档现在有什么」(一两句摘要),
让你知道自己要毁掉的是什么。跳过这一步的覆盖等于蒙眼删除。
含糊的「嗯」「你看着办」不算同意。
**追加和覆盖的容量差两个数量级。** 追加单次上限一万字符,覆盖上限一百万。
内容特别长时助手会自己分段追加。
**追加进去的内容不认 markdown 标记。** 追加只支持纯文本,写 `**加粗**` 是不会被渲染的,
会原样出现在文档里。读取和覆盖则支持 markdown——**这三个动作的格式能力不一致**
所以你会发现「读出来是带格式的,加进去却是纯文本」,这是接口本身的差异。
**内容很长时读取会走本地文件。** 文档正文超长时接口不直接返回内容,而是落到本地文件。
助手会自动再读一次那个文件,然后告诉你「内容较长,我已读取完」——**它不会把本地路径贴给你**。
**清空文档不是传空。** 想把一份文档清空,传空内容是会被拒的,正确做法是写一个空格。
你不需要知道这个,但如果看到助手在「清空」时留了个空格,那是对的。
**这些类型读不了正文**`ppt` / `journal` / `collect` / `mind` / `flow` / `pdf`
整套能力里都没有读它们正文的方法,助手会直接说明并给你文档链接,让你在客户端打开。
**要结构化数据就别用文档。** 你的需求里出现「字段 / 记录 / 筛选 / 排序 / 统计 / 分组」时,
助手**不会**用「文档 + 一张静态 markdown 表格」凑合,而是改用
[11 智能表格](11-智能表格.md) 或 [12 智能文档](12-智能文档.md)。
### 三条通用边界在本域怎么体现
1. **只能改它自己建的东西**——**你自己在企业微信里建的那份文档,助手改不了**
追加不进去、更覆盖不了。它会说明这条边界,并建议「由我新建一份」或者你自己在客户端改。
反过来,助手自己建的文档它可以随便改——实测的「写 → 读」闭环就是在自己建的文档上完成的。
2. **能力按品类逐项开通**——文档是独立品类(实测账号是后来单独补开的)。
未开通时助手会把官方开通指引原样转给你,然后停下,不重试。
3. **危险动作先问你**——**整篇覆盖是高风险写入**,会先读原文、再复述
「将把《文档名》的全部现有正文替换为新内容(约 N 字),原内容不可恢复」并等你明确同意。
创建和追加是低风险,直接执行。见 [99 风险与确认](99-风险与确认.md)。
## 相关
- [12 智能文档](12-智能文档.md)——**没指明类型的「写个文档」默认落这里**
- [10 在线表格](10-在线表格.md)——行列网格式的表格
- [11 智能表格](11-智能表格.md)——字段 / 记录 / 视图式的结构化表
- [13 文档管理](13-文档管理.md)——**搜索文档的唯一入口**;改名、加成员、改权限也在那边
- [14 微盘](14-微盘.md)——文件放在微盘里而不是做成在线文档
- [99 风险与确认](99-风险与确认.md)——覆盖前的确认规则

View File

@@ -0,0 +1,118 @@
# 在线表格
企业微信版的 Excel一个表格文件里有若干**子工作表**,每张子表是行列网格。
这一域管**格子里的数据**和**子表的增删**——不管这份表格叫什么名字、谁能打开它。
**先分清两种「表」**:说「单元格 / A1 / 第 3 行 / Excel」的是在线表格本篇
说「字段 / 记录 / 视图 / 筛选条件 / 看板」的是 [11 智能表格](11-智能表格.md)。
**两者是完全不同的两套接口,选错就全盘失败。**
你没说清楚时,表格类需求**默认走智能表格**,只有你明说「在线表格」或给出 `/sheet/` 链接才走这里。
## 你可以怎么说
> 「建个在线表格记一下下周排期」
> 「新建一个在线表格,表头是姓名、部门、工时」
> 「把这个 Excel 传到企微上」
> 「这个表里有什么?」
> 「往表里加一行:张三 研发 40 小时」
> 「把 B3 改成 50」
## 📋 验证状态
| 项 | 状态 |
|---|---|
| 新建在线表格 | ✅ **已实测**(只验到「能建出来」这一步) |
| 导入本地 CSV / Excel | ⚠️ **未实测** |
| 读表格基础信息与子表列表 | ⚠️ **未实测** |
| 按区域读数据 | ⚠️ **未实测** |
| 追加一行 | ⚠️ **未实测** |
| 更新指定区域(覆盖单元格) | ⚠️ **未实测**(高风险写入,未做破坏性验证) |
| 添加 / 删除子工作表 | ⚠️ **未实测** |
| 完整链路(你说一句话 → 助手自动建完) | ⚠️ 未实测 |
**实测记录**(命令层,人工在真实账号上执行):
```bash
wecom-cli sheet create ... # ✅ 建出一张在线表格,标识以 e3_ 开头
```
**只验到「创建」这一步。** 读写数据、增删子表、覆盖单元格一条都没跑——
所以本页不写「实际效果」,也不虚构任何单元格数据或返回值。
下面「能力清单」与「注意事项」来自接口定义与技能文档,是**设计意图,不是实测结论**。
同批实测还印证了文档标识的前缀路由:在线表格是 `e3_`,在线文档 `w3_`,智能表格 `s3_`
智能文档 `a1_`。助手靠这个判断你给的链接是哪种文档。
**测试数据处置**命令行没有删除文档的接口测试表格已重命名为「【可删除】DesireCore验收测试-\*」,
需要在企业微信里手动删除。
## 能力清单
> 除「新建」外均**未实测**。
| 能做什么 | 命令 | 风险 |
|---|---|---|
| 新建在线表格(可带初始数据) | `wecom-cli sheet create` | 低风险写入 |
| 导入本地 CSV / Excel 为在线表格 | `wecom-cli sheet import` | 低风险写入 |
| 读表格基础信息与子表列表 | `wecom-cli sheet get` | 读取 |
| 读子表指定区域的数据 | `wecom-cli sheet ranges get` | 读取 |
| 在子表末尾追加一行 | `wecom-cli sheet rows append` | 低风险写入 |
| 添加子工作表 | `wecom-cli sheet subsheets add` | 低风险写入 |
| 更新指定区域的单元格 | `wecom-cli sheet contents update` | **高风险写入(不可逆覆盖)** |
| 删除子工作表 | `wecom-cli sheet subsheets delete` | **高风险写入(不可逆删除)** |
**搜索表格不在这里**——搜索是 [13 文档管理](13-文档管理.md) 的专属能力。
## 注意事项
**默认是「追加一行」不是「覆盖」,判不准也按追加。**
你说「加一行 / 记一条 / 补进去」这类中性说法,助手往末尾追加,不需要指定行号,也不会碰到已有数据。
只有出现「覆盖 / 替换 / 改成」这类强语义词,或者你**点名了具体单元格**(「把 B3 改成 50」
才会走覆盖。理由同样是:追加错了删掉那行就行,覆盖错了原值就没了。
**覆盖之前它会先读一遍。** 覆盖单元格没有备份、没有回滚接口。所以助手会先把目标区域读出来,
在确认里告诉你「这块区域现在是什么」。目标区域本来就是空白时,它也会如实说「该区域当前为空」——
**但确认这一步不会省**
**删子表是「整张表连同全部数据一起没」。** 接口的描述原文就写着「删除后不可恢复」。
助手会先确认要删的到底是哪一张(核对子表名,并读出行数),让你知道要删掉多少数据。
子表名匹配到多张、或一张都没匹配上时,**它一定会停下来问,绝不"挑一个最像的"**。
**追加一次只能加一行。** 要写 10 行就得调 10 次,或者改用覆盖一次写一个区域——
但那是高风险写入,要走确认。
**数字要当数字写。** 写成文本的数字在表格里**不能求和、不能排序**,你后面做统计时才会发现,
届时已经写了一整张表。助手知道要区分文本和数字。
**空子表不用读。** 表格信息里带着「有内容的区域」这个字段,为空就说明这张子表是空的,
助手不会再去读它然后困惑于空结果。
**要统计就换个读法。** 你明确说「统计 / 求和 / 分组 / 做数据分析」时,
助手会用另一种读取模式把整表拿成 CSV 再算,而不是一格一格读。这一步是自动的。
**格式会尽量跟已有内容对齐。** 往一张已有数据的表里写东西时,助手会尽量让新内容的字体、
对齐、边框与现有行一致,不出现一行突兀的样式。
**这些做不到**:撤销、看历史版本、恢复已删除的子表。助手不会向你承诺可以恢复。
**这一域跟智能表格用的是两套完全不同的命令。** 你给的是智能表格的链接(`/smartsheet/``s3_` 开头)
却让助手用在线表格的方式操作,一定失败。助手会先判类型再动手。
### 三条通用边界在本域怎么体现
1. **只能改它自己建的东西**——**你自己建的那张在线表格,助手改不了**:写不进数据、加不了子表。
它会说明这条边界,并建议「由我新建一张」或者你自己在客户端改。
2. **能力按品类逐项开通**——表格属于文档品类(实测账号是后来单独补开的)。
未开通时助手会把官方开通指引原样转给你,然后停下,不重试。
3. **危险动作先问你**——**覆盖单元格**和**删除子表**是高风险写入,都会先读现状、再复述影响
(覆盖哪块区域、多少行列 / 删哪张子表、里面有多少数据)并等你明确同意。
新建、导入、追加、加子表是低风险,直接执行。见 [99 风险与确认](99-风险与确认.md)。
## 相关
- [11 智能表格](11-智能表格.md)——字段 / 记录 / 视图 / 看板式的结构化表;**未指明类型时默认走那边**
- [09 在线文档](09-在线文档.md)——Word 类文档的正文读写
- [12 智能文档](12-智能文档.md)——**没指明类型的「写个文档」默认落那里**
- [13 文档管理](13-文档管理.md)——**搜索表格的唯一入口**;改名、加成员、改权限也在那边
- [14 微盘](14-微盘.md)——Excel 文件原样放进微盘,而不是转成在线表格
- [99 风险与确认](99-风险与确认.md)——覆盖与删除前的确认规则

View File

@@ -0,0 +1,153 @@
# 智能表格
企业微信里**结构最像数据库**的载体:子表 = 表,字段 = 列,记录 = 行,另外还有视图(筛选/排序/分组/列宽/填色)
和仪表盘图表两层展示配置。建表、查数、加减列、增删改记录、做看板都在这里。
**这是整套能力里方法最多、能做的事最丰富的一域**——也是删除类操作最集中的一域。
**未指明类型的表格需求默认走这里**;只有你明说「在线表格」或给出 `/sheet/` 链接,
才会转 [10 在线表格](10-在线表格.md)。
## 你可以怎么说
> 「帮我建个项目管理表」
> 「加一列『预算』」
> 「加条记录登录优化负责人张三9 月 15 号截止」
> 「把『登录优化』的状态改成已完成」
> 「统计一下各部门各多少条」
> 「做个看板,加个月度销售趋势图」
## 📋 验证状态
| 项 | 状态 |
|---|---|
| 新建智能表格 | ✅ **已实测** |
| 读表基本信息与子表结构 | ✅ **已实测**:返回 1 张子表 / 5 个字段 / 5 条记录 |
| 查字段列表与属性 | ⚠️ **未实测** |
| SQL 查数 / 读记录 | ⚠️ **未实测** |
| 新增 / 修改 / 删除记录 | ⚠️ **未实测** |
| 新增 / 修改 / 删除字段 | ⚠️ **未实测** |
| 新增 / 改名 / 删除子表 | ⚠️ **未实测** |
| 视图与仪表盘图表 | ⚠️ **未实测** |
| 导入 Excel / CSV 建表 | ⚠️ **未实测** |
| 完整链路(你说一句话 → 助手自动建完) | ⚠️ 未实测 |
**实测记录**(命令层,人工在真实账号上执行):
```bash
wecom-cli smartsheet create ... # ✅ 建出一张智能表格,标识以 s3_ 开头
wecom-cli smartsheet sheets list ... # ✅ 返回子表结构1 张子表 / 5 个字段 / 5 条记录
```
这一条同时印证了一个坑:建表时指定名称的参数是 `name` 而不是 `doc_name`——
实测中人工凭常识写成 `doc_name` 直接失败,技能文档写的是对的。
**只验到「建表 + 读结构」两步。** 记录、字段、视图、图表的增删改一条都没跑,
所以本页不写「实际效果」,也不虚构任何记录内容或返回值。
下面「能力清单」与「注意事项」来自接口定义与技能文档,是**设计意图,不是实测结论**。
**测试数据处置**:命令行没有删除文档的接口,测试用的智能表格已重命名为
「【可删除】DesireCore验收测试-\*」,需要在企业微信里手动删除。
## 能力清单
> 除「新建」与「读子表结构」外均**未实测**。
| 能做什么 | 命令 | 风险 |
|---|---|---|
| 新建智能表格(可一次建好子表 + 字段) | `wecom-cli smartsheet create` | 低风险写入 |
| 导入 Excel / CSV 建表(或追加到已有表) | `wecom-cli smartsheet import` | 低风险写入 |
| 看表基本信息 + 子表列表 | `wecom-cli smartsheet sheets list` | 读取 |
| 新增子表 / 仪表盘 | `wecom-cli smartsheet sheets add` | 低风险写入 |
| 改子表名 | `wecom-cli smartsheet sheets update` | **高风险写入** |
| 删子表 | `wecom-cli smartsheet sheets delete` | **高风险写入** |
| 查字段列表与属性 | `wecom-cli smartsheet fields list` | 读取 |
| 新增字段 | `wecom-cli smartsheet fields add` | 低风险写入 |
| 改字段(名称 / 属性 / **类型** | `wecom-cli smartsheet fields update` | 低风险写入(**改类型时升为高风险** |
| 删字段 | `wecom-cli smartsheet fields delete` | **高风险写入** |
| 用 SQL 查数支持聚合、TopN | `wecom-cli smartsheet records query` | 读取 |
| 读记录(权限受限时的读法) | `wecom-cli smartsheet records list` | 读取 |
| 新增记录 | `wecom-cli smartsheet records add` | 低风险写入 |
| 改记录 | `wecom-cli smartsheet records update` | **高风险写入** |
| 删记录 | `wecom-cli smartsheet records delete` | **高风险写入** |
| 查 / 新增 / 修改视图 | `wecom-cli smartsheet views list / add / update` | 读取 / 低风险写入 |
| 删视图 | `wecom-cli smartsheet views delete` | **高风险写入** |
| 查 / 新增 / 修改仪表盘图表 | `wecom-cli smartsheet charts list / add / update` | 读取 / 低风险写入 |
| 删图表 | `wecom-cli smartsheet charts delete` | **高风险写入** |
| 上传图片 / 文件到文档空间 | `wecom-cli smartsheet images / files upload` | 低风险写入 |
**整套能力的 26 个高风险动作里,有 7 个集中在这一域**。删除类操作**没有任何回滚通道**
客户端也不提供恢复接口。
**搜索表格、改表格文件名不在这里**——那两件事归 [13 文档管理](13-文档管理.md)。
本域的「改子表名」改的是**子表**,不是整个文件的名字。
## 注意事项
**删除类操作最集中,也最不可逆。** 记住这三条:
- **删一列 = 连带删掉这一列的全部数据。** 助手会告诉你「该列已有的全部数据会一并丢失」。
- **删一张子表 = 里面的字段和记录一起没。** 助手会先数一数有多少字段、多少条记录再告诉你。
- **删视图 = 那套筛选、排序、分组、列宽、填色配置没了**,只能手工重建。
**「删全部」「清一下」这种说法它不会动手。** 描述模糊时助手会先问清范围和保留条件——
「删除 2026 年 3 月之前的记录」「只保留状态为已完成的行」这种才算说清楚了。
**一次改超过 100 条记录,即使是普通修改也会先问你一句**,说明影响范围。
另外单次修改**最多影响 2000 行**,超过要分批。
**改字段类型是隐蔽的高风险动作。** 只改列名、改显示属性是可逆的,助手直接做;
但**改字段类型**会让企业微信对已有单元格做转换甚至直接丢弃(比如文本改成数字时,
非数字内容就没了)。所以助手会先读回这个字段当前的类型,跟你要改成的类型比对,
**不一致就按高风险处理**,先告诉你「该列已有的 N 条数据可能被转换或清空」。
**写记录之前它会先读几条现有的。** 目的是对齐用词——避免造出「进行中」和「处理中」两套并存的脏数据。
**统计交给服务端算,不拉全量回来数。** 「统计一下各部门多少条」这类问题,助手会用 SQL 让企业微信
算完再返回。**超过 1000 行的求和、计数、排名它不会自己心算**。
**只做描述性统计,不做因果和预测。**
- ✅ 各部门工单数排名、本月销售额 TopN、按状态分组统计、同比环比的数值计算
- ❌ 「为什么 A 部门工单这么多」「下个月销售额预测」「这数据反映了什么问题」「建议怎么优化」
**「标红 / 高亮 / 加底色」是真的改表,不是在回复里加粗。**
助手会去改视图的条件格式配置,让你在企业微信里打开就能看到颜色。
**能由其他列算出来的值,它会建议用公式列。** 比如「剩余天数」「完成率」——
你没指定类型时它直接用公式列;你指定了别的类型,它说明公式列的好处之后**听你的**。
**建表时它会顺手做两件事**:清掉新建时自带的空记录,以及按内容长度给每列设个合适的宽度。
**有上限**:单张子表最多 20000 条记录、150 个字段。接近上限时助手会提前告诉你。
**这些做不到**(会直接说明,不变通):
- 历史版本、时间点快照、查看修改历史或操作日志
- 恢复已删除的记录、字段、子表
- 导出为 Excel / CSV
- 删除智能表格**文件**本身
- 插入 AI 字段、写入地理位置字段、写入群字段(引导你在客户端手动做)
**参考别人的表 ≠ 往别人的表里写。** 你说「参考 X 表的格式」时,助手会读 X 的字段结构,
然后**建一张新表**往新表写,不会往 X 里写。
### 三条通用边界在本域怎么体现
1. **只能改它自己建的东西**——**你自己建的那张智能表格,助手改不了**:加不了列、写不进记录。
它会说明这条边界,并建议「由我新建一张」或者你自己在客户端改。
实测的建表 + 读结构就是在助手自己建的表上完成的。
2. **能力按品类逐项开通**——智能表格属于文档品类。未开通时助手会把官方开通指引原样转给你,
然后停下,不重试。另外,你对这张表**没有全部权限**时SQL 查数会被拒,
助手会自动降级成按你可见范围读记录,而不是报错了事。
3. **危险动作先问你**——**7 个高风险写入 + 1 个条件升级**,每个执行前都会复述具体影响
(删哪一列 / 哪张子表 / 多少条记录)并等你明确同意。见 [99 风险与确认](99-风险与确认.md)。
## 相关
- [10 在线表格](10-在线表格.md)——行列网格式的表格说「单元格」「A1」时用那个
- [12 智能文档](12-智能文档.md)——智能文档**自带一份内置数据表**,页面上的图表和表单按钮就绑在它上面;
那份表的字段与记录操作会委托到本域
- [09 在线文档](09-在线文档.md)——Word 类文档的正文读写
- [13 文档管理](13-文档管理.md)——**搜索表格的唯一入口****改整个表格文件的名字**也在那边
- [02 通讯录](02-通讯录.md)——人员字段写入失败时,先在这里把人名解析出来
- [99 风险与确认](99-风险与确认.md)——删除类操作的通用闸门

View File

@@ -0,0 +1,145 @@
# 智能文档
企业微信的智能文档 / 智能主页:一份文档由**多个页面**组成(页面之间可以嵌套成树),
每个页面由若干**内容块**组成,还自带一份**内置数据表**,页面上的图表和表单按钮可以绑到它上面。
**这一域最重要的一条规则是路由**:你说「写个文档 / 整理成文档 / 输出到文档 / 帮我写份周报」
而**没指明是哪种文档**时,**默认落到这里**——助手不会追问「你要哪种文档」。
只有你明确说了「在线文档 / Word」「在线表格」「智能表格」或者给出对应链接才会转给别的能力。
## 你可以怎么说
> 「帮我写份项目周报」
> 「把这些内容整理成文档」
> 「做个数据看板页」
> 「做个报名表单页」
> 「这份智能文档写了什么?」
> 「在文档里再加一段」
## 📋 验证状态
| 项 | 状态 |
|---|---|
| 新建智能文档 | ✅ **已实测**(只验到「能建出来」这一步) |
| 由 Markdown 一次性导入建成带内容的文档 | ⚠️ **未实测** |
| 读页面树 / 读页面正文 | ⚠️ **未实测** |
| 追加内容 | ⚠️ **未实测** |
| 整页覆盖 | ⚠️ **未实测**(高风险写入,未做破坏性验证) |
| 内容块级增删改 | ⚠️ **未实测** |
| 调整页面结构(新建 / 删除 / 改名 / 移动 / 改布局) | ⚠️ **未实测** |
| 取文档内置数据表 | ⚠️ **未实测** |
| 上传图片 / 附件 | ⚠️ **未实测** |
| 完整链路(你说一句话 → 助手自动写完) | ⚠️ 未实测 |
**实测记录**(命令层,人工在真实账号上执行):
```bash
wecom-cli smartpage create ... # ✅ 建出一份智能文档,标识以 a1_ 开头
```
**只验到「创建」这一步。** 读、写、改页面结构一条都没跑——所以本页不写「实际效果」,
也不虚构任何页面内容或返回值。下面「能力清单」与「注意事项」来自接口定义与技能文档,
是**设计意图,不是实测结论**。
同批实测印证了文档标识的前缀路由:智能文档编辑态是 `a1_`,在线文档 `w3_`,在线表格 `e3_`
智能表格 `s3_`。助手靠这个判断你给的链接是哪种文档。
**测试数据处置**:命令行没有删除文档的接口,测试文档已重命名为
「【可删除】DesireCore验收测试-\*」,需要在企业微信里手动删除。
## 能力清单
> 除「新建」外均**未实测**。
| 能做什么 | 命令 | 风险 |
|---|---|---|
| 新建空白智能文档 | `wecom-cli smartpage create` | 低风险写入 |
| 由 Markdown 一次性导入建成带内容的文档 | `wecom-cli smartpage import` | 低风险写入 |
| 读页面树 / 读某页正文 / 读某页内容块 | `wecom-cli smartpage pages get` | 读取 |
| 在页面末尾追加内容 | `wecom-cli smartpage pages append` | 低风险写入 |
| **整页覆盖**内容 | `wecom-cli smartpage pages overwrite` | **高风险写入** |
| 改页面结构(新建 / 删除 / 改名 / 移动 / 改布局) | `wecom-cli smartpage pages update` | **高风险写入**(仅删除页面那一档) |
| 内容块级插入 / 替换 / 删除 | `wecom-cli smartpage blocks update` | **高风险写入**(仅替换与删除那两档) |
| 取文档内置数据表的子表列表 | `wecom-cli smartpage databases get` | 读取 |
| 上传图片 / 文件到文档空间 | `wecom-cli smartpage images / files upload` | 低风险写入 |
**搜索文档、改文档名不在这里**——归 [13 文档管理](13-文档管理.md)。
本域的「改名」改的是**页面名**,不是整份文档的名字。
## 注意事项
**编辑态和发布态是两种东西,发布态改不了。**
| 状态 | 链接长什么样 | 能不能改 |
|---|---|---|
| 编辑态 | `doc.weixin.qq.com`,标识 `a1_` 开头 | 可读可写 |
| 发布态 | `page.weixin.qq.com`,标识 `b1_` 开头 | **只读** |
你给的是发布态链接却要求编辑时,助手会请你换一个编辑态链接,**不会硬试**。
**默认是「追加」不是「覆盖」。** 说「写入 / 记录 / 补充 / 加进去」这类中性词,助手追加到末尾;
只有「覆盖 / 重写 / 替换整页 / 清空重写」这类强语义词才会整页覆盖。
**「把第三段改一下」不会走整页覆盖。** 局部改动走的是**内容块级编辑**——
只动那一块,其余原样保留。助手**不会为了图省事整页重写**。
**整页覆盖是把原有内容块全部删掉后重建**,旧内容没有任何接口能找回来。所以执行前会复述
「将用新内容全量覆盖页面『XX』的原有内容原内容不可恢复」并等你明确同意。
另外覆盖时如果拿不到版本号,**会静默盖掉别人刚写的并发修改**——所以助手会先重新读一遍最新内容。
**删页面是级联的。** 删一个页面会**连同它下面的所有子页面一起删掉**。
助手会先把子页面数出来告诉你(「及其全部 N 个子页面:……」)再等你同意。
同一个命令里的新建、改名、移动、改布局是可逆的,不需要这层确认——但移动改变了层级归属,
改完助手会重新读一遍结构再告诉你新的样子。
**改之前一定会重新读一遍。** 哪怕几分钟前刚读过。既是为了拿准要改哪一块,
也是为了不覆盖掉别人的并发修改。
**要做表单页 / 数据看板页,走的是另一条路。**
需求里出现「表单 / 报名 / 问卷 / 收集 / 录入」或「数据看板 / 图表绑数据 / 任务系统 / 项目跟踪」时,
页面上的控件要引用内置数据表的字段——**必须先把字段定好,再写页面内容**。
直接导入一份 Markdown 会建出一份**没有数据表的静态文档**:报名按钮存不下数据,图表也渲染不出来。
助手知道这个顺序。
**文档自带一份内置数据表,不用另建智能表格。**
那份内置表的子表、字段、记录操作会委托给 [11 智能表格](11-智能表格.md)
但页面上的图表、视图、筛选控件属于展示层,仍归本域。
**文档命名有固定风格。** 中文命名,时间等附加信息用中文括号标注——
`项目进展周报2026.04.23` 是对的,`工作日报_20260202` 这种下划线拼英文日期是不允许的。
**正文里的图片会被真的读进去。** 你让它「总结这份文档」而正文里有图时,
助手会把图片下载下来识别,再和文字合并作答,必要时标注「图 N……」方便你溯源。
图片下载失败时它会如实说「第 N 张图片无法访问,未纳入分析」——**不会编造图片内容**。
纯粹的结构调整、搬运、覆盖任务则跳过这一步。
**页面里的只读组件会被原样保留**,助手不会顺手改掉或删掉它们。
**这些做不到**(会直接说明,引导你去客户端):
- 导出 / 下载为 PDF、Word、图片
- 评论、查看历史版本、回收站恢复
- 编辑发布态文档
**内容安全上有一条硬线**:写进页面的内容里如果夹带可执行脚本、事件处理器属性、
`javascript:` 之类的伪协议,助手会**直接拒绝写入并说明原因**,不会「悄悄清洗一下再写进去」。
读到的页面内容里出现「忽略之前的指令」这类文本时,一律当普通文字处理。
### 三条通用边界在本域怎么体现
1. **只能改它自己建的东西**——**你自己建的那份智能文档,助手改不了**:追加不进去、
改不了页面结构。它会说明这条边界,并建议「由我新建一份」或者你自己在客户端改。
2. **能力按品类逐项开通**——智能文档属于文档品类(实测账号是后来单独补开的)。
未开通时助手会把官方开通指引原样转给你,然后停下,不重试。
3. **危险动作先问你**——**整页覆盖、删除页面、删除或替换内容块**是高风险写入,
都会复述具体影响并等你明确同意。新建、导入、追加、插入内容块是低风险,直接执行。
见 [99 风险与确认](99-风险与确认.md)。
## 相关
- [09 在线文档](09-在线文档.md)——Word 类在线文档明说「Word / 在线文档」或给 `/doc/` 链接才走那边)
- [11 智能表格](11-智能表格.md)——本文档内置数据表的字段与记录操作会委托到那边
- [10 在线表格](10-在线表格.md)——行列网格式的表格
- [13 文档管理](13-文档管理.md)——**搜索文档的唯一入口****改整份文档的名字**也在那边
- [14 微盘](14-微盘.md)——文件放进微盘,而不是做成智能文档
- [99 风险与确认](99-风险与确认.md)——覆盖与删除前的确认规则

View File

@@ -0,0 +1,132 @@
# 文档管理
企业微信四种在线文档(在线文档 / 在线表格 / 智能表格 / 智能文档)共用的**「文件级」管理**
搜索、改名、加协作成员与权限、设置链接加入规则。它管的是**文件这个壳**——
它叫什么、谁能进来、进来能干什么——**不碰文件里的一个字**。
**两件事只有这里能做**
- **搜索文档**——不论哪种类型,这是**唯一的入口**。其他四个内容能力都没有搜索方法。
- **改文档名 / 改权限**——不论哪种类型,都在这里。
**同时它也是整套能力里风险最高的一域**:改加入规则可能放开**企业外**访问。
## 你可以怎么说
> 「帮我找一下那个产品周报文档」
> 「我最近看过哪些文档?」
> 「我这周建的文档有哪些?」
> 「把这个文档改名叫 2026 年 Q3 项目周报」
> 「把张三加到这个文档里,让他能编辑」
> 「给客户发个只读链接」
## 📋 验证状态
| 项 | 状态 |
|---|---|
| 修改文档名称 | ✅ **已实测** |
| 搜索文档 | ⚠️ **未实测** |
| 添加协作成员 / 设置权限 | ⚠️ **未实测**(高风险,未在真人身上做权限扩散实验) |
| 设置链接加入规则 | ⚠️ **未实测**(风险最高,未做实验) |
| 完整链路(你说一句话 → 助手自动找到并改完) | ⚠️ 未实测 |
**实测记录**(命令层,人工在真实账号上执行):
```bash
wecom-cli doc names update ... # ✅ 重命名成功
```
这一条是在清理测试数据时验证的——4 份测试文档(在线文档 / 在线表格 / 智能表格 / 智能文档)
全部被重命名为「【可删除】DesireCore验收测试-\*」。四种类型都改成功了,
侧面印证了「一套管理接口对四种文档统一生效」。
**权限相关的两个方法一条都没测**——它们会真实改变别人能看到什么,
不适合拿真实文档和真人做验收实验。所以本页不写「实际效果」,也不虚构任何搜索结果或权限变更记录。
## 能力清单
| 能做什么 | 命令 | 风险 |
|---|---|---|
| 搜索文档(含「最近浏览 / 最近创建」) | `wecom-cli doc search` | 读取 |
| 修改文档名称 | `wecom-cli doc names update` | 低风险写入 |
| 添加协作成员并设置权限 | `wecom-cli doc members update` | **高风险写入(权限扩散)** |
| 设置链接加入规则(企业内 / 企业外) | `wecom-cli doc rules update` | **高风险写入(权限扩散,可放开企业外)** |
两个高风险方法属于**权限扩散**类:它们不改文档里的一个字,却直接改变「谁能看到这份文档的全部内容」。
**后果不可逆**——已经看过的人就是看过了,而且命令行侧没有撤销接口。
所以它们的确认比其他高风险动作更重。
## 注意事项
**改加入规则是整套能力里最危险的一件事。**
把「企业外成员加入权限」改成可浏览或可编辑,意味着**不在你们企业微信通讯录里的任何人**
只要拿到链接就能访问这份文档的全部内容——**这是数据外泄级别的变更**
链接被转发出去后无法收回。
所以助手在这里加了三道额外的闸门:
1. **涉及企业外时会单独再确认一次**,把后果单独说清:
> 这份文档将不再限于本企业内部可见,链接被转发出去后无法收回。
2. **「发个链接就能看」不等于「开企业外」。** 默认只动企业内的加入权限。
要动企业外,**必须由你明确说出「企业外 / 外部 / 客户 / 合作方」**这类对象;
含糊时它会追问「是仅企业内部,还是也包括企业外的人?」。
3. **不知道文档里有什么就不开企业外。** 你要求放开而助手没读过这份文档时,
它会先提示「这份文档的内容我没有读过,开放给企业外前请你确认其中不含敏感信息」。
想收紧(关掉外部访问)也要说清楚——**不提这一项等于保持现状,不是关闭**。
**加成员只能加,不能删。** 命令行**没有移除成员的方法**。加错了助手也删不掉,
只能引导你去企业微信客户端手动移除——**它不会假装能撤销**。这也是加成员前要确认的原因之一。
**不会默认给高权限。** 「把张三加进来」这个说法本身**不构成**「让他能编辑」的明确表示。
| 你怎么说 | 会给什么权限 |
|---|---|
| 「让他看看」「发给他参考」 | 仅浏览 |
| 「让他一起写」「他要填表」 | 可编辑 |
| 「让他管这个文档」「他来分配权限」 | 管理员 |
你没说清楚时助手会问一句,不会自己选可编辑或管理员。
**搜索只能搜到你有权限访问的文档。** 搜不到不等于文档不存在,可能只是你无权访问。
你让它查「张三参与的文档」时,助手**必须提醒你**:结果只包含**你自己也有权限访问**的那部分——
**这个能力不能用来窥探别人的文档列表**
**搜索会先分词再搜。** 把整句话当成一个关键词传进去是搜不到东西的头号原因。
助手会先剔除「帮我」「找下」「的」「文档」这类口语词,再把真正有区分度的词组合起来搜。
**搜出多条它不会替你挑。** 结果超过 1 条时,助手会用「序号 + 文档名(可点击链接)+ 最近修改时间」
列出候选,**等你选定再做后续动作**。一条都没搜到时它会告诉你没搜到,并请你补充线索,
**不会自己换关键词反复重试**
**有些类型搜得到但读不了正文**`ppt` / `journal` / `collect` / `mind` / `flow` / `pdf`
整套能力里都没有读它们正文的方法,助手会直接说明,并给你文档链接让你在客户端打开。
**改名 / 加成员 / 改规则这三件事只对四种在线文档有效**,上面那几种类型不适用。
**微盘不是在线文档。** `drive.weixin.qq.com` 开头的是微盘,本域的四个方法对它都不适用——
微盘文件的改名走 [14 微盘](14-微盘.md)。
**文档链接可以给你,内部编号不给。** 助手展示文档时用「文档名 + 可点击链接」的形式,
提创建者时用姓名。文档的内部标识、创建者的内部标识都不会出现在回复里。
### 三条通用边界在本域怎么体现
1. **只能改它自己建的东西**——**你自己建的文档,助手改不了名、也改不了权限**。
(实测的重命名是在助手自己建的 4 份测试文档上做的。)碰到这类请求,
它会说明边界并建议你在客户端操作。
2. **能力按品类逐项开通**——文档是独立品类(实测账号是后来单独补开的)。
未开通时助手会把官方开通指引原样转给你,然后停下,不重试。
3. **危险动作先问你**——**加成员和改加入规则是本域两个高风险写入**
而且**涉及企业外时要单独再同意一次**。改名是低风险,直接执行(改错了再改回来即可)。
见 [99 风险与确认](99-风险与确认.md)。
## 相关
- [09 在线文档](09-在线文档.md)——Word 类文档的正文读写
- [10 在线表格](10-在线表格.md)——行列网格式表格的数据读写
- [11 智能表格](11-智能表格.md)——字段 / 记录 / 视图的操作(那边的「改子表名」不是改文件名)
- [12 智能文档](12-智能文档.md)——智能文档内容与页面结构(那边的「改名」是改页面名)
- [02 通讯录](02-通讯录.md)——给某人开权限前,先在这里把人名解析出来
- [14 微盘](14-微盘.md)——微盘文件的改名与管理
- [99 风险与确认](99-风险与确认.md)——权限扩散类操作的确认规则

View File

@@ -0,0 +1,127 @@
# 微盘
企业微信微盘(网盘)的文件操作:找文件、拿文件、放文件、理顺文件名和目录。
微盘里装的既有离线的二进制文件Word/Excel/PPT/PDF/图片/音视频),也有在线协作文档的入口——
**这两类的处理方式完全不同**,是这一域最需要分清的一件事。
## 你可以怎么说
> 「微盘里搜一下季度汇报」
> 「那个 PPT 在微盘哪个位置?」
> 「把这个文件传到微盘」
> 「下载微盘那个文件,看看里面写了什么」
> 「把微盘那个文件改个名」
> 「我最近看过哪些微盘文件?」
## 📋 验证状态
| 项 | 状态 |
|---|---|
| 列出最近浏览过的文件 | ✅ **已实测**:返回了真实文件 |
| 搜索文件 / 文件夹 / 共享空间 | ⚠️ **未实测** |
| 读文件元信息(在哪个空间、多大、谁建的) | ⚠️ **未实测** |
| 下载文件到本地 | ⚠️ **未实测** |
| 上传本地文件 | ⚠️ **未实测** |
| 新建文件夹 | ⚠️ **未实测** |
| 重命名文件 | ⚠️ **未实测** |
| 完整链路(你说一句话 → 助手自动找到并处理完) | ⚠️ 未实测 |
**实测记录**(命令层,人工在真实账号上执行):
```bash
wecom-cli disk files list # ✅ 返回真实文件
```
**只验证了「能列出真实文件」这一步**,具体文件内容不在这里公开。
搜索、上传、下载、改名一条都没跑——所以本页不写「实际效果」,也不虚构任何文件名或返回值。
下面「能力清单」与「注意事项」来自接口定义与技能文档,是**设计意图,不是实测结论**。
## 能力清单
> 除「列出最近浏览」外均**未实测**。
| 能做什么 | 命令 | 风险 |
|---|---|---|
| 列出最近浏览过的文件 | `wecom-cli disk files list` | 读取 |
| 搜索文件 / 文件夹 / 共享空间 | `wecom-cli disk files search` | 读取 |
| 读一个文件的元信息 | `wecom-cli disk files get` | 读取 |
| 下载文件到本地 | `wecom-cli disk files download` | 读取(只写你自己的本地磁盘) |
| 上传本地文件到微盘 | `wecom-cli disk files upload` | 低风险写入 |
| 新建文件夹 | `wecom-cli disk folders create` | 低风险写入 |
| 重命名文件 | `wecom-cli disk files rename` | 低风险写入(**共享空间里的文件升为高风险** |
## 注意事项
**共享空间里的重命名,全体协作者立刻可见。**
改自己个人空间里的文件名是小事,改回去就行;但**共享空间里的文件一改名,
这个空间的所有人看到的都是「文件凭空改名了」**。所以助手会先查这个文件在哪个空间——
- 在共享空间 → **先复述再改**「把共享空间『XX』里的『旧名』改名为『新名』」等你同意。
- **判不准是不是共享空间时,一律按共享空间处理**(保守升级,不赌)。
上传到共享空间同理会被别人看到。上传本身仍是低风险(新增文件,可以再删),
但**目标位置不明确时助手会先问清楚传到哪里,不会默认往共享空间塞**。
**在线文档下载不了,只能给你链接。**
微盘搜索的结果里混着两类东西:
| 类型 | 怎么处理 |
|---|---|
| 离线文件Word/Excel/PPT/PDF/图片/音视频) | 能下载到本地,助手可以读给你听 |
| 在线协作文档(在线文档 / 在线表格 / 智能表格 / 智能文档) | 正文在云端,**下载不了**。助手会把它转给对应的能力去读正文 |
| `ppt` / `journal` / `collect` / `mind` / `flow` | **整套能力都读不了正文**,助手会给你链接,引导你在客户端打开 |
**微盘的分享链接是可以给你的**,助手会正常展示,你也可以直接把它发出去。
**文件名不是文件标识。** 你只给了文件名或关键词时,助手会先搜出来拿到内部标识再操作,
**不会把文件名当标识硬拼进命令**
**搜索是有界的。** 一组条件搜完必要时再调一次2~3 轮还没结果就停下来如实告诉你「没搜到」,
并请你补更准的关键词、类型或创建者——**不会无限换词硬搜**。
停下时它会说清楚是「搜不到文件」还是「搜不到这个空间」。
**没有时间范围这个搜索条件。** 你说「最近三天上传的」时,助手会按修改时间倒序拉,
再自己筛出你要的那一段,而不是伪造一个不存在的时间参数。
**重名会让你选。** 搜出多个同名文件、文件夹或空间时,助手会用「序号 + 名称 + 路径 + 时间」
让你挑,**不会随手选第一个**。
**类型说不清就两种都搜。** 你说「Excel」而没说是在线表格还是本地 xlsx 时,助手会两种类型一起搜,
免得漏掉。它也不会把「Excel 报告」整个当成关键词——会拆成「关键词=报告」+「类型=表格」。
**「路径」才是层级真相。** 空间名和文件夹名同名时不一定是父子关系,可能是平级。
助手判断层级看的是完整路径。
**这些做不到**(会直接告诉你去客户端):
- **移动 / 删除 / 复制文件****删除或重命名文件夹**;调整目录树
- 创建 / 删除共享空间,修改空间成员与设置
- 修改分享权限、生成或撤销分享链接、设置访问密码与有效期
- 版本管理(看历史版本、恢复旧版、比对)
- 覆盖上传 / 秒传 / 断点续传(要替换就重新传一份新的)
- **监视微盘变更**——它**不会**跟你说「有新文件我告诉你」,需要你自己回头再问
- **给机器人授予某个空间的权限 / 把机器人加进共享空间成员**——微盘**没有这个功能**
客户端也做不到。助手不会提这类建议,也不会引导你「联系空间管理员给机器人授权」
**域名分不清就全错。** `drive.weixin.qq.com` 才是微盘;`doc.weixin.qq.com` / `page.weixin.qq.com`
是在线文档,把在线文档的链接丢给微盘能力一定失败。在线文档的改名、加成员归
[13 文档管理](13-文档管理.md)。
### 三条通用边界在本域怎么体现
1. **只能改它自己建的东西**——你自己上传的文件,助手**改不了名**。
它会说明边界并建议你在客户端操作。另外整个微盘域**本来就没有删除和移动能力**
这两件事无论文件是谁传的都做不了。
2. **能力按品类逐项开通**——微盘是独立品类(实测账号是后来单独补开的)。
未开通时助手会把官方开通指引原样转给你,然后停下,不重试。
3. **危险动作先问你**——**共享空间里的重命名会先问你**(这是个按参数升级的例子:
同一个动作,在个人空间不问,在共享空间就问)。上传到位置不明确时也会先问清楚传到哪。
见 [99 风险与确认](99-风险与确认.md)。
## 相关
- [13 文档管理](13-文档管理.md)——在线文档的搜索、改名、加成员、改权限
- [09 在线文档](09-在线文档.md) / [10 在线表格](10-在线表格.md) / [11 智能表格](11-智能表格.md) / [12 智能文档](12-智能文档.md)——微盘里命中在线文档、你又想读正文时,会转到这几篇对应的能力
- [15 媒体文件](15-媒体文件.md)——本地文件与企业微信之间的搬运(**传微盘不需要经过它**
- [02 通讯录](02-通讯录.md)——按「谁上传的」搜文件时,先在这里把人名解析出来
- [99 风险与确认](99-风险与确认.md)——按参数升级的判定规则

View File

@@ -0,0 +1,99 @@
# 媒体文件
在**你的本地文件**和**企业微信里的文件形态**之间搬运:把本地文件传上去,或者把企业微信里的文件落到本地。
它只搬运,不看内容——不做 OCR、不读 PDF 正文、不做看图问答。
**这一域你基本不会直接点名。** 它是别的能力在流程中间自动调用的一步:
发图片消息、读邮件附件、把已有素材放进微盘,都要先经过它换一次形态。
写这一篇是为了让你知道「为什么发图片比发文字多花一步」。
## 你可以怎么说
大多数时候你不会这么说,而是说下面这些话——由助手自己决定要不要调它:
> 「把这张图发到群里」(发消息前会自动上传一次)
> 「下载邮件里的附件看看」(读附件内容前会自动下载一次)
> 「这个 PDF 传到微盘」(**这个反而不需要**,见下)
## 📋 验证状态
| 项 | 状态 |
|---|---|
| 上传本地文件 | ⚠️ **未实测** |
| 下载文件到本地 | ⚠️ **未实测** |
| 完整链路 | ⚠️ 未实测 |
**本域没有做过独立实测。** 它总是被别的能力顺带调用,验收过程中没有单独跑过这两个方法,
也没有跑过任何需要它参与的完整链路(发图片消息、读邮件附件都没测)。
所以本页**不写「实际效果」,不附任何命令返回值**。
下面「能力清单」与「注意事项」来自接口定义与技能文档,是**设计意图,不是实测结论**。
## 能力清单
> 均**未实测**。
| 能做什么 | 命令 | 风险 |
|---|---|---|
| 本地文件 → 企业微信媒体形态 | `wecom-cli media upload` | 低风险写入 |
| 企业微信媒体形态 → 本地文件 | `wecom-cli media download` | 读取 |
**两个动作都不会被别人看见。** 上传只是把文件放进企业微信的媒体暂存换一个内部标识,
**在被别的能力引用之前谁也看不到**;下载只往你自己的本地磁盘写文件。
真正让文件被别人看见的是「引用它」的那一步——发消息、发邮件、传微盘——
**确认闸门加在那里,不在这里**
## 注意事项
**不是所有「带文件」的操作都需要经过这一步。** 这是最容易误解的地方:
| 你要做的事 | 需不需要先经过这一步 |
|---|---|
| 发图片 / 文件 / 语音 / 视频**消息** | **需要**。消息接口只认企业微信内部的媒体形态,不吃本地路径 |
| 传文件到**微盘** | **不需要**。可以直接给本地路径,上传是内部完成的 |
| 发带附件 / 内嵌图的**邮件** | **不需要**。附件可以直接给本地路径 |
| 把本地文件**导入成在线文档 / 表格** | **不需要**。同上 |
| 往智能表格 / 智能文档里传图片、附件 | **不需要**。同上 |
| **读**邮件附件、内嵌图的**内容** | **需要**。得先落到本地才能读 |
| **下载**微盘文件 | **不需要**。微盘自己就能给你本地文件 |
一句话记法:**要看内容(下行)几乎总要经过这一步;要发出去(上行)只有发消息一定要经过,
邮件和微盘都能直接吃本地路径。**
**它下载不了链接,只认内部标识。**
把邮件里的附件链接、正文里的图片链接、微盘的分享链接丢给它,一定失败——它只吃企业微信的媒体标识。
**防泄漏DLP加密链接下不来。** 企业微信有一类与你的身份绑定的加密资源链接,
这个能力**下载不了也解不开**。正确做法是把链接原样给你,你在企业微信客户端里点开看。
**助手不会尝试用别的手段绕过去。**
**类型要和下游对齐。** 上传时要声明这是图片、语音、视频还是普通文件;
发消息时消息类型必须跟它一致——**不能拿图片当文件发**。这一步由助手对齐,你不用管。
**它不解析内容。** OCR、看图问答、PDF/Word/Excel 正文提取、音视频转写都不在这一域范围内。
它的职责到「文件已经在本地了」为止,之后的读取由别的能力接手。
**它不负责「找」文件。** 邮件附件的标识由邮件能力产出,微盘文件的由微盘能力产出。
这一域只接收别人给的标识,**不搜索也不猜**。
**内部标识和本地路径都不会给你看。** 你问「文件在哪」时,助手会用自然语言指代
(「你刚发的那个附件」「已取到文件《周报.pdf》」需要给你可点的东西时用可读链接。
### 三条通用边界在本域怎么体现
1. **只能改它自己建的东西**——这一域**不修改任何已有内容**,只做搬运,所以这条不直接生效。
但它的下游会受限:上传上来的文件要发出去、要放进别人的文档里时,边界就开始生效了。
2. **能力按品类逐项开通**——它跟着调用它的那个能力所属的品类走。
比如发图片消息需要消息品类、读邮件附件需要邮件品类。相关品类未开通时,
助手会把官方开通指引原样转给你,然后停下,不重试。
3. **危险动作先问你**——**这一域本身不问你**,因为上传下载都不产生对外可见的后果。
问你的是下一步:发消息、发邮件、传到共享空间。
见 [99 风险与确认](99-风险与确认.md)。
## 相关
- [03 消息与会话](03-消息与会话.md)——**唯一一定要经过本域的上行场景**
- [08 邮件](08-邮件.md)——读附件内容时会经过本域;**发附件不需要**
- [14 微盘](14-微盘.md)——上传下载都**不需要**经过本域
- [04 群聊历史](04-群聊历史.md)——把群里的图片、文件落到本地
- [99 风险与确认](99-风险与确认.md)——确认闸门为什么加在下游而不是这里

View File

@@ -0,0 +1,201 @@
# 风险与确认
哪些操作助手会先问你、哪些直接做、以及「怎么才算同意」。
这一篇是所有能力共用的规则,各篇文档里的「危险动作先问你」都指向这里。
一句话概括:**能撤回的直接做,撤不回的先问你。**
## 三档风险
助手把每个动作分成三档,判据是**对别人的实际影响**,不是「有没有写操作」。
| 档位 | 判据 | 助手怎么做 |
|---|---|---|
| **读取** | 纯查询,对企业微信侧没有任何改动 | 直接做。**隐私敏感的读**(见下)会先说明要读什么 |
| **低风险写入** | 创建新东西,或者只增不减地改(追加、上传、新建) | 直接做,事后如实汇报做了什么 |
| **高风险写入** | **对外可见**(发消息、发邮件、邀请他人、授权他人)或**不可逆**(覆盖、删除、标记完成),没有回滚接口 | **先复述影响,等你明确同意** |
举个对照:往文档里**追加**一段是低风险(加错了再改),**整篇覆盖**是高风险(原文没了)。
同样是「写」,档位完全不同。
## 高风险动作的完整清单26 个)
执行前一定会先问你。按能力分组:
| 能力 | 会先问你的动作 |
|---|---|
| [消息](03-消息与会话.md) | 发消息(两条发送路径都算) |
| [邮件](08-邮件.md) | 发送 / 回复 / 转发 / 日程邀约邮件 / 会议邮件(同一个动作的五种用法) |
| [会议](06-会议.md) | 创建会议、更新会议、取消会议 |
| [日程](05-日程.md) | 创建日程、更新日程、取消日程 |
| [待办](07-待办.md) | 标记完成、删除 / 退出 |
| [文档管理](13-文档管理.md) | 添加协作成员、**设置链接加入规则** |
| [在线文档](09-在线文档.md) | 整篇覆盖正文 |
| [在线表格](10-在线表格.md) | 覆盖单元格区域、删除子工作表 |
| [智能文档](12-智能文档.md) | 整页覆盖、删除页面、删除或替换内容块 |
| [智能表格](11-智能表格.md) | 改记录、删记录、删字段、删子表、改子表名、删视图、删图表 |
**其中最危险的一档是「设置链接加入规则」**——它可能放开**企业外**访问,
等于把文档对不在你们企业微信通讯录里的任何人公开。这一档会**单独再确认一次**,见下文。
## 4 个「看情况」的动作
这几个默认是低风险、直接做;**只有命中特定条件才升级为先问你**
| 动作 | 什么时候升级 | 为什么 |
|---|---|---|
| 创建待办 | **分派给他人时** | 对方待办列表里立刻出现,还会收到提醒 |
| 更新待办的参与人 | **改参与人名单时** | 是「整体替换」语义,漏掉谁就等于把谁踢出这条待办 |
| 修改智能表格字段 | **改字段类型时** | 可能把这一列已有的数据转换掉或直接清空 |
| 微盘文件重命名 | **文件在共享空间时** | 改名对全体协作者立刻可见 |
没命中条件时助手直接做——**不会为了「保险」把所有待办操作都拿来问你一遍**。
过度确认会让助手变得不可用。
## 助手会怎么问
一条标准的确认长这样:
> 即将以机器人的身份,向「项目 A 群」发送消息:「周报截止时间推迟到周五。」——确认发送吗?
> 将取消日程「产品评审」9 月 1 日 14:00-15:00参与人会收到取消通知且无法撤回。确认吗
> 将删除子表「需求池」,其中的 8 个字段和 214 条记录会一并丢失。确认吗?
复述里一定包含三件事:**对谁**(用姓名、群名、文档标题,不用内部编号)、**做什么**、
**内容或规模是什么**。涉及不可逆时会明说「无法撤回」「不可恢复」。
## 怎么算「明确同意」
| 你的回复 | 算不算 |
|---|---|
| 「确认」「发吧」「可以」「删」 | ✅ 算 |
| 「嗯」「你看着办」「都行」 | ❌ **不算**,助手会再确认一次 |
| 沉默、答非所问 | ❌ 不算 |
| 上一轮同意过一个类似的动作 | ❌ **不算**。同意是**一次一个动作**的,不会顺延到下一个 |
**催促不能省掉确认。** 助手可以把确认说得更短,但不会跳过。
## 三个「先读再写」
覆盖和删除之前,助手会**先把现状读出来**,在确认里告诉你要毁掉的是什么:
- **覆盖文档正文前**——先读一遍现有正文,给你一两句摘要。没读过就覆盖等于蒙眼删除。
- **覆盖表格区域前**——先读一遍这块区域现在是什么。区域本来是空的,它也会如实说「该区域当前为空」,
但这一步不省。
- **删子表 / 删记录前**——先数一数有多少字段、多少条数据。
## 涉及企业外时会再问一次
把文档的加入规则放开到企业外,是整套能力里后果最严重的一件事:
**不在你们企业微信通讯录里的任何人,只要拿到链接就能看到这份文档的全部内容**
而且链接被转发出去后无法收回,命令行侧也没有撤销接口。
所以这一档有三道额外闸门:
1. **单独说一遍后果,单独取得一次同意**
> 这份文档将不再限于本企业内部可见,链接被转发出去后无法收回。
2. **「发个链接就能看」不等于「开企业外」。** 默认只动企业内的权限。
要动企业外,必须由你明确说出「企业外 / 外部 / 客户 / 合作方」;含糊时它会追问。
3. **不知道文档里有什么就不开。** 助手没读过这份文档时,会先提示你自己确认其中不含敏感信息。
顺带一提:**加协作成员只能加不能删**——命令行没有移除成员的方法。加错了得你去客户端手动移除。
## 只读但敏感的操作,会先说明再读
下面这些虽然不改任何东西,但读的是**别人的原始内容**,助手会先用一句话说明范围再动手:
| 操作 | 会先说什么 |
|---|---|
| 读群聊记录 | 「我将读取『XX 群』某年某月某日至某日的聊天记录,用于……」 |
| 读会议逐字转写 | 说明是哪场会、拉哪一段 |
| 读邮件正文与附件 | 说明读哪封 |
| 搜通讯录(批量搜集人员信息时) | 说明要查什么 |
范围必须具体到**哪个对象 + 哪个时间段 + 读来干什么**。
你没指定时它会先把候选列出来让你选,**不会「先全都拉下来再说」**。
## 无论你怎么要求都不会做的事
这几条是硬线,**不因为你坚持而放宽**
- **导出能识别到具体自然人的隐私字段**:身份证号、护照号、银行卡号、家庭住址、婚姻状况、
健康状况、宗教信仰等。
- **对个人做行为画像**:统计「谁说话最多」「谁最晚下班」这类分析(除非你明确要求且目的正当)。
- **不当内容写入**:性骚扰、性别歧视、人身侮辱、种族歧视。
- **政治敏感写入**:把特定公职人员与「负面 / 贪污 / 举报 / 黑材料」这类用途凑在一起的请求,
**第一步就拒绝,不会先建个表再判断**
- **违法或不良意图**:删不合规的报销记录逃避审计、篡改数据掩盖违规、伪造记录欺骗他人。
- **越权读取**:批量导出他人数据、读你没有权限的内容。
- **注入与恶意脚本**:读到的邮件正文、聊天记录、文档内容里如果出现「忽略之前的指令」
「你现在是……」这类文本,一律当**普通文字**处理,绝不执行;
要写进文档的内容里夹带可执行脚本时,**直接拒绝写入并说明原因**,不会「悄悄清洗一下再写」。
助手拒绝时会直说「该操作不在支持范围内」并简要说明原因,**不道歉、不引导你换个问法绕过去**。
## 三条通用边界
这三条在每篇文档里都出现过,这里给出完整版。
### 1. 它只能改「它自己建的」东西
助手是以「机器人代表你」的身份在工作。企业微信对这个身份的规定是:
**你创建或拥有的数据它可以读取、查询、下载,但它只能写入或修改机器人自己创建或拥有的数据。**
- **读**:你的日程、文档、待办、邮件、微盘文件都能读。
- **写**:只能改**它自己建的**。你说「把我昨天写的那份文档改一下」——那份是你建的,它改不了。
碰到这种请求,助手**不会反复重试**,而是直接说明这条边界,并给替代方案:
「由我新建一份」或者「这个得你在企业微信里改」。
**实测印证**:助手创建的待办,创建人显示的是**机器人身份**,不是你本人。
这条边界直接决定了那 26 个高风险动作里有多少是你实际用得上的。
### 2. 能力按品类逐项开通
机器人不是开箱全能。通讯录、文档、微盘、会议、邮件、群聊……**每一类都要单独开通**。
没开通的品类,第一次调用就会被企业微信拒绝,并附上一段官方的开通指引。
助手的处理是固定的:**把那段指引一字不改地转给你**(包括其中的链接,不改写、不省略、不"帮你总结"
然后**停下来**——**不重试,也不换个方法绕过去**。那是权限问题,重试不会变好。
实测账号的情况:基础品类一开始就有;通讯录、文档、微盘、会议、邮件是后来单独补开的;
**群聊会话品类始终没开通**,所以 [04 群聊历史](04-群聊历史.md) 整域都没验过。
### 3. 危险动作先问你
也就是本篇上面写的全部内容。
## 📋 验证状态
**这一篇讲的是「助手会怎么做」,而「助手在真实对话里是不是真的这么做」,
只做了很有限的验证。** 如实说明:
| 项 | 状态 |
|---|---|
| 26 个高风险动作里,实际执行过的 | **5 个**:待办标记完成、待办删除、日程更新、日程取消、发消息。执行前都是明确知情的 |
| 其余 21 个高风险动作 | ⚠️ **未做破坏性验证**——不适合拿真实数据和真人做验收实验 |
| 4 个「看情况」升级的判定 | ⚠️ **未实测** |
| **助手在对话里是否真的先问再做** | ⚠️ **未做端到端实测**。界面里的完整链路跑不通(本机内存不足 + AI 审批未配置),所以「确认才执行」这个行为本身没有被真机验证过 |
| 三档风险的划分依据 | ⚠️ 来自接口描述与技能声明,**不是逐个实测出来的**。发现与实际行为不符时以实际行为为准 |
**唯一被真机验证过的确认类行为**是日程/会议的消歧问句——
助手输出的是逐字正确的 `需要创建日程还是会议?(请回复:日程 / 会议)`
(这一条是修复了一个缺陷之后复测通过的:第一次测试时它把这句话改写成了自己的说法。)
**本篇不含任何编造的确认对话。** 上面「助手会怎么问」一节里的三个例句是**格式示意**
不是实测记录——真实对话里的措辞会随具体对象和内容变化。
### 一处与上游的有意差异
这套能力改写自企业微信官方的技能包。上游对**发邮件**的规定是:
「展示预览后直接发,不许再问是否发送」。
**本项目故意改了这一条**:发邮件不可撤回,属于最典型的高风险动作,所以预览照旧展示,
但**展示之后仍然要等你明确同意**才发。记在这里是为了说明这不是疏忽,是有意为之。
## 相关
- [README](README.md)——总入口,含各能力的验证进度
- [01 快速开始](01-快速开始.md)——授权与首次使用
- 各能力文档的「注意事项」——每一域自己的具体确认措辞

View File

@@ -0,0 +1,159 @@
# 企业微信助手 · 使用文档
企业微信助手把企业微信的日常办公搬进对话框。你用日常语言说出意图——「今天有什么会」「把周报发到项目群」
「记个待办」——它替你在企业微信里把事情办成,再用可读的话汇报结果。不用打开企业微信客户端,不用记接口,
不用自己敲命令。
本文档写给使用者,不写给开发者。每一篇都回答同一个问题:**我说什么,它能做什么,做不到什么。**
---
## 先读这个
| 文档 | 讲什么 |
|---|---|
| [01 快速开始](01-快速开始.md) | 装什么、怎么授权、第一次对话该说什么 |
| [99 风险与确认](99-风险与确认.md) | 哪些操作会先问你、怎么算「同意」、哪些不问 |
---
## 按能力查
| 能力 | 你会怎么说 | 文档 |
|---|---|---|
| 通讯录 | 「张三是谁」「李四在哪个部门」 | [02 通讯录](02-通讯录.md) |
| 消息与会话 | 「给张三发条消息」「把这个文件发到项目群」 | [03 消息与会话](03-消息与会话.md) |
| 群聊历史 | 「项目群这两天聊了什么」「群里发的那个文件」 | [04 群聊历史](04-群聊历史.md) |
| 日程 | 「明天有什么安排」「约个日程」「订个会议室」 | [05 日程](05-日程.md) |
| 会议 | 「开个视频会议」「这个会讲了啥」「把会上原话发我」 | [06 会议](06-会议.md) |
| 待办 | 「记个待办」「我有哪些待办」「这条完成了」 | [07 待办](07-待办.md) |
| 邮件 | 「发封邮件给张三」「回一下这封」「邮箱里搜一下」 | [08 邮件](08-邮件.md) |
| 在线文档 | 「建个 Word 文档写周报」「把这份 docx 传上去」 | [09 在线文档](09-在线文档.md) |
| 在线表格 | 「建个在线表格」「把这个 Excel 传到企微」 | [10 在线表格](10-在线表格.md) |
| 智能表格 | 「建个项目管理表」「加一列」「统计各部门多少条」 | [11 智能表格](11-智能表格.md) |
| 智能文档 | 「写份周报」「整理成文档」「做个数据看板页」 | [12 智能文档](12-智能文档.md) |
| 文档管理 | 「找一下那个文档」「改个名」「把张三加进来」 | [13 文档管理](13-文档管理.md) |
| 微盘 | 「微盘里搜一下」「传到微盘」「下载那个文件」 | [14 微盘](14-微盘.md) |
还有一篇 [15 媒体文件](15-媒体文件.md)。它是纯搬运能力(本地文件 ↔ 企业微信),
**通常由上面的能力在流程中间自动调用**,你一般不会直接点名它。想知道「为什么发图片比发文字慢一步」时可以看看。
---
## 它能做到什么程度
- **读你的企业微信数据**:日程、会议、待办、邮件、文档、表格、微盘文件、通讯录里你有权限看到的人。
- **替你写入**:建文档 / 表格 / 日程 / 会议 / 待办,往文档里追加内容,发消息、发邮件、传文件。
- **替你确认**:凡是对外发出去、改权限、覆盖或删除的动作,执行前会把影响复述给你,等你点头。
- **说人话**:回复里用姓名、群名、文档标题,不甩内部编号和原始 JSON。
- **办不成就说办不成**:会告诉你卡在哪一步、需要什么,不假装成功。
## 它做不到什么
- **不能改你自己建的东西**(见下一节第 1 条)。
- **不能撤回**:消息、邮件发出去就收不回;删掉的待办、覆盖掉的文档正文都没有恢复接口。
- **不做周期性日程与会议**:创建、修改、取消重复日程/会议都不支持,要去企业微信客户端。
- **不做 RSVP**:接受 / 拒绝 / 待定别人的邀请,只能你自己在客户端点。
- **不做邮件的已读未读、删除、草稿、标签写入、撤回**。
- **不做全量通讯录导出**:搜到的只是你有权限看到的人,且结果会被截断。
- **不监听变化**:不会「有新消息 / 新文件就告诉你」,需要你来问。
- **不做因果分析与预测**:能算「各部门各多少条」,不回答「为什么这么多」「下月会怎样」。
- **超出企业微信的事一概不接**:订机票、查天气这类,它会直接说不在能力范围内。
---
## 三条适用于所有能力的边界
这三条不是免责声明,是每天都会碰到的实际约束。
**1. 它只能改「它自己建的」东西。**
读是全的——你的文档、日程、待办、邮件它都能读;写是窄的——**只能修改机器人自己创建的内容**。
你自己在企业微信里建的那份文档、那条日程、那条待办,助手改不了。碰到这种请求,它会说明这条边界,
并给替代方案(比如「我另建一份新的」,或「这个得你在企业微信里改」)。
**2. 能力是按品类逐项开通的。**
机器人不是开箱全能。某一类能力(通讯录、文档、微盘、会议、邮件、群聊……)没开通时,企业微信会返回一段
官方的开通指引,助手会把那段指引**原样转给你**(包括其中的链接),然后停下——**不会换个方法绕、也不会反复重试**
因为那是权限问题,重试不会变好。本文档里标着「未开通」的能力就是这么来的。
**3. 危险动作会先问你。**
对外发送(消息、邮件)、对外通知(建改删日程与会议)、改文档权限、覆盖或删除内容——执行前会复述
「对谁、做什么、内容是什么、能不能撤回」,等你明确同意。含糊的「嗯」「你看着办」不算同意。
完整清单和判定规则见 [99 风险与确认](99-风险与确认.md)。
---
## 各能力的验证进度
这套助手在一个**真实企业微信账号**上做过实测。下表如实说明每个能力验到了哪一步。
每篇文档里还有更细的「验证状态」一节。
**两个层次要分清**
- **命令层**——人工在真实账号上直接执行企业微信官方命令行工具,看真实返回。下表说的就是这一层。
- **完整链路**——「你说一句话 → 助手自己选对能力 → 真的执行 → 汇报」。这一层**全域都未完成端到端实测**
(本机内存不足导致实例反复启动失败,且界面里的 AI 审批未配置,自动审批被拒)。
界面内单独验过的是助手能正常创建与对话、15 个技能全部被发现、授权引导步骤正确、
以及日程/会议消歧的固定问法逐字正确。
### 已完整实测(命令层)
| 能力 | 验到哪一步 | 详见 |
|---|---|---|
| 待办 | 6 个方法全通:建、列、查、改、完成、删除 | [07](07-待办.md) |
| 日程 | 5 个方法全通:建 → 列 → 查 → 改期 → 取消(会议室与忙闲查询未测) | [05](05-日程.md) |
| 在线文档 | 创建 → 追加 → 读回,内容完全一致(导入与覆盖未测) | [09](09-在线文档.md) |
### 已实测关键路径(命令层)
| 能力 | 验到哪一步 | 详见 |
|---|---|---|
| 消息与会话 | 查会话列表通过;**以机器人身份发消息真实发送成功** | [03](03-消息与会话.md) |
| 通讯录 | 按姓名搜索,解析出真人及其部门 | [02](02-通讯录.md) |
| 智能表格 | 创建通过;读子表结构通过(记录、字段、视图、图表未测) | [11](11-智能表格.md) |
| 文档管理 | 重命名通过(搜索、加成员、改加入规则未测) | [13](13-文档管理.md) |
| 微盘 | 列出文件返回了真实文件(上传、下载、改名、建文件夹未测) | [14](14-微盘.md) |
| 邮件 | 搜索通过(返回 0 封匹配);**发送、回复、转发、读正文均未测** | [08](08-邮件.md) |
| 会议 | 列表通过(返回 0 场);**创建、改期、取消、纪要、转写均未测** | [06](06-会议.md) |
### 只验到「创建」
| 能力 | 验到哪一步 | 详见 |
|---|---|---|
| 在线表格 | 只验证了「能建出一张在线表格」,读写数据、增删子表都没测 | [10](10-在线表格.md) |
| 智能文档 | 只验证了「能建出一份智能文档」,页面读写、结构调整都没测 | [12](12-智能文档.md) |
### 完全未实测
| 能力 | 卡在哪 | 详见 |
|---|---|---|
| 群聊历史 | 机器人**未开通「群聊会话」品类**,第一步就被拒,后续全部无法验证 | [04](04-群聊历史.md) |
| 媒体文件 | 没有单独验证;它总是被别的能力顺带调用,未做独立实测 | [15](15-媒体文件.md) |
---
## 关于本文档
**文档的准确性有一条侧面证据。** 实测过程中,操作者五次凭常识手写参数,五次都写错,
而助手所依据的技能文档五次都是对的:
| 凭常识写的 | 实际要求 |
|---|---|
| 待办条目用 `content` 装标题 | 要用 `title` |
| 日程主题用 `summary` | 要用 `subject` |
| 时间传数字时间戳 | 要传 `"2026-09-01 14:00:00"` 这样的字符串日期 |
| 参数嵌一层 `{"schedule": {...}}` | 要顶层平铺 |
| 建智能表格用 `doc_name` 指定名称 | 要用 `name` |
这说明技能里的参数不是从别处抄来的,是真能跑通的。仅此而已——它证明的是参数写得对,
**不证明每条链路都验过**。哪些验过、哪些没验,以上面的「验证进度」和各篇的「验证状态」为准。
**声明:本文档不含任何编造的运行记录。** 所有标注「实测」的命令与返回,都来自真实企业微信账号上
实际执行的记录;未执行过的一律标注为「未实测」,不写「实际效果」,也不虚构对话与返回值。
---
## 授权与依赖
需要 Node.js 18+ 与一个企业微信账号。首次使用时助手会引导你安装官方命令行工具并用企业微信扫码授权,
**整个环境只需要授权一次**。步骤见 [01 快速开始](01-快速开始.md)。