2026-10-14 · 原文发布日
n8n自动判定赛车技检结果并通知赛事控制中心
面向赛车技术检查的流程:webhook接收车检提交的车辆信息、检查员备注和安全装备清单,按各组别换件周期逐项计算到期天数和合格与否,汇总后由OpenAI分类为通过、有条件通过返修、不通过或取消资格;结果回传赛事计时API,取消资格会升级到首席裁判Slack频道,最终归档Google Sheets并通知技检组。
原文要点
原模板说明:用webhook接收车检App POST,拆 equipmentItems,按组别换件周期算每项到期天数和合格;汇总车辆合规摘要后交给OpenAI文本分类到Pass/Conditional-Pass-Rework/Fail/Disqualify,写入inspectionCategory并分流。Pass会核对gridEligibilityCutoff并带gridEligible上报计时API;Disqualify升级首席裁判Slack;最终归档Google Sheets并通知技检组。设置项含OpenAI、HTTP Header Auth、Google OAuth、Slack与期限表。
这次做成什么
在n8n搭一条可测试的技检判定流:车检终端POST进来后,先由代码节点做确定性到期计算,再由AI只做四分类,最后按类别回传计时系统、升级、归档和通知。本站练习用合成 payload 与占位端点,先跑通字段映射再接真实凭据。
准备什么
- 一个可新建workflow的n8n实例和可外发的测试环境
- OpenAI API凭据,仅用于文本分类节点
- 赛事计时API的HTTP Header Auth占位凭据与基础URL
- Google Sheets OAuth凭据、已建Tech_Inspection_Archive工作表
- Slack工作区凭据及首席裁判、技检组两个频道ID
- 一份不含真实车手隐私的合成技检JSON
具体怎么做
建立入口与字段契约
新增Webhook节点,方法设POST,路径用/tech-inspection-submission;在练习说明里固定必填字段:carNumber、classCode、inspectorNotes、gridEligibilityCutoff、equipmentItems[],每个equipmentItem含itemType、installedAt、conditionNote。先用Respond to Webhook回显received:true,确认车检App或curl能把JSON送到。
拆分装备并计算到期
接Split Out Items拆分equipmentItems,再进Code节点。用本站示例配置里的renewalCyclesDays:helmet 730、harness 1825、fireExtinguisher 365、rollPadding 1095;按installedAt+周期-今天算daysToExpiry,<=0判itemPass=false;conditionNote含frayed、crack、missing、gauge low等异常关键词也直接false并记入blockingIssues,同时补classRatingLabel便于人读。
聚合每车合规摘要
用Aggregate把分 item 结果合回per-car对象:汇总totalItems、failedItems、nearestExpiryDays、blockingIssues数组、carNumber、classCode、inspectorNotes。注意保留gridEligibilityCutoff原值,后面Pass分支要判断是否还有排位资格。
OpenAI只做受控四分类
在Text Classifier或OpenAI Chat节点粘贴下方提示词,输入只放合规摘要JSON和inspectorNotes,要求输出且只输出Pass、Conditional-Pass-Rework、Fail、Disqualify之一。随后Set节点写inspectionCategory,再用Switch按该字段分四路,避免让AI改数字或编造规则。
按结果回传、升级与归档
Pass分支先IF比较now<=gridEligibilityCutoff得到gridEligible,再HTTP Request POST到计时API占位URL,body含carNumber、result:PASS、gridEligible、failedItems;Conditional/Fail/Disqualify分别POST对应result,Disqualify额外发Slack到首席裁判频道。四路最后都Append到Google Sheets的Tech_Inspection_Archive,并发技检组Slack摘要。
可直接复制的材料
受控分类提示词
本站独立编写;分类阈值需在真实模板与赛事规则中核对后再启用。
你是赛车技术检查结果分类器。只允许输出四个标签之一:Pass、Conditional-Pass-Rework、Fail、Disqualify。不要解释,不要输出JSON,不要改数字。判定依据:failedItems为0且nearestExpiryDays>0输出Pass;存在1到2个非安全关键项到期或备注写明可现场返修,输出Conditional-Pass-Rework;存在安全关键项不合格、到期项超过2个或备注出现unsafe、not compliant,输出Fail;备注出现deliberate tampering、forged seal、repeated offense或blockingIssues含cage/seatbelt critical,输出Disqualify。输入:{ "carNumber":"{{$json.carNumber}}", "classCode":"{{$json.classCode}}", "totalItems":{{$json.totalItems}}, "failedItems":{{$json.failedItems}}, "nearestExpiryDays":{{$json.nearestExpiryDays}}, "blockingIssues":{{$json.blockingIssues}}, "inspectorNotes":"{{$json.inspectorNotes}}" }练习用字段与周期配置
合成占位配置;URL、频道、表ID和周期必须替换并按赛会规则核对,不是可导入原工作流。
{ "webhookPath":"tech-inspection-submission", "timingApiBaseUrl":"https://timing-api.example.invalid", "headerAuthName":"X-RaceControl-Key", "spreadsheetId":"REPLACE_GOOGLE_SHEET_ID", "archiveSheet":"Tech_Inspection_Archive", "slackChiefStewardChannel":"C_REPLACE_CHIEF", "slackTechCrewChannel":"C_REPLACE_TECH", "renewalCyclesDays":{ "helmet":730, "harness":1825, "fireExtinguisher":365, "rollPadding":1095 }, "criticalItemTypes":["harness","rollPadding"], "classLabels":{ "GT3":"GT3 / SRO-style", "CLUB":"Club / annual" } }合成技检提交数据
虚构练习输入;installedAt用日期便于Code节点计算,请勿放真实车手个人信息。
{ "carNumber":"77", "classCode":"GT3", "inspectorNotes":"harness webbing frayed, fire bottle gauge low, driver cooperative", "gridEligibilityCutoff":"2026-10-18T09:30:00+08:00", "equipmentItems":[ { "itemType":"helmet", "installedAt":"2026-01-05", "conditionNote":"clean" }, { "itemType":"harness", "installedAt":"2024-06-01", "conditionNote":"frayed shoulder strap" }, { "itemType":"fireExtinguisher", "installedAt":"2025-10-01", "conditionNote":"gauge low" } ] }输入与输出示例
本站虚构演示,用于对齐字段;未调用真实OpenAI/计时API,也非作者运行结果。
输入
向webhook POST上方合成数据:车号77、GT3,当前练习日期设为2026-10-14,harness已865天且有frayed,fireExtinguisher安装13天但gauge low,helmet 283天正常。对应输出
聚合摘要约为{carNumber:"77",totalItems:3,failedItems:2,nearestExpiryDays:352,blockingIssues:["harness condition:frayed shoulder strap","fireExtinguisher condition:gauge low"]};AI标签示例输出Fail;计时API body含result:"FAIL"、gridEligible:false;Sheets追加一行category=Fail、failedItems=2,Slack技检组收到车号77需返修。做完检查这些
- Webhook测试请求返回200,且后续节点能读到carNumber与equipmentItems数组
- Code节点对同一装备同时检查到期天数和conditionNote,critical项失败会进入blockingIssues
- Switch四路都能用伪造inspectionCategory各自触发一次,不会只走默认分支
- Pass分支在now晚于gridEligibilityCutoff时把gridEligible置为false再上报
- Disqualify路线除计时API外,还向首席裁判频道多发一条升级消息
- Google Sheets追加列至少含carNumber、inspectionCategory、failedItems、nearestExpiryDays、timestamp
容易卡住的地方
- AI分类不该替代到期计算;把规则交给模型会导致同车不同判
- installedAt缺失或时区混乱会让daysToExpiry整体偏移,需统一UTC或本地时区
- example.invalid是占位域,接真API前必须替换并确认Header Auth名称
- Google工作表名不一致会追加失败,先手工建Tech_Inspection_Archive
- gridEligibilityCutoff必须原样透传,格式化后丢掉时区会影响排位资格
- Slack频道ID不是频道名,复制错会把取消资格消息发到错误地点
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Route motorsports tech inspection results with OpenAI, Google Sheets, and Slack
- 原作者
- Swapnil Mandloi
- 原始发布日期
- 2026-10-14T03:57:36.219Z
- 来源
- https://n8n.io/workflows/20922