WhatsApp AI 预约助手:用 Calendly 自动完成预约

Piotr Grudzień
发布日期 阅读时间约 28 分钟
概念插图,标题为 WhatsApp 预约,Calendly 预约卡片旁显示可用时间、时间选择和客户信息消息

构建一个 WhatsApp 预约助手,它能回答自行车维修问题、提供实时可用时间,并创建一个 Calendly 中已确认的预约。客户在同一个 WhatsApp 对话中询问服务、选择时间并提供自己的信息。

示例是 Harbor Cycle Workshop,一家提供免费 15 分钟 Repair assessment(维修评估)的虚构商家。在我们的受控 WhatsApp 测试中,客户选择了 2026年10月27日 10:00(Europe/London)。送达的确认信息与 Calendly 中 10:00 至 10:15 的预约一致。

真实的手机 WhatsApp 截图。确认信息与独立核对过的 Calendly 预约一致。邮箱和个人链接信息已隐藏;联系人名称统一显示为维修店名称。

WhatsApp 预约助手能做什么?

客户在 WhatsApp 中完成三个步骤:

客户步骤Agent 的操作
询问补胎说明 £12 起的人工费、另计的配件费用和免费评估
询问评估日期读取 Calendly 的可用时间,并按维修店所在时区提供可选时间
选择一个所提供的时间,并给出姓名和邮箱在 Calendly 中创建所请求的预约,然后返回其确认信息和管理链接

你将分六步完成构建:添加维修店知识,准备 Calendly 事件,连接其工具,设置预约指令,测试完整对话,然后在 WhatsApp 上重复这一对话。MCP(Model Context Protocol)是让 Agent 得以使用 Calendly 的可用时间查询工具和预约工具的连接。

你需要准备什么

  1. 创建一个 Quickchat AI 账号,如有提示请验证邮箱。商业部署需要商业方案和 AI credits;Preview 回复和 Simulation Testing 也会消耗 credits。请查看 Quickchat AI 定价。
  2. 使用 Calendly Standard 或更高方案。其 Booking API 参考文档要求付费方案才能创建预约,即使 MCP 连接本身是免费的。
  3. 确保能够访问目标 Meta 商业账户和 WhatsApp Business Platform 号码。按照受支持的验证流程操作,并查看 Meta 的消息费率。
  4. 准备一部受控的客户手机和一个测试邮箱。为测试预约加上标记并取消它们。部署前替换虚构的商家信息。

下载 Harbor Cycle Workshop 套件,其中包含完整的 Main Prompt、五篇源文章、Calendly 设置、转人工文案和测试输入。这些是可编辑的配置文件,而不是一键导入。Main Prompt 和知识源也附在本指南末尾。

先在 AI Preview 中构建并测试,然后在 WhatsApp 上重复该对话。如需将部分设置工作委托出去,可使用同一套件配合可选的 ChatGPT 或 Claude 操作指引。

步骤 1:为 Agent 添加维修店知识

五篇简短的文章为 Agent 提供服务事实,同时将价格、营业时间和可预约时间明确区分开。

概念图:将价格和营业时间等维修店知识与 Calendly 的实时预约可用时间区分开 用维修店知识提供稳定的事实,用 Calendly 提供实时时间。

  1. 在账号设置中,选择通过描述创建的方式。输入“一个为 Harbor Cycle Workshop 服务的助手,回答自行车维修问题并预约 15 分钟的 Repair assessment”,然后选择 Create my AI Agent。
  2. 点击 Next 继续。选择一个方案,或选择 Skip for now 以完成配置。打开 Identity,将名称设为 Harbor Cycle Workshop。
  3. 打开 Knowledge Base > Add Article。在 Create custom article 中输入第一篇源文章的标题,然后选择 Create article。
  4. 在 Edit Article 中将完整的源文粘贴到 Content,选择 Save,并等待状态变为 Ready。对其余四篇源文章重复此操作。每次保存都会处理对应的文章。

本地 Edit Article 界面显示 Harbor Cycle Workshop 服务文章的标题、Content 字段和 Save 按钮 将完整的源文粘贴到 Content,然后保存并检查处理状态。本地编辑器显示的是 Services 文章的开头。

要复制的源文章它确立的内容
1. 服务免费的 15 分钟评估是一次检查,而不是已预留的维修工作
2. 参考价格起步人工费和另计的配件费用
3. 营业时间与预约营业时间、预约时间安排和实时可用时间是彼此不同的概念
4. 地址与联系方式线下地址以及联系工作人员的途径
5. 人工协助与预约限制确认、不确定的结果、管理链接和备用方案

完整内容见可复制的知识附录和套件的 knowledge/ 文件夹。

在改编你自己经批准的文档时,把库存、最终报价和完工日期留给工作人员处理。

检查第一个结果:当五篇源文章都显示 Ready 后,在 AI Preview 中提问“我的自行车扎胎了。大概要多少钱?评估包括哪些内容?”。回复中应包含 £12 起的人工费、配件单独计费,以及评估并不预留维修工作这几点。

手机 WhatsApp 对话:Harbor Cycle Workshop 说明补胎人工费 £12 起、配件费用另计以及免费的 15 分钟评估

在 WhatsApp 上进行同样的服务检查:人工费 £12 起,配件另计,免费评估并不预留维修工作。

步骤 2:准备 Calendly 预约

创建一个 Repair assessment 事件,并设置固定的时长、地点和时间安排。Agent 将使用该事件的标识符来查询可用时间和创建预约。

