Inter-Agent Message
You can find the current and all previous versions of this schema also in our GitHub repository.
Full Schema
{
"$id": "https://github.com/open-voice-interoperability/docs/tree/main/schemas/conversation-envelope/ 1.1.0/conversation-envelope-schema.json",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"description": "A representation of a 'dialogue envelope' - the universal data exchange format for an Open-Floor compliant interoperable agent.",
"type": "object",
"required": [ "openFloor" ],
"properties": {
"openFloor": {
"required": ["schema" , "conversation", "sender", "events" ],
"properties": {
"schema": {
"type": "object",
"required": ["version" ],
"properties": {
"version": {
"type": "string",
"description": "The version of the dialog envelope specification matching this envelope."
},
"url": {
"$ref": "#/$defs/url"
}
}
},
"conversation": {
"required": [ "id" ],
"properties": {
"id": {
"type": "string",
"description": "Unique identifier for the current conversation with the user."
},
"conversants" : {
"type": "array",
"items" : {
"type" : "object",
"properties" : {
"identification": {
"required": ["speakerUri", "serviceUrl" , "organization", "conversationalName", "synopsis" ],
"properties": {
"speakerUri": {
"$ref": "#/$defs/uri",
"description": "The unique identity of the agent."
},
"serviceUrl": {
"$ref": "#/$defs/url",
"description": "The endpoint of the conversational assistant."
},
"organization": {
"type": "string",
"description": "The name of the organization administering this assistant."
},
"conversationalName": {
"type": "string",
"description": "The 'given name' of the conversational agent."
},
"department": {
"type": "string",
"description": "The department within the organization."
},
"role": {
"type": "string",
"description": "The 'job title', or 'role' of the assistant."
},
"synopsis": {
"type": "string",
"description": "A sentence signposting the who the assistant is and their area of expertise."
}
},
"additionalProperties": false
},
"additionalProperties": false
}
}
},
"assignedFloorRoles": {
"type": "object",
"description": "A record of speakerURIs for conversants that have currently been assigned roles by the floor manager.",
"properties": {
"convener": {
"type": "array",
"description": "Array of speakerURIs for agents currently assigned the convener role. Maximum cardinality is 1.",
"items": {
"$ref": "#/$defs/uri"
},
"maxItems": 1
}
},
"additionalProperties": {
"type": "array",
"description": "Arrays of speakerURIs for agents assigned to other Open-Floor roles.",
"items": {
"$ref": "#/$defs/uri"
}
}
},
"floorGranted": {
"type": "array",
"description": "Array of speakerURIs for conversants who are currently granted floor rights.",
"items": {
"$ref": "#/$defs/uri"
}
}
}
},
"sender": {
"type": "object",
"required": ["speakerUri"],
"properties" : {
"speakerUri": {
"$ref": "#/$defs/uri",
"description": "The URI of the sender of the envelope."
},
"serviceUrl": {
"$ref": "#/$defs/url",
"description": "The endpoint of the conversational assistant."
}
}
},
"events": {
"type": "array",
"items" : {
"type" : "object",
"properties" : {
"eventType": {
"type" : "string",
"enum": [
"invite",
"uninvite",
"acceptInvite",
"declineInvite",
"utterance",
"bye",
"getManifests",
"publishManifests",
"findAssistant",
"proposeAssistant",
"requestFloor",
"grantFloor",
"revokeFloor",
"yieldFloor"
]
},
"to" : {
"type" : "object",
"properties": {
"speakerUri" : {
"$ref": "#/$defs/uri",
"description": "The URI of the agent to be invited."
},
"serviceUrl" : {
"$ref": "#/$defs/url",
"description": "The URL of the agent to be invited."
},
"private" : {
"type" : "boolean",
"description" : "Set to true if the event is intended for the 'to' particpant only."
}
}
},
"reason": {
"type": "string",
"description": "Optional reason for the event."
}
},
"allOf": [
{
"if": {
"properties": {
"eventType": { "const": "utterance" }
},
"required": ["eventType"]
},
"then" : {
"properties": {
"parameters": {
"description": "Parameters for the utterance event.",
"type" : "object",
"properties" : {
"dialogEvent": {
"ref": "https://github.com/open-voice-interoperability/lib-interop/tree/main/schemas/dialog-event/1.0.2/dialog-event-schema.json"
}
},
"additionalProperties": false
}
}
}
},
{
"if": {
"properties": {
"eventType": { "const": "invite" }
},
"required": ["eventType"]
},
"then" : {
"properties": {
"parameters" : {
"description": "Parameters for the invite event.",
"type": "object",
"properties": {
"dialogHistory": {
"type": "array",
"description": "Optional list of dialog events containing some or all of the utterances in the dialog.",
"items": {
"type": "object",
"ref": "https://github.com/open-voice-interoperability/lib-interop/tree/main/schemas/dialog-event/1.0.2/dialog-event-schema.json"
}
}
},
"additionalProperties": false
}
}
}
},
{
"if": {
"properties": {
"eventType": { "const": "uninvite" }
},
"required": ["eventType"]
},
"then" : {
"properties": {
"parameters" : {
"description": "Parameters for the uninvite event.",
"type": "object",
"maxProperties": 0,
"additionalProperties": false
}
}
}
},
{
"if": {
"properties": {
"eventType": { "const": "acceptInvite" }
},
"required": ["eventType"]
},
"then" : {
"properties": {
"parameters" : {
"description": "Parameters for the acceptInvite event.",
"type": "object",
"maxProperties": 0,
"additionalProperties": false
}
}
}
},
{
"if": {
"properties": {
"eventType": { "const": "declineInvite" }
},
"required": ["eventType"]
},
"then" : {
"properties": {
"parameters" : {
"description": "Parameters for the declineInvite event.",
"type": "object",
"maxProperties": 0,
"additionalProperties": false
}
}
}
},
{
"if": {
"properties": {
"eventType": { "const": "bye" }
},
"required": ["eventType"]
},
"then" : {
"properties": {
"parameters" : {
"description": "Parameters for the bye event.",
"type": "object",
"maxProperties": 0,
"additionalProperties": false
}
}
}
},
{
"if": {
"properties": {
"eventType": { "const": "getManifests" }
},
"required": ["eventType"]
},
"then" : {
"properties": {
"parameters" : {
"description": "Parameters for the requestManifest event.",
"type": "object",
"properties": {
"recommendScope": {
"type": "string",
"description": "The scope of the recommendation."
}
},
"additionalProperties": false
}
}
}
},
{
"if": {
"properties": {
"eventType": { "const": "publishManifests" }
},
"required": ["eventType"]
},
"then" : {
"properties": {
"parameters" : {
"description": "Parameters for the publishManifests event.",
"type": "object",
"properties" : {
"servicingManifests": {
"ref": "https://github.com/open-voice-interoperability/docs/tree/main/schemas/assistant-manifest/ 1.1.0/assistant-manifest-schema.json"
},
"discoveryManifests": {
"ref": "https://github.com/open-voice-interoperability/docs/tree/main/schemas/assistant-manifest/ 1.1.0/assistant-manifest-schema.json"
}
},
"additionalProperties": false
}
}
}
},
{
"if": {
"properties": {
"eventType": { "const": "requestFloor" }
},
"required": ["eventType"]
},
"then" : {
"properties": {
"parameters" : {
"description": "Parameters for the requestFloor event.",
"type": "object",
"maxProperties": 0,
"additionalProperties": false
}
}
}
},
{
"if": {
"properties": {
"eventType": { "const": "grantFloor" }
},
"required": ["eventType"]
},
"then" : {
"properties": {
"parameters" : {
"description": "Parameters for the grantFloor event.",
"type": "object",
"maxProperties": 0,
"additionalProperties": false
}
}
}
},
{
"if": {
"properties": {
"eventType": { "const": "yieldFloor" }
},
"required": ["eventType"]
},
"then" : {
"properties": {
"parameters" : {
"description": "Parameters for the yieldFloor event.",
"type": "object",
"maxProperties": 0,
"additionalProperties": false
}
}
}
},
{
"if": {
"properties": {
"eventType": { "const": "revokeFloor" }
},
"required": ["eventType"]
},
"then" : {
"properties": {
"parameters" : {
"description": "Parameters for the revokeFloor event.",
"type": "object",
"maxProperties": 0,
"additionalProperties": false
}
}
}
}
]
}
}
}
}
},
"$defs": {
"url": {
"type": "string",
"description": "Any valid URL"
},
"uri": {
"type": "string",
"description": "Any valid URI"
}
}
}
Usage Examples
Envelope
{
"openFloor": {
"schema": {
"version": " 1.1.0"
},
"conversation": {
"id": "conv:34f6170e-2acf-4535-95ba-86963620aa8d",
"assignedFloorRoles": {
"convener": ["tag:dev.travelbot,2025:0001"]
},
"floorGranted": [
"tag:userproxy.com,2025:abc123",
"tag:dev.travelbot,2025:0001"
],
"conversants": [
{
"identification": {
"speakerUri": "tag:userproxy.com,2025:abc123",
"serviceUrl": "https://userproxy.com",
"conversationalName": "John Doe",
"role": "User",
"organization": "",
"synopsis": ""
}
},
{
"identification": {
"speakerUri": "tag:dev.travelbot,2025:0001",
"serviceUrl": "https://dev.travelbot.ee/openfloor/conversation",
"organization": "Travelbot Inc.",
"conversationalName": "travelbot",
"department": "Reservations and Customer Service",
"role": "Reservation Specialist",
"synopsis": "Reservation specialist as part of the Travelbot system."
}
}
]
},
"sender": {
"speakerUri": "tag:userproxy.com,2025:abc123"
},
"events": [
]
}
}
Bye Event
{
"openFloor": {
"schema": {
"version": " 1.1.0"
},
"conversation": {
"id": "31050879662407560061859425913208"
},
"sender": {
"speakerUri": "tag:botThatOfferedTheBye.com/7890"
},
"events": [
{
"eventType" : "bye"
}
]
}
}
Decline Invite Event
{
"openFloor": {
"schema": {
"version": " 1.1.0"
},
"conversation": {
"id": "someUniqueIdForTheConversation",
"currentRoles": {
"convener": ["tag:some_Convener.com,2025:"]
}
},
"sender": {
"speakerUri": "tag:agentBeingUninvited,2025:1234"
},
"events": [
{
"eventType": "declineInvite",
"to": {
"speakerUri": "tag:some_Convener.com,2025:"
},
"reason": "@unavailable to support this request due to lack of resources"
}
]
}
}
Get Manifest Event
Sample 1
{
"openFloor": {
"schema": {
"version": " 1.1.0"
},
"conversation": {
"id": "31050879662407560061859425913208"
},
"sender": {
"serviceUrl": "https://someBot.com",
"speakerUri": "tag:someBot.com,2025:4567"
},
"events": [
{
"eventType": "getManifests",
"to": {
"serviceUrl": "https://dev.buerokratt.ee/openfloor/conversation"
}
}
]
}
}
Sample 2
{
"openFloor": {
"schema": {
"version": " 1.1.0"
},
"conversation": {
"id": "31050879662407560061859425913208",
"currentRoles": {
"convener": ["tag:someuser.com,2025:4567"]
}
},
"sender": {
"serviceUrl": "https://someConvener.com",
"speakerUri": "tag:someuser.com,2025:4567"
},
"events": [
{
"eventType": "getManifests",
"to": {
"serviceUrl": "https://dev.buerokratt.ee/openfloor/conversation"
},
"parameters": {
"recommendScope": "internal"
}
},
{
"eventType": "utterance",
"to": {
"serviceUrl": "https://dev.buerokratt.ee/openfloor/conversation",
"private": true
},
"parameters": {
"dialogEvent": {
"speakerUri": "tag:someuser.com,2025:4567",
"span": { "startTime": "2023-06-14 02:06:07+00:00" },
"features": {
"text": {
"mimeType": "text/plain",
"tokens": [ { "value": "Do I need a visa to enter Estonia from Spain?" } ]
}
}
}
}
}
]
}
}
Sample 3
{
"openFloor": {
"schema": {
"version": " 1.1.0"
},
"conversation": {
"id": "31050879662407560061859425913208",
"currentRoles": {
"convener": ["tag:someuser.com,2025:4567"]
}
},
"sender": {
"serviceUrl": "https://someConvener.com",
"speakerUri": "tag:someuser.com,2025:4567"
},
"events": [
{
"eventType": "getManifests",
"to": {
"serviceUrl": "https://dev.buerokratt.ee/openfloor/conversation"
},
"parameters": {
"recommendScope": "internal"
}
},
{
"eventType": "utterance",
"to": {
"serviceUrl": "https://dev.buerokratt.ee/openfloor/conversation",
"private": true
},
"parameters": {
"dialogEvent": {
"speakerUri": "tag:someuser.com,2025:4567",
"span": { "startTime": "2023-06-14 02:06:07+00:00" },
"features": {
"text": {
"mimeType": "text/plain",
"tokens": [ { "value": "Do I need a visa to enter Estonia from Spain?" } ]
}
}
}
}
}
]
}
}
Grant Floor Event
{
"openFloor": {
"schema": {
"version": " 1.1.0"
},
"conversation": {
"id": "someUniqueIdForTheConversation",
"assignedFloorRoles": {
"convener": ["tag:some_Convener.com,2025:1234"]
},
"floorGranted": [
"tag:some_Convener.com,2025:1234"
]
},
"sender": {
"speakerUri": "tag:some_Convener.com,2025:1234"
},
"events": [
{
"eventType": "grantFloor",
"to": {
"speakerUri": "tag:agentBeingInvitedToTakeTheFloor.com,2025:1234"
}
},
{
"eventType": "utterance",
"to": {
"speakerUri": "tag:agentBeingInvitedToTakeTheFloor.com,2025:1234",
"private": true
},
"reason": "new request",
"parameters": {
"dialogEvent": {
"speakerUri": "tag:someConvener.com,2025:1234",
"span": { "startTime": "2025-01-31T10:05:00Z" },
"features": {
"text": {
"mimeType": "text/plain",
"tokens": [
{ "value": "Go ahead an book a meeting at six o'clock for the user." }
]
}
}
}
}
}
]
}
}
Invite Event
{
"openFloor": {
"schema": {
"version": " 1.1.0"
},
"conversation": {
"id": "someUniqueIdCreatedByTheFirstParticipant"
},
"sender": {
"speakerUri": "tag:botThatOfferedTheInvite.com,2025:4567"
},
"events": [
{
"eventType": "invite",
"to": {
"serviceUrl": "https://botsite.botBeingInvited.com",
"speakerUri": "tag:botBeingInvited.com,2025:1234"
}
}
]
}
}
Publish Manifests Event
{
"openFloor": {
"schema": {
"version": " 1.1.0"
},
"conversation": {
"id": "31050879662407560061859425913208"
},
"sender": {
"speakerUri": "tag://myFavoriteDiscoveryBot.com,2025:0001"
},
"events": [
{
"eventType": "publishManifests",
"parameters": {
"servicingManifests" : [
{
"identification":
{
"serviceUrl": "https://dev.buerokratt.ee/ovonr/conversation",
"speakerUri": "tag:dev.buerokratt.ee,2025:0001",
"organization": "Government of Estonia",
"conversationalName": "Buerokratt",
"serviceName": "Passport Office",
"role": "Immigration Specialist",
"synopsis" : "Immigration specialist as part of the Buerokratt system."
},
"capabilities": [
{
"keyphrases": [
"visa",
"immigration",
"passport",
"permanent resident"
],
"languages": [
"en-us"
],
"descriptions": [
"international travel to and from Estonia"
],
"supportedLayers": [
"text"
]
}
],
"score": 0.14
}
],
"discoveryManifests": [
{
"identification": {
"serviceUrl": "https://findMyAIAssistant.com",
"speakerUri": "tag:findMyAIAssistant.com,2025:searchInstance1567",
"synopsis": "Finds assistants anywhere in the world"
},
"capabilities": [
{
"keyphrases": [
"discover",
"find",
"search"
],
"languages": [
"en-us"
],
"descriptions": [
"descovery agent for finding assistants anywhere in the world"
],
"supportedLayers": [
"text"
]
}
],
"score": 1.00
}
]
}
}
]
}
}
Request Floor Event
{
"openFloor": {
"schema": {
"version": " 1.1.0"
},
"conversation": {
"id": "someUniqueIdForTheConversation",
"assignedFloorRoles": {
"convener": ["tag:some_Convener.com,2025:1234"]
},
"floorGranted": [
"tag:some_Convener.com,2025:1234"
]
},
"sender": {
"speakerUri": "tag:agentRequestingFloor.com,2025:1234"
},
"events": [
{
"eventType": "requestFloor",
"to": {
"speakerUri": "tag:some_Convener.com,2025:1234"
},
"reason": "more information to add"
}
]
}
}
Revoke Floor Event
{
"openFloor": {
"schema": {
"version": " 1.1.0"
},
"conversation": {
"id": "someUniqueIdForTheConversation",
"assignedFloorRoles": {
"convener": ["tag:some_Convener.com,2025:1234"]
},
"floorGranted": [
"tag:some_Convener.com,2025:1234"
]
},
"sender": {
"speakerUri": "tag:some_Convener.com,2025:1234"
},
"events": [
{
"eventType": "revokeFloor",
"to": {
"speakerUri": "tag:agentBeingRevoked,2025:1234"
},
"reason": "@override"
}
]
}
}
Uninvite Event
{
"openFloor": {
"schema": {
"version": " 1.1.0"
},
"conversation": {
"id": "someUniqueIdForTheConversation",
"currentRoles": {
"convener": ["tag:some_Convener.com,2025:"]
}
},
"sender": {
"speakerUri": "tag:some_Convener.com,2025:"
},
"events": [
{
"eventType": "uninvite",
"to": {
"speakerUri": "tag:agentBeingUninvited,2025:1234"
},
"reason": "@brokenPolicy: agents should not contain content that is offensive or encourages illegal activity"
}
]
}
}
Utterance Event
{
"openFloor": {
"schema": {
"version": " 1.1.0"
},
"conversation": {
"id": "conv:ffe67361-b072-40e7-ab70-9c83ab90509f",
"conversants": [
{
"identification": {
"speakerUri": "tag:userproxy.com,2025:abc123",
"serviceUrl": "https://userproxy.com",
"conversationalName": "John Doe",
"role": "User",
"synopsis": "",
"organization": ""
}
},
{
"identification": {
"speakerUri": "tag:dev.travelbot,2025:0001",
"serviceUrl": "https://dev.travelbot.ee/openfloor/conversation",
"organization": "Travelbot Inc.",
"conversationalName": "travelbot",
"department": "Reservations and Customer Service",
"role": "Reservation Specialist",
"synopsis": "Reservation specialist as part of the Travelbot system."
}
}
]
},
"sender": {
"speakerUri": "tag:userproxy.com,2025:abc123"
},
"events": [
{
"eventType": "utterance",
"to": {
"speakerUri": "tag:dev.travelbot,2025:0001",
"private": true
},
"parameters": {
"dialogEvent": {
"id": "de:0d5bc7da-2d72-48a0-9d50-73ebdb433278",
"speakerUri": "tag:userproxy.com,2025:abc123",
"span": {
"startTime": "2025-05-09T17:33:47.884788"
},
"features": {
"text": {
"mimeType": "text/plain",
"tokens": [
{
"value": "Give me the times to Vancouver!"
}
]
}
}
}
}
}
]
}
}
Yield Floor Event
{
"openFloor": {
"schema": {
"version": " 1.1.0"
},
"conversation": {
"id": "someUniqueIdForTheConversation"
},
"sender": {
"speakerUri": "tag:som_agent_that_has_floor.com,2025:1234",
"serviceUrl": "https://som_agent_that_has_floor.com"
},
"events": [
{
"eventType": "yieldFloor",
"reason": "@complete"
}
]
}
}