浏览 SDKs · WASM
SDKsWASM

发送自定义信令

在通话房间中发送和接收自定义信令。

复制

signalingSendCustomSignal() 用于向指定通话房间发送轻量级业务协商数据,例如举手、切换布局提示或业务侧的状态同步。它不是聊天消息接口,也不能替代媒体引擎的数据通道。

发送信令

customInfo 是字符串。需要传递结构化数据时,先定义稳定的数据格式并序列化为 JSON。

const signal = {
  version: 1,
  eventID: crypto.randomUUID(),
  type: 'hand-raised',
  userID: currentUserID,
  sentAt: Date.now(),
};

await openimsdk.signalingSendCustomSignal({
  roomID,
  customInfo: JSON.stringify(signal),
});

Promise 成功表示 OpenIMServer 已接受本次自定义信令发送,不等于其他参与者已经处理该数据。自定义信令应保持精简,并包含版本和业务幂等 ID,以便新旧客户端兼容并避免重复应用。大文件、聊天记录、长期状态和敏感凭据不应放入 customInfo

接收信令

使用 CbEvents.OnReceiveCustomSignal 接收房间内的自定义信令。事件 data 提供 roomID 和字符串 customInfo;应用应先校验房间和自有业务协议,再更新界面。

import { CbEvents } from '@openim/wasm-client-sdk';

function handleCustomSignal({ data }) {
  try {
    const signal = parseAndValidateCallSignal(data.customInfo);
    if (data.roomID !== activeRoomID) return;
    if (hasAppliedSignal(data.roomID, signal.eventID)) return;
    applyCallSignal(signal);
  } catch (error) {
    console.warn('无法解析通话自定义信令', { error });
  }
}

openimsdk.on(CbEvents.OnReceiveCustomSignal, handleCustomSignal);

function removeCustomSignalListener() {
  openimsdk.off(CbEvents.OnReceiveCustomSignal, handleCustomSignal);
}

parseAndValidateCallSignal() 应检查 JSON 结构、协议版本、eventIDtype 和业务字段,再返回已验证的应用内对象。本页是该事件的完整监听示例归属页。按 roomID:eventID 幂等处理业务信令,参与者状态还需结合协议中的用户 ID;不要依赖事件顺序。离开通话页、退出登录或切换账号时调用 removeCustomSignalListener()

不要信任客户端自定义信令来授予主持人、付费或隐私权限。需要权威校验的状态应由可信后端保存和判断。连接恢复后,通过房间查询或业务后端校准长期状态,不要把自定义信令当作可重放的权威记录。