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 测试,不得直接复制成真实拨号授权。
运行
- 事先建立专用空 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 test ./deploys/test/saas-mock 验证正式配置客户端;设置指向单独隔离 vhost 的 SAAS_MOCK_TEST_BROKER_URL 后,TestSaaSMockProvisionsDispatcherTopology 还将实际预建 MQ 并用 Dispatcher 被动读回。缺省测试不会连接共享 RabbitMQ。
当前正式呼叫仍只允许 Mock,测试机 ARI/HTTP、真实 AI/TTS、录音、OSS 与拨号前抓包尚未完成验证。六组外呼均未执行。此服务通过测试也不代表真实 SaaS 或生产签收。