# 听记发言人标注与替换

> 返回入口：[DingTalk Minutes Skill](../SKILL.md) · [Reference 与脚本索引](minutes.md) · [先识别和总结发言人](10-minutes-speaker-match.md)

只在用户已经提供或确认“当前发言人昵称 → 目标姓名”的对应关系，并明确要求修改听记时读取本文件。本流程不自动判断谁是谁，也不把候选推断当成写入授权。

## 写入前计划

1. 使用真实 `taskUuid` 锁定听记；只有标题时先按根 Skill 搜索并消歧。
2. 使用 `+transcript` 拉取完整逐字稿，确认每个 `--from` 昵称真实存在，并记录涉及的段落数量。
3. 将用户给出的每一组映射整理成 `from/to` 计划；同一个源昵称不得映射到多个目标姓名。
4. 用户要求绑定组织成员身份时，用 `dingtalk-aisearch` 唯一解析人员，再由 `dingtalk-contact` 核对同组织稳定 UID。零命中或多候选时停止该项；不能把姓名、手机号或跨组织 ID 直接当 UID。
5. 先执行 `+speaker-replace --dry-run` 查看计划。dry-run 不调用远端，也不能被解释为用户已经同意真实替换。

## 执行与验证

推荐入口：

```text
dws minutes +speaker-replace --id <taskUuid> --from <当前昵称> --to <目标姓名> [--target-uid <UID>]
```

- 这是写操作，按 leaf Schema 与 Runtime confirmation 执行；确认内容必须包含听记、源昵称、目标姓名和可选 UID。
- 多组映射逐项保留 ledger。某项失败后不能丢掉已成功项，也不能重放整个批次。
- 每次写入后重新读取逐字稿，验证旧昵称的目标段落已经更新，且没有修改其他发言人。
- 验证失败或结果未知时停止，报告已执行动作和当前证据；禁止盲目重试。

## 听音识别边界

当前没有发布“自动选择音频片段、调用本地 ffmpeg、发送片段并自动绑定身份”的稳定 Minutes Golden Route。需要用户听音识别时，可以先用 `+download` 安全下载用户明确指定听记的媒体，再让用户提供对应关系；不要静默安装工具、手写媒体请求或自行把音色推断成真实人员。

## 失败处理

| 情况 | 处理 |
|---|---|
| 源昵称不存在 | 停止该项并展示逐字稿中的真实昵称候选 |
| 人员解析多候选 | 展示姓名、部门等必要信息，让用户选择 |
| 找不到组织成员 | 询问是否仅修改显示名；未获授权时不执行 |
| 权限不足 | 保留原目标和计划，提示需要听记所有者/协作者权限 |
| 写入或读回状态未知 | 不自动重试；先按真实 taskUuid 重新读取 |
