Files
go-sip/docs/references/saas-page-snapshot-analysis.md
T

141 lines
14 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.
# SaaS 页面截图字段与能力盘点
> **资料性质:页面调研,非契约、非验收证据。** 本文只整理用户提供的页面截图中可见的字段和操作;原始截图仅供本地参考,不随仓库提交。截图不能证明后端行为、字段传输方式、权限、持久化或线上功能已启用。未看清或无法判断的内容标为待核验。本文不修改或替代现有项目契约。
>
> 后续项目自拟的两只读 HTTP 接口字段与返回结构见[字段提案](../contracts/config-read-fields-v0.1-proposal.md)。本文 §7 早期 MQ 配置获取建议已被用户批准的新方向取代;页面观察仍有效,但不是 SaaS 原有 JSON 字段名的证明。
## 1. 范围与结论
截图覆盖智能体配置与外呼任务的创建、运行数据查看:
- 智能体:基础信息、提示词、ASR、LLM、TTS、话后分析。
- 外呼任务:任务配置、计划时间、线路与重拨设置、任务统计、号码列表、通话记录。
- 页面同时展示 AI 参数配置和任务运营配置;两者不能据此视为同一配置对象。
## 2. 智能体配置
| 页面 | 截图可见字段或能力 | 备注 |
| --- | --- | --- |
| 基础信息 | 必填智能体名称、描述(界面显示字数计数);保存草稿、提交;文字/语音/线路测试入口 | 截图显示“已上线、有草稿变更”状态。按钮可见不代表操作已成功;描述字数上限及发布后的版本行为仍应以实际页面核验。 |
| 提示词 | 提示词编辑器(字数计数、复制/剪切、格式及预览等工具);独立开场白;挂断触发条件和结束语配置 | 截图中的具体业务提示词不在此复述。准确字段拆分、变量约束和保存后的版本行为待核验。 |
| ASR | ASR 模型;音频格式选项 PCM/Opus/AAC/OGG/WAV、采样率 8000/16000 Hz、语言选项;中间结果、标点、去语气词等开关;单句时长 | 截图示例为单句最长 20 秒;不能据此推断每种格式都可用于项目链路,也不能说明 SaaS 到 Agent 的传输与预处理方式。 |
| LLM | 模型和对话模式;温度、Top-P、重复惩罚、Top-K、随机种子等采样参数;思考与流式输出开关 | 参数名称和取值范围需以可访问的实际页面或上游定义复核。 |
| TTS | 模型、公共/个人音色选择及试听;情绪、语速、音调;MP3/PCM/WAV 输出格式和采样率选项;测试文本与试听入口 | 音色授权、参数范围及运行时是否接受这些设置待核验。 |
| 话后分析 | 可编辑分析提示词;按 A–F 等级对通话意向分类,并配置各等级判定规则 | 截图体现分析配置,不证明分析结果的消息、存储或下游消费方式。 |
## 3. 外呼任务配置
创建页将配置分为基础信息、时间、其他设置和高级设置等区域。截图中可见:
- **基础信息**:必填任务名称、所属分组、必选 AI 对话模型;拨打顺序为随机/顺序/倒序;并发数;已启用线路选择、每条线路的数量设置及添加/移除线路入口。
- **时间**:任务开始/结束时间;按周一至周日的小时网格设置一个或多个时段,并有快捷时段按钮;拨打时间间隔开关及 1/3/5/10/30/60/120 秒选项。
- **其他设置**:自动重呼开关及条件设置入口;结束动作(截图状态分别显示“暂停任务”和“关闭任务”);黑名单开关及分组选择。
- **高级设置**:备注输入框;页面提示更多高级功能待开放。
- **授权提示**:其中一个创建状态提示当前分组没有可用授权线路,并指向线路管理/租户授权相关入口。只能证明该页面会提示线路不可用,不能证明具体授权校验规则。
两张创建页截图展示了默认表单和已填写状态。已填写示例中并发数为 5、选择一条线路、拨打间隔为 30 秒;自动重呼显示间隔 1 分钟、最多 3 次、条件 5 项。这些只是截图当时的表单值,不是通用默认值或项目约束。
## 4. 任务运行与数据页面
### 4.1 任务列表及统计
页面呈现任务分组、任务状态、并发/进度类信息,并提供启动、暂停、关闭、编辑或导入等操作入口。任务详情可切换统计、号码、通话记录、运行概览、任务详情和日志等视图。
统计页可见话术、线路、开始/结束日期筛选,以及并发、排队待呼叫数和呼叫状态等信息;汇总项包含呼叫成功、拒接、无应答、关机、占线、呼叫失败,另有意向等级/标签、获客成本及运营商等图表。图表中的样例数值属于截图数据,不作为项目容量、成功率或验收结论。
### 4.2 号码列表
号码页提供按号码、通话状态、归属地/运营商等条件筛选,并展示号码、通话状态与时间、通话时长、客户属性、拨打次数、归属地/运营商和创建时间等信息;截图还显示导入、导出、批量删除等入口。本文不复制截图中的号码或客户样例。
### 4.3 通话记录
通话记录页提供号码和意向标签等筛选,表格可见号码、公司/联系人、意向标签、模型标签、通话起止时间、时长、备注和操作等列。具体数据权限、录音/文本的查看方式和留存策略无法由截图确认。
## 5. 与项目现有 AI 配置契约的关系
当前权威 AI 配置 Schema 为 [`contracts/upstream/v1/ai-config.schema.json`](../../contracts/upstream/v1/ai-config.schema.json),其中 AI 配置对象采用严格字段校验。已定义的核心内容包括:
- ASR:供应商引用、模型、语言、中间结果、超时及输入音频编码/采样率/声道/采样宽度。
- LLM:供应商/凭据引用、模型、温度、最大 token 数和超时。
- Prompt:提示词文本、允许变量及最大字节数;对话配置另含开场白和对话控制参数。
- TTS:供应商/凭据引用、模型、音色、语速、超时及编码/采样率/声道。
截图可见但不能直接映射为当前 AI Schema 字段的内容包括:LLM 的 Top-P、重复惩罚、Top-K、随机种子、思考/流式开关;TTS 情绪、音调及额外格式选择;话后分析提示词;以及任务的线路、计划时间、重拨、黑名单和运营统计字段。它们可能属于独立任务配置、SaaS 页面专属设置或其他上游契约,需逐项核对权威来源和版本。
**不要仅凭截图向严格 Schema 添加字段,也不要把未映射参数塞入 `metadata` 或原始请求字段。** 若确认这些参数需要进入本项目运行配置,应先按现行契约流程确认来源、语义、默认/显式空值、约束和版本,再更新契约与生成物。
## 6. 待核验项
1. 智能体各页面字段的准确名称、枚举、单位、范围、默认值与必填条件。
2. AI 配置是否按不可变版本发布;任务引用智能体时绑定哪个版本,以及在途任务如何固定配置。
3. ASR/TTS 页面格式与项目媒体管线、当前 Schema 编码之间的转换关系。
4. LLM 高级参数、话后分析及分析结果的上游契约、执行位置和消息/存储路径。
5. 任务线路分配、并发、拨打窗口、重拨条件及黑名单的实际服务端校验语义。
6. 截图所见启动、暂停、关闭、导入/导出和测试入口的权限、效果及失败处理。
7. 号码、通话记录、录音与识别文本的查看权限和留存周期。
## 7. Go 外呼能力的 MQ 接入映射建议
> **本节是映射建议,不是已批准的新契约。** 按现有契约,不应把整个页面表单序列化成一条 MQ 消息,也不应让浏览器直接连 RabbitMQ。表单由 SaaS 服务端保存;消息只携带执行所需的严格字段和版本引用。
### 7.1 推荐消息流
1. **发布智能体配置**:SaaS 保存草稿;用户发布时生成不可变 `agent_version_id`。每次编辑不直接推送整份配置,也不覆盖已发布版本。
2. **投递外呼命令**:每个可执行呼叫使用 `call.execute` 发给目标 Dispatcher/租户的专属 `.in` 路由。命令携带 `agent_version_id`,不内嵌整份 ASR/LLM/TTS 配置。
3. **按需获取 AI 快照**:Dispatcher 在准入/起拨前如无对应的有效快照,向 SaaS 发布 `ai.config.request`,其 payload 只有 `agent_version_id`;消息头包含请求 ID、目标 Dispatcher、租户、关联 trace 和有效期限。
4. **返回不可变配置**:SaaS 以 `ai.config.result` 回到同一 Dispatcher/租户的 `.in` 路由;`correlation_id` 对应原请求 `message_id`。成功响应包含 `snapshot` 和 `authorization`,而不是可变的表单草稿。
5. **校验后交付 Agent**:Dispatcher 校验 Schema、租户/版本、摘要、授权有效期及撤销状态,持久绑定快照后,经现有 Unary gRPC 将执行快照交给 Agent。Agent 不直连 SaaS,也不消费这条 MQ。
6. **回传执行事实**:Dispatcher 将呼叫状态、结束结果、实时转写、拒绝联系等事件通过 MQ 发回 SaaS;SaaS 用这些事实更新任务详情和统计。`recording.uploaded` 只表示上传事实已通知入队,不代表 SaaS 已完成后续处理。
消息方向和路由应沿用现有契约:Dispatcher→SaaS 经 `agent-call.saas.v2` 和 `d.<dispatcher_id>.t.<tenant_key>.out`;SaaS→Dispatcher 经 `agent-call.dispatchers.v2` 和 `d.<dispatcher_id>.t.<tenant_key>.in`。必须精确路由到目标 Dispatcher 与租户,不广播后再靠正文筛选。D→SaaS 发布需使用持久消息、mandatory routing 和 publisher confirm;输入先持久化再 ACK。
`ai.config.request` 的示意 payload:
```json
{
"schema_version": "2.0",
"message_type": "ai.config.request",
"message_id": "<request-id>",
"dispatcher_id": "<dispatcher-uuid-v4>",
"tenant_id": "<tenant-id>",
"tenant_key": "<original-tenant-key>",
"trace_id": "<trace-id>",
"issued_at": "<RFC3339>",
"not_after": "<RFC3339>",
"payload": { "agent_version_id": "<published-version-id>" }
}
```
这条请求/响应路径已有契约和存储入口,但当前代码文档明确指出**正常运行时尚无调用方发出 `ai.config.request`**;因此它还不是已打通的生产往返链路。现行字段详见[MQ 机器 Schema](../../contracts/upstream/v1/mq.schema.json);第三方方向/步骤见[事件顺序说明 §4](../thirds/第三方对接事件与请求消费顺序_v0.1.md)。
### 7.2 表单字段与现有承载位置
| 表单信息 | 现有 MQ/配置承载位置 | 接入说明 |
| --- | --- | --- |
| 智能体名称、描述 | SaaS 管理元数据;执行时引用 `agent_version_id` | 不放进每次呼叫消息,除非业务确实要求 Agent 使用这些显示字段。 |
| 提示词、允许变量、开场白和对话控制 | `ai.config.result` 的 `config.prompt`、`config.conversation` | 单次呼叫的变量值放 `call.execute.payload.variables`,并按快照的 `allowed_variables` 校验。 |
| ASR 模型、语言、中间结果、输入音频参数、超时 | `config.asr` | 现有格式约束是 `pcm_s16le`、单声道;截图里的 Opus/AAC/OGG/WAV 不能未经适配直接写入。 |
| LLM 模型、温度、最大 token、超时 | `config.llm` | 截图中的 Top-P、重复惩罚、Top-K、随机种子、思考/流式开关不在当前 Schema 中;先登记契约 GAP,禁止塞进 `metadata` 伪装支持。 |
| TTS 模型、音色、语速、编码/采样率/声道、超时 | `config.tts` | 现有输出编码为 `pcm_s16le` 或 `pcma`;截图中的情绪、音调及额外格式须先确认 SDK/媒体链路能力和契约字段。 |
| 话后分析提示词和 A–F 意向规则 | 当前 AI 快照及事件 Schema 未定义对应字段/结果事件 | 暂不发送;先确认分析执行方、输入事实、结果归属和 SaaS 消费契约。 |
| 任务名、分组、目标号码、智能体版本 | `call.execute` 中的 `task_id`、`task_item_id`、`execution_id`、`callee`、`agent_version_id` 等 | 当前命令是单次呼叫执行数据,不是完整任务表单或批量号码文件;`callee` 保留业务原始号码。 |
| 线路选择、主叫配置 | `call.execute.payload.route_policy_id`、`caller_profile_id` | 传已批准的策略/配置 ID,不传 SIP 地址、密码、长期凭据或临时 TOKEN。 |
| 振铃超时、最大通话时长、单次个性化变量 | `ring_timeout_ms`、`max_call_duration_ms`、`variables` | 这三项属于当前 `call.execute` payload;仍须通过对应范围、权限和硬限制校验。 |
| 任务暂停/恢复/停止 | `task.control` | 使用 `expected_task_revision` 做 CAS;活动呼叫的 drain/hangup 语义不等同于创建表单里的自动重拨或结束选项。 |
| 拨打时段/顺序/间隔、任务并发、自动重拨、黑名单 | 当前没有一组可直接承载这些表单值的 `call.execute` 字段 | 不能把整组值塞入 `variables` 或未知字段。需先明确由 SaaS 侧筛选/排程,还是另有经批准的 Dispatcher 任务策略契约;任务并发最终不得突破 Dispatcher 配额。固定的 Asia/Shanghai 09:00–20:00 门禁仍须由 Dispatcher/Agent fail-closed 执行。重拨不能用 MQ 重投或 RPC 超时重试代替。 |
现行权威结构见[MQ 消息 Schema](../../contracts/upstream/v1/mq.schema.json)、[事件正文](../../contracts/upstream/v1/event-payloads.schema.json)与[AI 配置 Schema](../../contracts/upstream/v1/ai-config.schema.json);待签收的新读取路径见[第三方顺序说明](../thirds/第三方对接事件与请求消费顺序_v0.1.md)。当前 Schema 拒绝未定义字段;配置引用只传 `provider_ref`/`credential_ref`,不得传真实凭据。
### 7.3 本轮建议范围
先按现有消息接通两条最小路径:
- `call.execute.agent_version_id` → `ai.config.request` → `ai.config.result` → Dispatcher 持久化并绑定不可变快照 → Unary gRPC 交付 Agent。
- Agent/Dispatcher 执行事实 → 现有 `call.status`、`call.finished`、`transcript.updated`、`contact.opt_out`、`recording.uploaded` 等事件 → SaaS 更新列表、统计和记录页。
Top-P 等新增 AI 参数、话后分析结果、任务排程/重拨/黑名单策略均先列为契约缺口;未确认字段归属和责任边界前,不新增 MQ 消息字段、不声称表单已接入外呼能力。
## 8. 截图来源
页面字段分析以用户提供的智能体和外呼任务截图为参考;原始截图仅保留在本地,不作为仓库附件或第三方接口证据。