广播 API 允许用户向会议中的所有其他用户发送自定义消息。
会议对象上的 Participants 模块允许您通过信令通道向会议中的所有其他用户(或在连接会议的情况下向其他会议)广播消息。
| 参数 | 类型 | 描述 | 是否必填 |
|---|---|---|---|
type |
Exclude<string, 'spotlight'> |
用于区分不同类型广播的消息类型标识符。 | 是 |
payload |
BroadcastMessagePayload |
随消息发送的数据。键映射到布尔值、数字、字符串、Date 或 ActiveTab。 |
是 |
target |
BroadcastMessageTarget |
用于过滤接收消息的参与者或会议的可选目标过滤器。 | 否 |
- 如果省略 target,消息将广播给当前会议中的所有参与者,包括本地参与者。
- 如果提供了
target.participantIds,消息将仅发送给当前会议中的这些参与者。 - 如果提供了
target.presetNames,消息将发送给预设名称在列表中的所有参与者。 - 如果提供了
target.meetingIds,消息将广播给所有指定的会议(多会议广播)。
const participants = useRealtimeKitSelector((m) => m.participants);
participants.broadcastMessage(
type: Exclude<string, 'spotlight'>,
payload: BroadcastMessagePayload,
target?: BroadcastMessageTarget,
): Promise<void>type BroadcastMessagePayload = {
[key: string]: boolean | number | string | Date | ActiveTab;
};
type BroadcastMessageTarget =
| { participantIds: string[] }
| { presetNames: string[] }
| { meetingIds: string[] };| 参数 | 类型 | 描述 | 是否必填 |
|---|---|---|---|
type |
Exclude<string, 'spotlight'> |
用于区分不同类型广播的消息类型标识符。 | 是 |
payload |
BroadcastMessagePayload |
随消息发送的数据。键映射到布尔值、数字、字符串、Date 或 ActiveTab。 |
是 |
target |
BroadcastMessageTarget |
用于过滤接收消息的参与者或会议的可选目标过滤器。 | 否 |
- 如果省略 target,消息将广播给当前会议中的所有参与者,包括本地参与者。
- 如果提供了
target.participantIds,消息将仅发送给当前会议中的这些参与者。 - 如果提供了
target.presetNames,消息将发送给预设名称在列表中的所有参与者。 - 如果提供了
target.meetingIds,消息将广播给所有指定的会议(多会议广播)。
meeting.participants.broadcastMessage(
type: Exclude<string, 'spotlight'>,
payload: BroadcastMessagePayload,
target?: BroadcastMessageTarget,
): Promise<void>type BroadcastMessagePayload = {
[key: string]: boolean | number | string | Date | ActiveTab;
};
type BroadcastMessageTarget =
| { participantIds: string[] }
| { presetNames: string[] }
| { meetingIds: string[] };| 参数 | 类型 | 描述 | 是否必填 |
|---|---|---|---|
type |
Exclude<string, 'spotlight'> |
用于区分不同类型广播的消息类型标识符。 | 是 |
payload |
BroadcastMessagePayload |
随消息发送的数据。键映射到布尔值、数字、字符串、Date 或 ActiveTab。 |
是 |
target |
BroadcastMessageTarget |
用于过滤接收消息的参与者或会议的可选目标过滤器。 | 否 |
- 如果省略 target,消息将广播给当前会议中的所有参与者,包括本地参与者。
- 如果提供了
target.participantIds,消息将仅发送给当前会议中的这些参与者。 - 如果提供了
target.presetNames,消息将发送给预设名称在列表中的所有参与者。 - 如果提供了
target.meetingIds,消息将广播给所有指定的会议(多会议广播)。
meeting.participants.broadcastMessage(
type: Exclude<string, 'spotlight'>,
payload: BroadcastMessagePayload,
target?: BroadcastMessageTarget,
): Promise<void>type BroadcastMessagePayload = {
[key: string]: boolean | number | string | Date | ActiveTab;
};
type BroadcastMessageTarget =
| { participantIds: string[] }
| { presetNames: string[] }
| { meetingIds: string[] };使用 broadcastedMessage 事件监听通过 broadcastMessage 发送的消息,并在您的应用程序中进行处理。
const participants = useRealtimeKitSelector((m) => m.participants);
participants.on("broadcastedMessage", ({ type, payload, timestamp }) => {
// handle message
});meeting.participants.on(
"broadcastedMessage",
({ type, payload, timestamp }) => {
// handle message
},
);meeting.participants.on(
"broadcastedMessage",
({ type, payload, timestamp }) => {
// handle message
},
);- 该方法受到速率限制(服务端 + 客户端)以防止滥用。
- 已弃用(deprecated)模块中的默认客户端配置:每个周期(1 秒)最多调用 5 次。
- Participants 模块公开了
rateLimitConfig和updateRateLimits(maxInvocations, period)以在客户端进行调整,但可能仍适用服务端限制。 - 事件类型不能为
spotlight。此类型保留供 SDK 内部使用。
const participants = useRealtimeKitSelector((m) => m.participants);
await participants.broadcastMessage("HAND_RAISE", {
raised: true,
userId: meeting.self.userId,
sentAt: new Date(),
});
participants.on(
"broadcastedMessage",
({ type, payload, timestamp }) => {
if (type === "HAND_RAISE") {
// payload.raised, payload.userId, payload.sentAt
}
},
);await meeting.participants.broadcastMessage("HAND_RAISE", {
raised: true,
userId: meeting.self.userId,
sentAt: new Date(),
});
meeting.participants.on(
"broadcastedMessage",
({ type, payload, timestamp }) => {
if (type === "HAND_RAISE") {
// payload.raised, payload.userId, payload.sentAt
}
},
);await meeting.participants.broadcastMessage("HAND_RAISE", {
raised: true,
userId: meeting.self.userId,
sentAt: new Date(),
});
meeting.participants.on(
"broadcastedMessage",
({ type, payload, timestamp }) => {
if (type === "HAND_RAISE") {
// payload.raised, payload.userId, payload.sentAt
}
},
);只有具有这些 participantId 的参与者才会收到消息。
const participants = useRealtimeKitSelector((m) => m.participants);
await participants.broadcastMessage(
"PRIVATE_NOTE",
{ message: "You are on stage in 30 seconds" },
{
participantIds: ["peer-id-1", "peer-id-2"],
},
);await meeting.participants.broadcastMessage(
"PRIVATE_NOTE",
{ message: "You are on stage in 30 seconds" },
{
participantIds: ["peer-id-1", "peer-id-2"],
},
);await meeting.participants.broadcastMessage(
"PRIVATE_NOTE",
{ message: "You are on stage in 30 seconds" },
{
participantIds: ["peer-id-1", "peer-id-2"],
},
);预设名称为 speaker 的所有参与者都将收到消息。
const participants = useRealtimeKitSelector((m) => m.participants);
await participants.broadcastMessage(
"STAGE_INSTRUCTION",
{ text: "Prepare for Q&A" },
{
presetNames: ["speaker"],
},
);await meeting.participants.broadcastMessage(
"STAGE_INSTRUCTION",
{ text: "Prepare for Q&A" },
{
presetNames: ["speaker"],
},
);await meeting.participants.broadcastMessage(
"STAGE_INSTRUCTION",
{ text: "Prepare for Q&A" },
{
presetNames: ["speaker"],
},
);指定会议中的所有参与者都将收到消息。
const participants = useRealtimeKitSelector((m) => m.participants);
await participants.broadcastMessage(
"GLOBAL_ANNOUNCEMENT",
{ text: "The event will end in 5 minutes." },
{
meetingIds: ["meeting-1", "meeting-2"],
},
);await meeting.participants.broadcastMessage(
"GLOBAL_ANNOUNCEMENT",
{ text: "The event will end in 5 minutes." },
{
meetingIds: ["meeting-1", "meeting-2"],
},
);await meeting.participants.broadcastMessage(
"GLOBAL_ANNOUNCEMENT",
{ text: "The event will end in 5 minutes." },
{
meetingIds: ["meeting-1", "meeting-2"],
},
);