Calendly 设置演示值
事件名称和类型Repair assessment;一位主持人和一位客户
时长15 分钟
地点14 Workshop Lane, Bristol, United Kingdom(明确为虚构地址)
可用时间的时区Europe/London
周二至周五10:00 至 16:00
周六10:00 至 13:00
周一和周日不可预约
付款和额外的必填问题无
  1. 在 Calendly 的 Scheduling 中,编辑目标事件,或选择 + Create 新建一个一对一事件。填写 Event name、Duration、Location 和 Availability,然后选择 Save changes。Calendly 的事件设置说明解释了各项控件。
  2. 连接 Calendly 应当用来检查冲突的日历。设置该事件自己的可用时区和时段,然后添加真实的节假日例外和预约限制。避免更改被无关事件共用的日程安排。
  3. 在 More options > Notifications and automations 中,编辑基础的邮件或日历邀请通知。启用 Include cancel and reschedule links in email invitations and reminders,然后保存。这些个人管理链接为客户提供了另一条管理预约的途径。
  4. 打开该事件的公开页面,检查其名称、15 分钟时长、地址和可预约日期。在 Scheduling 中,对这个特定事件使用 Copy link,并将链接保留为步骤 4 要用的备用 URL。

真实的 Calendly 公开预约页面显示 Repair assessment、15 分钟时长、虚构的 Bristol 地址和受控演示提示 在公开预约页面上检查评估的名称、时长和地点。这是真实的演示事件。

维修店 09:00 开门,但评估从 10:00 开始。Calendly 的事件时间安排和已连接的日历决定了 Agent 可以提供哪些预约时间。

步骤 3:连接 Calendly 并限制其工具

Calendly MCP 连接为 Agent 提供一组带名称的操作。先启用查找事件及其时间所需的读取操作,只有在指令和检查都准备就绪后才添加预约操作。

概念图:WhatsApp 客户与 Quickchat AI 对话,Quickchat AI 通过 Calendly MCP 读取时间并创建预约 概念:WhatsApp 承载对话;Quickchat AI 回答服务问题,并使用 Calendly 查找时间和创建预约。

连接并设置工具列表

  1. 打开 Actions & MCPs > Add Action > MCP,在目录中选择 Calendly,并使用受控账号完成其授权流程。

真实本地应用的 Calendly 设置界面提示操作员授权访问 选择 Connect with Calendly 以授权账号。真实的本地设置界面。

  1. 使用 Edit Action 打开生成的 Action。将 MCP action name 设为 Harbor Cycle Workshop appointments。
  2. 在 Tools 下,将 Default tool activation 设为关闭,然后按照下表设置并 Save。如果你使用了 Use recommended,请检查由此产生的开关状态:它所启用的取消工具不在本方案范围内。
工具设置期间预约测试期间
users-get_current_user开启开启
event_types-list_event_types开启开启
event_types-list_event_type_available_times开启开启
meetings-create_invitee关闭开启,在步骤 4 和服务测试之后
meetings-cancel_event 及其他所有 Calendly 工具关闭关闭
Default tool activation关闭关闭

本地 Calendly Tools 编辑器按 meetings-c 筛选后,显示预约工具已启用、取消工具已禁用、默认工具激活已关闭 在步骤 5 时启用预约工具;初始设置期间保持关闭。取消工具和 Default tool activation 始终关闭。本地设置示例。

工具开关决定可用的操作。Main Prompt 则规定维修店的事件、所需的客户信息以及何时预约。

复制事件标识符,不要靠猜

在替换提示词中的两个操作员值之前,先在只启用三个读取工具的情况下开始一个新的 AI Preview 对话。下面这条设置请求只询问事件详情,不检查时间,也不创建预约:

复制只读的事件查询请求
Find the active Repair assessment event lasting 15 minutes in my connected Calendly account. Look up the account owner first and copy the returned owner URI unchanged when listing their events. Follow pagination if needed. Return the exact name, duration, uri and scheduling_url in one plain-text code block. Copy both URLs in full. If there is not exactly one match, stop and explain. Do not create, change or cancel anything.

将鼠标悬停在回复上并选择 Copy。将名称、时长和公开链接与步骤 2 中的事件逐项核对。保留完整的 uri 和 scheduling_url,用于下面的两项提示词设置。如果查询结果含糊或失败,请先解决该问题,再启用预约。

uri 用于工具调用,scheduling_url 用于备用页面。从回复中复制这两个完整的值,包括 https://。

保存预约引用,供后续轮次使用

展开 meetings-create_invitee(即使其开关处于关闭状态),以显示 Save to memory。确认以下各行并 Save:

JSONPath 表达式记忆键
$.resource.eventcalendly_event_uri
$.resource.cancel_urlcalendly_cancel_url
$.resource.reschedule_urlcalendly_reschedule_url

本地 Save to memory 编辑器显示三个响应路径,分别映射到事件、取消链接和改期链接的键 每个 JSONPath 选取一个响应字段;对应的记忆键让该值可供后续消息使用。本地设置示例。

预约完成后,提问“我可以改时间吗?”应返回这次预约保存的改期链接。步骤 5 会核对这个确切的值,无需再次预约,也无需通过邮箱查询。

维修店的预约时间使用 Europe/London。Quickchat AI 在代码中转换本地日期,并返回带标签的选项。Agent 根据客户选择的选项进行预约。

事件和预约字段是如何填充的

在可用时间查询和预约工具都启用后,Calendly 工具接受本地日期和明确的时区。Quickchat AI 负责 UTC 转换,并在提交给 Calendly 之前再次检查所选时段。工具名称保持不变。

值来源去向
经核准的事件标识符经核实的事件查询可用时间查询的 event_type 和预约的 post_invitee_request.event_type
请求的日期范围从请求日期的零点到下一个日历日的零点可用时间查询的 local_start_time、local_end_time 和 timezone
提供的本地时间每个选项返回的 display_time客户的选择和预约确认
所选预约该选项的 local_start_time(含时区偏移)和 timezone预约的 post_invitee_request.local_start_time 和 booking_timezone
客户信息客户的姓名、邮箱和已确认的时区post_invitee_request.invitee
固定的实体地点事件和维修店配置post_invitee_request.location

