Cal.com 应用商店之 Salesroom 集成:面向销售场景的实时 AI 视频会议应用接入指南
2026/9/10 3:58:30 网站建设 项目流程

Cal.com 应用商店之 Salesroom 集成:面向销售场景的实时 AI 视频会议应用接入指南

【免费下载链接】cal.diyScheduling infrastructure for absolutely everyone.项目地址: https://gitcode.com/GitHub_Trending/ca/cal.diy

Salesroom 是 Cal.com 应用商店(packages/app-store)中一个面向销售场景的实时 AI 视频会议应用,它作为一个"静态链接式"(static link)的视频会议地点类型接入预约流程,让会议组织者在创建事件类型时直接填写自己的https://user.sr.chat个人链接,参会者即可通过该链接加入线上会议。本文基于 Salesroom 的官方应用描述文档 与仓库中的 应用配置、安装逻辑 等源码,系统讲解 Salesroom 的应用定位、核心功能、在 Cal.com 中的接入原理与配置细节,帮助开发者理解一个视频会议类应用如何通过极简的声明式配置挂载到 Cal.com 的预约与会议体系中。

应用定位:面向销售团队的实时 AI 会议平台

Salesroom 是一个"把会议各个环节连接起来、推动交易向前发展"(a meeting platform that connects the dots and moves deals forward)的实时 AI 视频会议平台。其核心理念是:帮助销售人员在每一场线上会议中表现得更出色,提升买家参与度(buyer engagement),并在一次次通话中持续保持高效产出。用仓库中 config.json 的官方简介来说,它的价值主张是"解锁实时 AI,将销售水平提升到新高度"(Unlock real-time AI and take your sales game to the next level)。

该应用在 Cal.com 应用商店中被归类为conferencing(会议)类别,类型标识为salesroom_conferencing,模板为event-type-location-video-static——即"事件类型地点-视频-静态链接"模板。这意味着 Salesroom 不是像 Daily 那样由 Cal.com 自动生成会议 URL 的动态会议应用,而是要求会议组织者预先拥有一个固定的 Salesroom 个人房间链接,并在创建事件类型时手动填入。

对销售代表(Sales Reps)的价值

Salesroom 对一线销售代表的帮助聚焦在"提升买家参与度、消除多任务负担、让 CRM 更新自动化"三个方向,具体能力包括:

  • 实时洞察:在会议进行中实时获知哪些内容最能引起买家共鸣,并在买家注意力下降时收到提醒(receive real-time insights on what resonates most with buyers during meetings, and get notified when attention drops)。
  • 跨会议跟踪:在两次会议之间持续追踪买家的参与度,帮助销售把精力集中在最有成交潜力的线索上(keep track of buyer engagement between meetings to focus on the most promising leads)。
  • 实时辅导:在每场会议中提供个性化指导与演练建议,帮助销售化解客户异议、提升转化率(get personalized guidance and coaching in every meeting, overcoming objections and increasing conversion)。
  • 会后自动化:销售只需专注"卖"本身,由 Salesroom 自动完成 CRM 更新、生成视频精彩片段(video highlights)、并预先起草跟进邮件(pre-writes follow-up emails)。

对销售管理层(Sales Leadership)的价值

面向销售管理层,Salesroom 的卖点是"整合销售技术栈、提高采用率、让辅导进入自动驾驶模式":

  • 整合工具链:用一个统一的会议平台替换多个工具,从而节省成本、精简工作流(replace multiple tools with one unified meeting platform)。
  • 增强 HubSpot CRM:以准确的会议洞察增强 HubSpot CRM,改进销售报表(enhance HubSpot CRM with accurate meeting insights for improved reporting)。
  • 辅导自动化:通过智能提示卡(smart cue cards)实现辅导自动化,帮助销售代表化解异议、改善线上沟通技巧(automate coaching with smart cue cards)。
  • 洞察共享:通过免费的观察者许可(viewer licenses)和分享到 Slack 的片段功能,在公司内部共享有价值的客户对话洞察(share valuable customer conversation insights across the company with complimentary viewer licenses and easy snippet sharing to Slack)。

仓库中的模块结构

Salesroom 在仓库中是一个独立的 App 目录,位于 packages/app-store/salesroom,结构非常精简:

