Files
Starlight_Lancher/.agents/skills/lark-minutes/references/lark-minutes-speaker-replace.md

108 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# minutes +speaker-replace
替换妙记逐字稿中的说话人身份:把妙记逐字稿里"原说话人"对应的所有发言段,重新归属到"新说话人"。常用于解决妙记自动识别错说话人,或需要把外部/非飞书说话人改绑到正确飞书用户的场景。
本 skill 对应 shortcut`lark-cli minutes +speaker-replace`
## 典型触发表达
- "把这条妙记里 A 的发言改成 B"
- "妙记说话人识别错了,帮我把张三的部分换成李四"
- "把妙记里外部说话人 / 非飞书说话人的发言改成某个飞书用户"
- "妙记说话人修改 / 替换 / 重新归属"
## 完整工作流
识别到「修改妙记说话人」需求后,**必须**按以下顺序执行;**禁止**把展示名直接传给 `--from-speaker-id`
1. **确认 `minute_token`**
- 从妙记 URL、搜索或 VC 链路取得 `minute_token`
2. **查说话人列表(必须先做)**
-**`lark-cli api`** 直接调用内部 HTTP 接口:
```bash
lark-cli api GET "/open-apis/minutes/v1/minutes/<minute_token>/transcript/speakerlist" --as user
```
- 返回 `data.speakers[]`,每项含 `speaker_id`(不透明 id与 `name`(逐字稿展示名)。示例:
```json
{
"data": {
"speakers": [
{"speaker_id": "ENCRYPTED_TOKEN_ABC", "name": "说话人1"},
{"speaker_id": "ENCRYPTED_TOKEN_DEF", "name": "说话人2"}
]
}
}
```
3. **解析 `--from-speaker-id`**
- 根据用户描述的原说话人展示名如「说话人1」「张三」在 `speakers[]` 里按 `name` **精确匹配**,取对应的 **`speaker_id`** 作为 `--from-speaker-id` 的值。
- **`--from-speaker-id` 只传 `speaker_id`,不传展示名。**
- 若同名有多条(`name` 相同、`speaker_id` 不同):**不要擅自挑选**。可结合 [`vc +notes --minute-tokens`](../../lark-vc/references/lark-vc-notes.md) 对照各人发言内容,请用户确认后再用精确的 `speaker_id`。
- 若列表中无匹配展示名:告知用户并核对拼写,或请用户在妙记页面确认标签。
4. **解析 `--to-user-id`**
- 新说话人必须是 `ou_` 开头的 open_id。用户只给姓名时先用 [lark-contact](../../lark-contact/SKILL.md) 解析。
5. **执行替换**
```bash
lark-cli minutes +speaker-replace \
--minute-token obcnxxxxxxxxxxxxxxxxxxxx \
--from-speaker-id ENCRYPTED_TOKEN_ABC \
--to-user-id ou_new_speaker_open_id
```
## 命令示例
```bash
# 1. 先查列表(裸调 HTTP
lark-cli api GET "/open-apis/minutes/v1/minutes/obcnxxxxxxxxxxxxxxxxxxxx/transcript/speakerlist" --as user
# 2. 再替换from-speaker-id 来自上一步的 speaker_id
lark-cli minutes +speaker-replace \
--minute-token obcnxxxxxxxxxxxxxxxxxxxx \
--from-speaker-id ENCRYPTED_TOKEN_ABC \
--to-user-id ou_new_speaker_open_id
```
## 参数
| 参数 | 必填 | 说明 |
|------|------|------|
| `--minute-token <token>` | 是 | 妙记的唯一标识,可从妙记 URL 末尾路径提取 |
| `--from-speaker-id <id>` | 是 | 被替换的原说话人 **`speaker_id`**(来自 speakerlist API 的 `data.speakers[].speaker_id` |
| `--to-user-id <ou_xxx>` | 是 | 新的说话人,**必须是 `ou_` 开头的 open_id**,不支持用户名 |
## 核心约束
### 1. 必须先查 speakerlist再替换
Agent 必须先 `lark-cli api GET .../speakerlist`,再 `+speaker-replace``--from-speaker-id` 只接受 `speaker_id`。
`+speaker-replace` **不会**自己请求 speakerlist`--from-speaker-id` 的值会原样发给替换接口。整条链路只在 Agent 一开始查一次 speakerlist务必传入上一步拿到的 `speaker_id`(不要传展示名,否则替换接口会返回 speaker-not-found
### 2. 新说话人必须是 open_id
`--to-user-id` 仅支持 `ou_` 开头的 open_id**不支持直接传姓名**;如果用户只给了姓名,请先用 [lark-contact](../../lark-contact/SKILL.md) 把姓名解析成 `open_id`。
### 3. 历史参数
存在一个隐藏的历史参数 `--from-user-id`(飞书说话人的 open_id仅为向后兼容保留新流程请一律使用 `--from-speaker-id` + `speaker_id`。
## 认证与权限
- 所需 scope`minutes:minutes:readonly`(内部解析说话人)、`minutes:minutes:update`(执行替换)。
## 输出结果
| 字段 | 说明 |
|------|------|
| `minute_token` | 被修改的妙记 Token与输入的 `--minute-token` 一致 |
| `from_speaker_id` | 实际用于替换的不透明说话人标识 |
| `to_user_id` | 替换后的新说话人 open_id与输入的 `--to-user-id` 一致 |
## 参考
- [lark-minutes](../SKILL.md) -- 妙记相关功能说明