VCON - Voice Conversation format
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://ietf.org/vcon/schemas/unsigned-vcon.json",
"title": "vCon - Unsigned Form",
"description": "JSON schema for the unsigned form of vCon (Conversational Data Container) as defined in draft-ietf-vcon-vcon-core-01, sections 1-4",
"type": "object",
"required": ["uuid", "created_at", "parties"],
"properties": {
"vcon": {
"type": "string",
"description": "DEPRECATED: Syntactic version of the JSON format. For this document, must be '0.4.0'",
"const": "0.4.0"
},
"uuid": {
"type": "string",
"description": "Globally unique identifier for the vCon. SHOULD be a version 8 UUID",
"format": "uuid"
},
"extensions": {
"type": "array",
"description": "List of names of all vCon extensions for any parameters not defined in the core schema",
"items": {
"type": "string"
}
},
"critical": {
"type": "array",
"description": "List of extension names that are incompatible with the core vCon schema and require explicit support",
"items": {
"type": "string"
}
},
"created_at": {
"type": "string",
"description": "Creation time of this vCon in RFC3339 format",
"format": "date-time"
},
"updated_at": {
"type": "string",
"description": "Last modified time of this vCon in RFC3339 format",
"format": "date-time"
},
"subject": {
"type": "string",
"description": "Subject or topic of the conversation"
},
"redacted": {
"type": "object",
"description": "Reference to the unredacted or less redacted vCon instance version",
"required": ["uuid", "type"],
"properties": {
"uuid": {
"type": "string",
"description": "UUID of the unredacted/prior vCon instance version",
"format": "uuid"
},
"type": {
"type": "string",
"description": "Type of redaction performed"
},
"url": {
"type": "string",
"description": "HTTPS URL where the referenced vCon is stored",
"format": "uri"
},
"content_hash": {
"oneOf": [
{"type": "string"},
{"type": "array", "items": {"type": "string"}}
],
"description": "Hash(es) of the external content using format: algorithm-base64url_encoded_hash"
}
}
},
"amended": {
"type": "object",
"description": "Reference to the prior vCon instance version that this vCon amends",
"properties": {
"uuid": {
"type": "string",
"description": "UUID of the prior vCon instance version",
"format": "uuid"
},
"url": {
"type": "string",
"description": "HTTPS URL where the referenced vCon is stored",
"format": "uri"
},
"content_hash": {
"oneOf": [
{"type": "string"},
{"type": "array", "items": {"type": "string"}}
],
"description": "Hash(es) of the external content (required if url is provided)"
}
}
},
"group": {
"type": "array",
"description": "Array of related vCons that aggregate into this conversation",
"items": {
"type": "object",
"description": "Group Object - details not fully specified in sections 1-4"
}
},
"parties": {
"type": "array",
"description": "Array of Party Objects representing all parties involved in the conversation",
"items": {
"$ref": "#/definitions/Party"
}
},
"dialog": {
"type": "array",
"description": "Array of Dialog Objects containing the captured conversation content",
"items": {
"$ref": "#/definitions/Dialog"
}
},
"analysis": {
"type": "array",
"description": "Array of Analysis Objects containing analysis performed on the conversational data",
"items": {
"$ref": "#/definitions/Analysis"
}
},
"attachments": {
"type": "array",
"description": "Array of Attachment Objects for ancillary documents related to the conversation",
"items": {
"$ref": "#/definitions/Attachment"
}
}
},
"definitions": {
"Party": {
"type": "object",
"description": "Represents a party involved in the conversation",
"properties": {
"tel": {
"type": "string",
"description": "TEL URL (RFC3966) for the party"
},
"sip": {
"type": "string",
"description": "SIP URL for the party"
},
"stir": {
"type": "string",
"description": "STIR PASSporT in JWS Compact Serialization form"
},
"mailto": {
"type": "string",
"description": "MAILTO URL (RFC6068) for the party",
"format": "email"
},
"name": {
"type": "string",
"description": "Name of the party"
},
"did": {
"type": "string",
"description": "Decentralized Identifier (DID) URI for the party"
},
"validation": {
"type": "string",
"description": "Label or token identifying the method of identity validation used"
},
"gmlpos": {
"type": "string",
"description": "Geographic location in GML pos format (latitude longitude)"
},
"civicaddress": {
"$ref": "#/definitions/Civicaddress"
},
"uuid": {
"type": "string",
"description": "Unique identifier for the participant",
"format": "uuid"
}
}
},
"Civicaddress": {
"type": "object",
"description": "Civic address information for a party's location",
"properties": {
"country": {"type": "string"},
"a1": {"type": "string", "description": "National subdivision (state/province)"},
"a2": {"type": "string", "description": "County/parish/district"},
"a3": {"type": "string", "description": "City/township"},
"a4": {"type": "string", "description": "City division/borough"},
"a5": {"type": "string", "description": "Neighborhood/block"},
"a6": {"type": "string", "description": "Street"},
"prd": {"type": "string", "description": "Leading street direction"},
"pod": {"type": "string", "description": "Trailing street suffix"},
"sts": {"type": "string", "description": "Street suffix"},
"hno": {"type": "string", "description": "House number"},
"hns": {"type": "string", "description": "House number suffix"},
"lmk": {"type": "string", "description": "Landmark"},
"loc": {"type": "string", "description": "Additional location info"},
"flr": {"type": "string", "description": "Floor"},
"nam": {"type": "string", "description": "Name/occupant"},
"pc": {"type": "string", "description": "Postal code"}
}
},
"Dialog": {
"type": "object",
"description": "Represents a segment of captured conversation",
"required": ["type", "start"],
"properties": {
"type": {
"type": "string",
"enum": ["recording", "text", "transfer", "incomplete"],
"description": "Type of dialog"
},
"start": {
"type": "string",
"format": "date-time",
"description": "Start time of the dialog in RFC3339 format"
},
"duration": {
"oneOf": [
{"type": "integer", "minimum": 0},
{"type": "number", "minimum": 0}
],
"description": "Duration in seconds"
},
"parties": {
"oneOf": [
{"type": "integer", "minimum": 0},
{"type": "array", "items": {"type": "integer", "minimum": 0}},
{
"type": "array",
"items": {
"oneOf": [
{"type": "integer", "minimum": 0},
{"type": "array", "items": {"type": "integer", "minimum": 0}}
]
}
}
],
"description": "Index/indices of parties in the parties array"
},
"originator": {
"type": "integer",
"minimum": 0,
"description": "Index of the originating party if first party is not the originator"
},
"mediatype": {
"type": "string",
"description": "Media type of the dialog content"
},
"filename": {
"type": "string",
"description": "Original filename of the dialog content"
},
"body": {
"type": "string",
"description": "Inline content of the dialog (for inline files)"
},
"encoding": {
"type": "string",
"enum": ["base64url", "json", "none"],
"description": "Encoding type for inline content"
},
"url": {
"type": "string",
"format": "uri",
"description": "HTTPS URL for externally referenced content"
},
"content_hash": {
"oneOf": [
{"type": "string"},
{"type": "array", "items": {"type": "string"}}
],
"description": "Hash(es) of external content"
},
"disposition": {
"type": "string",
"enum": ["no-answer", "congestion", "failed", "busy", "hung-up", "voicemail-no-message"],
"description": "Reason for incomplete dialog (required for incomplete type)"
},
"session_id": {
"oneOf": [
{"$ref": "#/definitions/SessionId"},
{"type": "array", "items": {"$ref": "#/definitions/SessionId"}},
{
"type": "array",
"items": {
"oneOf": [
{"$ref": "#/definitions/SessionId"},
{"type": "array", "items": {"$ref": "#/definitions/SessionId"}}
]
}
}
],
"description": "Session ID(s) for the dialog"
},
"party_history": {
"type": "array",
"items": {"$ref": "#/definitions/PartyHistory"},
"description": "History of party join/drop/hold/mute events"
},
"transferee": {
"type": "integer",
"minimum": 0,
"description": "Party index of the transferee (for transfer type)"
},
"transferor": {
"type": "integer",
"minimum": 0,
"description": "Party index of the transferor (for transfer type)"
},
"transfer_target": {
"oneOf": [
{"type": "integer", "minimum": 0},
{"type": "array", "items": {"type": "integer", "minimum": 0}}
],
"description": "Party index/indices of the transfer target (for transfer type)"
},
"original": {
"oneOf": [
{"type": "integer", "minimum": -1},
{"type": "array", "items": {"type": "integer", "minimum": -1}}
],
"description": "Dialog index/indices of original conversation (for transfer type)"
},
"consultation": {
"oneOf": [
{"type": "integer", "minimum": -1},
{"type": "array", "items": {"type": "integer", "minimum": -1}}
],
"description": "Dialog index/indices of consultation (for transfer type)"
},
"target_dialog": {
"oneOf": [
{"type": "integer", "minimum": -1},
{"type": "array", "items": {"type": "integer", "minimum": -1}}
],
"description": "Dialog index/indices of target dialog (for transfer type)"
},
"application": {
"type": "string",
"description": "Application, communication channel or context of the conversation"
},
"message_id": {
"type": "string",
"description": "Unique message identifier from the messaging system"
}
}
},
"SessionId": {
"type": "object",
"description": "Session identifier with local and remote UUIDs",
"required": ["local", "remote"],
"properties": {
"local": {
"type": "string",
"description": "Local UUID for the session"
},
"remote": {
"type": "string",
"description": "Remote UUID for the session"
}
}
},
"PartyHistory": {
"type": "object",
"description": "Records party events during the dialog",
"required": ["party", "time", "event"],
"properties": {
"party": {
"type": "integer",
"minimum": 0,
"description": "Index of the party"
},
"time": {
"type": "string",
"format": "date-time",
"description": "Time of the event in RFC3339 format"
},
"event": {
"type": "string",
"enum": ["join", "drop", "hold", "unhold", "mute", "unmute", "dtmfdown", "dtmfup"],
"description": "Type of event"
},
"dtmf": {
"type": "string",
"description": "DTMF digit or character (required for dtmfdown/dtmfup events)"
}
}
},
"Attachment": {
"type": "object",
"description": "Represents an ancillary document related to the conversation",
"required": ["start", "party", "dialog"],
"properties": {
"start": {
"type": "string",
"format": "date-time",
"description": "Time the attachment was sent/exchanged in RFC3339 format"
},
"party": {
"type": "integer",
"minimum": 0,
"description": "Index of the party that contributed the attachment"
},
"dialog": {
"type": "integer",
"minimum": 0,
"description": "Index of the dialog this attachment is part of"
},
"mediatype": {
"type": "string",
"description": "Media type of the attachment"
},
"filename": {
"type": "string",
"description": "Original filename of the attachment"
},
"body": {
"type": "string",
"description": "Inline content of the attachment (for inline files)"
},
"encoding": {
"type": "string",
"enum": ["base64url", "json", "none"],
"description": "Encoding type for inline content"
},
"url": {
"type": "string",
"format": "uri",
"description": "HTTPS URL for externally referenced attachment"
},
"content_hash": {
"oneOf": [
{"type": "string"},
{"type": "array", "items": {"type": "string"}}
],
"description": "Hash(es) of external content"
}
}
},
"Analysis": {
"type": "object",
"description": "Represents analysis performed on the conversational data",
"required": ["type", "vendor"],
"properties": {
"type": {
"type": "string",
"description": "Semantic type of analysis (e.g., transcript, translation, summary, sentiment)"
},
"dialog": {
"oneOf": [
{"type": "integer", "minimum": 0},
{"type": "array", "items": {"type": "integer", "minimum": 0}}
],
"description": "Index/indices of dialog objects this analysis is based on"
},
"mediatype": {
"type": "string",
"description": "Media type of the analysis file"
},
"filename": {
"type": "string",
"description": "Original filename of the analysis data"
},
"vendor": {
"type": "string",
"description": "Vendor or product name that generated the analysis"
},
"product": {
"type": "string",
"description": "Product name to differentiate from other vendor products"
},
"schema": {
"type": "string",
"description": "Token or label for the data format/schema of the analysis"
},
"body": {
"type": "string",
"description": "Inline content of the analysis (for inline files)"
},
"encoding": {
"type": "string",
"enum": ["base64url", "json", "none"],
"description": "Encoding type for inline content"
},
"url": {
"type": "string",
"format": "uri",
"description": "HTTPS URL for externally referenced analysis"
},
"content_hash": {
"oneOf": [
{"type": "string"},
{"type": "array", "items": {"type": "string"}}
],
"description": "Hash(es) of external content"
}
}
}
}
}
View source