cal.diy 集成 Jitsi Meet:免费开源视频会议的应用接入原理与配置指南
后端前端企业应用【免费下载链接】cal.diyScheduling infrastructure for absolutely everyone.项目地址https://gitcode.com/GitHub_Trending/ca/cal.diy点击查看免费下载导读Jitsi 是免费开源的视频会议软件支持 Web 与移动端用户可以自主发起通话、在自己的服务器上部署、并把它集成进自有应用。本指南以 cal.diyCal.com 开源调度平台中的应用商店模块 jitsivideo 为核心完整讲解 Jitsi Meet 作为视频会议应用的注册方式、安装流程、会议创建原理与可配置项。读完本文你将掌握如何在 cal.diy 中启用 Jitsi 视频会议、理解动态会议链接的生成机制并能通过两个配置键将会议托管到自建 Jitsi 服务器。一、Jitsi 应用在 cal.diy 中的定位关联文档 packages/app-store/jitsivideo/DESCRIPTION.md 以一句话概括了 Jitsi 的定位Jitsi is a free open-source video conferencing software for web and mobile. Make a call, launch on your own servers, integrate into your app, and more.这可以拆解为三个核心能力维度也正是它在 cal.diy 中的应用场景免登录发起通话无需复杂凭证安装后即可为每个预约动态生成会议链接可自托管launch on your own serversJitsi 允许部署在自有服务器上cal.diy 通过jitsiHost配置键对接任意 Jitsi 实例可集成进应用integrate into your appcal.diy 以 App Store 插件方式将其接入预约流程作为“会议地点”类型使用。同一目录下的 package.json 将应用包命名为calcom/jitsivideodescription 字段与文档完全一致说明该模块自始至终被当作一个独立的视频会议适配应用来维护。二、应用注册元数据如何定义集成类型应用商店中的每个应用都需要一份元数据声明Jitsi 的声明位于 packages/app-store/jitsivideo/_metadata.ts关键字段如下字段值含义nameJitsi Video应用显示名slugjitsi应用唯一标识也是数据库中App表的查询键typejitsi_video凭证Credential类型用于安装记录匹配variantconferencing应用分类变体归属“会议”类categories[conferencing]应用分类logoicon.svg应用图标位于 static/icon.svgappData.location{ linkType: dynamic, type: integrations:jitsi, label: Jitsi Video }位置类型声明concurrentMeetingstrue支持并发会议isOAuthfalse无需 OAuth 授权流程其中appData.location是本应用接入预约流程的关键type: integrations:jitsi定义了事件类型EventType中可选的会议地点类型linkType: dynamic表示该位置无需组织者手动填写链接会议链接由系统在创建预约时动态生成。在 packages/app-store/locations.ts 中应用商店会遍历所有应用元数据将带appData.location的应用注入到统一的位置类型集合locationsFromApps中并写入AppStoreLocationType映射。之后通过getLocationByType即可按integrations:jitsi找到该位置类型。值得一提的是这里的{SLUG}、{TITLE}模板变量会在运行时被替换为实际的应用 slug 与名称。三、安装流程无需密钥的静默安装与需要 OAuth 或 API Key 的应用不同Jitsi 使用公开的 meet.jit.si 服务时不需要任何凭证因此安装逻辑非常轻量实现在 packages/app-store/jitsivideo/api/add.ts该端点运行于/api/integrations/jitsivideo/add路由注册见 apps.server.generated.ts。安装流程分为四步登录校验请求必须携带有效会话否则返回401权限校验若附带teamId查询参数团队级安装会调用 throwIfNotHaveAdminAccessToTeam 校验当前用户是该团队管理员幂等检查按type: jitsi_video 安装对象userId或teamId在Credential表中查询是否已安装已安装则报错Already installed创建凭证记录向prisma.credential写入一条key: {}的空密钥记录appId: jitsi安装对象同样是用户或团队。安装成功后会302/返回 JSON 跳转到 getInstalledAppPath 计算的地址默认/apps/installed/conferencing?hljitsi用户随即能在“已安装应用”页面看到它。四、会议创建原理动态会议链接的生成Jitsi 视频应用的运行核心是 packages/app-store/jitsivideo/lib/VideoApiAdapter.ts 中的JitsiVideoApiAdapter它实现了 packages/types/VideoApiAdapter.d.ts 定义的视频适配器接口包含createMeeting、updateMeeting、deleteMeeting、getAvailability四个方法。4.1 createMeeting拼装会议地址createMeeting(eventData)是核心方法流程如下const appKeys await getAppKeysFromSlug(metadata.slug); // 读取 App 表中的 keys 配置 const meetingPattern (appKeys.jitsiPathPattern as string) || {uuid}; const hostUrl (appKeys.jitsiHost as string) || https://meet.jit.si/cal;读取配置通过 getAppKeysFromSlug 按slug: jitsi从prisma.app表读取keys字段JSON 对象会议路径模板默认值为{uuid}即用随机 UUID 作为会议 ID主机地址默认指向官方公共实例https://meet.jit.si/cal。4.2 模板变量替换规则会议 ID 支持丰富的模板变量用于生成可读性更好的会议名全部替换逻辑如下模板变量替换内容示例{uuid}随机 UUIDuuidv4()生成0f8b…{Title}事件类型标题eventData.title产品评审{Event Type Title}事件类型eventData.type30min{Scheduler}与会者姓名以-连接张三-李四{Organizer}组织者姓名organizer.name王五{Location}事件地点eventData.location会议室A{Team}团队名称team?.name研发组替换完成后还会执行最后一条规则将所有空格替换为短横线-保证生成的路径合法。随后将会议 ID 拼接到主机地址后并做encodeURIComponent编码得到最终会议 URLurl: ${hostUrl}/${encodeURIComponent(meetingID)}例如配置jitsiPathPattern: {Title}-{Scheduler}后一场“产品评审”会议会生成形如https://meet.jit.si/cal/%E4%BA%A7%E5%93%81%E8%AF%84%E5%AE%A1-%E5%BC%A0%E4%B8%89的链接。4.3 其他适配器方法updateMeeting从已有的预约引用PartialReference中直接还原会议 ID、密码与 URL用于预约改期场景deleteMeetingJitsi 没有服务端房间管理 API故为空实现getAvailability恒返回空数组表示 Jitsi 会议不占用可用性时段。4.4 适配器的注册与调度该适配器通过 lib/index.ts 导出并被 video.adapters.generated.ts 以动态导入方式注册到VideoApiAdapterMap。实际创建预约时getVideoAdapters 会根据用户凭证的type去掉下划线jitsi_video→jitsivideo找到对应适配器并实例化再调用createMeeting生成会议链接写入预约。五、可配置项对接自托管 Jitsi 服务器Jitsi 模块通过 packages/app-store/jitsivideo/zod.ts 声明了两个可选配置键schema 注册见 apps.keys-schemas.generated.ts配置键类型默认值作用jitsiHoststring可选https://meet.jit.si/cal指定 Jitsi 服务器主机地址jitsiPathPatternstring可选{uuid}会议路径房间名生成模板这两个键存放在数据库App表的keysJSON 字段中对应slug: jitsi。结合“launch on your own servers”的能力实际部署时的典型配置是{ jitsiHost: https://meet.example.com, jitsiPathPattern: {Title}-{uuid} }这样所有会议都会被导向自建的 Jitsi 实例会议链接既保留标题可读性又通过 UUID 保证唯一性避免房间名冲突。六、集成后的预约效果集成完成后用户创建事件类型Event Type时在“地点”选项中会出现Jitsi Video类型integrations:jitsi。由于linkType: dynamic组织者无需填写任何链接受邀者完成预约后会收到由createMeeting动态生成的 Jitsi 会议地址直接点击即可入会。整个过程无需 OAuth 授权、无需预置密钥是 cal.diy 应用商店中“零凭证、开箱即用”型视频会议方案的典型代表。小结定位Jitsi 是免费开源的 Web/移动端视频会议软件支持自托管与二次集成注册通过 _metadata.ts 声明integrations:jitsi动态位置类型安装通过 api/add.ts 完成用户级/团队级的幂等静默安装会议生成通过 VideoApiAdapter.ts 按模板变量动态生成会议链接配置jitsiHost与jitsiPathPattern两个键即可对接自托管 Jitsi 服务器。如需进一步探索可阅读同目录下的 DESCRIPTION.md、package.json 与 static/icon.svg以及应用商店基础设施 locations.ts 和 getVideoAdapters.ts。赞分享后端前端企业应用【免费下载链接】cal.diyScheduling infrastructure for absolutely everyone.项目地址https://gitcode.com/GitHub_Trending/ca/cal.diy点击查看免费下载相关推荐Jitsi Meet SDK 企业级视频会议集成实战指南Jitsi Meet SDK 是一个基于 WebRTC 技术的底层 JavaScript 视频 API允许开发者为 Web 应用添加完全自定义的视频会议体验。cal.diy 集成 Tandem 虚拟办公室视频会议应用接入指南与源码解析cal.diy 集成 Tandem 虚拟办公室视频会议应用接入指南与源码解析 本指南以开源调度平台 cal.diy 中 Tandem 应用集成模块 pack后端前端企业应用Jitsi Meet Electron开源视频会议的桌面利器Jitsi Meet Electron开源视频会议的桌面利器 项目介绍 Jitsi Meet Electron 是一款基于 Electron https://创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

