---
name: weaver-e10-yimiaoban
display_name: 泛微易秒办
display_name_en: Weaver E10 Yimiaoban IM
description: 泛微 E10 易秒办即时通讯能力（单聊/群聊消息、发送与必达、群组管理、会话与系统消息），通过 weaver-work-cli im 命令执行。
description_zh: 泛微 E10 易秒办即时通讯能力：拉取单聊/群聊/系统消息、发送与撤回消息、发必达、群组管理（建群/邀人/踢人/退群/解散/公告）、会话列表、文件上传下载与人员解析，全部通过 weaver-work-cli im 命令执行，写操作走 prepare→apply 确认链。
description_en: Weaver E10 Yimiaoban (IM) capabilities - fetching single/group/system messages, sending, withdrawing and ding messages, group management, sessions, file upload/download and people resolution, executed through the weaver-work-cli im command with a prepare-then-apply confirmation chain for writes.
version: 1.1.0
author: 泛微网络科技股份有限公司
agent_created: true
requires:
  bins: ["weaver-work-cli"]
dependencies:
  - weaver-e10-shared
cliHelp: "weaver-work-cli im --help"
---

# 泛微易秒办（im）

**CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md)，其中包含安装、E10 认证、JSON 输出和高风险写入规则。若共享规则不存在、CLI 未安装或读取失败，说明本技能的必需依赖缺失，必须调用宿主提供的提问/确认弹框，向用户说明必须补齐 `weaver-work-cli` 与共享 skill `weaver-e10-shared`（不补齐本技能无法执行）及补齐计划，并把下面两条待执行命令原样完整展示在确认信息中；Agent 不能在未确认时自行安装。用户明确确认后，Agent 必须直接代为按顺序执行且每条仅执行一次，不得要求或引导用户手动执行：① 缺 CLI 时执行 `npm install -g weaver-work-cli`；② 再执行 `weaver-work-cli skills install shared --target-dir <SKILLS_ROOT>` 装回共享 skill，`<SKILLS_ROOT>` 取本 SKILL.md 所在目录的上一级绝对目录（即与本技能同级的 skills 根目录），不要省略 `--target-dir`——省略会装进默认目录，导致本技能依然读不到共享规则。命令均成功后重新读取共享规则；仍读不到就停止并把结果报告用户，不得凭猜测继续。**
**`--is-connector` 判据**：用户明确使用连接器、或上下文要求用连接器完成任务 → 传 `true`；本次任务或上下文直接选择单独技能 → 不传；用户没有明确说明时，按**正在运行的这份 Skill 是哪一级**定——**用户级（条目标 `(user)`）不传，连接器级（标 `(connector)`）传**（同名 Skill 只会运行用户级那一份）。传 `true` 时不要再写 `--profile` / `--base-url`。完整规则见 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md)。

共享规则覆盖命令可用性检查、E10 认证、JSON 输出契约、大结果渲染和高风险写入确认链，本技能不再重复。

本技能覆盖易秒办（E10 即时通讯）业务域：**消息（msg）**、**必达（ding）**、**群组（group）**、**会话（session）**、**系统消息（sysmsg）**，以及支撑能力**人员解析（person）**、**文件上传/预览/下载（file）**、**用户状态与免打扰设置（user）**、**i18n 标签（i18n）**。所有写操作走 prepare→apply 确认协议。

## 认证与请求头契约

**登录与会话一律由 `weaver-e10-shared` 共享规则和 `weaver-work-cli auth ...` 命令体系托管**（小 E 宿主环境优先 `weaver-work-cli auth xiaoe`，其它环境由用户提供自有域名后走 `weaver-work-cli auth login`）。本技能**不自建登录**：禁止扫码/账号密码/自建 OAuth 取 token，禁止使用浏览器自动化登录，也不接触、打印、转存任何认证文件。

`weaver-work-cli im` 发往 E10 的每个请求都由 CLI 统一注入请求头三件套，业务入参里不要传这些字段，也不要手工拼装请求头；唯一权威声明见 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md) 的「请求头契约」章节。每个 operation 都已在请求头中带齐，缺任一服务端都无法识别操作者或会判定登录失效。

业务输入只描述业务对象与意图，凭证与请求头由 CLI 托管；需要诊断登录态时只用 `weaver-work-cli auth` / `doctor --e10` 与业务命令返回的 JSON 错误。

