Conference Moderation & Waiting Room
Designate a host (and optional co-hosts) for any group call. Host and co-host can mute and remove participants, transfer the host role, and gate joiners through a waiting room. If the host leaves without transferring, the platform auto-promotes the longest-joined remaining participant.
Role model
- Host, the call initiator by default. Single host per call. Can transfer the role to another participant or appoint co-hosts.
- Co-host, appointed by the host. Inherits mute / remove / waiting-room admit-reject authority. Cannot transfer host or appoint other co-hosts.
- Participant, default. No moderation authority.
Enforcement
- Mute, signaling hint. The platform forwards the signal to the target; the target's SDK applies the mute locally. WebRTC media tracks cannot be muted from outside the producing client, so reliable mute requires the target's cooperation.
- Remove, server-enforced. The platform drops the target from the call session, emits
GROUP_CALL_PARTICIPANT_REMOVEDto the target, and emitsPARTICIPANT_LEFTto remaining participants. Subsequent SDP/ICE/screen-share routing skips the removed user. - Host transfer, server-validated. Only the current host can transfer, and the new host must be a current participant. Atomic compare-and-swap so two concurrent transfer requests cannot leave the call host-less.
- Host auto-promotion, automatic on host leave or disconnect. The longest-joined remaining participant is promoted; the platform broadcasts
GROUP_CALL_ROLE_CHANGEDso every client updates its UI in lockstep.
Waiting room flow
- A would-be joiner calls
requestWaitingRoomEntry(callId, groupId). - The platform adds them to the call's waiting room and pushes
GROUP_CALL_WAITING_ROOM_JOINEDto the host and every co-host. - Host or co-host calls
admitFromWaitingRoom(callId, groupId, userId)orrejectFromWaitingRoom(callId, groupId, userId). - On admit, the target receives
GROUP_CALL_WAITING_ROOM_ADMITTEDand then issues a normalGROUP_CALL_JOIN. On reject, the target receivesGROUP_CALL_WAITING_ROOM_REJECTEDand is dropped from the waiting room.
Example
// Host actions
client.transferHost(callId, groupId, 'alice');
client.appointCoHost(callId, groupId, 'bob');
client.muteParticipant(callId, groupId, 'eve'); // signaling hint
client.removeParticipant(callId, groupId, 'mallory'); // server-enforced
// Waiting room
client.requestWaitingRoomEntry(callId, groupId); // joiner side
client.admitFromWaitingRoom(callId, groupId, 'newbie');
client.rejectFromWaitingRoom(callId, groupId, 'troll');
client.onGroupCallEvent((evt) => {
if (evt.type === 'GROUP_CALL_ROLE_CHANGED') updateHostUi(evt.payload);
if (evt.type === 'GROUP_CALL_WAITING_ROOM_JOINED') showApprovalPrompt(evt.payload);
if (evt.type === 'GROUP_CALL_WAITING_ROOM_ADMITTED') joinTheCall(evt.callId, evt.groupId);
if (evt.type === 'GROUP_CALL_MUTE_PARTICIPANT') muteMyMicLocally();
if (evt.type === 'GROUP_CALL_PARTICIPANT_REMOVED') exitCallUi();
});Event reference
Availability. Moderation and the waiting room are plan-controlled. See the pricing page for tiers, or your DropOnAir dashboard Subscription page to see what's enabled on your app.
Requires SDK 0.7.0+ on JavaScript, Android, and iOS.