2026-09-21 08:56:04 +08:00

go-sip

独立 Go SIP 调度与执行项目。单一 Go 1.27.1 module/制品通过 Cobra 显式提供 dispatcher、agent 两个业务子命令;当前业务启动只允许隔离 Mock,mixed/real 直接拒绝。目标是分阶段以 Go 替换 Agent,不重写 Asterisk,也不建立第二套 SaaS 管理后台。项目的源码、文档、依赖、构建、测试、配置和发布入口均在本仓库内。

范围与进度: 当前实施与验收入口记录 P01–P06 本地已验证、P07 文档/残留清理进行中、P08 最终 A01–A12/K01–K16 与 ≥65% 业务覆盖率对照待完成。隔离 RabbitMQ、双向 TLS/HTTPS、OSS PUT 与 AI Mock 的通过,不代表真实 SaaS、管理平台、MQ 应用收讫、OSS/AI 供应商、Asterisk/SIP/ECS、真实拨号或生产切换已验证;当前发布清单 production_approval=false。真实试拨另需逐次授权,并遵守白名单、Asia/Shanghai 09:00–20:00 及拨号前诊断抓包门禁。

唯一当前接口

  • SaaS↔Dispatcher 通信说明;机器合同为 contracts/local/ 的 Schema、拓扑、正反例和来源/hash。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。
  • 任务内不可变获批 AI 参数支持 ASR-only 与 ASR+LLM+TTS;录音经短期授权由 Agent 一次 HTTPS PUT 至 OSS,明确失败才按受控文件恢复,结果未知不自动再传,最终事实进入 MQ。批准 Mock 的 SIP revision 回报不证明 Asterisk 已实际加载。
  • docs/plan-saas-dispatcher-v05-v0.1.md 保持原字节和来源 hash,只作为当前机器合同的历史来源,不是另一个运行计划;更早的 F/W/v0.1–v0.4、旧 MQ-only 与部署示例在历史文档或 docs/archive/ 中追溯,不作为运行回退。

本地验证(不触碰真实线路)

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 恢复文件不自动清空或迁移;发现旧状态拒绝启动并保留原文件,必须先厘清未交付事实。仓库不保存真实密钥、完整用户音频或完整对话。

S
Description
Go SIP Agent
Readme
2.4 MiB
Languages
Go 90.7%
Shell 9%
Python 0.2%
Makefile 0.1%