## 命令入口

```text
weaver-work-cli im --help
weaver-work-cli im schema
weaver-work-cli --json im run <operation> --input-json '{"key":"value"}'
```

`schema` 是可用能力的唯一事实来源（含每个 operation 的 `inputSchema`、`risk`、`requiresConfirmation`、`deprecatedInputAliases`）。禁止把本技能或源文档里的接口路径当成可直接调用的地址，也禁止把未出现在 `schema` 中的能力当作可用 operation。

## Reference 路由表

命中任一条件时，执行下一步前读取对应 reference。

| 触发条件 | Reference |
| --- | --- |
| 按姓名/工号/手机/邮箱解析人员，uid 批量解析 | [`references/person.md`](references/person.md) |
| 名称 → ID 解析规则、同名消歧、未匹配处理、接口间上下文传递契约 | [`references/field-resolution.md`](references/field-resolution.md) |
| 拉单聊/群聊消息、群置顶消息、消息阅读状态（只读） | [`references/msg-read.md`](references/msg-read.md) |
| 发送单聊/群聊消息（文本/图片/文件）、撤回、群消息置顶（写） | [`references/msg-write.md`](references/msg-write.md) |
| 必达消息：普通必达、已有消息转必达、仅未读/指定接收人（写） | [`references/ding-write.md`](references/ding-write.md) |
| 搜群、群信息、群成员、群主/管理员、群存在性、群公告（读） | [`references/group-read.md`](references/group-read.md) |
| 建群、邀请、踢人、退群、解散、申请入群、改群属性/群名、群公告增改删（写） | [`references/group-write.md`](references/group-write.md) |
| 会话列表、系统消息分组/类型/消息查询 | [`references/session-sysmsg.md`](references/session-sysmsg.md) |
| 文件上传/预览/下载到本地、用户在线状态、i18n 标签翻译 | [`references/file-user-i18n.md`](references/file-user-i18n.md) |
| 把某个群/某个人/某个系统会话设为免打扰或恢复提醒 | [`references/user-remind.md`](references/user-remind.md) |
| 易秒办红线（操作人字段、本人身份取用、人名解析、id 边界、分页与全量、展示完整）、写链停止条件、已知禁用边界 | [`references/safety-boundaries.md`](references/safety-boundaries.md) |
| 业务错误码含义与处理建议（群 12xx / 消息 15xx / 数据 13xx + CLI 校验错误） | [`references/error-codes.md`](references/error-codes.md) |
| 源资料清单、chunk 与 operation 影响索引、产物基线（源资料更新检测用） | [`references/source-manifest.json`](references/source-manifest.json) |

## 关键差异（必须先知道）

