2026-10-05 · 原文发布日
加油站油罐库存差异自动核算与调查提醒
这个免费n8n流程在换班时接收POST webhook(station_id和shift_id),从Google Sheets读取该站油罐、读数、加油机销售、配送和历史审计数据,逐罐计算预期与实际库存差异、容差、盈亏方向、漂移模式和风险分;需要复核时把上下文发给Gemini生成不带指责语气的调查摘要和建议措施,完整记录写回Audit_Log表,并把警报、严重差异或数据缺口通知发到Slack。
原文要点
n8n免费模板20431。流程在换班时接收POST webhook(字段station_id、shift_id,可选shift_end):从Google Sheets读取该站在营油罐、当班油罐读数、加油机累计销售、配送记录与历史审计→逐罐计算预期与实际关班库存、差异、容差、盈亏方向(损耗/盈余)、基线z分数、漂移模式与风险分,并标记数据缺口或油枪/配送异常→差异达到复核条件时把计算上下文发给Gemini,生成不带指责语气的JSON调查摘要(可能原因与建议措施)→完整记录(含AI结论)写入Audit_Log表→对需通知的油罐发Slack(警报、严重差异、配送短缺、数据缺口)→向webhook调用方返回JSON汇总。
这次做成什么
搭一条「换班信号→湿库存核算→AI生成中性调查摘要→归档与分级提醒」的加油站内控流程。本站设计先用合成Sheets数据与手动webhook触发跑通计算与分支,再接真实POS换班系统,避免在未验证前动用真实站点数据。
准备什么
- n8n实例(webhook需可被换班系统访问)
- Google Sheets服务账号凭据,表格含Tanks、Tank_Readings、Nozzle_Sales、Deliveries、Audit_Log五个页
- Google Gemini(Google PaLM)API凭据
- Slack凭据与目标频道
- 能POST JSON的测试工具(如curl或Postman)用于模拟换班调用
具体怎么做
搭建五张Google Sheets数据页
按模板读取的列建Tanks(station_id、tank_id、油品、容量、容差)、Tank_Readings(shift_id、tank_id、开班/关班读数)、Nozzle_Sales(shift_id、tank_id、累计升数)、Deliveries(shift_id、tank_id、配送升数)、Audit_Log(追加核算结果)。把表格共享给服务账号,n8n里填入文档ID并核对页名与列名完全一致。
配置webhook触发
复制Shift Close端点的POST webhook地址。先用测试工具手动发下方合成JSON,确认能按station_id与shift_id查到对应油罐与读数。真实环境中由POS/换班系统在关班时自动POST。
核对核算逻辑
逐罐预期库存=开班读数+配送量-加油机销量;差异=实际关班读数-预期库存。流程再算容差判定、损耗/盈余方向、相对历史基线的z分数、漂移模式与风险分。用合成数据手算一遍IM样例,对照流程输出确认公式一致。
接入Gemini调查摘要
添加Gemini凭据。当差异超容差或触发复核条件时,流程把该罐的计算上下文发给Gemini,用下方中性语气提示词要求返回JSON:likely_causes与recommended_actions。强调不带指责,因为摘要是给调查组而非定性结论。
接Slack并分级通知
添加Slack凭据选频道。通知条件按模板分级:严重差异、配送短缺、数据缺口、风险分超标各自触发不同消息。确认webhook最终向调用方返回JSON汇总,便于POS侧记录处理结果。
可直接复制的材料
换班webhook测试数据
本站虚构站点与班次ID;对应下方Sheets合成数据,替换为真实值前先跑通
{"station_id":"ST-07","shift_id":"SH-2026-1005-N","shift_end":"2026-10-05T22:00:00+08:00"}Sheets合成数据(三行核心记录)
本站虚构;预期库存=18400+0-8100=10300,实际9900,差异-400升(约-3.9%)超容差,用于触发复核分支
Tanks: ST-07,T1,95号汽油,30000,容差±0.5%
Tank_Readings: SH-2026-1005-N,T1,开班18400,关班9900
Nozzle_Sales: SH-2026-1005-N,T1,8100
Deliveries: SH-2026-1005-N,T1,0Gemini中性调查摘要提示词
本站独立编写,呼应原模板non-accusatory要求;字段名以导入模板为准
你是加油站湿库存核算的内控分析助手。给定某油罐的核算上下文(预期库存、实际库存、差异、容差、历史基线z分数、漂移模式、数据缺口标记),生成一份调查摘要,只返回JSON:{"summary":"150字内中性描述差异事实","likely_causes":["可能的技术性原因,如油枪计量漂移、配送短缺、读数录入错误、温度体积变化,不超过3条"],"recommended_actions":["建议核查动作,不超过3条"]}。严禁使用指责性语言,不得暗示任何员工违规,只陈述数据事实与待核查项。上下文:{{ $json }}输入与输出示例
本站虚构演示,数值由合成数据手算推出,非作者运行结果
输入
webhook收到{"station_id":"ST-07","shift_id":"SH-2026-1005-N"};T1罐开班18400升、关班9900升、销量8100升、无配送,容差±0.5%。对应输出
核算:预期10300升,实际9900升,差异-400升(损耗方向,-3.9%),超容差,触发复核。Gemini摘要(示意):{"summary":"T1罐本班损耗400升,超出容差0.5%,需核查计量与读数环节","likely_causes":["油枪计量漂移","关班读数录入偏差","温度导致的体积变化"],"recommended_actions":["校准3号油枪","复核关班读数照片记录","连续三班跟踪漂移"]}。Audit_Log追加一行完整记录,Slack收到严重差异提醒,webhook返回JSON汇总。做完检查这些
- 预期库存=开班+配送-销量的手算结果与流程输出逐罐一致
- 差异-400升、损耗方向、超容差判定与本站合成样例完全吻合
- 只有达到复核条件的油罐才调用Gemini,且返回严格JSON含likely_causes与recommended_actions
- 每个处理过的班次在Audit_Log追加一行,含AI结论字段(无AI时为空)
- 数据缺口(如读数缺失)走专门通知分支,不会误算成差异
容易卡住的地方
- 五张Sheets页的页名与列名必须和模板读取的完全一致,改名会直接报错
- webhook要能被换班系统访问,内网n8n需配反向代理或隧道
- 温度、油罐倾斜等物理因素会造成正常体积波动,容差设太紧会警报泛滥
- Gemini摘要只是调查起点,不能作为定性或处分依据
- 真实接入前用合成站点跑通,避免把真实站点数据发进未验证流程
- 重复收到同一shift_id的webhook时要确认Audit_Log不会重复记账
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Investigate fuel tank variances with Google Sheets, Gemini, and Slack
- 原作者
- iamvaar
- 原始发布日期
- 2026-10-05T09:05:22.663Z
- 来源
- https://n8n.io/workflows/20431