2026-10-05 · 原文发布日
手表维修估价表单:AI看图报价并自动回邮件
面向小型维修店的n8n模板:顾客在n8n表单提交维修需求并上传手表照片,流程先把客户信息同步到GoHighLevel,再用Sightengine检测照片是否疑似AI生成,然后由Google Gemini判断问题类型、给出价格区间和工期、决定是否需要人工复核,并草拟顾客邮件。所有工单记入Google Sheets,需要复核的通知店家,不需要的直接把AI估价发给顾客。照片真伪检测这一步对防骗单挺实用。
原文要点
原模板流程:n8n表单触发器收集维修请求并强制上传手表照片,规范化后在GoHighLevel查找或新建联系人;重新挂接照片二进制数据、提取图片元数据并生成工单号和时间戳;调Sightengine接口给照片打“疑似AI生成”分数;再用Google Gemini(作者写明模型为models/gemini-3.1-flash-lite)以结构化输出判断问题类型、价格区间、工期和是否需人工复核,并起草客户邮件;全部记录写入Google Sheets的“Repair Tickets”表,按复核标志走Gmail两个分支通知店家或顾客。Sightengine的api_user和api_secret在模板里是硬编码,需换成自己的。
这次做成什么
在自己n8n里搭一条同构练习流:表单收单→生成工单号→照片真伪检测→AI估价→按复核标志分支→落表→发信,跑通每个分支各一次。
准备什么
- 一个可登录的自建或云端n8n实例并允许表单文件上传
- 一个测试用Google账号,能建Sheets并配Gmail OAuth2
- Sightengine测试账号的api_user与api_secret,或用本站模拟数据代替
- Google Gemini API密钥,注意调用可能产生费用
- GoHighLevel账号可选,没有就跳过联系人同步节点
具体怎么做
建表单触发器并收测试单
新建Workflow,加n8n Form Trigger,字段设:姓名、邮箱、电话、手表品牌型号、故障描述(必填文本),照片(文件类型,勾选必填)。点Execute Node拿到测试表单URL,用下方测试数据提交一次,确认二进制照片字段出现在输出里。
规范化并生成工单号
加Code或Set节点:把表单字段映射成customer_name、email、phone、watch_model、issue_text;用表达式生成ticket_id,例如 'WR-' + 当前时间戳;补上submitted_at。若有GoHighLevel凭据,可加其节点先search后upsert联系人;没有就先跳过,不影响主线。
照片真伪检测
加HTTP Request节点POST到Sightengine检测接口,body带上api_user、api_secret和二进制图片,按返回的type.ai_generated分值在Set节点写authenticity_status(如>0.5标suspected_ai)。没账号时先用本站模拟返回数据在Code节点里写死,把流程跑通后再换真接口。
AI估价与复核判断
加AI Agent或Gemini节点,系统提示词用下方材料一的完整提示词,用户消息拼入故障描述、品牌型号和authenticity_status;要求结构化输出JSON。分支用IF节点:needs_review为true走店家复核邮件,false直接把估价邮件发给顾客。
落表与发信
加Google Sheets节点append到“Repair Tickets”工作表,列结构见材料三;再加两个Gmail节点分别对应两分支,店家通知收件人改成自己的测试邮箱,逐分支各跑一次确认。
可直接复制的材料
Gemini估价结构化输出提示词(本站编写)
本站独立编写的练习提示词,原模板的实际提示词未公开;模型名作者写的是models/gemini-3.1-flash-lite,是否可用需在你的Gemini凭据里核对;{{ }}变量按你的节点表达式语法替换。
你是一家钟表维修店的估价助手。根据顾客提交的维修信息,输出严格的JSON,不要输出任何其他文字。
输入信息:
- 手表品牌型号:{{watch_model}}
- 顾客故障描述:{{issue_text}}
- 照片真伪状态:{{authenticity_status}}(suspected_ai表示照片疑似AI生成,需提高警惕)
判断规则:
1. issue_type从以下枚举选一个:换电池、表带更换、机芯保养、进水维修、表镜更换、走时校准、其他。
2. price_min与price_max给出人民币估价区间(整数),无法判断时给出该品类常见区间并在reason说明。
3. turnaround_days给出预计工期天数(整数)。
4. 满足任一条件时needs_review为true:照片状态为suspected_ai;描述中出现进水、摔落、古董表、限量版字样;估价上限超过2000元;描述少于10个字。
5. customer_email是给顾客的中文邮件正文,不超过120字,语气礼貌,包含估价区间和工期,不要承诺最终价格。
输出JSON格式:{"issue_type":"...","price_min":0,"price_max":0,"turnaround_days":0,"needs_review":false,"reason":"...","customer_email":"..."}表单测试提交数据
本站虚构的测试数据,不含真实个人信息;照片请用一张自己拍的任意手表测试图。
{"customer_name":"陈晓测试","email":"chentest@example.com","phone":"13800001234","watch_model":"精工 Seiko 5 SNK809","issue_text":"手表昨天淋雨后表镜内有雾气,走时变慢,疑似进水,想问问维修大概多少钱。","photo_filename":"watch_front_test.jpg"}Repair Tickets工作表列结构
本站按原模板描述整理的列名建议;原模板列名未逐字公开,建表后把Sheets节点字段映射一一对上即可。
ticket_id, submitted_at, customer_name, email, phone, watch_model, issue_text, authenticity_status, ai_generated_score, issue_type, price_min, price_max, turnaround_days, needs_review, review_reason, email_sent_to, status输入与输出示例
本站虚构演示,AI实际输出每次不同,未在原模板运行验证。
输入
提交材料二的测试单:精工SNK809淋雨后表镜起雾、走时变慢,authenticity_status为pass(照片检测未见AI生成迹象)。对应输出
AI节点返回:{"issue_type":"进水维修","price_min":300,"price_max":1200,"turnaround_days":7,"needs_review":true,"reason":"描述含进水关键字,需拆机检查后才能确定报价","customer_email":"您好,您的精工手表疑似进水,初步估价300-1200元,工期约7天,师傅拆检后会确认最终价格。"};因needs_review为true,流程走复核分支:Sheets追加一行,Gmail给店家测试邮箱发复核通知,给顾客发已收到 acknowledgement。做完检查这些
- 表单不选照片时无法提交,提交后二进制字段在触发器输出中可见
- 同一张测试照片走流程后,Sheets中出现含ticket_id与估价字段的完整一行
- 把needs_review人为置true和false各跑一次,两封邮件分别发到店家与顾客测试邮箱
- 把Sightengine凭据换成无效值时HTTP节点报错,流程在此处停下而不是静默继续
容易卡住的地方
- Sightengine凭据在原模板是硬编码的,导入后先替换成自己的再激活
- Gmail与Sheets的OAuth2是两套凭据,漏配一个会导致分支发信失败
- 文件上传在Form Trigger里需显式开启,且自托管n8n要确认二进制数据存储配置
- AI估价只是区间参考,提示词里不要让它承诺最终价,避免与顾客纠纷
- Gemini调用和Sightengine检测都可能计费,练习时控制测试次数
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Triage watch repair requests with Google Gemini, HighLevel, Sightengine and Gmail
- 原作者
- iamvaar
- 原始发布日期
- 2026-10-05T08:50:38.195Z
- 来源
- https://n8n.io/workflows/20427