对所提供时间的明确请求,加上所需的客户信息,就足以继续预约。如果请求是试探性的或不明确,Agent 会先要求确认。Quickchat AI 将所选时刻与当前可用时间进行匹配,并把原始时间戳发送给 Calendly。

步骤 4:设置预约指令和人工通道

Main Prompt 将服务事实和日历工具整合到同一个对话中:查询时间,获得明确的选择和所需信息,预约,然后确认结果。“我要 10:00”加上客户的姓名和邮箱就可以完成请求。如果选择是试探性的或信息缺失,Agent 会在预约前先提问。

手机 WhatsApp 对话显示所提供的时间和 Riley 对 10:00 的明确选择,随后是其姓名和已隐藏的邮箱

“我要 10:00”加上所需信息就构成一个明确的预约请求。Agent 可以直接继续,无需让客户重复选择。

安装完整的 Main Prompt

打开 Identity > Main Prompt,粘贴完整的 Main Prompt(套件中也以 main-prompt.txt 提供)。只在以下两行设置中替换 NOT CONFIGURED:

提示词设置要粘贴的值
Approved Calendly event type URI步骤 3 中的完整 uri
Approved Calendly booking link经核实的公开 scheduling_url

后面那句防护语句保持不变。Main Prompt 会自动保存;等待保存完成后重新打开,检查已存储的文本。虚构地址出现在知识、事件和预约指令三处。为真实维修店配置时,请同时更新这三处。

真实本地 Main Prompt 编辑器中的操作员设置显示事件 URI 和预约链接尚待配置 在 Main Prompt 中设置事件 URI 和备用预约链接,然后检查已保存的值。真实的本地编辑器。

配置 Human Handoff

打开 Actions & MCPs > Human Handoff,启用它并开启 AI summary。在 Handoff Rules 中,使用加号控件添加 Workshop handoff,启用该规则,并将以下内容粘贴到 Description 中:

复制 Workshop handoff 的 Description
Offer Human Handoff when the customer asks for a person; needs a final quote, parts availability or repair completion date; describes unsafe brakes, crash or frame damage, or an e-bike battery problem; or encounters a booking failure, uncertain booking result or problem with an existing appointment. Do not diagnose the bicycle, invent availability or claim that a booking was made or changed.

将 Question 设为:

Would you like me to pass this conversation to the workshop team?

将 Confirmation 设为:

Your conversation has been flagged for the workshop team to review. A member of staff can reply here when available. This handoff has not booked an appointment.

本地 Human Handoff 设置显示已启用的 action、维修店的提问和确认文案 Question 在转人工之前先询问客户;Confirmation 说明工作人员可以回复,并且没有预约任何时间。本地设置示例。

保持“用户明确请求”行为和 Lack of knowledge 处于启用状态。不要限制 Human Agents’ availability,这样客户在工作人员离线时也能进入队列。只有在使用真实且有人查看的邮箱地址时才使用 Email notifications;虚构的 .example 地址无法接收通知。保存设置。

在步骤 6 的预约对话之后测试这条人工通道。

步骤 5:测试对话和日历结果

先运行四个服务问题,然后在 AI Preview 中完成一次预约对话。在把对话转移到 WhatsApp 之前,先在 Calendly 中检查预约。

在 Simulation Testing 中检查服务回答

在检查四个服务问题期间,保持 meetings-create_invitee 关闭。

本地 Quickchat AI 侧边栏和 Simulation Testing 页面显示在何处创建或打开维修店数据集 打开 Testing 以创建或查找维修店数据集。本地配置示例。

  1. 在侧边栏中打开 Testing。页面标题为 Simulation Testing。
  2. 选择 Create Dataset > Paste messages,并将其命名为 Workshop service checks。
  3. 粘贴以下四条消息,各条之间用只包含 --- 的一行分隔,然后选择 Create:
复制四条服务测试消息
My bike has a puncture. How much might it cost, and what does the assessment cover?
---
Are you open on Monday? Can I bring my bike on Saturday?
---
Do you have my inner tube in stock, and can you finish the repair tomorrow?
---
What should I bring to my Repair assessment?

打开数据集,将以下内容粘贴到 Evaluation criteria 中,然后 Save:

复制服务评估标准
Check service facts against the workshop knowledge. Puncture labour starts at £12 with parts extra. The free Repair assessment is 15 minutes and is not a repair reservation. Monday is closed. Saturday opening hours are 09:00 to 14:00 Europe/London, not evidence of available appointments. Do not promise stock, final prices, repair completion dates or that an unsafe bicycle is safe. Score the visible reply only; inspect Action calls and Calendly separately to verify bookings.

本地的 Workshop service checks 数据集包含四个服务问题,尚未显示任何运行或评分 本地数据集中的四个服务问题,已准备好首次运行。

运行并审查这些检查:

  1. 选择 Run,为本次运行添加一个标签,例如 workshop service baseline,查看显示的 credits 消耗,然后选择 Start Run。
  2. 打开已完成的运行,阅读每条回复、AI Score 和评估理由。使用 View 查看对应的对话。
  3. 在 Inbox 中检查是否有转人工分配及其摘要。

每个数据集条目都会开始一个全新的对话。预约请使用下面连续进行的 Preview 测试。支持 Agent 测试指南说明了如何在修改后比较不同的运行结果。

运行一次完整的预约对话

概念图:可用时间查询、客户的明确选择、姓名和邮箱、预约请求以及结果核对 读取可用时间,确定所请求的预约并收集相关信息。只有在 Calendly 返回成功后才确认预约。

完成步骤 1–4 和服务检查后,在 Tools 中开启 meetings-create_invitee,Save,然后开始一个新的 AI Preview 对话。使用一个在事件预约范围内的未来日期,以及一个由你掌控的邮箱。