packages/app-store/salesroom/ ├── api/ │ ├── add.ts # 安装处理器(声明式安装) │ └── index.ts # API 出口 ├── static/ │ ├── 1.jpeg ~ 5.jpeg # 应用商店展示截图 │ ├── icon.svg # 应用图标 │ └── salesroom-demo.mp4 # 演示视频 ├── DESCRIPTION.md # 应用商店展示描述(本文主体) ├── config.json # 应用元数据与地点类型配置 ├── index.ts # 模块出口 └── package.json

其中index.ts只有一行export * as api from "./api";,用于向应用商店系统暴露该应用的 API;package.json 声明了包的内部名称为@calcom/salesroom,仅依赖@calcom/lib@calcom/types两个工作区包,体现了这类"静态链接型"应用几乎不依赖外部 SDK 的轻量特征。

config.json:应用元数据与地点类型的声明式配置

Salesroom 的核心配置集中在 config.json,它是 Cal.com 应用商店系统读取该应用元数据与地点行为的主要来源:

{ "/*": "Don't modify slug - If required, do it using cli edit command", "name": "Salesroom", "slug": "salesroom", "type": "salesroom_conferencing", "logo": "icon.svg", "url": "https://salesroom.com/", "variant": "conferencing", "categories": ["conferencing"], "publisher": "Cal.com, Inc.", "email": "support@cal.com", "appData": { "location": { "type": "integrations:{SLUG}_video", "label": "{TITLE}", "linkType": "static", "organizerInputPlaceholder": "https://user.sr.chat", "urlRegExp": "^https:\\/\\/.+\\.sr\\.chat" } }, "description": "Unlock real-time AI and take your sales game to the next level", "isTemplate": false, "__createdUsingCli": true, "__template": "event-type-location-video-static" }

