Skip to content

SharedActivity

Shared activity state for multi-user sessions (SharePlay, WebSocket, etc.)

Always present on experience.sharedActivity. When no session is active, isActive and isOwner return false, participantCount returns 0.

Example:

javascript
if (experience.sharedActivity.isActive && experience.sharedActivity.isOwner) {
    // Only the owner connects to external services
    openai.connect();
}

experience.sharedActivity.onOwnershipChanged = function(isOwner) {
    if (isOwner) {
        openai.connect();
    } else {
        openai.disconnect();
    }
};

Properties

isActive

  • Type: boolean
  • Whether a shared activity session is currently active

isOwner

  • Type: boolean
  • Whether the local participant is the session owner (presenter)

onMessage

  • Type: any
  • Called when a script message is received from another participant

Example:

javascript
experience.sharedActivity.onMessage = function(data) {
    console.log('Received:', data.type);
};

onOwnershipChanged

  • Type: any
  • Called when session ownership changes (session start, transfer, owner leaves, session end)

Example:

javascript
experience.sharedActivity.onOwnershipChanged = function(isOwner) {
    if (isOwner) { startAI(); } else { stopAI(); }
};

participantCount

  • Type: number
  • Number of remote participants (excludes local participant)

Methods

send()

javascript
send(data: any): true

Send data to all participants (reliable delivery).

object or array; primitives are rejected).

per-message cap, and enqueued for transmission. false on any validation failure – check the console for the specific reason. Existing callers that ignore the return value continue to work.

Example:

javascript
experience.sharedActivity.send({ type: 'orb_state', state: 'speaking' });

Parameters:

  • data (any) - JSON-serializable data to send (must be a plain

Returns: true

sendFrequent()

javascript
sendFrequent(data: any): true

Send data to all participants (unreliable delivery, suitable for high-frequency updates).

for the full validation contract.

Example:

javascript
experience.sharedActivity.sendFrequent({ type: 'audio_level', level: 0.7 });

Parameters:

  • data (any) - JSON-serializable data to send.

Returns: true