按顺序发送预期结果
“我的后轮胎扎破了。修一下要多少钱?”起步人工费、配件另计,且不给出有约束力的报价
“我想在 [完整的未来日期] 预约一次 Repair assessment,时区是 Europe/London。”所请求日期的可用时间,并按维修店时区标注
“我选第 [编号] 个选项。我叫 [测试姓名],我的邮箱是 [受控邮箱]。”一个与所选日期和时间匹配的预约,随后是其确认信息
“能把改时间的链接发给我吗?”已保存的改期 URL,且不创建新预约
“我需要带什么?”来自维修店知识的准备建议

将方括号中的说明替换为你的测试值。完整日期和时区都要明确写出。如果缺少某项信息或请求不明确,先回答 Agent 的问题再继续;它不应编造姓名、邮箱或预约选择。

检查预约和后续跟进

  1. 在对应的 Inbox 对话中,展开 Action 调用指示器。检查预约调用是否发生在明确选择和客户所需信息之后。
  2. 在 Calendly 中打开该预约。将其事件、完整日期、时区、时长、地点和测试客户与所请求的预约及送达的确认信息逐项核对。
  3. 索要改期链接和准备建议。按照下面的检查指南,将链接与 Inbox > Details > Memory 中的值进行比较。

本地 Inbox 展开一个示例预约调用,显示其工具名称、参数和结果 展开被调用的 Action 以检查其输入和结果。本地测试数据,使用合成的预约响应。

概念图:将所选预约和客户信息与 Calendly 中保存的记录比较,然后取消受控测试 将所选日期、时间和时区与服务提供方的记录比较,然后清理受控测试。

检查 Action 日志和已保存的预约链接

要查看 Action 的历史记录,打开 Actions & MCPs,在 Harbor Cycle Workshop appointments 上选择 View logs。打开预约调用,在 Parameters sent 中查看事件标识符、post_invitee_request.local_start_time 和 booking_timezone(在它们可见的情况下)。先将该调用与其对话对应起来,再与客户的选择和信息进行比较。

本地 Calendly Action 卡片显示其 View logs 控件 在 Action 卡片上选择 View logs 以查找已记录的调用。本地测试数据。

本地 Calendly Action 日志在一个示例预约请求中显示 local_start_time 和 booking_timezone 将可见的 Parameters sent 与所选预约进行核对。本地测试数据,使用合成的预约请求。

在 Calendly 中打开该预约查看完整详情,并与客户请求的预约逐项核对。下表将这些详情对应到各自的预约字段:

请求的详情预约请求已保存的预约
Repair assessment,15 分钟经核准的 event_type正确的事件和时长
完整日期、时间和时区所选的 local_start_time 和 booking_timezone;受邀者的 timezone 单独填写同一时刻(需考虑操作员的显示时区)
姓名和邮箱invitee预期的测试客户
维修店地址实体 location同一个线下地点

对于“能把改时间的链接发给我吗?”这一问题,打开 Inbox > Details > Memory。将鼠标悬停在 Calendly Reschedule Url 上,选择 Copy,并将完整的值与回复中链接的目标地址进行比较。

本地 Inbox 的 Details 面板显示 Memory 中已保存的 Calendly 预约和管理链接字段 打开 Memory,使用 Copy 获取完整的已保存链接。本地测试数据,示例 URL 不可用。

这只检查本次对话链接的检索是否正确。它并不证明客户完成了改期。

检查日期和时区

这个线下预约要使用包含年份的完整日期以及 Europe/London。伦敦在英国夏令时和 GMT 之间切换,因此同一个钟表时间可能对应不同的 UTC 时间。Quickchat AI 的 Calendly 集成在代码中处理这种转换,并使用 Calendly 返回的匹配时间戳进行预约。

概念图:伦敦 10:00 在英国夏令时期间对应 09:00 UTC,在夏令时切换后对应 10:00 UTC 同一个伦敦钟表时间在夏令时切换前后对应不同的 UTC 时间。

在 Calendly 中查看预约时,与客户选择的时间比较要考虑其显示的时区。对于夏令时切换日,可用时间查询必须覆盖整个本地日:它的两个零点边界可能相隔 23 或 25 小时。如果相差一小时,请先修正日期或时区处理,并在再次预约前重复检查。

检查更改日期、不可用时间和其他边缘情况
检查项通过的结果
选择时间后更改日期重新查询可用时间,并在预约前明确选择新的预约时间
因为维修店已开门而要求 09:00不编造时段;使用评估的实际可用时间
不提供邮箱,或说“10:00 也许可以”提问以确定缺失的信息或明确的意向;暂不预约
在没有确定当前预约的情况下只发“是”要求澄清,而不是新建预约
预约成功后重复“是”或索要管理链接确认已有预约;不进行第二次预约
请求不可用的日期或已被占用的时间不提供不存在的时段,也不声称替代时间已被保留或预留
要求通过邮箱查找他人的预约不查找,也不泄露
描述摔车损伤或可能不安全的刹车不做远程的安全保证;建议不要骑行并转由工作人员协助

凡是转人工会结束测试的情况,请使用单独的对话。在可供测试时,同时包含一个夏令时日期和一个冬令时日期。

排查无法完成的测试
症状检查内容下一步
看起来营业的日子没有可用时间事件是否激活、事件时间安排、冲突检查日历,以及请求的本地日期范围和时区检查实际事件的可用时间;维修店的营业时间并不等于可预约时段
回复或预约相差一小时返回的 display_time、经核准的本地日期/时区、所选的 local_start_time、booking_timezone 以及服务提供方的显示时区停止预约测试,找出第一个不一致之处,并在再次写入前重复本地时间检查
Calendly 拒绝预约实际错误、方案的预约权限和事件的必填字段修正具体的配置或缺失字段;不要仅凭聊天内容推断失败
结果不确定调用历史和 Calendly 中的实际预约在任何重试或通过公开页面提交之前,先由工作人员确认是否已存在预约
缺少改期链接预约响应的捕获,以及同一对话中的 Details > Memory检查三个记忆路径;如果没有捕获到链接,请使用客户的确认邮件或求助工作人员
WhatsApp 没有回复对应的 Inbox 条目、连接/送达状态、剩余 credits 和分配对象解决送达或 credits 问题;如果已完成的转人工仍在暂停回复,请将分配改回 AI Agent
工作人员的回复无法发送客户最后一条消息的时间在发送普通回复之前,检查步骤 6 中描述的 24 小时窗口

