
Open Counter:用语音对话为小商家搭建预订系统
来源标题:Open Counter: book a small business by talking – Amazon Developer Hackathon
Open Counter 让店主通过一次语音对话完成业务设置并一键连接 Google Calendar,之后顾客可通过 Alexa+ 或其他 AI 助手、语音页面及预订页面进行预约。系统由服务端校验每条预订规则,并在预订前向顾客展示各项检查结果。该项目属于 Amazon Build, Ship, Shape 黑客松 Alexa+ 赛道,采用 Apache 2.0 许可。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
让顾客通过说话就能预约小商家。店主只需一次语音对话就能完成店铺设置,一键连接 Google Calendar。此后,顾客可以通过 Alexa+ 或任何 AI 助手、语音页面或预约页面进行预约。AI 负责理解顾客意图,服务器负责做出决策。任何预约在成立之前都会逐项核对所有规则,顾客会收到每一项检查的回执。
在线体验:https://open-counter.opencounter.workers.dev · 演示视频:youtu.be/DA0psoF2Nig ·
赛道:Alexa+(Amazon Build, Ship, Shape 黑客松) · 许可证:Apache 2.0
理发师手里握着推子,接不了电话。造型师做到一半染发,回不了消息。每一个漏接的电话都是一笔流失的预约,而大多数独立商家至今仍靠这种方式接单。在一项针对 142 家英国小企业的电话调查中,47% 的商家漏接了第一通来电(TelePA 研究,2015 年)。市面上有预约软件,但它们要求店主填写表单,而且无法与顾客已经在用的语音助手配合。
AI 助手如今可以为人们执行操作,但一笔预约是一份承诺。如果助手凭空捏造一个空闲时段、预约了一项店主只在面诊后才提供的服务,或者在顾客没有明确说「是」的情况下就下单,都会让商家损失金钱和信任。
面向店主 面向顾客 面向任何 AI 助手 用大白话向 Ozza 描述你的生意:服务项目、价格、营业时间,以及任何绝对不允许通过语音预约的内容。你说话的同时,一份实时清单会自动填写。 说一句「周五三点左右剪个头发」。Ozza 会给出真实可用的空闲时间,复述预约内容,只有在你确认之后才会下单。 所有已入驻商家共用一个 MCP 服务器(/mcp),也可以每个商家一个(/mcp/{slug})。 一键连接 Google Calendar。你自己的日程会自动占用对应时段。 获取服务器每一项规则检查的回执、一个六位预约码(例如 6J0-1RW),以及一个带提醒的日历文件。 每个工具都有标题、标注、输出 schema,以及适合朗读的语句。 实时查看新到的预约及其来源(Alexa+/助手、语音页面、预约页面、到店)。每笔预约都会收到手机提醒。 之后可以通过语音或网页,用预约码和姓名取消。 为 Echo Show 等带屏设备提供 MCP Apps 预约卡片:点选时间、确认、查看回执。
看看实际效果 以下截图取自真实应用和真实 MCP 服务器(npm run dev:local,与线上部署的是同一份 Worker 代码)。 更多:首页 · 开发者页面 · 卡片:空闲时间 · 卡片:复述确认 · 手机:预约页面 · 手机:语音
通过语音预约。打开在线站点并按下 Book by voice。说出或输入「Book a haircut tomorrow afternoon, I'm Thandi」。Ozza 会从真实的 Google Calendar 中给出真实可用的时间,复述预约内容,只有在你说了「是」之后才会下单。留意回执和预约码。
像真人一样取消预约。开启一段新对话:「I need to cancel my booking」,读出预约码,然后说出你的名字。
扮演店主。点击 For businesses → Set up my business → Try an example barbershop(或描述你自己的店铺,包括「never book colour by voice」)。启用内置日程后即可上线,你会进入自己的控制台。通过语音链接给自己预约一次,然后看着它出现。开启预约提醒,即可在手机上收到通知。
扮演 AI 助手。打开 Developers 并点击按钮:它们会调用线上 MCP 服务器。或者将任意 MCP 客户端连接到 https://open-counter.opencounter.workers.dev/mcp。
工作原理 flowchart LR subgraph Customers A[Alexa+ / any MCP assistant] V[Voice page<br/>Whisper speech-to-text] W[Booking page] end subgraph "Open Counter (Cloudflare Workers)" M["MCP server<br/>/mcp (directory) · /mcp/{slug}"] N[Understanding<br/>parser first, AI only fills gaps] G{{"The counter: 8 checks<br/>accepting · voice-allowed · open · notice<br/>free · locked · confirmed · written"}} D[(D1: businesses, bookings,<br/>slot locks, alerts)] end C[(Owner's Google Calendar<br/>or built-in diary)] P[Owner's phone<br/>Web Push alert] A --> M V --> N --> M W --> G M --> G G --> C G --> D D --> P Loading
AI 负责理解,柜台负责决策。语言模型只用于弄清顾客的意思,而且即便如此,也只用来填补确定性解析器留下的空缺,绝不会凭空捏造顾客没有说过的日期或时间。所有关键决策都在代码中完成:
拒绝时会指明是哪项检查未通过(failedCheck),并且在某天不营业或已约满时,给出下一个空闲时间。任何回答都不会是一个空列表。
MCP 规范 2025-11-25,Streamable HTTP,无状态。在 Cloudflare Workers 上每个请求一个服务器。
所有商家共用一个 add-on。/mcp 是一个目录:find_business("haircut") 返回已入驻的商家,其他所有工具都接收返回的商家 id。店主在自己的设置中选择启用。这正是 Alexa+ add-on 注册的端点;顾客不需要为每个理发师安装一个 add-on。
为语音设计的工具。 每个工具都有标题、标注(readOnlyHint、destructiveHint)、outputSchema,以及一段适合朗读的摘要。 时间以「Tuesday 13 October at 10:30 am」的形式给出,绝不用 ISO 时间戳。 预约码逐字符拼读:「6 J 0, 1 R W」。 顾客始终清楚自己承诺的是什么。服务器负责生成复述内容,并且只会按这些确切细节下单,因此粗心或恶意的助手无法跳过这一步。服务器做不到的是听见顾客本人:等待一个真实的「是」是助手的职责(Alexa+ 在对话中完成此事;我们的 Strands 客户端加入了人工确认钩子)。网页预约表单不受此限制,因为顾客按下按钮时已经看到了所有细节。
用 MCP Apps 呈现可视化。 check_availability、book 和 cancel 都会链接到 ui://open-counter/booking-card.html,这是一个自包含视图。它展示可点选的空闲时间、带「Yes, book it」的复述确认,以及每项检查都已打勾的回执。点击会以 ui/message 的形式经由助手回传,因此对话始终掌握主导权。
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。