record nonproduction SIP 480 call evidence and held occupancy

This commit is contained in:
2026-10-05 13:35:35 +08:00
parent f88b73b463
commit 1f888acf67
@@ -0,0 +1,46 @@
# 2026-10-05 正式链路非生产真实外呼记录
**结论:未达到真实接通并由 LLM 正常应答的验收标准。** 只模拟 SaaS;呼叫指令经 Dispatcher、Agent、原生 Asterisk 发出。三条登记线路各有一通真实 SIP INVITE,但三家均返回 `480 Temporarily Unavailable`,无接通、RTP 应答、录音上传或最终 `call.execute.result`。供应商返回 480 的具体原因尚无足够证据,不能推测为号码、注册或媒体配置中的某一项。原始抓包、日志、回执、私有录音/Agent 状态和数据库备份只留测试机,仓库及聊天仅记状态和 SHA-256;`production_approval=false`。
## 前置条件与版本
- 2026-10-05 Asia/Shanghai 09:00–20:00 的实际门禁;仅使用登记的三条线路和两名白名单被叫。使用者确认最多六种组合各一次,逐通检查,成功即停,不自动重拨。本次只尝试了下面明确列出的组合。
- 测试机 `rogee@182.92.237.15` 的 SSH ED25519 指纹核对为 `SHA256:F5BqDTk+/Es2pj8vNjM0dwDMHmfcyuTI1trBOfPy6jk`。Agent/Dispatcher 发布版本 `f88b73b`,二进制 SHA-256 `6a9b9e53affd81c43bd71888a1ff6da485b1106302e16c758469f564e9d36bd0`;`make check`、`go vet ./...`、`go test -race ./...`、隔离 RabbitMQ、构建与本地发布门禁通过,业务覆盖率 69.0%。版本在主机通过不拨号的 ARI、PJSIP 和抓包预检;未因此声称通过真实媒体验收。
- 原 SaaS Mock 测试任务的**绝对结束时间为 10 月 4 日 20:00**,正确地阻止了 10 月 5 日执行。未覆盖原私有数据;新建 `data-quota2-20261005/`,原三份任务原字节保留,另建三份当日 09:00–20:00 的任务及对应哈希登记,Mock 校验通过;旧待处理事件仍保留。SaaS Mock 运行二进制与 Agent 发布包分开固定,SHA-256 `3f8b4999202b5206ea7a60b6c48d8d25793066fac0f21cdbfa575d303ff20625`。SaaS、Agent、Dispatcher 改为各自持久的用户级 systemd 服务;Asterisk 仍由原用户级服务运行。私有环境文件未复制到发布包或证据。
- 第一次可进入 ARI 的尝试暴露错误:库将新通道的引用误作为已经存在的 `Originator`,ARI 返回 400,未发 SIP。新增回归测试并修复为仅传 `ChannelID`,提交 `f88b73b`;使用新版本后才观察到三条线路的真实 SIP 交互。该项修复不等于供应商线路已可接通。
## 逐次事实
| 事件 ID | 线路 / 被叫尾号 | 观察到的事实 | 最终结果 |
| --- | --- | --- | --- |
| `call-26aa67b5-ff85-41ec-bc3a-b6fd15d0d2c1` | 数企 / `4745` | 抓包脚本缺少显式 Asterisk 路径,拨号前失败 | 未投递 MQ,未拨号 |
| `call-f578ea29-a8f0-4c32-b497-a7fee5d06bf7` | 数企 / `4745` | 命令多包了一层 `runuser`,执行前拒绝 | 未投递 MQ,未拨号 |
| `call-71c1041c-d22b-4053-bf86-c9c01a9d85c0` | 数企 / `4745` | 已投递,但旧任务绝对结束时间已过;Dispatcher 保留 `pending` | 未发 SIP;旧待处理事实未清理 |
| `call-d91a3da6-4f42-43b7-a5b9-05dcea914869` | 数企 / `4745` | 调度成功,旧版本 ARI `400`,未捕获 SIP;抓包退出状态 2,不能单凭空抓包证明无拨号 | 未接通,未产生最终结果 |
| `call-2e21d4bf-a4ca-4b6f-ac8c-45b97f532c4f` | 中鼎 / `1047` | 外发 INVITE;供应商 `480`,随后 ACK;3 个包,抓包退出 0 | 未接通;Dispatcher `dispatched`、Agent `unknown` 保留 |
| `call-41021edb-3b4c-4b74-85be-581bf53514bd` | 数企 / `1047` | 外发 INVITE;供应商 `100`、`480`,随后 ACK;4 个包,抓包退出 0 | 未接通,未产生最终结果 |
| `call-fe432e1b-18be-4607-b498-162a7460f8e8` | 百应 / `4745` | 外发 INVITE;供应商 `480`,随后 ACK;3 个包,抓包退出 0 | 未接通;Dispatcher `dispatched`、Agent `unknown` 保留 |
三通真实 SIP 试拨均未观察到 Stasis 起止事件;Agent 在等待应答期间遇到通道不存在的 ARI 404,**不能仅凭错误码替代已签发的终结回执**。两条仍未解决的占用不得自动释放,不得补造录音、LLM 应答、OSS 上传或 SaaS 应用收讫。
### 私有原件校验
| 事件 | `result.txt` SHA-256 | `capture.pcap` SHA-256 |
| --- | --- | --- |
| 数企 ARI 400 `call-d91…` | `124ab813c1fde6c81e843fe79b66b6c33070f648452e6d2811c467ec226fc606` | `e3f42e2687636327d7f18c9635173252505b4a838fa6829a755bab06c9c69749` |
| 中鼎 480 `call-2e21…` | `8cbf1d04dc8dd2bcf47184ea95d3c9e1bfbf7da6d6b8cb274b613c729bcbf750` | `7380af9f3ec0f0c3e7007c20c2bf9e2e81695d71bd9e86dbeefb4615a1b2c8fa` |
| 数企 480 `call-4102…` | `f6b122c34111f741f8e200e556dcfa7222564e975e3206943205947e65288db3` | `8f3313fd9243d60c4cb2e78a95a465d6aaf15d73d59b91f8b8b564203fed5525` |
| 百应 480 `call-fe43…` | `8cbf1d04dc8dd2bcf47184ea95d3c9e1bfbf7da6d6b8cb274b613c729bcbf750` | `3e32bc05707f37946b496ff43a23992a8a0a9d51f769b252f22a5af5afec7ff1` |
原件在测试机 `/var/lib/sip-go-agent/evidence/<event_id>/`;SaaS 派发回执与人工核查材料在受限的 `~/.local/share/go-sip-nonprod-20261004/operator-evidence/<event_id>/`。没有把抓包、录音、完整对话或凭据拷入仓库。
## 经逐条授权的人工处置
使用者**仅针对下列两条具体事件**给予独立授权。每条都先检查原始回执、Agent 未知日记、证据和当前无活动通话,停止 Agent/Dispatcher,保存 SQLite 事前备份,仅将指定 Dispatcher inbox 的 `dispatched` 改为 `finished`,然后复核其它记录、原回执与所有 Agent 日记不变并恢复服务。人工标记不表示 Agent 签发了终结回执,也不表示有最终呼叫结果。
| 事件 | 事前证明 SHA-256 | 事前 SQLite 备份 SHA-256 | 事后记录 SHA-256 |
| --- | --- | --- | --- |
| 数企 ARI 400 `call-d91…` | `6bbb588efe4c4ab3e86bad880eabbf2db2944c888c0000d45cce215be2ddf3c5` | `46a4383c02ae522c38d72a1d1fcce06f10d845823ed180a75a13727b702d2dd1` | `a230afee0fc4fb0544d9ec345189ff1d4dcba5f7878a95e21c06d171a7a9e377` |
| 数企 SIP 480 `call-4102…` | `6e5533a4fdac0cad8a3b7b3b67a0199183f33f0a1eb160e246afc4768b0658d6` | `97bcfcc5354b669ee5dc07dee4eb5c9950e235cc8d99e4c31802761a10c56e56` | `73bd45a42fb41c12329e46df75ef4e1481616be40bcb5524cbeb3edfe8176c80` |
**截至 2026-10-05 13:33 CST**:四项用户级服务 active,Asterisk 0 通活动通话,抓包凭证 0;Dispatcher inbox 为 `finished=3`(含前一日一次人工处置)、`pending=1`(过期旧任务)、`dispatched=2`(中鼎与百应 SIP 480),最终结果 outbox 为 0;Agent 有 5 条原始 `unknown` 日记,均未清理。两条未知占用使额度 2/2 已满。对百应事件再次人工释放的授权**未获得**,故停止进一步外呼,不尝试其余号码组合,也不把任何一通记作验收通过。后续先根据受限抓包向各服务商核实 480 的具体原因,并补足拨号前失败的通话终结可观测性;要继续外呼须先按现行规则处理未知占用。