Files
go-sip/docs/evidence/hangup-keyword-closing.md
T

4.1 KiB
Raw Blame History

挂断关键词结束语:本地验证

范围与规则

使用者确认将 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、录音、恢复文件。音频发送顺序的本地验证不证明真实线路的远端播放或生产签收。