Skip to content

Control

The control module contains the base functionality for the conference including information like the participant list, roles and hand raise.

Commands

Join

Must be the first message to be sent when the websocket connection is established.

Fields

Field Type Required Description
action enum yes Must be "join"
display_name string yes String to be displayed as the user's display name in the room
Example
{
    "action": "join",
    "display_name": "Test"
}

EnterRoom

Can only be sent while in the waiting room and after being accepted by a moderator.

See InWaitingRoom

Fields

Field Type Required Description
action enum yes Must be "enter_room"
Example
{
    "action": "enter_room"
}

Raise Hand

Notify other participants that a participant's hand is raised.

Fields

Field Type Required Description
action enum yes Must be "raise_hand"
Example
{
    "action": "raise_hand"
}

Lower Hand

Notify other participants that a participant's hand is no longer raised.

Fields

Field Type Required Description
action enum yes Must be "raise_hand"
Example
{
    "action": "raise_hand"
}

Grant moderator role

Requires moderator role.

Grant a participant the moderator role.

Fields

Field Type Required Description
action enum yes Must be "grant_moderator_role"
target string yes Id of the participant to grant the moderator role
Example
{
    "action": "grant_moderator_role",
    "target": "00000000-0000-0000-0000-000000000000"
}

Revoke moderator role

Requires moderator role.

Revoke the moderator role from a participant. Cannot revoke the moderator role from the creator of the room.

Fields

Field Type Required Description
action enum yes Must be "grant_moderator_role"
target string yes Id of the participant to revoke the moderator role from
Example
{
    "action": "revoke_moderator_role",
    "target": "00000000-0000-0000-0000-000000000000"
}

Events

Data Types

Participant

Fields

Information about another participant

Field Type Always Description
id string yes ID of the participant
control ControlData yes Information about the participant provided by the control module
some_other_module... object ? Not an actual field but every module can attach data about the participant under their name

ControlData

Information about another participant provided by the control module

Fields
Field Type Always Description
display_name string yes Display name of the participant
role enum yes either "guest,, "user" or "moderator"
avatar_url string no url to your avatar image if the participant is a logged in user
participation_kind enum yes either "user", "guest" or "sip"
hand_is_up bool yes true if the user is currently raising their hand
joined_at string yes timestamp of when the participant joined
left_at string no timestamp of when the participant left the room
hand_updated_at string yes timestamp of when the hand-raise status last changed
is_room_owner bool yes true if the user is the owner of the room

EventInfo

Fields

Information about the event associated with a room.

Field Type Always Description
id string yes Id of the event
room_id string yes Id of the room belonging to the event. (deprecated! use the room_info field from the JoinSuccess message instead)
title string yes Title of the event
is_adhoc bool yes True if the event was created ad-hoc
meeting_details MeetingDetails no Meeting for an event associated with a room. See: MeetingDetails

MeetingDetails

Fields

Meeting details for an event associated with a room.

Field Type Always Description
invite_code_id string no Invite code id of the event
call_in CallIn no Dial-in information for the event. See: CallIn
streaming_links StreamingLink[] yes Links for accessing the stream. See: StreamingLink

CallIn

Fields

Meeting details for an event associated with a room.

Field Type Always Description
tel string yes SIP call-in phone number which must be used to reach the room
id string yes SIP ID which must transmitted via DTMF
password string yes SIP password which must be transmitted via DTMF
Fields

Meeting details for an event associated with a room.

Field Type Always Description
name string yes Name of the streaming link
url string yes Url of the streaming link

RoomInfo

Fields

Information about the current room.

Field Type Always Description
id string yes Id of the room
password string no The room password, if one is configured
created_by UserInfo yes Information about the user that created the room. SeeUserInfo

UserInfo

Fields

Information about the creator of the current room.

Field Type Always Description
title string yes The users title
firstname string yes The users first name
lastname string yes The users last name
display_name string yes The users configured display name
avatar_url string yes The url to the users avatar

JoinSuccess

Received after joining the room. Can be triggered by either calling Join or EnterRoom.

Fields

