Files
story/docs/pilot-daily-operations.md

7.8 KiB

试点运行日报开发说明

对应接口契约:OpenAPI 0.55.0
适用阶段:阶段8内部试用、家庭试点和灰度观察
适用角色:ops_operator、ops_admin

1. 建设目标

试点运行日报把每日必须归档的设备在线、通话状态、供应商失败、媒体上传积压、告警和费用六类信息聚合为一份脱敏JSON,解决运营人员分别查询多个工作台后手工拼表、时间边界不一致和证据无法复核的问题。日报由运营诊断页面即时生成并下载,服务端只保存幂等记录和最小审计,不建立日报正文历史表。

日报是运行复盘证据,不是发布门禁或业务验收结论。它混合两种明确区分的口径:所选自然日内的活动统计,以及生成时刻的在线、积压和未关闭状态。真实听感、供应商账单、用户反馈、隐私授权和发布批准仍由对应外部证据承担。

2. 功能设计

2.1 输入与时间边界

操作人填写候选版本、sha256:不可变构建摘要、业务日期、IANA时区和归档原因。候选身份随日报进入响应、幂等摘要和审计,后续PILOT证据包强制与技术验收快照一致。服务端使用时区数据库把local_date转换为[window_start, window_end)半开区间,再统一以UTC查询。自然日通过日历日期递增计算,因此夏令时切换日可以是23小时或25小时,不强行按24小时截断。候选标识不合法、未来日期、未知时区、空原因和超过255字符的原因均拒绝。

2.2 指标口径

领域 自然日活动统计 生成时刻状态
设备 当前可用设备中,最新孪生上报落在自然日内的设备数 当前仍绑定的总数、可用/隔离/吊销、可用设备在线/离线数
通话 自然日内创建的通话总数及8个权威状态分布 不单列当前历史通话,避免与当日创建口径混淆
供应商 自然日内失败通知数、首次进入FAILED的关联通话数 最新探针状态、连续失败、待处理/失败通知积压
上传 当日创建、完成,以及当日最后更新且当前失败的上传批次 未结束批次、待处理分段、已拒绝分段
告警 当日首次发现和当日解决数量 全部未关闭、HIGH未关闭、CRITICAL未关闭
费用 按用量事件发生时间汇总费用行和微单位成本 不提供跨币种总计,不做未经批准的汇率换算

通话状态数组固定按PREPARING、ROOM_ISSUED、STARTING_AGENT、ACTIVE、STOPPING、COMPLETED、FAILED、EXPIRED返回,即使某状态为0也保留,从而让下载文件可直接纵向比较。供应商和币种数组按稳定字典序输出;无记录时返回[]而不是null。

2.3 脱敏与权限

输出策略固定为ops-pilot-daily-minimal-v1。日报不返回长者或家庭资料、字幕、录音、故事、记忆、设备密钥、短期凭证、供应商任务编号、告警标题/摘要、Webhook地址或原始错误。角色校验和所有查询均带客户组织边界;ops_viewer和ops_approver不能生成日报。

首次请求返回HTTP 201,相同操作人、租户、路径、幂等键和相同请求体在24小时内重放时返回HTTP 200及Idempotency-Replayed: true,且编号和生成时间保持不变。相同幂等键配不同请求体返回冲突。响应带Cache-Control: no-store。

3. 接口设计

3.1 请求

POST /api/v1/ops/diagnostics/pilot-daily-snapshots

请求头 必填 说明
Authorization 是 真实OIDC Bearer令牌
X-Tenant-Id 是 当前运营账号有权访问的客户组织公开编号
Idempotency-Key 是 本次日报生成的唯一重试标识
X-Request-Id 否 调用链关联编号;未提供时由公共HTTP层生成

请求体示例:

{
  "candidate_version": "0.55.0-rc.1",
  "build_digest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
  "local_date": "2026-08-25",
  "timezone": "Asia/Shanghai",
  "reason": "归档试点运行日报并复核当日异常与当前积压"
}

3.2 响应

响应data包含日报编号、生成时间、客户组织、候选版本、构建摘要、业务日期、时区、UTC窗口、脱敏策略、六类指标和固定免责声明。费用使用cost_micros整数保存和传输,前端仅在展示时除以1,000,000,避免浮点数参与权威汇总。

主要错误:参数或时区非法返回400,运营权限或客户组织关系不成立返回403,幂等键正文冲突或请求执行中返回409。错误响应不泄露另一客户组织是否存在相同数据。

4. 业务流程设计

sequenceDiagram
    participant O as 试点运营人员
    participant UI as 联调诊断页面
    participant API as 日报聚合接口
    participant DB as PostgreSQL
    O->>UI: 选择日期、时区并填写归档原因
    UI->>API: OIDC + 租户 + 幂等键 + 请求体
    API->>DB: 校验运营角色和客户组织关系
    API->>DB: 锁定或校验幂等请求
    API->>DB: 同一事务读取六类权威统计
    API->>DB: 写最小审计和幂等响应
    API-->>UI: 201日报或200同一结果重放
    UI-->>O: 展示摘要并下载JSON
    O->>O: 归档、复核异常、关联个案和周报

运营人员每日在约定时区日界后生成前一日或当日日报,首先核对高严重度告警和供应商/上传积压,再核对失败通话与设备离线情况,最后把费用按币种与供应商账单或成本工作台交叉确认。发现异常时转入告警工作台、精确诊断或联调问题清单;日报本身不执行修复动作,也不自动关闭告警。

5. 数据库设计

本功能不新增迁移和日报表,复用权威数据:

表 日报用途
device_binding、device 当前绑定边界和设备注册状态
device_twin、device_presence_state 最新上报时间和当前在线状态
conversation、conversation_state_history 当日创建通话分布和失败状态发生时间
rtc_task、provider_event、provider_dependency_state 供应商归属、失败通知、当前依赖状态和通知积压
upload_batch、media_segment 上传批次活动和当前分段积压
alert_incident 当日发现/解决和当前未关闭告警
conversation_usage_event、conversation_cost_line 按发生时间和币种汇总费用微单位
idempotency_record 24小时内请求重放和正文冲突保护
audit_event 操作人、原因、日期、时区、窗口和脱敏策略

所有聚合在同一个数据库事务中完成,每一类指标由单条聚合查询保持内部口径一致;审计和幂等响应与统计结果一起提交。审计动作是ops.diagnostics.pilot_daily_snapshot.export,资源类型为pilot_daily_snapshot;审计不复制日报正文或费用明细。

6. 可用性验证与运行方式

本功能采用精简验证:时间边界单元测试覆盖夏令时23小时自然日以及非法时区/未来日期;Go诊断和HTTP包定向测试验证编译与公共错误映射;真实纵向烟测使用本地OIDC、PostgreSQL和运行API核对首次创建、统计守恒、敏感字段排除、幂等重放和非法时区;浏览器烟测确认页面可见、JSON可下载解析且无横向溢出。

powershell -ExecutionPolicy Bypass -File .\scripts\smoke-pilot-daily-snapshot.ps1
$env:PLAYWRIGHT_REQUIRE_FROM='C:\Users\19926\.cache\codex-runtimes\codex-primary-runtime\dependencies\node\node_modules'
node .\scripts\visual-diagnostics-ui.cjs
.\scripts\check-functional.ps1

烟测结束会删除对应审计和幂等记录;日报正文从未在服务端持久化。发布候选仍按阶段8清单执行真实设备、供应商、家庭试点、容量、安全、恢复和人工审批,不以本地日报烟测替代外部验收。