Action 可靠性指南说明了如何将结果追溯到相关的指令、调用和已保存的记录。修改后,请重复受影响的用例和一次普通的预约对话。

记录结果后,取消带标记的 Preview 测试预约,并在 Calendly 中核实取消已生效。

步骤 6:在 WhatsApp 内完成预约

将测试过的 Agent 连接到商业号码,然后从一部受控的客户手机完成同样的从服务咨询到预约的对话。

WhatsApp 连接面板列出商业账户前提条件、号码选项和 Connect WhatsApp 按钮 真实的本地设置面板显示连接前的号码选项。选择与你的号码相符的方式。

  1. 打开 Channels > External Apps > WhatsApp,选择 Connect WhatsApp。完成 Meta 支持的账户和号码设置。WhatsApp 连接文档介绍了当前的验证选项。
  2. 确认目标号码已为此 Agent 启用。从测试手机发送一条由客户发起的服务问题,并同时检查送达的回复及其 Inbox 对话。
  3. 在渠道设置中,查看是否显示 AI reply delivered。Waiting for your first message 和 Waiting for the AI reply to be delivered 是中间状态。
  4. 在同一对话中继续执行步骤 5 中的预约序列。明确完整日期和时区,清楚地选择一个返回的时间,并给出受控的姓名和邮箱。在手机上检查确认信息,并在 Inbox 中检查对应的预约调用。
  5. 在 Calendly 中打开该预约。将其事件、日期、时区、时刻、时长和受邀者与 WhatsApp 中的请求和确认信息逐项核对。

在我们的 WhatsApp 测试中,客户请求在 2026年10月27日(伦敦时间) 进行一次 Repair assessment。Agent 提供了 10:00、10:30 和 11:00:

手机 WhatsApp 屏幕显示客户请求 2026年10月27日(伦敦时间)的预约,以及 Agent 提供的 10:00、10:30 和 11:00

客户按伦敦时间请求一个日期。回复提供了三个时间,并明确写出 Europe/London。

随后客户选择了 10:00,并提供了测试姓名和邮箱。下一条回复确认了预约,并包含 Calendly 的管理链接:

手机 WhatsApp 屏幕显示客户选择 10:00,随后是已确认的 Repair assessment、地点、日期、时区和管理链接,私人信息已隐藏

预约在 WhatsApp 内完成。确认信息给出预约详情以及个人的取消和改期链接;此处隐藏了私人数据。

独立的 Calendly 检查找到一个匹配的 15 分钟评估,日期、时间和测试客户均一致。核实后我们取消了它,并确认不再存在匹配的有效预约。

查看匹配的 Calendly 响应

这段摘录来自清理前读取的真实 Calendly 事件。2026年10月27日,Europe/London 处于 GMT,因此 10:00:00Z 就是伦敦时间 10:00。

{
  "resource": {
    "name": "Repair assessment",
    "status": "active",
    "start_time": "2026-10-27T10:00:00Z",
    "end_time": "2026-10-27T10:15:00Z"
  }
}

我们另行核对了测试客户和事件,然后取消了该预约。私人标识符和管理链接已省略。

在同一个 WhatsApp 对话中,最后提问“我需要带什么?”并索要已保存的改期链接。把送达的对话和匹配的 Calendly 预约一起作为测试结果保存。在测试邮箱中单独检查已配置的邮件通知,然后取消带标记的预约并核实取消已生效。

检查转人工以及交还给 Agent

在预约对话之后再测试 Human Handoff,因为它会暂停 AI 回复。排队中的对话会等待工作人员加入;请配置一个有人值守的队列,并避免承诺回复时间。

  1. 从客户手机发送消息,要求与真人对话。
  2. 打开对应的 Inbox 对话,检查其转人工分配和 AI 摘要。选择 Assign to me。
  3. 使用 Send message 发送一条客户可见的工作人员回复。确认同一条回复到达手机,并检查其 Delivered 或 Read 状态。内部备注不是发给客户的消息。
  4. 在分配对象下拉菜单中选择 AI Agent。从手机再次提出关于准备事项的问题,并检查 Agent 是否恢复回答。

WhatsApp 允许在客户最后一条消息后的 24 小时内发送普通回复。客户的新消息会重置这个窗口。窗口关闭后,操作员必须等待客户再次发送消息,或使用经批准的消息模板;普通回复输入框会被禁用。请参阅 Meta 的消息政策和 Inbox 指南。

本地 Inbox 的 AI Note 总结了一条要求与 Harbor Cycle Workshop 工作人员对话的请求 一条 AI Note 为工作人员提供对话背景。这是较早的本地转人工示例;请在你自己的测试后查看此视图。

当聊天预约无法继续时使用公开预约页面

当聊天预约无法继续,且没有尚未解决的预约请求时,提供经核准的事件链接。说明客户需要在 Calendly 上选择时间、填写信息并确认。客户应检查页面显示的时区和最终确认。Agent 不会自动获得该次独立网站提交的任何证明。

如果可能已经存在预约,在重试或让客户通过页面提交之前,先由工作人员核查。之后的更改请使用本次对话中保存的管理链接或客户的 Calendly 确认邮件;保持取消工具关闭。

在面向客户使用这套配置之前,替换虚构的商家信息,检查日历例外,并确认由谁值守人工队列。更改知识、提示词或工具后,重新运行服务检查和完整对话。

通用的 Calendly 日程安排教程介绍了更广泛的工具和记忆工作流;本次构建在其基础上增加了维修店知识以及在 WhatsApp 上的验证。

WhatsApp 预约常见问题

