如何构建预约应用:时段、可用性、提醒与定金
要构建一个预约应用,需要四样东西协同工作:可预约项目的列表(服务、房间、员工)、每个项目何时可用的规则、只提供真正空闲时段的预约流程,以及商家管理收到预约的私有视图。AI 应用构建器能根据一段简短的描述在几分钟内生成可用的第一版;真正的工作在于确定规则(时段长度、缓冲时间、取消政策、时区),并测试重复预订是否真的不可能发生。
先决定“预约”对你意味着什么
预约应用表面上看起来很相似,但底层差异很大。先回答以下问题:
- 预订的是什么? 一项服务(理发)、一个人(家教)、一种资源(会议室、球场、货车),还是某场活动中的一个名额(12 人的瑜伽课)。
- 需要多长时间? 每项服务固定时长,还是由客户选择?
- 由谁提供? 一个人、多名员工各自有工作时间,还是没有具体的人(例如房间)?
- 预约之后会发生什么? 即时确认,还是由店主批准的申请?
- 是否涉及金钱? 免费、到店付款、预付定金,还是全额预付?
“客户申请一个时间,店主通过邮件确认”远比“即时预约、对接三位员工的日历并收取定金”简单得多。两者都成立,选择你第一版真正需要的那一种即可。
应用需要什么
数据
| 数据表 | 关键字段 |
|---|---|
| 服务 | 名称、时长、价格、结束后的缓冲时间、是否启用 |
| 员工或资源 | 名称、提供哪些服务 |
| 可用时间 | 每位员工每周的工作时间,以及例外情况(假期、临时关闭) |
| 预约 | 服务、员工、开始时间、结束时间、客户信息、状态(待确认、已确认、已取消)、付款状态 |
| 客户 | 姓名、邮箱、电话、备注;起初可以不设,直接存在预约记录中 |
在每条预约上保存结束时间,而不只是开始时间,会让重叠检查简单得多。
页面
- **公开页面:**服务列表、时段选择器、预约表单、确认页面,以及取消或改期链接。
- **私有页面(店主或员工):**当天日程、即将到来的预约、锁定时间(如请假)的功能,以及服务和营业时间的设置。
权限
客户只应看到空闲或已占用的时段,永远看不到其他客户的姓名。员工可能只能看到自己的日程,店主则能看到全部。把这一点写清楚,因为它决定了你是否需要登录和角色。我们的为应用添加登录指南介绍了相关选项。
难点及处理方法
重复预订
经典的错误是:两个人同时打开页面,都看到 10:00 空闲,然后都预订了它。修复方法是在保存预约时于服务器上再次检查,如果存在任何重叠就拒绝。请明确提出这项要求:
保存预约时,在服务器上再次检查同一员工是否已有重叠的已确认或待确认预约(包括缓冲时间)。如果有,就拒绝预约,并显示“该时间刚刚被预订,请选择其他时间”。
然后用两个浏览器窗口进行测试。
时区
将每个时间以 UTC 存储,显示时再转换。决定预约页面显示谁的时区:对于线下服务通常是商家的时区,对于线上通话通常是客户的时区,并在页面上加以标注。测试跨越夏令时切换日期的预约。
缓冲时间、提前量与限制
需要预先决定的常见规则包括:预约之间的缓冲时间、最短提前量(“提前 2 小时以内不接受预约”)、最远可提前多久预约,以及每日上限。每项规则在提示词中只需一句话;如果省略,AI 就会替你选择默认值。
取消与爽约
为每条确认信息提供一个带唯一令牌的取消链接,这样客户无需账户即可取消。决定你的取消时限,以及定金是否可退,并在付款前展示该政策。
提醒
提醒邮件或短信需要一个能按计划运行的东西(例如“每 15 分钟检查一次,为 24 小时后开始的预约发送提醒”)。请确认你的构建器和托管平台如何处理定时任务。如果不支持,可以使用外部调度器,定时调用应用中的一个端点;或者在确认邮件中附上日历邀请,让客户自己的日历来提醒他们。关于邮件服务商一侧,请参见如何从应用发送邮件。
定金与付款
Stripe 的常见模式如下:
- 客户选择时段;应用创建一条待确认的预约,在短时间内(例如 15 分钟)为该时段保留名额。
- 应用把客户引导到 Stripe Checkout 页面支付定金。
- 付款成功后,Stripe 通过 webhook 通知你的应用;预约变为已确认。
- 如果未在规定时间内付款,待确认预约失效,时段重新开放。
Stripe 的标准费率为每笔成功的刷卡付款收取一定百分比加固定手续费,没有月费(截至 2026 年 9 月);费率因国家和地区而异,请查看 Stripe 定价页面了解你所在地区的情况。在一切运行正常之前,请使用测试模式和测试卡。我们的添加付款指南提供了分步说明。
一条有效的首条提示
为 Northside Barbers 构建一个预约应用。服务项目:理发(30 分钟,25 美元)、修剪胡须(15 分钟,12 美元)、理发 + 修胡须(45 分钟,32 美元)。两位理发师 Sam 和 Ali,每人周二至周六 9:00–18:00 工作。客户先选择服务,再选择理发师或“任意理发师”,然后只看到未来 14 天内空闲的 15 分钟开始时间,并填写姓名、电话和邮箱。将预约保存到数据库,每个预约之后设置 10 分钟缓冲,保存时重新检查可用性以防止重复预订。显示带取消链接的确认页面。店主有一个私有页面,列出当天和即将到来的预约,可以取消预约并锁定时间。时间使用店铺所在的本地时区。设计清爽,以手机优先。
这段提示写明了服务、员工、营业时间、规则以及店主的视图,也就是 AI 否则只能去猜测的全部内容。
构建步骤
- 先构建核心预约流程。 服务 → 时段 → 表单 → 保存预约 → 确认。在它能在手机上正常运行之前,不要做其他任何事情。
- 店主视图。 当天列表、即将到来的列表、取消,以及锁定时间。
- 保护店主页面。 在真实数据录入之前添加登录。
- 规则。 缓冲时间、提前预约期限、可预约的最远时间、假期。
- 邮件。 包含日历邀请和取消链接的确认邮件。
- 定金(如果需要),先在 Stripe 测试模式中完成。
- 测试边缘情况。 两个窗口同时预订同一时段、跨午夜的预约、夏令时切换日期,以及已取消的预约释放时段。
- 发布,然后在分享链接之前自己完成一次真实预约。
常见错误
- 只在浏览器中检查可用性。 界面看起来正确,却依然会重复预订。
- 存储本地时间却不带时区。 在时钟切换之前一切正常,之后就出错了。
- 在公开日历中显示客户姓名。 只应显示空闲或已占用。
- 第一天就构建员工排班、积分和短信功能。 先上线核心流程,再添加客户真正需要的功能。
- 店主无法锁定时间。 第一个病假日就会导致客户爽约。
何时 Calendly(或类似工具)是更好的选择
如果你是一个人,只需分享自己的通话时间,日程工具很难被超越。截至 2026 年 9 月,Calendly 的免费套餐包含一种活动类型、一个日历连接,以及带可自定义预约页面的一对一日程安排;付费套餐则增加更多活动类型和团队功能。这类工具开箱即可连接你现有的日历,而自定义应用则需要专门构建这一功能。
当你需要这些工具不支持的规则、多个可预约资源、全程使用自己的品牌、预约需要与其他数据(客户、订单、会员资格)关联,或者你打算向他人销售一款预约产品时,就自己构建。
使用 Mythex 构建
在 Mythex 中,你在聊天里描述预约应用,它在实时预览中构建出来;当预约需要保存时,它会添加一个 Postgres 数据库。文档中的预约页面用例建议先从预约表单和管理列表开始,然后再添加其余功能。请清楚哪些功能是内置的、哪些需要你自己接入:Mythex 没有内置的日历同步、短信提醒或定金产品。邮件通过你自己的服务商发送,定金通过你以项目密钥形式保存的 Stripe 密钥处理(Stripe 指南),而重复预订和时区规则则是你需要像上文那样明确指定并测试的内容。
/test 命令可以让代理在预览中点击完整的预约流程,并报告哪里出了问题。如需起始提示,可以参考理发店预约网站或会议预订模板,或浏览所有应用模板。
常见问题
预约应用需要哪些功能?
至少包括:带时长的服务列表、只显示空闲时段的方式、预约表单、预约确认,以及商家可以查看和管理预约的私有页面。提醒、定金和员工日历可以放在之后。
如何避免重复预订?
在保存预约时,于服务器上再次检查可用性,而不是只在页面加载时检查;如果该时段在此期间已被预订,就拒绝这次预约。可以在两个浏览器窗口中尝试预订同一时段来测试。
自己构建的预约应用可以收取定金吗?
可以。常见做法是把客户引导到 Stripe Checkout 页面支付定金,只有在付款成功后才确认预约。你需要自己的 Stripe 账户和密钥。
我应该自己构建预约应用,还是使用 Calendly?
如果只是一个人需要分享可预约的时间,且整个流程并不特殊,那么 Calendly 这类日程工具更快、运行成本也更低。当你需要自己的规则、多个可预约资源、全程使用你的品牌,或者预约需要与你保存的其他数据关联时,就自己构建。