# go-sip 独立 Go SIP 调度与执行项目。单一 Go 1.27.1 module/制品通过 Cobra 显式提供 `dispatcher`、`agent` 两个业务子命令;当前业务启动只允许**隔离 Mock**,mixed/real 直接拒绝。目标是分阶段以 Go 替换 Agent,不重写 Asterisk,也不建立第二套 SaaS 管理后台。项目的源码、文档、依赖、构建、测试、配置和发布入口均在本仓库内。 > **范围与进度:** [唯一现行规范](docs/thirds/saas-dispatcher.md)和 [P01–P08 本地验收对照](docs/evidence/saas-dispatcher-p08-acceptance.md)分别说明当前合同及已通过的隔离测试(手写业务覆盖率 69.6%)。隔离 RabbitMQ、双向 TLS/HTTPS、OSS PUT 与 AI Mock 的通过,不代表真实 SaaS、管理平台、MQ 应用收讫、OSS/AI 供应商、Asterisk/SIP/ECS、真实拨号或生产切换已验证;当前发布清单 `production_approval=false`。真实试拨另需逐次授权,按 SaaS 任务/线路快照校验时段与额度,并遵守拨号前诊断抓包门禁;本地不另设固定号码、时间或每日次数限制。 ## 唯一当前接口 - [SaaS↔Dispatcher 通信说明](docs/thirds/saas-dispatcher.md);最终契约由 [`sip-contracts`](https://gitee.com/zzmbac/sip-contracts) 统一管理,本项目只通过 [`contracts/schema`](contracts/schema/README.md) Git submodule 引用同一份规范、Schema、拓扑和正常示例;验证材料单独放在 `contracts/`,不维护另一份业务定义。SaaS 的 SIP、任务、归属任务清单、租户额度和 AI 供应商配置只经五类只读 HTTP;呼叫、控制、必要回执与每通话唯一结果只经固定 `v1` RabbitMQ 通信名。固定 HTTP `/internal/v1/dispatcher/...`、MQ `v1` 及业务 revision 是有效合同,不是旧实现代次。 - Dispatcher 独立 UUID/资源归属、SaaS 预建的控制/任务队列、共享持久结果队列及本地 SQLite 权威任务/额度/inbox/outbox;未知通话不释放占用、不重拨、重启继续原消息身份。Agent 与 Dispatcher 通过双向 TLS Unary gRPC 和预绑定身份/会话代际交互,业务恢复落私有文件。内部联系见 [`proto/agent/agent.proto`](proto/agent/agent.proto)。 - 任务内不可变获批 AI 参数支持 ASR-only 与 ASR+LLM+TTS;录音经短期授权由 Agent **一次** HTTPS PUT 至 OSS,明确失败才按受控文件恢复,结果未知不自动再传,最终事实进入 MQ。批准 Mock 的 SIP revision 回报不证明 Asterisk 已实际加载。 - 历史来源和使用者修改的旧文档按原字节保存在 [`docs/archive/sources/`](docs/archive/sources/README.md),上游 v1 保存在 [`docs/archive/upstream/`](docs/archive/upstream/README.md) 并可离线校验;旧阶段计划已归档。它们不是另一个当前版本或运行回退。 ## 本地验证(不触碰真实线路) 首次获取:`git clone --recurse-submodules <本项目仓库地址>`;已有项目执行 `git submodule update --init --recursive`。 每次调研或修改契约前执行 `make contracts-update`;所有契约变更必须同步本项目及 SaaS 实现,见 [维护说明](docs/contracts.md)。 ```sh make check # 格式、Proto、当前合同/历史来源、race、vet、构建、三项实际运行的隔离 MQ 集成测试 make release-check-local # 本地制品、hash、当前拓扑、Mock-only/不覆盖既有文件的包检查 ``` 结果、重启与故障场景及未验证项见 [`docs/evidence/saas-dispatcher-implementation.md`](docs/evidence/saas-dispatcher-implementation.md)。本地检查不等于非生产主机验收:任何实际新主机/版本/Cell 验证须执行 [`deploys/test/nonprod-call-evidence.sh`](deploys/test/nonprod-call-evidence.sh) 规定的资源、Asterisk/systemd、ARI/PJSIP 与媒体诊断;mixed/real 外呼还须在拨号**之前**启动受限 SIP/RTP 抓包和 PJSIP logger。当前 Mock-only 制品不能启用 mixed/real,更不能因 SaaS 消息和样例自动发起真实呼叫。 ## 导航 - [唯一现行规范](docs/thirds/saas-dispatcher.md) · [共享契约文件用途表](contracts/schema/README.md) · [契约更新步骤](docs/contracts.md) · [P01–P08 本地验收](docs/evidence/saas-dispatcher-p08-acceptance.md) - [文档索引](docs/README.md) · [物理部署及独立 Asterisk 约束](deploys/README.md) · [项目开发与安全约束](AGENTS.md) 现存 SQLite、spool、outbox 与 Agent 恢复文件不自动清空或迁移;发现旧状态拒绝启动并保留原文件,必须先厘清未交付事实。仓库不保存真实密钥、完整用户音频或完整对话。