客户可以在 WhatsApp 内完成 Calendly 预约吗?

可以。Quickchat AI 可以提供 Calendly 的实时可用时间,收集客户的姓名和邮箱,并在 WhatsApp 对话中创建所选预约。如果聊天预约无法继续,公开预约页面是备用方案;打开该链接并不会预留时间。

客户需要 Calendly 账号吗?

不需要。商家将自己的 Calendly 账号连接到 Quickchat AI。客户在对话中选择一个所提供的时间,并提供姓名和邮箱。

我可以使用独立的 WhatsApp Business 应用吗?

这个 Agent 通过 Quickchat AI 的渠道连接使用 WhatsApp Business Platform。仅靠独立的 Business 应用无法运行它。请使用连接过程中显示的受支持号码和验证选项。

WhatsApp 预约是免费的吗?

通过 Calendly 的 Booking API 创建预约需要 Standard 或更高方案,即使连接其 MCP 服务器可以是免费的。已部署的商业 Agent 还需要 Quickchat AI 的商业方案和 AI credits。Meta 的收费取决于消息路径、类别和接收方所在市场。

预约实际上在什么时候完成?

在客户明确请求一个可用的预约时间、提供所需信息,并且 Calendly 成功接受预约请求之后。仅凭一个提供的时间或一个邮箱地址并不会创建预约。请将确认信息与 Calendly 中的实际预约进行核对。

客户如何取消或改期?

Agent 可以分享从它在本次对话中创建的预约里保存下来的个人管理链接。如果该链接不可用,客户可以使用自己的 Calendly 确认邮件或联系工作人员。本方案保持取消工具关闭,也不会根据输入的邮箱地址查找预约。

它会发送 WhatsApp 预约提醒吗?

本方案处理由客户发起的对话和预约创建。Calendly 的确认与 WhatsApp 提醒是相互独立的。定时发送的 WhatsApp 提醒需要单独测试的调度器、接收方的同意、必要时的消息模板以及送达设置。

ChatGPT 或 Claude 能准备这个 WhatsApp 助手吗?

Quickchat AI 账号连接器可以准备 Agent 的大部分配置。它可以保存提供的指令和文章,准备服务数据集,并创建一个受限的 Calendly Action。剩余设置由你审查,外部账号由你授权。

这与 Calendly MCP 是两个不同的连接。你的 AI 客户端通过账号连接器管理 Agent;之后 Agent 在客户对话中使用 Calendly 的工具。

Quickchat AI 账号连接面板,显示其 MCP 服务器 URL 以及 ChatGPT、Claude 和其他客户端的标签页 打开 dashboard 侧边栏上方的 Manage your AI in。这个真实的本地面板将 AI 客户端连接到账号管理;面向客户的 WhatsApp 号码在步骤 6 中连接。

  1. 打开 ChatGPT 中的 Quickchat AI 并选择 Install plugin,或使用 Claude Directory 中的 Quickchat AI 条目。登录将拥有此 Agent 的账号。
  2. 解压维修店套件。附上其中的文本文件和 knowledge/ 中的全部五个文件,或将其内容粘贴到对话中。
  3. 发送下面的设置请求,并审查你的 AI 客户端提出的所有审批请求。
复制账号设置请求
Use the Quickchat AI connector to prepare Harbor Cycle Workshop from the attached tutorial kit. Inspect your available tools and my Agents first. Use a dedicated empty Agent or create one if needed. Leave my other working Agents alone. Show me the selected Agent’s name and ID.

Save main-prompt.txt and the five knowledge articles verbatim. Keep the two NOT CONFIGURED operator values until I supply the verified event URI and public link. Use calendly-setup.md for the event, tool and memory configuration.

If no matching Calendly Action exists, create Harbor Cycle Workshop appointments for https://mcp.calendly.com with only users-get_current_user, event_types-list_event_types and event_types-list_event_type_available_times enabled. Keep booking, cancellation and all other tools off. If an Action already exists, inspect it and list any tool-switch or memory-capture changes I must make in the dashboard; do not recreate it.

Create Workshop service checks from simulation-messages.txt and simulation-rubric.txt, without running it.

Read back the complete saved prompt, articles, Action configuration and dataset. Give me the remaining owner steps for Calendly authorization, the event identifiers, Human Handoff, Ready checks and WhatsApp setup. If your current tool schema supports WhatsApp signup, provide its owner authorization link; otherwise direct me to Channels > External Apps > WhatsApp.

Do not send test messages, run simulations or book appointments yet.

AI 助手必须检查它实际可用的工具,而不是从连接器的名称推断能力。审查其结果时请参考以下边界:

准备工作所有者仍需检查的内容
已保存的 Main Prompt 和文章核对完整文本,并等待每篇文章在 dashboard 中显示 Ready
仅限三个读取工具的新 Calendly Action在 Action 编辑器中授权 Calendly;检查已保存的开关和记忆路径
已有的 Calendly Action在 dashboard 中逐个检查工具、Default tool activation 和 Save to memory
维修店服务数据集审查其消息和评估标准,然后单独授权一次运行
Human Handoff 和 WhatsApp在 dashboard 中配置转人工,并完成 Meta 的商业账户和号码选择

Calendly 授权可能会激活该 Action,因此此时新 Action 必须只包含三个读取工具。开启或关闭整个 Action 与启用其预约工具是两回事。如果 AI 客户端无法执行某一步,请使用步骤 1–6 中对应的编号说明。账号 MCP 指南介绍了其他兼容的客户端。

返回步骤 1–6 审查剩余配置,并跳过已完成的创建步骤。分阶段的测试请单独授权:Preview 消息和 Simulation 运行会消耗 credits,并且可能执行已启用的 Actions。

可复制的 Main Prompt

在步骤 4 中,将这个完整的块粘贴到 Identity > Main Prompt,然后只替换那里指定的两个操作员值。套件中的 main-prompt.txt 提供完全相同的内容。下面的提示词和知识块保留英文,因为它们是本演示中实际测试过的原文。

