4.1 KiB
4.1 KiB
挂断关键词结束语:本地验证
范围与规则
使用者确认将 agent.conversation.hangup_keywords 改为对象数组。唯一字段规范和正例仍在 contracts/local/;业务说明在 docs/thirds/saas-dispatcher.md,不另维护平行字段定义。
- 仅用户最终 ASR 文本的字面包含匹配有效;同时命中多组时按配置顺序取第一组。
- 使用获批 TTS 合成对应结束语,完整发送音频后主动挂断,不调用 LLM 生成结束语。
- 命中后禁止新一轮对话;重复识别、合成失败及未知挂断均不触发重播或重试。
- 合成或播放失败保留关键词命中事实,明确返回错误并尝试结束通话;多个错误同时返回。未成功发送的音频不报告为完整播放。
- 旧字符串数组、缺字段、空字段及未知字段直接拒绝;ASR-only 不合成结束语。
可执行证据
| 检查 | 当前测试 |
|---|---|
| 新结构接纳、旧结构/空字段/错误大小写拒绝 | TestBindHangupGroups、TestBindRejectsInvalidHangupGroups、TestCurrentContractExamples 及新增旧结构反例 |
| 用户最终文本、字面匹配、组顺序、快照复制、并发单次预留 | TestKeywordHangupOnlyFinalUserLiteralAndOrderedGroups、TestKeywordHangupConcurrentReservations |
| 播完结束语后才挂断,且不再开始下一轮 | TestApprovedKeywordPlaysClosingBeforeHangup、TestKeywordHangupWaitsForPlaybackReturn |
| 合成/播放/挂断失败、多个错误并存、禁止重播 | TestKeywordClosingFailuresRemainVisibleAndHangupOnce、TestKeywordHangupFailureVisibleWithoutRetry、TestKeywordHangupUsesFinalUserTextOnly |
| 官方 TTS SDK、批准配置、结束语正文与发送/挂断顺序 | TestApprovedFullAIUsesBoundProviderSDKsAndOnlyFinalUserKeyword:真实 SDK 对接本机模拟 HTTP 服务;最终 ASR 文本为显式测试输入,不代表真实 ASR 识别成功 |
| 隔离 Mock 不捏造结束语音频 | TestApprovedMockFullAIFreezesScriptAndReturnsKeywordClosing |
P08 表保留当时的历史结果;其中旧 TestKeywordHangupOnlyFinalUserLiteralAndOnlyOnce 和 TestKeywordHangupConcurrentDuplicateFinalTriggersOnce 的现行替代分别为上表的顺序组匹配与并发预留测试。本变更涉及 A01/A04/A05/A08/A11 和 K09;其他业务边界不变,由完整回归及隔离 MQ/HTTPS/双向 TLS 测试核验。
SaaS Mock HTTP 与 MQ 补充验证
使用者确认新结束语配置继续通过 HTTP 任务快照读取,不修改 call.execute 的两字段 payload;授权提交并 push 全部变更,不部署、不投递实际呼叫。SaaS Mock 的测试快照直接引用现行任务正例,没有另一份手写字段定义。
TestSaaSMockServesApprovedHangupGroupsOverHTTP:正式 HTTP 读取并绑定后,组名、触发词与结束语完整保留。TestSaaSMockRejectsLegacyAndIncompleteHangupSnapshots:旧数组、缺结束语、空触发词、空白结束语拒绝加载。TestSaaSMockMQRejectsInlineHangupConfiguration:MQ payload 内增加agent、hangup_keywords或closingRemark直接违反现行合同。TestBuildExecuteOnlyUsesApprovedTaskAndTarget及隔离 RabbitMQ 的单次投递、派发回执测试:投递前和实际队列收到的消息均核对 payload 只有task_id和原始callee;配置不随消息重复携带。- Mock 使用说明同步更新,未修改测试机私有快照、未连接真实呼叫 MQ。
本轮结果
- TDD:新配置和播放顺序测试先失败,完成实现后通过。
PATH=/tmp/sip-go-agent-tools/bin:$PATH make check:通过;包括格式、现行合同和 Proto 来源/hash、go vet ./...、go test -race ./...、构建,以及实际启动临时 RabbitMQ 的隔离端到端测试。bash scripts/coverage.sh:手写业务语句覆盖率 70.1%,仅排除生成目录,超过 65%。git diff --check:通过。
仅修改并验证本地代码,没有部署、真实拨号、真实 AI/OSS 服务调用,也没有读取私有凭据或处置旧 SQLite、录音、恢复文件。音频发送顺序的本地验证不证明真实线路的远端播放或生产签收。