AI Agent Harness Engineering 会发展出自我意识吗?从 TaoToken 统一 Key 通道看多模型编排的边界

AI Agent Harness Engineering 会发展出自我意识吗?从 TaoToken 统一 Key 通道看多模型编排的边界

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 13:22:55 阅读更多 →
斯坦福+英伟达联手开源 CLM-8B:Agent 决策不再逐字生成,9 倍延迟优势刷屏

斯坦福+英伟达联手开源 CLM-8B:Agent 决策不再逐字生成,9 倍延迟优势刷屏

斯坦福英伟达联手开源 CLM-8B:Agent 决策不再逐字生成,9 倍延迟优势刷屏 【免费下载链接】CLM-v0.1-8B 项目地址: https://ai.gitcode.com/hf_mirrors/Contrastive-LM/CLM-v0.1-8B 当所有大模型厂商都在卷"生成得更快、更长"时&#x…

2026/10/11 13:21:55 阅读更多 →
视频号视频下载工具,一键提取!【手机+电脑端】

视频号视频下载工具,一键提取!【手机+电脑端】

刷视频号时,总能刷到优质干货、治愈风景、实用教程视频,想保存收藏、二次剪辑做素材,无法直接保存本地,十分不方便。今天分享一款免费无广告、界面简洁、高清无水印的视频号视频提取神器,无需注册登录,手机…