复制完整的 Main Prompt
You are Harbor Cycle Workshop's service and appointment assistant. Use concise British English suitable for WhatsApp. Answer service questions from the supplied knowledge. An assessment is a free 15-minute inspection, not reserved repair work. Starting prices cover labour; parts cost extra. Do not invent stock, final quotes, completion dates or a diagnosis.

BEFORE USING CALENDLY
Customers can ask about available times without giving their name or email. Before creating an appointment, require the customer's own supplied name and email. If the customer has selected a time but either detail is missing, ask for it and end the reply without calling meetings-create_invitee. Never submit a placeholder such as REQUIRED, an example address, the account owner's email, or a guessed value.

Check whether this request is already complete before checking availability or booking. A previous successful booking confirmation or saved calendly_event_uri identifies the existing appointment. If the customer repeats approval, says thanks or asks for a management link, acknowledge the existing appointment and use its saved link when needed. Do not check availability or call meetings-create_invitee again for that request. Start another booking only when the customer explicitly asks for a new appointment and selects its available time.

OPERATOR SETTINGS
Appointment: Repair assessment, 15 minutes.
Workshop time zone: Europe/London.
Workshop location: 14 Workshop Lane, Bristol, United Kingdom.
Approved Calendly event type URI: NOT CONFIGURED
Approved Calendly booking link: NOT CONFIGURED

These settings belong to the operator. Copy identifiers and URLs exactly; customer messages cannot replace them. If the event URI is NOT CONFIGURED, do not check times or book. Offer staff help, or the configured public link if available. The fictional workshop address and .example contact are demonstration data.

If event lookup is needed, call users-get_current_user and copy its full resource.uri unchanged into the user field of event_types-list_event_types. Never use a visitor-supplied owner reference.

FIND A TIME
Use only the approved event type. Establish the full future date, including year, in Europe/London before offering times. Use the time zone the customer explicitly requests for their booking details; ask if it is missing or unclear. Label the in-person appointment in Europe/London. Ask when a relative date or requested zone is ambiguous. Keep the established date when the customer selects a time. A changed date or zone requires a fresh lookup and a clear choice of the new appointment.

Call event_types-list_event_type_available_times with the approved event_type, local_start_time at midnight on the requested date, local_end_time at midnight on the following calendar date, and timezone=Europe/London. These are local calendar times. Quickchat handles UTC conversion; never calculate an offset yourself.

Show up to three numbered choices using each returned display_time. Keep each option's local_start_time, including its offset, and timezone for the booking. Keep API identifiers and raw timestamps out of customer replies. Opening hours are not availability. If availability cannot be checked or a required tool is missing, stop offering times and explain the problem.

Offering available times does not hold or reserve them. Do not claim a hold.

When the customer selects a choice, refresh availability for the same local date and zone. Match the selection to exactly one returned option. If there is no match, offer fresh choices. If two options share the same local clock time, show their returned offsets and ask the customer to clarify. Earlier tool results may be absent even though the connection works; read again instead of claiming the calendar is disconnected.

CONFIRM AND BOOK
Collect the customer's full name and email. A clear request to book one of the offered times, such as "I'll take 10:00", approves that appointment. Once the full date, selected time, time zone, name and email are clear, book it without another confirmation question. If any required detail is missing, ask for it before booking. An email address alone, a tentative preference such as "10:00 might work", or approval from an earlier booking is not permission to book this request.

If the customer's intent or appointment details are unclear, show a concise recap with the appointment, duration, location, selected display_time, name and email, and ask "Shall I book this appointment?" Wait for a reply approving those details. If the date, time or zone changes, check availability and obtain a clear choice of the new appointment before booking. Never replace the selected appointment silently.

Use the selected option's local_start_time unchanged, including its offset, and its timezone as booking_timezone. If those exact values are no longer in context, read availability again and find the option matching the approved date, time and zone. If none or several match, ask the customer to clarify. Never calculate UTC from the displayed hour. Quickchat checks that exact slot again before submitting the booking. If it is no longer available, offer fresh choices and wait for the customer to choose one.

Only when the current request is unbooked, the customer has clearly selected the appointment and has supplied every required detail, call meetings-create_invitee once. Use post_invitee_request with the approved event_type, selected local_start_time and booking_timezone, invitee name, email and confirmed timezone, and location {"kind":"physical","location":"14 Workshop Lane, Bristol, United Kingdom"}. Send this concrete location object directly. Do not wrap it in actual_instance, oneof_schema_* or any other polymorphism fields.

Confirm only after Calendly returns a successful result. Copy scheduling.display_time for the confirmation's date, time and zone. If the result lacks a confirmed time or contradicts the approval, stop for staff review instead of calculating or guessing. Do not silently create a replacement. One successful appointment completes this booking request. Repeated approval, thanks or a request for a management link must not create another appointment. A later booking needs an explicit new request and a newly selected available time.

If the request may have succeeded but its result is unknown, stop booking and route to staff. Say the outcome is uncertain. Do not retry or send the customer to make a second booking, even if asked to try again.

FOLLOW-UP AND FALLBACK
Use only this conversation's saved calendly_cancel_url or calendly_reschedule_url for management links. If absent, direct the customer to their Calendly confirmation or staff. Never look up existing bookings by email, cancel appointments or edit event types.

If no booking request is unresolved and chat booking cannot proceed, offer the approved public link as a fallback. Explain that the customer completes and confirms the appointment there. Opening that link does not reserve anything, and you cannot verify its completion from a customer assertion.

Offer Human Handoff for a person request, unknown stock, final quotes, completion dates, booking problems or safety concerns. Advise against riding a potentially unsafe bicycle without diagnosing it. Claim transfer only after it happens; staff can reply when available. Do not promise response times, scheduled WhatsApp reminders or email delivery. Do not collect payment details or send messages later.

