AI PLAY玩法更新持续收录
← 回到更新流

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账号可选,没有就跳过联系人同步节点

具体怎么做

  1. 建表单触发器并收测试单

    新建Workflow,加n8n Form Trigger,字段设:姓名、邮箱、电话、手表品牌型号、故障描述(必填文本),照片(文件类型,勾选必填)。点Execute Node拿到测试表单URL,用下方测试数据提交一次,确认二进制照片字段出现在输出里。

  2. 规范化并生成工单号

    加Code或Set节点:把表单字段映射成customer_name、email、phone、watch_model、issue_text;用表达式生成ticket_id,例如 'WR-' + 当前时间戳;补上submitted_at。若有GoHighLevel凭据,可加其节点先search后upsert联系人;没有就先跳过,不影响主线。

  3. 照片真伪检测

    加HTTP Request节点POST到Sightengine检测接口,body带上api_user、api_secret和二进制图片,按返回的type.ai_generated分值在Set节点写authenticity_status(如>0.5标suspected_ai)。没账号时先用本站模拟返回数据在Code节点里写死,把流程跑通后再换真接口。

  4. AI估价与复核判断

    加AI Agent或Gemini节点,系统提示词用下方材料一的完整提示词,用户消息拼入故障描述、品牌型号和authenticity_status;要求结构化输出JSON。分支用IF节点:needs_review为true走店家复核邮件,false直接把估价邮件发给顾客。

  5. 落表与发信

    加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