Skip to content

RoomServer

Warning

The RoomServer is currently in a beta state.

The OpenTalk RoomServer provides signaling for meetings. When it is enabled, the controller sends participants who are joining a meeting to the RoomServer. The controller’s built-in signaling is disabled in this case.

Configuration

The section in the configuration file is called roomserver.

Field Type Required Default value Description
url string yes - Base URL of the RoomServer that clients can reach (public URL).
api_key API key yes - API token used by the controller to authenticate against the RoomServer API.
asset_storage Asset storage yes - Storage backend for room assets (e.g., meeting reports).
websocket_rate_limit WebSocketRateLimit no see below Websocket rate limit settings for the RoomServer.
modules Module settings yes - Enabled RoomServer modules and their settings.

API key

Field Type Required Default value Description
id string yes - API key identifier.
secret string yes - API key secret.

Asset storage

The RoomServer stores assets such as meeting reports using one of the storage backends below.

Field Type Required Default value Description
type string yes - Storage backend type. Supported values: in_memory, controller.
url string depends - Base URL of the controller’s asset endpoint. Required when type = "controller".
secret string depends - Shared secret used to authenticate RoomServer asset requests. Required when type = "controller".

Asset storage types

  • in_memory: Assets are stored in memory by the RoomServer and are lost on restart or the room being closed. Suitable for testing only.
  • controller: Assets are stored via the controller’s asset endpoint. The RoomServer authenticates using the secret value.

Websocket Rate Limit

Rate limiting is enabled by default, to disable it, you have to set the disabled flag to true. A missing configuration will fall back to the default values. The implementation uses the token bucket algorithm. Each websocket message that is sent by a participant consumes one token. A websocket connection has a maximum amount of tokens that can be available at a time (the token bucket). Each second, the bucket is filled with a configured amount of tokens. The algorithm allows the configuration to have a reasonably small amount of messages per second, while still allowing 'bursts' of messages until the tokens in the bucket are fully consumed.

Field Type Required Default value Description
disabled bool no false WebSocket rate limiting is disabled when set to true.
tokens_per_second uint no 10 The amount of messages that can be consistently sent by participants.
token_bucket_size uint no 30 The maximum amount of tokens that can be held per websocket connection.

Modules

Module configuration is expressed under roomserver.modules.<module>. Only modules listed in the configuration are enabled.

automod

Enables auto moderation support. This module has no additional settings.

chat

Enables chat support.

rate_limit

Optional rate-limiting for chat messages uses a token-bucket algorithm.

Field Type Required Default value Description
rate_limit.tokens_per_second uint yes - Tokens added per second.
rate_limit.token_bucket_size uint yes - Maximum number of tokens in the bucket.
rate_limit.slow_down_threshold float yes - Proportion (0–1) of the limit at which clients receive an error message asking them to slow down.

e2ee

Enables end-to-end encryption support. This module has no additional settings.

echo

Enables the echo module. This module has no additional settings.

Enables legal vote support. This module has no additional settings.

livekit

LiveKit signaling configuration for the RoomServer.

Field Type Required Default value Description
service_url string yes - LiveKit URL reachable by the RoomServer.
public_url string yes - LiveKit URL reachable by clients.
api_key string yes - LiveKit API key used by the RoomServer.
api_secret string yes - LiveKit API secret used by the RoomServer.

meeting_notes

Enables the meeting notes integration (Etherpad).

Field Type Required Default value Description
base_url string yes - Etherpad base URL.
api_key string yes - Etherpad API key.

meeting_report

Enables meeting report generation support. This module has no additional settings.

moderation

Enables moderation support. This module has no additional settings.

polls

Enables polls support. This module has no additional settings.

raise_hands

Enables hand raise support. This module has no additional settings.

shared_folder

Shared folder integration. This module has no additional settings.

subroom_audio

Enables subroom audio support. This module has no additional settings.

timer

Enables timer support. This module has no additional settings.

training_participation_report

Enables training participation report support. This module has no additional settings.

whiteboard

Enables the whiteboard integration (Spacedeck).

Field Type Required Default value Description
base_url string yes - Spacedeck base URL.
api_key string yes - Spacedeck API key.

Examples

Minimal RoomServer configuration

[roomserver]
url = "http://localhost:11333"
api_key = { id = "controller", secret = "secret" }

[roomserver.asset_storage]
type = "in_memory"

[roomserver.modules]

Controller-backed asset storage with modules

[roomserver]
url = "https://roomserver.example.com"
api_key = { id = "controller", secret = "secret" }

[roomserver.asset_storage]
type = "controller"
url = "https://controller.example.com"
secret = "secret"

[roomserver.modules.chat]
[roomserver.modules.chat.rate_limit]
tokens_per_second = 3
token_bucket_size = 10
slow_down_threshold = 0.8

[roomserver.modules.e2ee]

[roomserver.modules.livekit]
api_key = "devkey"
api_secret = "secret"
public_url = "https://livekit.example.com"
service_url = "https://livekit.internal.example.com"

[roomserver.modules.echo]
[roomserver.modules.polls]
[roomserver.modules.timer]

[roomserver.modules.meeting_notes]
api_key = "secret"
base_url = "https://etherpad.example.com"