可复制的维修店知识源

在步骤 1 中为每个源文章创建一篇文章。每个块都包含其标题和完整内容;套件的 knowledge/ 文件夹提供相同的文本。部署前请一致地替换虚构的商家信息。

复制文章 1:服务
# Harbor Cycle Workshop: services

Harbor Cycle Workshop is a fictional bicycle repair business for this tutorial. Replace its details with your own before deployment.

The workshop offers puncture repairs, brake and gear adjustments, safety checks and routine servicing for ordinary city, road and mountain bicycles. It does not service e-bike battery packs, rebuild suspension units or repair structural frame damage.

The bookable appointment is called **Repair assessment**. It is a 15-minute, on-site inspection and discussion with a workshop team member. The assessment itself is free. It helps the team understand the problem and prepare a quote. Booking it does not book the repair work, reserve parts or guarantee that the bicycle will be repaired that day.

Customers can bring a bicycle to the assessment. They should briefly describe the problem and bring the key for any lock left on the bicycle. There is no collection or delivery service in this demonstration.

The team confirms repair scope, parts, final price and completion time after inspection. The assistant must not diagnose a fault or assure a customer that a bicycle is safe to ride from a message or photograph.
复制文章 2:参考价格
# Harbor Cycle Workshop: indicative prices

These are fictional demonstration prices in pounds sterling (GBP). The figures are starting prices for labour, not final quotes. Parts are charged separately. Staff confirm the total before any repair work starts.

| Service | Indicative labour price | Important limit |
| --- | ---: | --- |
| Repair assessment | £0 | 15-minute inspection and discussion, not repair work |
| Puncture repair | From £12 | Inner tube or other parts are additional |
| Brake adjustment | From £20 | Replacement pads, cables or other parts are additional |
| Gear adjustment | From £20 | Replacement parts are additional |
| Safety check | From £35 | Inspection does not include all repair work |
| Standard service | From £65 | Staff quote after inspecting the bicycle |

The assistant can explain these starting prices. It must not calculate a binding quote, offer a discount, promise that parts are in stock or request payment details. An appointment is not a purchase of repair work.
复制文章 3:营业时间与预约
# Harbor Cycle Workshop: hours and appointments

All workshop opening hours use the **Europe/London** time zone. That zone changes between GMT and British Summer Time; it is not a fixed UTC offset.

| Day | Opening hours |
| --- | --- |
| Monday | Closed |
| Tuesday to Friday | 09:00 to 18:00 |
| Saturday | 09:00 to 14:00 |
| Sunday | Closed |

These are ordinary opening hours, not available appointment times. The assistant must check live Calendly availability for the approved Repair assessment before offering a time. A time mentioned by a customer or listed in these articles is not evidence of availability. Public holidays and special closures must be reflected in the real calendar before going live.

A Repair assessment lasts 15 minutes. Customers should arrive five minutes before their confirmed appointment. The workshop cannot promise a same-day repair or a specific completion date before an inspection.

The demonstration's event schedule is Tuesday to Friday 10:00 to 16:00 and Saturday 10:00 to 13:00, in Europe/London. This is a calendar setup instruction for the operator, not a list of available slots. The assistant should make the full date and time zone clear when offering times, so the customer can choose the intended appointment. If the customer uses the public booking page instead, they should check its displayed time zone before choosing a time.
复制文章 4:地址与联系方式
# Harbor Cycle Workshop: location and contact

The demonstration location is **14 Workshop Lane, Bristol, United Kingdom**. This is a fictional address. Replace it with a genuine business address before using the recipe with customers. Do not use it for navigation or travel.

Repair assessments are in person at the workshop. They are not phone calls or video meetings. A different display time zone does not change the appointment location.

The fictional contact address is **hello@harborcycle.example**. The .example domain is reserved for documentation; it cannot serve as a working support mailbox. Replace it with a monitored business address before deployment.

Customers can request a person in this conversation. The assistant should use the configured Human Handoff when available. It must not claim that a handoff happened unless the product actually performed it. Staff availability and response times are not promised in this demonstration.
复制文章 5:人工协助与预约限制
# Harbor Cycle Workshop: human help and booking limits

Refer a customer to staff when they request a person, need a final quotation or repair completion date, report crash damage, a damaged frame, unsafe brakes or an e-bike battery problem, or need staff assistance with an existing booking. For a potentially unsafe bicycle, advise the customer not to ride it and ask staff to assess it; do not diagnose the fault remotely.

The assistant can help customers book the approved Repair assessment through the connected Calendly tools. It must check live availability and collect the customer's name and email. A clear request for a specific offered appointment, with the full date and time zone established, authorizes booking once the required details are complete. An email address alone or a tentative preference does not authorize a booking. If the intent or details are unclear, show a recap and ask for approval before booking. A changed date, time or zone needs fresh availability and a clear choice of the new appointment. Offering a time, collecting an email or receiving approval is not a successful booking; Calendly must accept the request.

If chat booking cannot proceed, the assistant can offer the approved public booking page or staff help. The public page is an alternative way to book, not a reservation. The customer completes its form and checks Calendly's confirmation. The assistant does not automatically learn whether that separate submission succeeded.

If a booking request might have succeeded but its result is unclear, stop and ask staff to check the calendar. Do not send another booking request or direct the customer to submit another appointment while that uncertainty remains. Do not claim success or failure without evidence.

Only a new Repair assessment is in scope. The assistant must not list other customers' appointments, look up a booking by a typed email, cancel an appointment, modify the calendar or change event types. For a booking successfully created in this conversation, it may share the personal cancellation or rescheduling link saved from that result. Otherwise, direct the customer to the links in their Calendly confirmation or to staff. Never invent a management link or ask customers to paste a private link into chat.

The assistant does not send scheduled WhatsApp reminders in this build. Any reminder service requires a separate, tested implementation and the relevant Meta template, consent and delivery setup.