2026-09-06 · 原文发布日
WhatsApp餐厅订座机器人(西语,接表格与日历)
餐厅收到WhatsApp文字或语音消息后,语音先由Gemini转写,随后由按手机号维持对话上下文的Gemini智能体处理:询问菜品价格时读取Google Sheets的Menu标签页用西语作答;创建、修改或取消预订时读写Reservas标签页,并同步增删改Google Calendar事件。每次变动都会通过WhatsApp通知店主并回复客人确认。需要WhatsApp、Gemini、Sheets和Calendar四套凭证,表格列名需含西语重音字符。
原文要点
原模板由Bitclick Solutions发布于n8n模板库。流程用WhatsApp触发器接收文字或语音,语音下载后由Google Gemini转写为文本;一个Gemini智能体按客户手机号维持多轮上下文。询问菜品价格时读取Google Sheets的Menu标签页用西语回复;创建、修改、取消预订时读写Reservas标签页,并同步创建、更新、删除Google Calendar事件。每次变动向店主手机号发WhatsApp通知并回复客人。需WhatsApp、Gemini(PaLM)、Sheets OAuth2、Calendar OAuth2四套凭据,表格列名含西语重音字符。
这次做成什么
在n8n里搭一条西语餐厅订座WhatsApp机器人练习流程:文字直接进智能体、语音先转写,能查菜单价、增删改预订并同步日历,且每次都通知店主。为便于本地练手,本站另设计一个不用真实WhatsApp商家号的隔离练习方案:用手动触发器喂合成消息,其余逻辑不变,接通后再换回真实触发器。
准备什么
- 一个n8n实例(云端或自托管均可),能访问n8n.io模板库搜索该工作流
- Google Gemini API密钥(PaLM API凭据),用于语音转写和智能体对话
- 一个Google账号,可建Sheets表格并授权OAuth2,另有一个Google日历
- WhatsApp Business Cloud API的测试号或正式号、phone number ID和访问令牌;纯练习阶段可用本站合成消息替代
- 店主的接收手机号,需带国家区号,如+34 612 345 678
具体怎么做
准备两份西语表头的Google Sheets
新建一个电子表格,建两个标签页,名称必须分别是Menu和Reservas(注意Reservas含重音字符相关的西语列名)。Menu页按本站建议列:plato、categoría、precio、disponible;Reservas页建议列:nombre、teléfono、fecha、hora、personas、estado、notas。填入示例菜品3至5行。原模板对具体列名有硬性要求且区分重音字符,导入模板后须打开工具节点逐一核对实际列名,再改自己表格去匹配,不要反过来改模板猜列名。
配置四套凭据并导入模板
在n8n凭据页依次创建:WhatsApp OAuth(触发用)与WhatsApp Cloud API(发送用)、Google Gemini(PaLM API)、Google Sheets OAuth2、Google Calendar OAuth2。然后从n8n模板库打开该工作流并导入到自己的实例,逐个节点绑定对应凭据。注意WhatsApp触发和发送是两套不同凭据,漏配任何一套都会在激活时报错。
绑定目标表格、日历与店主号码
在Sheets工具节点选择刚建好的电子表格,分别指向Menu与Reservas两个标签页;在Calendar工具节点选择目标日历;在内部通知的发送节点里把收件人改成店主手机号(带国家区号)。原文要求确保WhatsApp的phone number ID能从入站消息元数据中拿到,测试阶段先用合成消息时,需在练习数据里手工带上phone_number_id字段。
先用本站合成消息做隔离演练
在模板完全配好之前,不要直接激活真实触发器。本站设计一个演练做法:复制该流程,把触发器换成手动触发器加一个设置节点,填入本站下方提供的合成入站消息JSON(文字与语音两种各一条),逐节点执行,观察转写分支、菜单查询、Reservas写入、日历事件和店主通知的输出。全部通过后,再切回真实WhatsApp触发器并用测试号发一条真实消息验证。
用西语消息走完三类场景
按顺序测试三类输入:一是问价,如询问某道菜价格,确认回复为西语且价格来自Menu页;二是新建预订,确认Reservas页新增一行、日历出现对应事件、店主手机收到通知、客人收到确认;三是用同一手机号发修改或取消请求,确认按手机号续上上下文、表格行被更新且日历事件被改或删。每类至少跑一遍再交付。
可直接复制的材料
西语智能体系统提示词(本站编写)
本站独立编写的示例系统提示词,可粘贴到Gemini智能体节点的系统消息处;餐厅名、规则可按需改。原模板自带提示词需以模板内实际内容为准。
Eres el asistente de reservas del restaurante Casa Ejemplo. Respondes siempre en español, de forma breve y amable.
Reglas:
1. Si el cliente pregunta por platos o precios, consulta la pestaña Menu de la hoja de cálculo y responde solo con platos marcados como disponibles, indicando el precio exacto.
2. Para crear una reserva necesitas: nombre, fecha, hora y número de personas. Si falta algún dato, pregúntalo antes de confirmar.
3. Al confirmar una reserva, escribe la fila en la pestaña Reservas con estado "confirmada" y crea el evento en el calendario.
4. Para modificar o cancelar, busca primero la reserva existente por el número de teléfono del cliente y confirma con él antes de cambiar nada.
5. Después de cada alta, cambio o cancelación, envía el resumen al número del dueño y luego confirma al cliente.
6. Nunca inventes platos, precios ni disponibilidad que no estén en la hoja.演练用合成入站消息JSON
本站虚构的演练数据,from为虚构西班牙手机号,phone_number_id与语音URL需替换成自己测试环境的值;语音分支需真实音频文件才会实际调用转写。
{
"mensaje_texto": {
"from": "34600111222",
"phone_number_id": "TEST_PHONE_ID_001",
"type": "text",
"text": "Hola, ¿cuánto cuesta la paella valenciana? Y quiero reservar para 4 personas el sábado a las 21:00."
},
"mensaje_voz": {
"from": "34600333444",
"phone_number_id": "TEST_PHONE_ID_001",
"type": "audio",
"audio_url": "https://example.com/nota-de-voz-prueba.ogg",
"transcripcion_esperada": "Quiero cancelar mi reserva de mañana a nombre de Lucía."
}
}Sheets表头配置(本站建议版)
本站建议的列名方案;原模板要求列名含正确的西语重音字符,导入后必须以模板工具节点里实际引用的列名为准逐一核对。
{
"Menu": ["plato", "categoría", "precio", "disponible"],
"Reservas": ["nombre", "teléfono", "fecha", "hora", "personas", "estado", "notas"],
"Menu_示例行": ["Paella valenciana", "arroces", "14.50", "sí"],
"Reservas_示例行": ["Lucía Prueba", "34600333444", "2026-09-12", "21:00", "4", "confirmada", "mesa junto a ventana"]
}输入与输出示例
本站虚构演示,用于说明字段如何流动;未真实调用任何API,非原作者运行结果。
输入
客户用手机号34600111222发来西语文字:"Hola, ¿cuánto cuesta la paella valenciana? Y quiero reservar para 4 personas el sábado a las 21:00.",Menu页中Paella valenciana一行precio为14.50、disponible为sí。对应输出
文字分支不触发转写。智能体先回复客人:"La paella valenciana cuesta 14,50 €. ¿A qué nombre hago la reserva para el sábado a las 21:00 para 4 personas?",因为预订还缺姓名。客人回复"A nombre de Marco"后:Reservas页新增一行[Marco, 34600111222, 2026-09-12, 21:00, 4, confirmada, ],Google日历创建事件"Reserva Marco – 4 personas 21:00",店主手机收到通知"Nueva reserva: Marco, sábado 21:00, 4 personas",客人收到确认"Reserva confirmada a nombre de Marco para el sábado a las 21:00, 4 personas. ¡Gracias!"做完检查这些
- 同一手机号连发两轮消息时,智能体能记住第一轮已给的日期和人数,不重复追问
- 问价回复中的菜品与价格逐字来自Menu页,且disponible为否的菜品不出现在回复里
- 新建预订后Reservas页、Google日历事件、店主通知、客人确认四处都出现且内容一致
- 取消预订后Reservas行状态变为取消或该行被更新、日历对应事件被删除、店主同样收到通知
容易卡住的地方
- WhatsApp触发与发送是两套凭据,只配一套会导致能收消息但无法回复客人或通知店主
- 表格列名必须含正确的西语重音字符,把Reservas写成Reservas以外的拼写或漏掉重音会导致读写失败
- 店主手机号漏加国家区号时通知发送会失败,格式参考+34开头
- 语音分支依赖能下载到真实语音文件,本站合成JSON里的假音频URL无法真正转写,演练语音分支需上传真实ogg文件
- 原模板未给出逐列清单,本站列名是建议方案,导入后必须以模板实际节点配置为准核对
- 不保证WhatsApp Cloud API与Gemini的调用免费,两者均可能产生各自平台的费用
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Gestiona reservas de restaurante por WhatsApp con Gemini y Google Sheets
- 原作者
- Bitclick Solutions | B2B Engineering & Autonomous AI
- 原始发布日期
- 2026-09-06T09:40:15.142Z
- 来源
- https://n8n.io/workflows/19281