{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://go-sip.local/contracts/v1/mq.schema.json", "title": "agent-call MQ command and event envelope", "oneOf": [ { "$ref": "#/$defs/command" }, { "$ref": "#/$defs/event" }, { "$ref": "#/$defs/request" }, { "$ref": "#/$defs/response" } ], "$defs": { "aiConfigResult": { "type": "object", "additionalProperties": false, "required": [ "snapshot", "authorization" ], "properties": { "snapshot": { "$ref": "#/$defs/ai_AgentVersion" }, "authorization": { "$ref": "ai-authorization.schema.json" } } }, "ai_AgentVersion": { "type": "object", "required": [ "tenant_id", "agent_version_id", "status", "immutable", "content_sha256", "config" ], "properties": { "tenant_id": { "type": "string" }, "agent_version_id": { "type": "string" }, "status": { "enum": [ "published", "reused" ] }, "immutable": { "const": true }, "content_sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" }, "config": { "$ref": "ai-config.schema.json" } } }, "callReplay": { "type": "object", "additionalProperties": false, "required": [ "reason", "call_id" ], "properties": { "reason": { "type": "string", "minLength": 1, "maxLength": 512 }, "call_id": { "$ref": "#/$defs/id" } } }, "command": { "type": "object", "additionalProperties": false, "required": [ "schema_version", "command_type", "command_id", "tenant_id", "tenant_key", "trace_id", "issued_at", "not_after", "payload", "dispatcher_id" ], "properties": { "schema_version": { "const": "2.0" }, "command_type": { "enum": [ "call.execute", "task.control", "call.replay", "command.replay" ] }, "command_id": { "$ref": "#/$defs/id" }, "tenant_id": { "$ref": "#/$defs/id" }, "tenant_key": { "$ref": "#/$defs/tenantKey" }, "trace_id": { "$ref": "#/$defs/id" }, "issued_at": { "$ref": "#/$defs/time" }, "not_after": { "$ref": "#/$defs/time" }, "payload": { "type": "object" }, "dispatcher_id": { "$ref": "#/$defs/dispatcherId" } }, "allOf": [ { "if": { "properties": { "command_type": { "const": "call.execute" } } }, "then": { "properties": { "payload": { "$ref": "#/$defs/executePayload" } } } }, { "if": { "properties": { "command_type": { "const": "task.control" } } }, "then": { "properties": { "payload": { "$ref": "#/$defs/taskControl" } } } }, { "if": { "properties": { "command_type": { "const": "call.replay" } } }, "then": { "properties": { "payload": { "$ref": "#/$defs/callReplay" } } } }, { "if": { "properties": { "command_type": { "const": "command.replay" } } }, "then": { "properties": { "payload": { "$ref": "#/$defs/commandReplay" } } } } ] }, "commandReplay": { "type": "object", "additionalProperties": false, "required": [ "reason", "source_command_id" ], "properties": { "reason": { "type": "string", "minLength": 1, "maxLength": 512 }, "source_command_id": { "$ref": "#/$defs/id" } } }, "dispatcherId": { "type": "string", "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$" }, "event": { "$ref": "event-payloads.schema.json" }, "executePayload": { "type": "object", "additionalProperties": false, "required": [ "execution_id", "task_id", "task_item_id", "task_revision", "callee", "route_policy_id", "caller_profile_id", "agent_version_id", "variables", "ring_timeout_ms", "max_call_duration_ms" ], "properties": { "execution_id": { "$ref": "#/$defs/id" }, "task_id": { "$ref": "#/$defs/id" }, "task_item_id": { "$ref": "#/$defs/id" }, "task_revision": { "type": "integer", "minimum": 1 }, "callee": { "type": "string", "minLength": 1, "maxLength": 256 }, "route_policy_id": { "$ref": "#/$defs/id" }, "caller_profile_id": { "$ref": "#/$defs/id" }, "agent_version_id": { "$ref": "#/$defs/id" }, "variables": { "type": "object", "additionalProperties": true }, "ring_timeout_ms": { "type": "integer", "minimum": 1 }, "max_call_duration_ms": { "type": "integer", "minimum": 1 } } }, "executor_Call": { "type": "object", "required": [ "call_id", "execution_id", "call_state", "call_version", "attempts", "transcript", "recordings", "delivery", "snapshot_at" ], "properties": { "call_id": { "type": "string" }, "execution_id": { "type": "string" }, "task_id": { "type": "string" }, "task_item_id": { "type": "string" }, "call_state": { "type": "string" }, "call_version": { "type": "integer" }, "reason_code": { "type": [ "string", "null" ] }, "outcome": { "type": [ "string", "null" ] }, "started_at": { "type": [ "string", "null" ], "format": "date-time" }, "ended_at": { "type": [ "string", "null" ], "format": "date-time" }, "duration_ms": { "type": [ "integer", "null" ] }, "attempts": { "type": "array", "items": { "allOf": [ { "$ref": "event-payloads.schema.json" }, { "properties": { "event_type": { "enum": [ "call.status" ] } } } ] } }, "transcript": { "type": "object", "additionalProperties": false, "required": [ "events" ], "properties": { "events": { "type": "array", "items": { "allOf": [ { "$ref": "event-payloads.schema.json" }, { "properties": { "event_type": { "enum": [ "transcript.updated", "transcript.failed" ] } } } ] } } } }, "recordings": { "type": "array", "items": { "allOf": [ { "$ref": "event-payloads.schema.json" }, { "properties": { "event_type": { "enum": [ "recording.uploaded", "recording.failed" ] } } } ] } }, "delivery": { "type": "object", "additionalProperties": false, "required": [ "pending", "retry", "dispatching", "published" ], "properties": { "pending": { "type": "integer", "minimum": 0 }, "retry": { "type": "integer", "minimum": 0 }, "dispatching": { "type": "integer", "minimum": 0 }, "published": { "type": "integer", "minimum": 0 } } }, "snapshot_at": { "type": "string", "format": "date-time" } }, "additionalProperties": false }, "executor_Command": { "type": "object", "required": [ "command_id", "command_type", "tenant_id", "tenant_key", "status", "aggregate_version" ], "properties": { "command_id": { "$ref": "#/$defs/executor_Id" }, "command_type": { "type": "string" }, "tenant_id": { "type": "string" }, "tenant_key": { "type": "string" }, "task_id": { "type": [ "string", "null" ] }, "execution_id": { "type": [ "string", "null" ] }, "call_id": { "type": [ "string", "null" ] }, "status": { "type": "string" }, "reason_code": { "type": [ "string", "null" ] }, "wait_reason_code": { "type": [ "string", "null" ] }, "accepted_at": { "type": [ "string", "null" ], "format": "date-time" }, "waiting_since": { "type": [ "string", "null" ], "format": "date-time" }, "admission_deadline": { "type": [ "string", "null" ], "format": "date-time" }, "requested_task_revision": { "type": [ "integer", "null" ] }, "applied_task_revision": { "type": [ "integer", "null" ] }, "task_state": { "type": [ "string", "null" ] }, "updated_at": { "type": "string", "format": "date-time" }, "aggregate_version": { "type": "integer", "minimum": 1 } }, "additionalProperties": false }, "executor_Id": { "type": "string", "minLength": 1, "maxLength": 128, "pattern": "^[^\\s/\\\\]+$" }, "id": { "type": "string", "minLength": 1, "maxLength": 128, "pattern": "^[^\\s/\\\\]+$" }, "request": { "type": "object", "additionalProperties": false, "required": [ "schema_version", "message_type", "message_id", "dispatcher_id", "tenant_id", "tenant_key", "trace_id", "issued_at", "not_after", "payload" ], "properties": { "schema_version": { "const": "2.0" }, "message_type": { "enum": [ "command.query", "call.query", "ai.config.request" ] }, "message_id": { "$ref": "#/$defs/id" }, "dispatcher_id": { "$ref": "#/$defs/dispatcherId" }, "tenant_id": { "$ref": "#/$defs/id" }, "tenant_key": { "$ref": "#/$defs/tenantKey" }, "trace_id": { "$ref": "#/$defs/id" }, "issued_at": { "type": "string", "format": "date-time" }, "not_after": { "type": "string", "format": "date-time" }, "payload": { "type": "object" } }, "allOf": [ { "if": { "properties": { "message_type": { "const": "command.query" } } }, "then": { "properties": { "payload": { "type": "object", "additionalProperties": false, "required": [ "command_id" ], "properties": { "command_id": { "$ref": "#/$defs/id" } } } } } }, { "if": { "properties": { "message_type": { "const": "call.query" } } }, "then": { "properties": { "payload": { "type": "object", "additionalProperties": false, "required": [ "call_id" ], "properties": { "call_id": { "$ref": "#/$defs/id" } } } } } }, { "if": { "properties": { "message_type": { "const": "ai.config.request" } } }, "then": { "properties": { "payload": { "type": "object", "additionalProperties": false, "required": [ "agent_version_id" ], "properties": { "agent_version_id": { "$ref": "#/$defs/id" } } } } } } ] }, "response": { "type": "object", "additionalProperties": false, "required": [ "schema_version", "message_type", "message_id", "dispatcher_id", "tenant_id", "tenant_key", "trace_id", "issued_at", "correlation_id", "status", "reason_code", "payload" ], "properties": { "schema_version": { "const": "2.0" }, "message_type": { "enum": [ "command.query.result", "call.query.result", "ai.config.result" ] }, "message_id": { "$ref": "#/$defs/id" }, "dispatcher_id": { "$ref": "#/$defs/dispatcherId" }, "tenant_id": { "$ref": "#/$defs/id" }, "tenant_key": { "$ref": "#/$defs/tenantKey" }, "trace_id": { "$ref": "#/$defs/id" }, "issued_at": { "type": "string", "format": "date-time" }, "correlation_id": { "$ref": "#/$defs/id" }, "status": { "enum": [ "ok", "pending", "rejected" ] }, "reason_code": { "type": "string" }, "payload": { "type": "object" } }, "allOf": [ { "if": { "properties": { "status": { "const": "pending" } } }, "then": { "properties": { "reason_code": { "const": "waiting" }, "payload": { "type": "object", "additionalProperties": false, "required": [], "properties": {} } } } }, { "if": { "properties": { "status": { "const": "rejected" } } }, "then": { "properties": { "reason_code": { "enum": [ "invalid_request", "not_found", "conflict", "expired", "not_authorized", "unavailable", "unsupported" ] }, "payload": { "type": "object", "additionalProperties": false, "required": [ "detail", "retryable" ], "properties": { "detail": { "type": "string", "maxLength": 1024 }, "retryable": { "type": "boolean" } } } } } }, { "if": { "properties": { "status": { "const": "ok" }, "message_type": { "const": "command.query.result" } } }, "then": { "properties": { "reason_code": { "const": "ok" }, "payload": { "$ref": "#/$defs/executor_Command" } } } }, { "if": { "properties": { "status": { "const": "ok" }, "message_type": { "const": "call.query.result" } } }, "then": { "properties": { "reason_code": { "const": "ok" }, "payload": { "$ref": "#/$defs/executor_Call" } } } }, { "if": { "properties": { "status": { "const": "ok" }, "message_type": { "const": "ai.config.result" } } }, "then": { "properties": { "reason_code": { "const": "ok" }, "payload": { "$ref": "#/$defs/aiConfigResult" } } } } ] }, "taskControl": { "type": "object", "additionalProperties": false, "required": [ "action", "expected_task_revision", "reason", "task_id" ], "properties": { "action": { "type": "string", "enum": [ "pause", "resume", "stop" ] }, "expected_task_revision": { "type": "integer", "minimum": 1 }, "active_call_policy": { "type": "string", "enum": [ "drain", "hangup" ] }, "reason": { "type": "string", "minLength": 1, "maxLength": 512 }, "task_id": { "$ref": "#/$defs/id" } } }, "tenantKey": { "type": "string", "minLength": 1, "maxLength": 196, "not": { "pattern": "(^|\\.)[*#](\\.|$)" }, "$comment": "Runtime also enforces 196 UTF-8 bytes and each AMQP resource's 255-byte budget." }, "time": { "type": "string", "format": "date-time" } } }