Skip to content
v1
文档/Browser JS SDK/开发指南

@beeworks/imsdk-jitsi-adapter


@beeworks/imsdk-jitsi-adapter

浏览器端 Jitsi Meet External API 适配器。它把 @beeworks/imsdk 的会议接口与 Jitsi Web 会议连接起来,但不会把 Jitsi、DOM 或 iframe 依赖带入核心 SDK。

ts
import * as imsdk from '@beeworks/imsdk';
import { createJitsiAdapter } from '@beeworks/imsdk-jitsi-adapter';

const adapter = createJitsiAdapter({ meetingApi: imsdk });
const session = await adapter.join({
    meetingNo: 123456789, // 也可传入 '123456789'
    parentNode: document.querySelector('#meeting')!,
    enableInviteRequest: true,
    customeInviteDomain: 'https://workplus-meet.workplus.io/web/#/meetLink?no=%s',
});

session.on('joined', () => console.log('joined'));
session.on('inviteRequested', ({ meetingNo }) => {
  // 1. 宿主应用打开联系人选择器
  // 2. 通过 IM 向选中的用户发送会议邀请消息
  // 3. 被邀请用户收到消息后调用 joinMeet(meetingNo),再进入 Jitsi
  console.log('invite requested', meetingNo);
});
await session.leave();

start() 会先调用 startMeetjoin() 会先调用 joinMeetmount() 只获取新鲜的 Jitsi 参数并挂载会议。Jitsi External API 从服务端返回的 serverUrl 动态加载,JWT 不会被记录或持久化。

会话事件中,left 表示当前用户离开 Jitsi,会话最多触发一次;显式调用 session.leave() 会在发出 hangup 后立即派发一次 left,随后销毁会话。 readyToClose 只用于适配器内部完成销毁,不代表服务端会议状态结束。服务端会议 结束仍应监听核心 SDK 的 MEETING_STATE_CHANGED(操作为 ENDCANCEL)。

会话提供 rolemoderatorparticipantunknown)和 isModerator,由 Jitsi 的 participantRoleChanged 更新。leave() 只让当前用户离开;end() 请求 结束整场会议,已确认是普通参与者时会返回 NOT_MODERATOR,角色未知时交由 Jitsi 服务端做最终权限校验。

Jitsi 的 micErrorcameraError 会分别映射为 microphoneErrorcameraError,同时保留通用 error 事件。错误消息不会包含 JWT 或完整 URL; 错误码会尽力归类为 *_PERMISSION_DENIED*_UNAVAILABLE*_ERROR;具体的 浏览器权限、设备占用和服务端策略原因以事件中的 error.cause 为诊断依据,业务层 不应直接向用户展示其中的原始内容。

enableInviteRequest 默认为 true,Adapter 会在 Jitsi 配置中开启定制的 externalInvitation 模式,并把每次邀请按钮点击转换为当前会话的 inviteRequested 事件。事件只表示“请求打开邀请流程”,载荷仅包含规范化后的 meetingNo;Adapter 不会弹出联系人选择器、查询成员、发送会议邀请 IM 或调用 会议邀请 HTTP API,这些逻辑由宿主应用负责。宿主应用发送 IM 后,被邀请端应先调用 joinMeet(meetingNo) 完成会议业务加入,再使用 Adapter 进入 Jitsi。该选项默认为 true,与 pc-xx 的定制 Jitsi 行为一致;如需保留 Jitsi 自带的邀请弹窗,可显式传入 enableInviteRequest: false。仍可通过 configOverwrite 配置其他 Jitsi 定制项。

customeInviteDomainexternalInvitation 是两个独立的 Jitsi 定制配置:前者是 Jitsi 默认分享内容使用的邀请链接模板(字段名沿用 pc-xx 的历史拼写,%s 代表会议号), 后者才是将“分享会议”和“邀请其他人”按钮点击转成 inviteRequested 事件的开关。 如果 /meetings/{meetingNo}/sdk 已返回该字段,Adapter 会自动透传;调用方也可在 挂载选项中覆盖它,或继续使用 configOverwrite.customeInviteDomain