Field Type Always Description
message enum yes Is "join_success"
id string yes Your participant id in this session
display_name string yes Your display name in this session
avatar_url string no Url to your avatar image if logged
role enum yes Either "guest", "user" or "moderator"
closes_at string no The point in time the room closes
tariff Tariff yes Tariff information, including quotas and modules
participants Participant[] yes List of participants in the room
event_info EventInfo no Information about the event associated with the meeting room. See: EventInfo
room_info RoomInfo yes Information about the current room. See: RoomInfo
Example
{
  "message": "join_success",
  "id": "00000000-0000-0000-0000-000000000000",
  "display_name": "My Display Name",
  "avatar_url":"https://example.org/",
  "role": "moderator",
  "closes_at": "2023-03-10T16:52:54Z",
  "is_room_owner": true,
  "tariff": {
    "id": "53db7cb1-12af-4715-9b17-4a5a57876085",
    "name": "OpenTalkDefaultTariff",
    "quotas": {},
    "modules":{
      "core": {"features": ["feature2", "feature3"]},
      "chat": {}
    }
  },
  "participants": [
    {
      "id": "00000000-0000-0000-0000-000000000000",
      "control": {
        "display_name": "Someone Else",
        "hand_is_up": false,
        "hand_updated_at": "2022-05-10T10:40:39Z",
        "joined_at": "2022-05-10T10:40:39Z",
        "left_at": "2022-05-10T10:40:42Z",
        "participation_kind": "user",
        "is_room_owner": false
      }
    }
  ],
  "event_info": {
    "id": "fa31b241-612d-4524-930e-b5b0af12acb1",
    "title": "Daily"
  },
  "room_info": {
    "id": "00000000-0000-0000-0000-000000000000",
    "password": "secret123",
    "created_by": {
      "title": "Dr.",
      "firstname": "Firstname",
      "lastname": "Lastname",
      "display_name": "The Creator",
      "avatar_url": "https://example.org/",
    }
  }
}

JoinBlocked

If a tariff is configured for a room, an issued Join action may result in this event.

Fields

Field Type Always Description
message enum yes Is "join_blocked"
reason enum yes Is "participant_limit_reached"
Example
{
    "message": "join_blocked",
    "reason": "participant_limit_reached"
}

Update

Received when a participant changes their state. Wraps a Participant.

Fields

Field Type Always Description
message enum yes Is "update"
Example
{
    "message": "update",
    "id": "00000000-0000-0000-0000-000000000000",
    "control": {
      "display_name": "Someone Else",
      "hand_is_up": false,
      "hand_updated_at": "2022-05-10T10:40:39Z",
      "joined_at": "2022-05-10T10:40:39Z",
      "left_at": "2022-05-10T10:40:42Z",
      "participation_kind": "user"
    }
}

Joined

Received when a participant joined the room. Wraps a Participant.

Fields

Field Type Always Description
message enum yes Is "joined"
Example
{
    "message": "joined",
    "id": "00000000-0000-0000-0000-000000000000",
    "control": {
      "display_name": "Someone Else",
      "hand_is_up": false,
      "hand_updated_at": "2022-05-10T10:40:39Z",
      "joined_at": "2022-05-10T10:40:39Z",
      "left_at": "2022-05-10T10:40:42Z",
      "participation_kind": "user"
    }
}

Left

Received when a participant left the room.

Fields

Field Type Always Description
message enum yes Is "left"
id string yes Id of the participant that has left
reason enum yes The reason as to why the participant left either "quit", "timeout" or "sent_to_waiting_room"
Example
{
    "message": "left",
    "id": "00000000-0000-0000-0000-000000000000",
    "reason": "quit"
}

TimeLimitQuotaElapsed

Received when the quota's time limit has elapsed.

Fields

Field Type Always Description
message enum yes Is "time_limit_quota_elapsed"

RateLimitExceeded

The participant has exceeded the configured rate limit of the controller

This will be the last message received before the participant is removed from the conference

Fields

Field Type Always Description
message enum yes Is "rate_limit_exceeded"

HandRaised

Received by a participant after they have raised their hand.

Fields

Field Type Always Description
message enum yes Is "hand_raised"

HandLowered

Received by a participant after they have lowered their hand.

Fields

Field Type Always Description
message enum yes Is "hand_lowered"

RoleUpdated

Received when a moderator assigned a new role to a participant. This message is sent to the affected participants

Fields

Field Type Always Description
message enum yes Is "role_updated"
new_role enum yes either "guest", "user", "moderator"
Example
{
    "message": "role_updated",
    "new_role": "moderator"
}

ModeratorRoleGranted

Moderator rights have been granted to the specified participant. This message is sent to the participant who has executed the grant_moderator_rolecommand

Fields

Field Type Always Description
message enum yes Is "moderator_role_granted"
target string yes Participant id to grant the presenter role to
Example
{
    "message": "moderator_role_granted",
    "target": "84a2c872-94fb-4b41-aca7-13d784c92a72"
}

ModeratorRoleRevoked

Moderator rights have been revoked from the specified participant. This message is sent to the participant who has executed the revoke_moderator_rolecommand

Fields

Field Type Always Description
message enum yes Is "moderator_role_revoked"
target string yes Participant id to revoke the presenter role from
Example
{
    "message": "moderator_role_revoked",
    "target": "84a2c872-94fb-4b41-aca7-13d784c92a72"
}

RoomDeleted

Received by a participant if removed from the room because the room has been deleted. Will be the last message before server-side websocket disconnection.

Fields

Field Type Always Description
message enum yes Is "room_deleted"

Error

Received when something went wrong.

Fields

Field Type Always Description
message enum yes Is "error"
text enum yes arbitrary error text
Example
{
    "message": "error",
    "text": "something happened"
}