Open Floor Protocol   ›   Protocol   ›   Schemas   ›   Inter-Agent Message

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"
        }
      ]
    }
  }