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