- **消息以 `msg` JSON 字符串 + `datas[].datas[]` 行结构返回**：CLI 的 `msg.sync.*`/`msg.top.sync` 已把每条消息解析成结构化行（`msgid/sender/time/typeName/content/media/must/fileName/...`），`content` 是可读文本（@ 提及已还原、媒体显示为 `[图片]名称`/`[视频]名称`/`[文件]名称`、必达内容带 `[必达]` 前缀）。解析结果直接使用，不要再本地拼装。
- **分页口径（与源 skill 一致）**：消息类每页默认 **50** 条、单页上限 **50**；**有界区间（指定了时间范围、默认当天、或显式 `end`/`endId`）自动循环翻页把区间拉完再返回**（最多 100 页，触及上限时返回 `hasMore:true` + `nextStart`）；**无界区间（`latest:true`）只拉一页**，需要更早数据时用 `nextStart` 继续。**会话列表（`session.list`）不参与自动翻页**（默认 20、上限 50，用 `msgid`/`nextMsgid` 翻页）。
- **时间范围强制收敛到 7 天**：单聊/群聊/系统消息的 `from`/`to` 跨度 > 7 天时，CLI 自动缩短为该范围**最后 7 个自然日**，并在 `data.rangeShrink` 返回 `notice`。**展示结果时必须把这条收敛提示原样转述给用户**，不要静默省略，也不要替用户改小范围。
- **展示顺序**：消息按消息 id 从新到旧（最新在前）返回；`content` 完整不截断，表格化时自行转义 `|`、保留换行与 `[必达]` 前缀、媒体保持可点击链接。
- **发送者「我」由 CLI 判定**：`sender` 与当前登录人 IM uid 比对，自己发的消息返回「我」；他人优先消息内 `sname`、其次 hrm 姓名、最后回退 uid。
- **人名一律由 CLI 走 hrm 解析**（`/api/hrm/common/getEmployeeByIds`），本技能不展示也不依赖 IM 群成员 `name` 字段；群成员接口返回的 `name` 不可信。
- **本人 IM 身份（cid/uid）只用于本机组装**：`group.search` 的 `members/owner/creator` 条件、撤回消息体、必达消息体、建群自检、消息展示「我」都用 CLI 通过 `teamsCheck` 取得的本人 `imCid`/`imUid`；**它绝不作为请求体操作人字段，也不接受调用方传入**（传 `user`/`sender`/`operator` 会被拒绝：`forbidden_key`）。
- **uid/cid/群 id 都是 uint64**：JSON 中必须按字符串传（`"1788334281700000004"`），`0` 一律拒绝；`num` 超过 50 会被截断为 50。
- **时间范围不是服务端过滤条件**：单聊/群聊历史按**消息 id 区间**定位，CLI 把 `from/to` 换算成 `[minId,maxId]`；缺省取当天。`actionMsg.code=1303`（无聊天记录）按**成功空列表**返回（`empty:true` + `emptyReason`），不报错。
- **媒体需要登录态**：`media[].previewUrl/downloadUrl` 需登录态访问，直接嵌 Markdown 会 401；要真正查看图片/视频或取回附件，用 `im.file.download` 落地到本地（`output` 为明确本地路径、父目录须存在、已存在则拒绝覆盖，图片会按文件头纠正扩展名）。
- **超时与空白消息**：普通请求 15 秒超时即失败且不重试（上传 15/60 秒）；全空白文本不算内容，禁止发送空白消息（`content_required`）。

## 写操作决策树（prepare → apply）

易秒办所有写操作（发消息/撤回/置顶/必达/群组写操作）统一为两段式，均在 `schema` 中带 `requiresConfirmation`：

1. 调用 `<op>.prepare`（只读校验：解析成员、读源消息、计算接收人），得到 `summary` + `continuation`。
2. 向用户展示 `summary`（动作、目标、数量、差异/风险），请求明确确认。
3. 用户确认后调用 `<op>.apply`，传 `{"confirm":true,"continuation":"<prepare 返回的 token>"}`。
4. `apply` 返回 `partial` / `write_uncertain` 或网络中断时**立即停止，不自动重试**，先做一次只读回查（如群成员、消息是否已存在）再决定。

任何一步出现登录失效/上下文变化（`context_mismatch`/`continuation_expired`/`target_changed`）都回到第一步重新 prepare。

## 失败处理

- 业务失败看 stderr JSON 的 `error.type` / `error.subtype` / `error.message`，不要用退出码 `0` 判断成功。
- `code=302` 或认证类错误（`session_expired`）：按共享规则引导用户重新登录，禁止猜域名或手工拼凭证。
- 业务语义错误码：`1303` 表示无聊天记录（成功空列表，看 `emptyReason`）；群不存在 `1209`；`members_resolve_failed`/`members_empty` 说明成员解析失败，向用户说明后请其决定是否 `removeFailed:true` 继续；其余码值对照 [`references/error-codes.md`](references/error-codes.md)。
- `alias_conflict`：旧字段（如 `filePath`/`shareGroups`）与新字段同时出现且取值不一致，请只保留一个。
- 展示给用户时保持「完整不截断」红线，参考 [`references/safety-boundaries.md`](references/safety-boundaries.md)。

## 平台兼容

命令示例必须同时兼容 Windows 与 macOS/Linux。简单 JSON 统一用 `--input-json`：

Windows PowerShell：

```powershell
weaver-work-cli --json im run im.msg.sync.group --input-json '{"groupId":"1788334281700000004","num":50,"latest":true}'
```

macOS/Linux（bash/zsh）：

```bash
weaver-work-cli --json im run im.msg.sync.group --input-json '{"groupId":"1788334281700000004","num":50,"latest":true}'
```

复杂 JSON 建议保存为 UTF-8 文件后按平台传给 `--input <file>`；Windows PowerShell 下不要使用 `printf`、`~/` 路径或反斜杠续行。
