Files
go-sip/deploys/test/saas-mock

SaaS 侧测试模拟服务(非生产)

仅替代当前缺失的 SaaS,不改 Dispatcher 的正式 HTTP 配置接口或 MQ 归属。默认只提供静态配置和预建队列;另有显式单次 call.execute 投递命令,绝不自动拨号或产生业务结果。虚构的合同示例不能充当真实 AI、线路或任务授权。

数据

准备仅自己可读的目录,包含 sip.json、providers.json、quota.json 和 tasks/*.json;所有 JSON 文件须为普通文件且权限为 0600。分别对应 contracts/local/ 的 sip_config、ai_providers、tenant_quota、task_config;每份快照的 dispatcher_id 必须相同,任务须属于同一租户且文件名为 <task_id>.json。本阶段最多六项任务,启动时全部校验并读入内存;更改文件后须重新启动,不热替换在途任务。现有 contracts/local/examples/ 仅用于隔离 Mock 测试,不得直接复制成真实拨号授权。

运行

  • 可先以 go run ./deploys/test/saas-mock --validate-only --data <私有目录> --dispatcher-id <UUID> 离线校验快照;不连接 RabbitMQ/HTTPS。
  • 事先建立专用空 RabbitMQ vhost,名称以 saas-mock- 开头;模拟服务只创建现行 durable 交换机、控制队列、每任务队列与结果队列并做精确绑定,不自动清理/覆盖已有消息。Dispatcher 自身仍只被动核验拓扑。
  • 准备测试 HTTPS 证书与私钥;将 SAAS_MOCK_DISPATCHER_SECRET 和含凭据的 SAAS_MOCK_RABBITMQ_URL 放在受限环境文件,不在命令行、仓库或聊天中传输。
  • 启动:go run ./deploys/test/saas-mock --data <私有目录> --dispatcher-id <UUID> --listen <地址:端口> --tls-cert <证书文件> --tls-key <私钥文件>。
  • 服务以标准 X-DISPATCHER-id 和 X-DISPATCHER-SECRET-KEY 校验 Dispatcher,再提供五类只读配置。错误的归属、资源、租户、快照或消息队列会导致拒绝启动/读取。
  • 单次投递另起命令:go run ./deploys/test/saas-mock --data <私有目录> --dispatcher-id <UUID> --publish-event-id <唯一事件号> --publish-task-id <单线路任务号> --publish-callee <原始白名单号码> --await-result-file <私有结果文件>。此命令在专用结果队列中等待精确匹配的单通最终结果,先将原始结果写入 0600 私有文件并同步磁盘,才确认 MQ 消费;标准输出只显示结果摘要/hash,不输出转写、录音或签名 URL。必须在 nonprod-call-evidence.sh --call-id <同一事件号> --trunk <任务唯一线路> --target <同一原始号码> -- <单次投递命令> 启用并确认 SIP/RTP 抓包、PJSIP logger 和主机门禁之后运行;不得预投、批量投递、自动重试或换线。任务快照须只允许一条真实线路,投递仅含任务号和原始号码。RabbitMQ 必须用上述专用环境变量,不能借用默认或共享 vhost。call.execute 的 dispatched 只是派发回执:归属匹配时先私密保存为 <结果文件>.receipt.json 并确认,再继续等待唯一最终结果并保持抓包;不匹配的消息不确认。发布确认只代表 MQ 接收,不代表 SaaS 已收到最终结果;结果等待超时/归属不符时不清理未知通话,也不重发同通命令。已有未交付队列消息须人工确认处置,不自动清理。

测试:go test ./deploys/test/saas-mock 验证正式配置客户端;设置指向单独隔离 vhost 的 SAAS_MOCK_TEST_BROKER_URL 后,TestSaaSMockProvisionsDispatcherTopology 还将实际预建 MQ 并用 Dispatcher 被动读回。缺省测试不会连接共享 RabbitMQ。

正式入口已经具备独立 nonprod-real 代码路径,但测试机的正式链路、真实 AI/TTS、录音、OSS 与拨号前抓包仍未完成整体验证。2026-10-04 两次已确认的数企试拨操作均无 SIP 包;第二次产生派发回执但 Agent 失败,原因未查明,也未取得最终结果。此服务通过测试不代表真实 SaaS 或生产签收。