Files
go-sip/docs/evidence/f04-local-dial-policy-v0.1.md
T

4.0 KiB
Raw Blame History

F04 本地 Mock:外呼时段与最后拨号屏障

状态:仅本地 Mock 的 F04 门禁已验证。单节点、单 Dispatcher、单 Agent、单 Cell、单租户;没有接入真实 SaaS、management、SIP 线路、云资源或生产环境,也没有发起真实呼叫。F08 最终结果、额度释放与上传/MQ 收口及 F09 全矩阵仍待验收。

本地规则与执行边界

  • Dispatcher 在命令持久接纳时,以及向 Agent 发出指令前,分别检查原始被叫白名单、任务授权和状态、Asia/Shanghai 的任务×已绑定线路周时段、任务排除日期、任务/AI 较小通话时限、命令与授权及租户额度有效期。时段左闭右开;跨日拆分按当地日期判断;排除日期只属于任务。接纳后固定原配置快照、主叫与所选线路,不因新配置、时钟变化、暂停/停止、线路变化而自动换线、等待或重拨。
  • local_v02_origination_decisions 对每个执行持久写入唯一 issued 或 refused;拒绝后即使时钟回退或 MQ 重投也不能重新获准。Agent 调用前窗口再次关闭时,不调用 Agent,已签发身份仍不得重拨,留待 F08 结果/占用对账。
  • SaaS 独占队列;任务消费者先持久接纳,再查原命令的待执行记录并执行 Dispatcher 最后门禁。成功或失败均核对持久决定;已决定的重投直接 ACK,不把 Agent 失败当作 MQ 自动重试信号。控制消费者与任务消费者独立。
  • 新的 agent-authorized-origination.v0.1 Unary gRPC 只在隔离 Mock 中启用。Dispatcher 下发身份、线路、主叫、时限及最早截止时刻;Agent 只核验会话、指令完整性及 Dispatcher 签发期限,持久记录未知/终态,不重新判断白名单、业务时段或选择线路。Mock 适配器明确不发 SIP;Dispatcher V3 的 mixed/real 模式在启动时拒绝,不能将此合同当作真实拨号许可。现行真实路径的固定 09:00–20:00 限制未放宽。

验证事实

项目 结果
internal/callwindow/policy_test.go 任务和线路交集、左右边界、跨日、任务排除日期、空起止时间
internal/dispatcher/dial_policy_test.go、local_v01_test.go、local_origination_quota_test.go 白名单、固定线路与主叫、任务/AI 时限、命令/额度到期、绑定快照不受缓存更新影响、控制与持久决定竞态
internal/dispatcher/task_queue_v3_origination_test.go、local_origination_rpc_test.go 消费后 Mock Agent 执行一次;窗口外不调用;已签发/已拒绝命令重投均不触发二次呼出
internal/store/local_origination_test.go 原命令与绑定快照的哈希/身份、暂停屏障、唯一签发或拒绝决定、原始消息重复投递与额度占用均失败关闭
internal/rpc/authorized_execution_test.go 非 Mock 拒绝、签发期限、相同身份重投、内容冲突、Agent 重启及未知结果不重复调用
./scripts/check-proto.sh、./scripts/acceptance-local.sh 2026-09-24 本地通过;后者含格式、合同/例子哈希、go vet ./...、go test -race ./...、构建和本地 RabbitMQ no configure 权限测试。RabbitMQ 使用本地缓存镜像,不访问真实 SaaS。

普通测试覆盖率(go test -cover):internal/callwindow 84.4%、internal/dispatcher 68.3%、internal/store 66.7%、internal/rpc 69.7%;本地 RabbitMQ 集成测试中 internal/dispatcher 68.4%、internal/mq 55.5%。F09 的全部适用模块覆盖率≥65% 尚未达到,不以 F04 测试代替 F09 验收。

未签收与后续

F08 尚须把 Mock 通话终态与单份 call.result、持久 outbox、额度释放和录音上传事实按既定合同接通,并证明断电/重复通知不重拨或重 PUT;此前 Agent 的 Mock 终态不等于 SaaS 已处理的结果。F09 须重跑发现 v0.2 与单节点适用场景全矩阵并解决覆盖率缺口。F06 真实环境、真实线路、供应商、SaaS/management 联调与生产切换均无本轮授权,未执行、未验证。