各字段含义与作用如下:

  • name/slug:应用显示名与唯一标识符。配置文件顶部注释明确提示不要直接修改 slug,如需修改应通过 CLI 的编辑命令完成,因为 slug 会作为appId写入凭据表。
  • type:应用类型,值为salesroom_conferencing,最终会以integrations:salesroom_video的形式注册为事件地点类型(见下文appData.location.type{SLUG}替换逻辑)。
  • logo:指向static/icon.svg的应用图标。
  • url:应用官网。
  • variantcategories:均为conferencing,表明它属于会议类应用,会在应用商店的分类与安装筛选逻辑中生效。
  • publisher/email:发布方与支持邮箱(Cal.com, Inc. / support@cal.com)。
  • appData.location地点类型定义,这是它接入 Cal.com 预约体系的关键:
    • typeintegrations:{SLUG}_video,其中{SLUG}会被替换为salesroom,最终得到integrations:salesroom_video
    • label{TITLE},被替换为Salesroom
    • linkType: "static":静态链接模式,表示会议链接由组织者预先提供,而非系统动态生成。
    • organizerInputPlaceholderhttps://user.sr.chat,是组织者在创建事件类型时输入个人链接的占位示例。
    • urlRegExp^https:\/\/.+\..sr\.chat,用于校验组织者填写的链接是否合法(必须以https://开头,域名符合xxx.sr.chat模式)。
  • description:应用商店中的一句话简介。
  • isTemplate: false__template__createdUsingCli:标记该应用不是模板,并记录其是由 CLI 以event-type-location-video-static模板创建的。

接入原理:静态链接式会议地点在 Cal.com 中的工作方式

Salesroom 接入 Cal.com 的方式,可以从 locations.ts 的运行时逻辑中得到完整的印证。Cal.com 在启动时会遍历应用商店所有应用的元数据(appStoreMetadata),对每个含appData.location的应用执行模板变量替换(将{SLUG}{TITLE}替换为真实值),并基于linkType决定地点输入行为:

  • linkType === "static"时,系统将organizerInputType强制设为text(见 locations.ts),要求组织者在创建事件类型时必须手动输入会议链接;代码中还对以https?://开头的占位符做前导空格处理,以避免翻译流程误删协议前缀。
  • urlRegExp会在事件类型的链接校验中生效:locationsResolver使用 zod 对link字段做正则校验,若不匹配^https:\/\/.+\..sr\.chat,会抛出invalid_url_error_message并附带示例链接https://user.sr.chat(见 locations.ts)。这保证了最终落入数据库的会议链接格式可预期。
  • getLocationByType("integrations:salesroom_video")能根据地点类型字符串找到对应的地点定义,用于预约成功页、确认邮件等环节展示可读的会议信息(getSuccessPageLocationMessagegetHumanReadableLocationValue等均基于该机制工作)。

换言之,Salesroom 这类静态链接应用不需要任何会议 API 适配器,Cal.com 不会为它创建会议或生成 URL,会议链接的维护完全在 Salesroom 平台侧完成——这也是该应用模块如此精简的根本原因。

安装流程:声明式安装处理器

Salesroom 的安装逻辑位于 api/add.ts,采用了 Cal.com 的声明式安装处理器(AppDeclarativeHandler)模式:

import { createDefaultInstallation } from "@calcom/app-store/_utils/installation"; import type { AppDeclarativeHandler } from "@calcom/types/AppHandler"; import appConfig from "../config.json"; const handler: AppDeclarativeHandler = { appType: appConfig.type, variant: appConfig.variant, slug: appConfig.slug, supportsMultipleInstalls: false, handlerType: "add", createCredential: ({ appType, user, slug, teamId }) => createDefaultInstallation({ appType, user, slug, key: {}, teamId }), }; export default handler;

关键点解读:

  • appTypevariantslug全部从config.json读取,保证单一数据源。
  • supportsMultipleInstalls: false:每个用户/团队只能安装一次 Salesroom,避免重复安装产生歧义。
  • handlerType: "add":注册为安装(add)处理器。
  • createCredential调用 createDefaultInstallation:由于 Salesroom 无需 OAuth 授权或 API Key,直接以空key: {}Credential表中创建一条type: salesroom_conferencingappId: salesroom的凭据记录,并可挂到个人(userId)或团队(teamId)维度。

该 API 通过 apps.server.generated.ts 中的salesroom: import("./salesroom/api")注册进应用商店服务器端路由,用户在 Cal.com 应用商店点击"安装"时即触发上述流程;安装完成后,integrations:salesroom_video地点类型即出现在事件类型编辑器的会议地点选项中。

使用场景与操作流程

结合 Salesroom 的定位与 Cal.com 的预约流程,其典型使用步骤如下:

  1. 注册 Salesroom 账号并创建个人会议链接(形如https://user.sr.chat)。
  2. 在 Cal.com 应用商店安装 Salesroom:点击安装后,系统通过上述声明式处理器创建一条空凭据,无需 OAuth 跳转。
  3. 在事件类型(Event Type)中选择会议地点:将地点设置为Salesroom,填入个人sr.chat链接;若链接格式不符合urlRegExp,Cal.com 会在保存时提示错误。
  4. 发布预约链接:受邀者完成预约后,确认邮件与预约成功页会展示组织者提供的 Salesroom 会议链接。
  5. 会议进行中:销售代表借助 Salesroom 的实时 AI 洞察、注意力提醒与辅导提示卡推进会议;会后由 Salesroom 自动完成 CRM 更新、生成视频精彩片段并起草跟进邮件。

这一流程使 Salesroom 与 Cal.com 的预约、提醒、确认邮件体系无缝衔接,同时把"会议内体验"完整保留在 Salesroom 平台内。

小结

Salesroom 集成展示了 Cal.com 应用商店中"静态链接式视频会议应用"的典型接入范式:通过一份 config.json 声明地点类型(integrations:salesroom_video、静态链接、sr.chat域名校验),配以一个极简的声明式安装处理器 api/add.ts,即可让一个面向销售场景的 AI 会议平台完整融入预约体系,而无需实现任何视频 API 适配器。对开发者而言,若要为 Cal.com 新增同类"自带固定会议链接"的应用,Salesroom 的目录结构、配置字段与安装模式是最直接、最完整的参考模板(官方模板名event-type-location-video-static也印证了这一点)。

【免费下载链接】cal.diyScheduling infrastructure for absolutely everyone.项目地址: https://gitcode.com/GitHub_Trending/ca/cal.diy

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询