2026/10/11 13:21:55 阅读更多 →

最新新闻

Python职位推荐系统实战:协同过滤与内容相似度融合

Python职位推荐系统实战:协同过滤与内容相似度融合

简介:这份资源是面向Python初学者与推荐算法入门者的职位推荐系统完整项目资料,围绕基于用户与物品的协同过滤思路,解决招聘场景下职位个性化匹配的实践问题。压缩包共79个文件,约942KB,以47个py源码文件为核心&#x…

2026/10/11 14:15:23 阅读更多 →
【计算机毕设精品】基于SpringBoot的智慧博物馆综合信息管理系统的设计与实现,附源码_增删改查_java项目_可完美运行部署_网站项目

【计算机毕设精品】基于SpringBoot的智慧博物馆综合信息管理系统的设计与实现,附源码_增删改查_java项目_可完美运行部署_网站项目

💖💖作者:计算机毕业设计杰瑞 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括…

2026/10/11 14:15:23 阅读更多 →
LangAlpha多模型适配指南:Claude、GPT、Kimi、本地模型如何自由切换

LangAlpha多模型适配指南:Claude、GPT、Kimi、本地模型如何自由切换

【免费下载链接】LangAlpha Claude Code for Financial Market 项目地址: https://gitcode.com/gh_mirrors/la/LangAlpha 点击查看 免费下载 LangAlpha 是一个面向金融市场的 AI 投研 Agent(Claude Code for Financial Market),内…

2026/10/11 14:15:23 阅读更多 →
C++超级玛丽源码解析:SDL2选型、碰撞检测与手感调校

C++超级玛丽源码解析:SDL2选型、碰撞检测与手感调校

简介:C版《超级玛丽》完整游戏源码,适合游戏开发初学者及对2D平台跳跃游戏实现感兴趣的读者。资源基于经典任天堂玩法重构,包含游戏主循环、马里奥角色与敌人对象、关卡地图数据、物理碰撞检测及图像音频加载等核心模块,可帮助学习…

2026/10/11 14:15:23 阅读更多 →
AnyPS5:将游戏主机能力封装为统一REST/WebSocket接口的自动化中间件

AnyPS5:将游戏主机能力封装为统一REST/WebSocket接口的自动化中间件

先回答两个问题:AnyPS5 到底是个什么东西,它又值不值得你花几分钟看看。简单说,它不是模拟器,也不是破解工具,而是一层把某款主流游戏主机(为了避免型号念起来太长,后文统一叫 A5)的…

2026/10/11 14:15:23 阅读更多 →
PS5外围能力开发指南:USB-C多模接口与AnyPS5工程实践

PS5外围能力开发指南:USB-C多模接口与AnyPS5工程实践

项目标题:“AnyPS5”——这个名称本身带有强烈的指向性与模糊性并存的特征。它不是官方命名,也不属于索尼公开产品线中的任何已知型号或代号;没有出现在PlayStation官网、开发者文档或正规硬件白皮书中。但正因如此,“AnyPS5”在中…

2026/10/11 14:14:22 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →