Files
go-sip/contracts/upstream/v1/event-payloads.schema.json
T

647 lines
13 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://go-sip.local/contracts/v1/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",
"dispatcher_id"
],
"properties": {
"schema_version": {
"const": "2.0"
},
"event_id": {
"$ref": "#/$defs/id"
},
"event_type": {
"type": "string"
},
"tenant_id": {
"$ref": "#/$defs/id"
},
"tenant_key": {
"type": "string",
"minLength": 1,
"maxLength": 196,
"not": {
"pattern": "(^|\\.)[*#](\\.|$)"
},
"$comment": "Runtime also enforces 196 UTF-8 bytes and each AMQP resource's 255-byte budget."
},
"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"
},
"dispatcher_id": {
"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}$"
}
},
"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.uploaded"
},
"payload": {
"$ref": "#/$defs/recording_uploaded"
}
}
},
{
"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",
"call.replay",
"command.replay"
]
},
"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_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"
}
}
},
"recording_uploaded": {
"type": "object",
"additionalProperties": false,
"required": [
"call_id",
"recording_id",
"format",
"channels",
"sample_rate_hz",
"duration_ms",
"size_bytes",
"checksum_sha256",
"upload_id",
"bucket",
"object_key"
],
"properties": {
"call_id": {
"$ref": "#/$defs/id"
},
"recording_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}$"
},
"upload_id": {
"$ref": "#/$defs/id"
},
"bucket": {
"type": "string",
"minLength": 1,
"maxLength": 63
},
"object_key": {
"type": "string",
"minLength": 1,
"maxLength": 1024
}
}
}
}
}