按接口拆分的 JSON Schema
此目录提供五类 HTTP 响应和六类 MQ 消息的独立校验入口,使用 JSON Schema Draft 2020-12。重复且约束相同的结构通过相对 $ref 引用 common.schema.json,仅单个入口使用的结构保留在该入口的 $defs 中。
本次仅新增文件,不替换或删除 contracts/local/ 的原文件,不修改现有程序的校验入口、嵌入资源或来源清单。程序仍使用原有 Schema;此目录尚未接入运行或发布流程,不构成外部 SaaS 签收。
HTTP 响应
下列入口校验响应 JSON 正文,不校验请求路径、查询参数或 HTTP 状态码。每个入口仅接受自己的成功响应或公共错误响应。
| 接口 | Schema | 现有示例(相对本目录) |
|---|---|---|
GET /internal/v1/dispatcher/sip |
http-sip.schema.json |
config-read-sip.json、config-read-sip-no-revision.json |
GET /internal/v1/dispatcher/task/:task_id |
http-task-detail.schema.json |
config-read-task-full.json、config-read-task-asr.json |
GET /internal/v1/dispatcher/tasks |
http-task-list.schema.json |
task-discovery-page.json、task-discovery-end.json |
GET /internal/v1/dispatcher/tenant/:tenant_id/quota |
http-tenant-quota.schema.json |
config-read-quota.json |
GET /internal/v1/dispatcher/ai-providers |
http-ai-providers.schema.json |
config-read-providers.json、config-read-bailian-providers.json |
公共错误响应示例:config-read-error.json。
MQ 消息
按消息类型和方向选择入口。task.control 的请求和回执共用事件名称,call.execute 的请求和派发回执也共用事件名称,不能仅依据 event_type 选择 Schema。
| 消息 | 方向 | Schema | 现有示例(相对本目录) |
|---|---|---|---|
sip.config |
SaaS → Dispatcher | mq-sip-config.schema.json |
mq-sip-change.json |
task.control 请求 |
SaaS → Dispatcher | mq-task-control-request.schema.json |
mq-control.json、mq-control-start.json、mq-control-edit.json |
task.control 回执 |
Dispatcher → SaaS | mq-task-control-receipt.schema.json |
mq-control-ack.json |
call.execute 请求 |
SaaS → Dispatcher | mq-call-execute-request.schema.json |
mq-execute.json |
call.execute 派发/拒绝回执 |
Dispatcher → SaaS | mq-call-execute-receipt.schema.json |
mq-execute-ack.json、mq-execute-rejected.json |
call.execute.result 最终结果 |
Dispatcher → SaaS | mq-call-execute-result.schema.json |
mq-result-uploaded.json、mq-result-no-recording.json |
公共定义与引用
common.schema.json 仅包含 $defs,不是独立消息的校验入口:
dispatcher_id、tenant_id、task_id:公共身份字段约束。event_id、issued_at:MQ 事件身份和时间约束。task_status:任务详情与任务列表共用的任务状态。error:公共 HTTP 错误响应。weekly_windows、windows:任务和线路共用的每周时段。
引用示例:
{
"dispatcher_id": {
"$ref": "./common.schema.json#/$defs/dispatcher_id"
}
}
任务时段和线路时段仍分别定义:任务保留有效起止时间和排除日期,线路不包含排除日期。任务详情内的 AI、SIP 线路和最终结果中的录音结构不增加跨入口抽象。
使用方式
- 根据上表选择一个入口文件,而不是把所有入口合并为一个
oneOf。 - 向校验器注册所用入口及其公共依赖。各文件的
$id是稳定的资源标识,不是要求联网访问的下载地址;注册时使用文件内的$id;若按本地文件 URI 加载,须将这些$id映射到对应的本地资源。 - 离线解析
./common.schema.json。不得静默忽略缺失引用或改为联网下载;缺少依赖必须报错。移动或分发文件时保留相对目录关系。 - 开启
format校验,使uuid、date-time、date的检查与现有 Go 校验入口一致。现有github.com/santhosh-tekuri/jsonschema/v6支持AddResource、Compile和AssertFormat,无需新增依赖。 - 对响应或消息的 JSON 正文执行校验。资源归属、任务授权、时段关系、线路可用性等业务检查仍由程序执行,Schema 通过不代表业务获准。
来源及维护边界
- 五个配置响应(含公共错误、身份和时段定义)的来源:
../local/config-read.schema.json;任务列表来源:../local/task-discovery.schema.json。 - 六个 MQ 入口的来源:
../local/mq.schema.json。 - 拆分仅改变定义位置和引用方式,不增加、删除或放宽原有字段约束。任务列表对
schema_version、control_seq的现有忽略规则也保持不变。 - HTTP 入口保留原有公共错误分支;MQ 入口严格区分原有消息分支。MQ 回执字段按原 Schema 保留,不自行补充字段。
- 此目录不引用旧目录中的 Schema;旧目录只作为拆分来源和现有示例位置。独立分发时仅需所用入口及
common.schema.json。 - 原文件、程序和清单仍保持原样。未来如需接入此目录或改变字段,必须另行确认范围,并同步核验新旧定义,不能假定本次已完成切换。