2026-10-06 · 原文发布日
Telegram客服机器人:AI答问、预约并通知老板
一个免费n8n模板,把Telegram机器人变成带预约能力的客服。收到消息后由Gemini驱动的AI代理判断意图:查Google Calendar空闲时段并在用户确认后建日程,或从Google Sheets的FAQ/报价表里找答案生成简短回复,并把结果发回客户。若生成了预约或用户投诉需要人工,会另行用Telegram通知店主。配置涉及Telegram、Google日历、表格与Gemini四类凭证。
原文要点
原模板是免费n8n工作流:Telegram Trigger收消息,提取chat ID、文本和 sender 名,交给带短期记忆的Gemini AI代理;按意图查Google Calendar空闲并在确认后建事件,或查Google Sheets FAQ/报价生成简短答复;回复去掉内部标签发回客户,若已预约或需人工/投诉,再用Telegram通知老板。设置只明确四类凭证与GOOGLE_SHEETS_FAQ_DOC_ID、BUSINESS_OWNER_TELEGRAM_CHAT_ID两个占位值,未给可下载JSON。
这次做成什么
在本站独立练习里搭一个“可模拟”的最小客服链路:Telegram进线→意图分流→FAQ答复或预约确认→客户回复→老板通知。先把每一步字段、凭证和测试数据固定下来,再到原模板核对节点名与按钮。
准备什么
- 一个可收发消息的Telegram测试机器人与目标chat ID
- n8n实例与Telegram、Google Calendar、Google Sheets、Gemini四类凭证
- 一份含问题、答案、价格栏位的FAQ/报价Google Sheet
- 老板通知专用Telegram chat ID,先用测试账号代替真人
- 原模板页面对照权限:日历可读写、表格可读、机器人可发消息
具体怎么做
准备触发与字段
在n8n新建流程,放Telegram Trigger并选测试机器人凭证;用一条Set节点把message.chat.id改名为chat_id,message.text改名为customer_text,message.from.first_name或username合成sender_name。测试数据先用本站虚构payload,不连接真实客户群。
建立意图分支
在AI代理前加本站规则分流:customer_text含“预约/时间/到店”进入booking,含“投诉/人工/退款”进入human,其余进faq。真实模板由Gemini判断,这里练习时用IF先跑通字段,AI提示词只负责生成短答案和输出标签,不让它直接改日历。
连接日历与表格
FAQ分支用Google Sheets按关键词读取答案;预约分支用Google Calendar先查空闲,再把候选时段回给客户,客户回复“确认”后才Create Event。日历ID先按原文示例用primary核对,事件标题用sender_name+电话后四位,描述里写来源chat_id。
输出与老板通知
发回客户前用Function/Set移除形如[BOOKED]、[HUMAN]的内部标签;Switch按标签分支:booking_success给老板发“客户姓名、chat_id、确认时间、事件链接占位”,human_needed发“原文、紧迫原因、最近回复”,普通FAQ不发老板。完成后用Execute Workflow手动跑一遍测试payload。
可直接复制的材料
AI客服分流提示词(本站独立版)
本站编写的练习提示词;需把faq_rows、calendar_slots由前置节点注入,未核对原模板实际系统提示。
你是店铺Telegram客服。只能基于给定信息回答,不要编造价格、库存或预约结果。输入:customer_text={{customer_text}};sender_name={{sender_name}};faq_rows={{faq_rows}};calendar_slots={{calendar_slots}}。任务:1)判断intent,只能是faq、booking_need_time、booking_confirm、human_complaint、human_other之一;2)生成visible_reply,中文不超过120字,语气礼貌;3)若预约确认,输出booking_time_iso与summary;4)在末尾只给系统看的tags字段用JSON,不放进visible_reply。输出严格JSON:{"intent":"faq","visible_reply":"...","booking_time_iso":"","summary":"","owner_alert":false,"owner_reason":""}。字段映射与占位配置
仅本站方案,doc_id、owner_chat_id、calendar_id都要替换;不是原作者工作流文件。
{
"telegram_trigger": {"credential": "TELEGRAM_TEST_BOT", "output_map": {"chat_id": "$json.message.chat.id", "customer_text": "$json.message.text", "sender_name": "$json.message.from.first_name"}},
"google_sheets": {"credential": "GOOGLE_SHEETS_OAUTH2_TEST", "doc_id": "替换GOOGLE_SHEETS_FAQ_DOC_ID", "sheet": "FAQ", "columns": ["keyword", "answer", "price"]},
"google_calendar": {"credential": "GOOGLE_CALENDAR_OAUTH2_TEST", "calendar_id": "primary需在原模板核对", "create_event_summary": "{{sender_name}} 到店预约"},
"owner_notify": {"business_owner_chat_id": "替换BUSINESS_OWNER_TELEGRAM_CHAT_ID", "send_on": ["booking_success", "human_needed"]}
}FAQ测试表CSV
合成数据,导入测试Sheet前把价格和规则换成自己的。
keyword,answer,price
营业时间,每天10:00-20:00,节假日另行通知,0
洗牙,常规洁牙约30分钟,先预约再到店,199
退款,未消费项目可在门店规则内申请,需人工确认,0输入与输出示例
本站虚构演示,未运行原模板;示例价199元只是测试值。
输入
{"message":{"chat":{"id":88001234},"text":"想预约明天下午洗牙,多少钱?","from":{"first_name":"林测试"}}}对应输出
{"intent":"booking_need_time","visible_reply":"常规洁牙本站示例价199元,约30分钟。明天下午可先核对空闲时段;请回复可接受的14:00-18:00时间段,确认后再建日历。","booking_time_iso":"","summary":"","owner_alert":false,"owner_reason":""}做完检查这些
- Trigger测试后能看到chat_id、customer_text、sender_name三个字段且不为空
- 含“预约”的测试消息进入booking分支,含“投诉”的进入human分支,普通价格问句进入faq分支
- 客户可见回复里没有[BOOKED]、[HUMAN]或内部JSON标签
- 只有booking_success或human_needed两类结果会发到老板测试chat_id
- 日历事件只在客户明确确认后创建,未确认只查空闲不落日程
容易卡住的地方
- 原文只给四类凭证与两个占位ID,未提供可导入n8n JSON,不能把本站映射当成原文件
- 日历calendar_id示例为primary,实际共享日历或时区不同会导致查空闲为空
- 机器人未与客户或老板测试账号建立会话时,发送消息会失败
- FAQ表列名若与原模板不一致,要回原文核对而不是强行套用本站列名
- AI代理可能输出多余标签,发送客户前必须有移除或校验步骤
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Handle Telegram booking and support chats with Gemini, Calendar and Sheets
- 原作者
- Onur Olgun
- 原始发布日期
- 2026-10-05T20:01:35.263Z
- 来源
- https://n8n.io/workflows/20492