171 lines
8.5 KiB
JSON
171 lines
8.5 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://agent-call.local/contracts/event-payloads.schema.json",
|
|
"title": "Agent-call versioned event envelopes and payloads",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["schema_version", "event_id", "event_type", "tenant_id", "tenant_key", "trace_id", "occurred_at", "aggregate_type", "aggregate_id", "aggregate_version", "payload"],
|
|
"properties": {
|
|
"schema_version": {"const": "1.0"},
|
|
"event_id": {"$ref": "#/$defs/id"},
|
|
"event_type": {"type": "string"},
|
|
"tenant_id": {"$ref": "#/$defs/id"},
|
|
"tenant_key": {"type": "string", "minLength": 1, "maxLength": 224},
|
|
"trace_id": {"$ref": "#/$defs/id"},
|
|
"occurred_at": {"type": "string", "format": "date-time"},
|
|
"aggregate_type": {"type": "string", "minLength": 1, "maxLength": 64},
|
|
"aggregate_id": {"$ref": "#/$defs/id"},
|
|
"aggregate_version": {"type": "integer", "minimum": 1},
|
|
"payload": {"type": "object"}
|
|
},
|
|
"oneOf": [
|
|
{"properties": {"event_type": {"const": "command.result"}, "payload": {"$ref": "#/$defs/command_result"}}},
|
|
{"properties": {"event_type": {"const": "call.status"}, "payload": {"$ref": "#/$defs/call_status"}}},
|
|
{"properties": {"event_type": {"const": "transcript.updated"}, "payload": {"$ref": "#/$defs/transcript_updated"}}},
|
|
{"properties": {"event_type": {"const": "call.finished"}, "payload": {"$ref": "#/$defs/call_finished"}}},
|
|
{"properties": {"event_type": {"const": "recording.ready"}, "payload": {"$ref": "#/$defs/recording_ready"}}},
|
|
{"properties": {"event_type": {"const": "recording.failed"}, "payload": {"$ref": "#/$defs/recording_failed"}}},
|
|
{"properties": {"event_type": {"const": "transcript.failed"}, "payload": {"$ref": "#/$defs/transcript_failed"}}},
|
|
{"properties": {"event_type": {"const": "contact.opt_out"}, "payload": {"$ref": "#/$defs/contact_opt_out"}}}
|
|
],
|
|
"$defs": {
|
|
"id": {"type": "string", "minLength": 1, "maxLength": 128},
|
|
"command_result": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": ["command_id", "command_type", "status", "reason_code"],
|
|
"properties": {
|
|
"command_id": {"$ref": "#/$defs/id"},
|
|
"command_type": {"enum": ["call.execute", "task.control"]},
|
|
"status": {"enum": ["accepted", "waiting", "applied", "rejected", "failed", "unknown"]},
|
|
"reason_code": {"type": "string", "minLength": 1, "maxLength": 128},
|
|
"task_id": {"$ref": "#/$defs/id"},
|
|
"task_item_id": {"$ref": "#/$defs/id"},
|
|
"execution_id": {"$ref": "#/$defs/id"},
|
|
"call_id": {"$ref": "#/$defs/id"},
|
|
"requested_task_revision": {"type": "integer", "minimum": 0},
|
|
"applied_task_revision": {"type": "integer", "minimum": 0},
|
|
"admission_state": {"enum": ["open", "closed", "draining", "quarantined", "unknown"]},
|
|
"resource_reservation_id": {"$ref": "#/$defs/id"},
|
|
"permit_id": {"$ref": "#/$defs/id"}
|
|
}
|
|
},
|
|
"call_status": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": ["call_id", "execution_id", "call_state", "call_version", "attempt_id", "attempt_state"],
|
|
"properties": {
|
|
"call_id": {"$ref": "#/$defs/id"},
|
|
"execution_id": {"$ref": "#/$defs/id"},
|
|
"task_id": {"$ref": "#/$defs/id"},
|
|
"task_item_id": {"$ref": "#/$defs/id"},
|
|
"call_state": {"enum": ["queued", "dialing", "ringing", "answered", "ended"]},
|
|
"call_version": {"type": "integer", "minimum": 1},
|
|
"attempt_id": {"$ref": "#/$defs/id"},
|
|
"attempt_state": {"enum": ["pending", "active", "ended", "unknown"]},
|
|
"route_policy_id": {"$ref": "#/$defs/id"},
|
|
"caller_profile_id": {"$ref": "#/$defs/id"},
|
|
"trunk_id": {"$ref": "#/$defs/id"},
|
|
"cell_id": {"$ref": "#/$defs/id"},
|
|
"egress_pool_id": {"$ref": "#/$defs/id"},
|
|
"observed_at": {"type": "string", "format": "date-time"},
|
|
"reason_code": {"type": "string", "maxLength": 128}
|
|
}
|
|
},
|
|
"transcript_updated": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": ["call_id", "turn_id", "segment_id", "role", "revision", "text", "is_final", "start_ms", "end_ms", "playback_state"],
|
|
"properties": {
|
|
"call_id": {"$ref": "#/$defs/id"},
|
|
"execution_id": {"$ref": "#/$defs/id"},
|
|
"turn_id": {"$ref": "#/$defs/id"},
|
|
"segment_id": {"$ref": "#/$defs/id"},
|
|
"role": {"enum": ["customer", "agent", "system"]},
|
|
"revision": {"type": "integer", "minimum": 1},
|
|
"text": {"type": "string", "maxLength": 32768},
|
|
"is_final": {"type": "boolean"},
|
|
"start_ms": {"type": "integer", "minimum": 0},
|
|
"end_ms": {"type": "integer", "minimum": 0},
|
|
"playback_state": {"enum": ["not_applicable", "generated", "sent", "playback_confirmed", "cancelled", "unknown"]}
|
|
}
|
|
},
|
|
"call_finished": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": ["call_id", "execution_id", "call_version", "outcome", "started_at", "ended_at", "duration_ms", "reason_code"],
|
|
"properties": {
|
|
"call_id": {"$ref": "#/$defs/id"},
|
|
"execution_id": {"$ref": "#/$defs/id"},
|
|
"task_id": {"$ref": "#/$defs/id"},
|
|
"task_item_id": {"$ref": "#/$defs/id"},
|
|
"call_version": {"type": "integer", "minimum": 1},
|
|
"outcome": {"enum": ["answered", "no_answer", "busy", "failed", "opt_out", "cancelled", "unknown"]},
|
|
"started_at": {"type": "string", "format": "date-time"},
|
|
"ended_at": {"type": "string", "format": "date-time"},
|
|
"duration_ms": {"type": "integer", "minimum": 0},
|
|
"reason_code": {"type": "string", "minLength": 1, "maxLength": 128},
|
|
"attempt_summary": {"type": "array", "maxItems": 32, "items": {"$ref": "#/$defs/attempt_summary"}},
|
|
"asset_state": {"enum": ["pending", "complete", "failed", "unknown"]}
|
|
}
|
|
},
|
|
"attempt_summary": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": ["attempt_id", "state"],
|
|
"properties": {
|
|
"attempt_id": {"$ref": "#/$defs/id"},
|
|
"state": {"enum": ["pending", "active", "ended", "unknown"]},
|
|
"trunk_id": {"$ref": "#/$defs/id"},
|
|
"cell_id": {"$ref": "#/$defs/id"},
|
|
"reason_code": {"type": "string", "maxLength": 128}
|
|
}
|
|
},
|
|
"recording_ready": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": ["call_id", "recording_id", "oss_id", "format", "channels", "sample_rate_hz", "duration_ms", "size_bytes", "checksum_sha256"],
|
|
"properties": {
|
|
"call_id": {"$ref": "#/$defs/id"},
|
|
"recording_id": {"$ref": "#/$defs/id"},
|
|
"oss_id": {"$ref": "#/$defs/id"},
|
|
"format": {"enum": ["wav", "raw_pcm", "pcma"]},
|
|
"channels": {"const": 1},
|
|
"sample_rate_hz": {"type": "integer", "minimum": 8000, "maximum": 48000},
|
|
"duration_ms": {"type": "integer", "minimum": 0},
|
|
"size_bytes": {"type": "integer", "minimum": 1},
|
|
"checksum_sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"}
|
|
}
|
|
},
|
|
"recording_failed": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": ["call_id", "recording_id", "stage", "reason_code", "retryable"],
|
|
"properties": {
|
|
"call_id": {"$ref": "#/$defs/id"},
|
|
"recording_id": {"$ref": "#/$defs/id"},
|
|
"stage": {"enum": ["seal", "request", "upload", "complete", "verify", "cleanup"]},
|
|
"reason_code": {"type": "string", "minLength": 1, "maxLength": 128},
|
|
"retryable": {"type": "boolean"},
|
|
"next_retry_at": {"type": "string", "format": "date-time"}
|
|
}
|
|
},
|
|
"transcript_failed": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": ["call_id", "reason_code", "retryable"],
|
|
"properties": {
|
|
"call_id": {"$ref": "#/$defs/id"},
|
|
"reason_code": {"type": "string", "minLength": 1, "maxLength": 128},
|
|
"retryable": {"type": "boolean"},
|
|
"segment_id": {"$ref": "#/$defs/id"},
|
|
"affected_segments": {"type": "array", "maxItems": 256, "items": {"$ref": "#/$defs/id"}}
|
|
}
|
|
},
|
|
"contact_opt_out": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": ["call_id", "task_id", "task_item_id", "requested_at"],
|
|
"properties": {
|
|
"call_id": {"$ref": "#/$defs/id"},
|
|
"task_id": {"$ref": "#/$defs/id"},
|
|
"task_item_id": {"$ref": "#/$defs/id"},
|
|
"requested_at": {"type": "string", "format": "date-time"},
|
|
"turn_id": {"$ref": "#/$defs/id"},
|
|
"segment_id": {"$ref": "#/$defs/id"}
|
|
}
|
|
}
|
|
}
|
|
}
|