cal.diy 集成 Discord:静态会议链接型应用从配置到代码的完整拆解 后端前端企业应用【免费下载链接】cal.diyScheduling infrastructure for absolutely everyone.项目地址https://gitcode.com/GitHub_Trending/ca/cal.diy点击查看免费下载本指南以 cal.diyCal.com 开源调度平台应用商店中的 Discord 集成为主线讲解静态链接型会议应用Static Link Conferencing App的标准实现方式如何通过DESCRIPTION.md声明应用介绍与展示截图、如何在config.json中定义可被调度系统消费的会议地点Location类型以及应用商店如何把这些文件渲染成可安装、可配置的完整应用页面。读完本文你将掌握在 cal.diy 中新增一个粘贴固定链接即可开会类应用如 Discord、Skype、FaceTime所需的最小文件结构与配置要点。一、认识 Discord 集成的文件骨架在 cal.diy 中每个应用商店集成都位于 packages/app-store 下的独立目录中。Discord 集成目录packages/app-store/discord由以下文件构成文件职责DESCRIPTION.md应用详情页的 Markdown 主体与 YAML Frontmatter定义展示截图列表config.json应用元数据与会议地点Location声明是集成能否被调度引擎识别的关键index.ts包的入口导出 api 子模块api/add.ts声明式安装处理器负责创建 Credential 记录static/应用截图与 logo1.jpg~4.jpg、icon.svgpackage.json包清单声明依赖calcom/lib与calcom/types从源码结构看Discord 集成采用零服务端代码的声明式设计它没有lib/VideoApiAdapter.ts、lib/CalendarService.ts之类的运行时适配器也不需要 OAuth 回调本质上只做两件事——把 Discord 邀请链接作为一种静态会议地点注入事件类型EventType并在用户安装时落一条凭证记录。二、DESCRIPTION.md应用详情页的内容主体仓库中的 DESCRIPTION.md 是每个应用商店详情页的内容源其结构分为 YAML Frontmatter 与正文两部分--- items: - 1.jpg - 2.jpg - 3.jpg - 4.jpg --- {DESCRIPTION}2.1 Frontmatter 的 items 字段items列表声明应用详情页要展示的截图相对文件名。它在构建后由 getStaticProps.ts 解析为绝对静态资源路径源码通过 getAppAssetFullPath.ts 将1.jpg转换为/app-store/discord/static/1.jpg这样的仓库内路径该函数支持绝对路径与 HTTP(S) 外链原样透传也支持对象形式的iframe项用于嵌入视频等但 Discord 仅使用了字符串截图项。2.2 {DESCRIPTION} 占位符的替换机制正文中的{DESCRIPTION}是占位符在页面渲染时会被替换为config.json中的description字段内容Discord 的描述为 Copy your server invite link and start scheduling calls in Discord! ...。替换逻辑位于 getStaticProps.tssource fs.readFileSync(postFilePath).toString(); source source.replace(/{DESCRIPTION}/g, appMeta.description);如果应用的DESCRIPTION.md缺失页面会回退为仅显示config.json中的description。也就是说应用作者可以先在 CLI 创建时填写一句话简介之后再回来用 Markdown 扩充详情页正文——这正是 app-store-cli 设计所预期的core.ts 在创建应用时会用description替换模板中的_DESCRIPTION_。2.3 详情页如何消费这些数据getStaticProps返回的source对象被 slug-view.tsx 消费source.data?.items作为descriptionItems传入应用卡片source.content经markdownToSafeHTML消毒后通过dangerouslySetInnerHTML渲染。在 AppPage.tsx 中截图以横向滚动画廊snap-x 布局展示与安装按钮、分类标签等一起构成应用商店的安装页。三、config.json静态链接型会议地点的核心声明config.json 是 Discord 集成的元数据中枢其关键字段解析如下字段值说明nameDiscord应用展示名slugdiscord应用唯一标识注释明确要求不要随意修改改动需走 CLItypediscord_video内部类型标识同时作为 Credential 的typevariantconferencing应用变体用于分类展示categories[conferencing]应用商店分类publisher/emailCal.com, Inc. / supportcal.com发布者信息isOAuthfalse非 OAuth 应用__templateevent-type-location-video-static声明其源自静态链接视频地点模板3.1 appData.location把 Discord 变成一种会议地点config.json中最核心的是appData.location块它定义了一种全新的会议地点Location类型appData: { location: { type: integrations:discord_video, label: Discord, linkType: static, organizerInputPlaceholder: https://discord.gg/420gg69, urlRegExp: ^http(s)?:\\/\\/(www\\.)?discord\\.(gg|com)\\/[a-zA-Z0-9] } }typeintegrations:{slug}_video模板变量替换后的结果是全局唯一的 Location 类型标识预约事件将把此值写入location字段linkType: static表示该地点需要一个由组织者手工粘贴的固定链接区别于动态生成会议链接的类型organizerInputPlaceholder组织者在事件配置界面填写链接时的输入框占位提示urlRegExp链接合法性校验的正则Discord 限定为discord.gg或discord.com下的短路径。这套appData.location结构不是随意的 JSON而是被 AppMetaSchema.ts 严格约束的linkType只能取static | dynamicurlRegExp与organizerInputPlaceholder为可选字符串另有organizerInputTypetext | phone、messageForOrganizer等可选字段。所有应用商店应用的config.json都会在构建时经AppMetaSchema.parse校验见 build.ts配置非法会直接抛出构建错误。3.2 与静态链接模板的对照Discord 集成并非从零手写而是基于官方模板 templates/event-type-location-video-static/config.json 生成两者variant均为conferencing、linkType均为static仅占位符示例不同模板用https://video.app/mylink。换言之Discord 是静态链接视频地点模板的一个真实落地实例它没有任何自有服务端逻辑。四、运行时静态链接如何被调度系统消费4.1 Location 注册与模板变量替换config.json中appData.location里的{SLUG}、{TITLE}模板变量会在运行时被替换为真实值。核心逻辑在 locations.ts遍历 location 对象的所有字符串值执行value.replace(/{SLUG}/g, meta.slug).replace(/{TITLE}/g, meta.name)随后为静态链接类型强制设置organizerInputType text并针对以https?://开头的占位符自动补一个前导空格以规避翻译层吞掉协议前缀的问题。替换完成后Discord 的 Location 会被合并进全局的locations数组locations.ts从而出现在组织者编辑事件类型时的地点下拉选项中。该列表通过 tRPC 接口viewer.apps.locationOptions暴露给前端locationOptions.handler.ts前端 EditLocationDialog.tsx 在表单校验时使用urlRegExp正则校验用户粘贴的链接不合法时提示Invalid URL for Discord. Sample URL: ...。4.2 链接校验的双重防线urlRegExp不止在事件配置页生效还用于设置默认会议应用链接的场景。在 AppSetDefaultLinkDialog.tsx 中用户为默认会议应用设置链接时同样使用new RegExp(urlRegExp)做 zod 正则校验失败则提示Invalid App Link Format。可以看出正则校验贯穿事件配置与默认应用链接两处入口保证进入调度系统的 Discord 链接始终符合discord.gg/discord.com的格式。4.3 安装流程声明式 Credential 创建用户点击安装后走的是 api/add.ts 中的声明式处理器const handler: AppDeclarativeHandler { appType: appConfig.type, // discord_video variant: appConfig.variant, // conferencing slug: appConfig.slug, // discord supportsMultipleInstalls: false, handlerType: add, createCredential: ({ appType, user, slug, teamId }) createDefaultInstallation({ appType, user: user, slug, key: {}, teamId }), };该处理器调用 installation.ts 中的createDefaultInstallation直接以空key{}写入prisma.credential表type为discord_video、appId为discord。由于 Discord 集成不需要任何密钥或令牌supportsMultipleInstalls: false意味着一个账号只需一条凭证记录。这些add处理器会被 build.ts 汇总进apiHandlers导出供安装接口动态加载。4.4 预约时如何产生会议链接在预约执行阶段静态链接不需要任何 API 适配器组织者配置事件时填写的 Discord 链接会直接作为事件的地点信息参与者在预订页看到该链接并点击进入语音/视频频道。这一行为在 EventManager.ts 的注释中得到印证——静态链接不会发送类型而是直接发送 URL。这正是静态链接型会议应用与动态创建会议类应用如 Zoom、Google Meet它们需要lib/VideoApiAdapter.ts调用厂商 API的本质区别。五、如何在自己的 cal.diy 中启用与验证确认应用可用应用商店页面由 getStaticProps.ts 驱动它会检查数据库App表中该 slug 是否存在且enabled为真非生产环境下被禁用的应用仍会显示调试提示生产环境则返回 404。本地开发如果要在本地复现可通过yarn app-store:build --watch让构建脚本监视应用目录build.tsconfig.json变更会触发生成文件重写。参照模板新增类似应用若想接入另一个粘贴链接开会的服务如 Skype、FaceTime、Whereby 等可复制 event-type-location-video-static 模板改写config.json中的name/slug/type、organizerInputPlaceholder与urlRegExp并在DESCRIPTION.md中放上该服务对应的截图。体验入口在应用商店页面对 Discord 集成点击安装后前往事件类型 → 地点即可看到 Discord 选项并粘贴discord.gg邀请链接完成后的链接将出现在预约页。六、小结Discord 集成是 cal.diy 应用商店中静态链接型会议应用的最小可运行范本DESCRIPTION.md负责详情页内容与截图config.json的appData.location把 Discord 声明为一种经过正则校验的静态会议地点api/add.ts用声明式处理器完成零密钥安装运行时则由 locations.ts 统一注册并在事件配置与预约流程中消费。理解这四层之后你就能举一反三在 cal.diy 中快速搭建同类链接即会议的集成。赞分享后端前端企业应用【免费下载链接】cal.diyScheduling infrastructure for absolutely everyone.项目地址https://gitcode.com/GitHub_Trending/ca/cal.diy点击查看免费下载相关推荐cal.diy 集成 8x8 视频会议静态链接型 Conferencing App 的 DESCRIPTION 与源码级实现解析cal.diy 集成 8x8 视频会议静态链接型 Conferencing App 的 DESCRIPTION 与源码级实现解析 本篇技术指南以 packag后端前端企业应用cal.diy 应用商店视频会议集成实战以 Sirius Video 静态链接应用为例cal.diy 应用商店视频会议集成实战以 Sirius Video 静态链接应用为例 导读 本文围绕 packages/app store/sirius_v后端前端企业应用在 cal.com 中集成 Roam 会议应用从安装机制到静态会议链接的源码级解析在 cal.com 中集成 Roam 会议应用从安装机制到静态会议链接的源码级解析 Roam 是一款面向企业的全公司会议中心HQ产品其核心理念是让公司通后端前端企业应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考