预约系统

一个基于Cloudflare Workers的预约系统,集成了Google日历和MCP服务器,提供多步骤预约流程、实时可用性检查和自动邮件确认功能。

  • by Konstrex
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 konstrex/booking-system-fixed

使用说明

预订系统(固定)

此存储库包含Andriana Delcheva预订系统的固定版本,解决了之前实现中的几个关键问题。该系统旨在在Cloudflare Workers上运行,并与谷歌日历和MCP服务器集成。

🛠️ 已修复问题

此实现解决了原始系统中存在的以下问题:

  1. 固定预订完成 -用户现在可以成功选择日期并完成预订。
  2. 固定确认电子邮件 -成功预订后,现在会发送电子邮件确认。
  3. 修复了谷歌日历集成问题 -预订现在可以在谷歌日历中创建活动。
  4. 已实施可用性检查 -在确认预订之前,系统会检查可用的插槽。
  5. 已实现MCP服务器集成 -后端处理使用MCP服务器来增强功能。

🌟 主要特点

  • 多步骤预订流程 -直观的分步预订流程,提供更好的用户体验
  • 实时可用性检查 -检查Google日历是否存在冲突
  • 自动电子邮件确认 -向客户发送详细信息
  • 谷歌日历集成 -创建包含服务详细信息的日历事件
  • MCP服务器集成 -跟踪预订事件并提供增强的处理
  • 全面的错误处理 -为用户提供有意义的反馈
  • 响应式设计 -适用于移动和桌面设备

🚀 部署

先决条件

  • Cloudflare Workers帐户
  • 启用日历API的谷歌云项目
  • 可以访问日历的Google服务帐户
  • 用于后端处理的MCP服务器

安装说明

  1. 克隆存储库
git clone https://github.com/Konstrex/booking-system-fixed.git
cd booking-system-fixed
  1. 安装依赖项
npm install
  1. 配置环境变量

需要在wrangler.toml文件中或使用Cloudflare的机密设置以下环境变量:

  • 谷歌日历集成

    • GOOGLE_CLIENT_EMAIL -已配置为“andrianadelcheva@totemic-point-453101-s4.iam.gserviceaccount.com"
    • GOOGLE_PRIVATE_KEY -您的服务帐户私钥
    • GOOGLE_CALENDAR_ID -要使用的日历ID
  • 电子邮件配置

    • EMAIL_FROM -用于发送确认的电子邮件地址
    • BUSINESS_NAME -企业名称(已设置为“Andriana Delcheva”)
    • BUSINESS_EMAIL -用于回复的商务电子邮件
  • MCP服务器集成

    • MCP_ENABLED -设置为“true”以启用MCP集成
    • MCP_SERVER_URL -MCP服务器的URL
    • MCP_API_KEY -用于与MCP服务器进行身份验证的API密钥
  1. 使用牧马人设置秘密

对于敏感信息,请使用Wrangler的秘密管理:

wrangler secret put GOOGLE_PRIVATE_KEY
wrangler secret put GOOGLE_CALENDAR_ID
wrangler secret put MCP_SERVER_URL
wrangler secret put MCP_API_KEY
  1. 部署到Cloudflare Workers
npm run deploy:prod

📝 谷歌日历设置

为确保Google日历集成正常工作:

  1. 通过将服务帐户添加到您的Google日历,确保其具有适当的权限:

    • 打开谷歌日历
    • 转到日历设置
    • 在“与特定人员共享”下,添加服务帐户电子邮件: andrianadelcheva@totemic-point-453101-s4.iam.gserviceaccount.com
    • 将权限设置为“进行更改和管理共享”
  2. JWT身份验证配置为使用正确的token_uri: https://oauth2.googleapis.com/token

📧 电子邮件配置

该系统使用MCP服务器来处理电子邮件通知。成功预订后,会发送一封电子邮件,其中包含:

  • 主题:“预订确认”
  • 预约详情(日期、时间、服务)
  • 谷歌日历链接
  • 预订参考号

🤖 MCP服务器集成

MCP服务器用于增强功能:

  1. 事件通知 -MCP收到有关关键事件的通知:

    • 可用性检查
    • 预订创作
    • 电子邮件确认
    • 日历事件创建
  2. 错误处理 -MCP接收详细的错误信息以进行监控和调试。

  3. 预订处理 -如果配置好,该系统可以将整个预订过程卸载给MCP。

🧪 测试

要在本地测试系统:

npm run dev:local

对于端到端测试:

  1. 选择日期和服务
  2. 检查可用时隙
  3. 输入客户详细信息
  4. 完成预订
  5. 验证约会是否显示在谷歌日历中
  6. 确认收到确认邮件

📚 技术实施细节

固定预订流量

预订流程已完全重新设计,以确保在预订时发出单个API请求。主要改进:

  • 多步骤表单,每一步都有验证
  • 针对最终预订请求的单个API调用
  • 清除失败预订的错误消息
  • 在API调用期间加载指示器

修复了谷歌日历集成问题

Google日历集成现在:

  1. 对服务帐户使用正确的JWT身份验证
  2. 预订前检查现有活动
  3. 使用所有预订信息创建详细的日历事件
  4. 正确格式化日期和时间
  5. 包括与会者和提醒

增强的错误处理

已实施全面的错误处理:

  • 特定消息的验证错误
  • 具有重试选项的网络错误处理
  • 使用MCP集成记录服务器错误
  • 用户友好的错误消息

📋 API终点

检查可用性

POST /api/availability

请求正文:

{
  "date": "2025-03-15",
  "duration": 60
}

答复:

{
  "success": true,
  "availableSlots": [
    { "startTime": "09:00", "endTime": "10:00" },
    { "startTime": "10:00", "endTime": "11:00" },
    /* ... */
  ]
}

预订预约

POST /api/book

请求正文:

{
  "name": "John Doe",
  "email": "john@example.com",
  "phone": "+1234567890",
  "date": "2025-03-15",
  "time": "10:00",
  "services": [
    {
      "name": "Massage",
      "duration": 60,
      "price": 80
    }
  ],
  "notes": "Optional notes",
  "agreed": true
}

答复:

{
  "success": true,
  "message": "Booking created successfully",
  "bookingId": "BK-JOHNDO-123456",
  "eventId": "calendar_event_id"
}

🔄 持续改进

未来的改进可能包括:

  • 添加用于管理预订的仪表板
  • 执行预订取消/重新安排
  • 添加支付集成
  • 创建客户账户系统