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

2026-09-08 · 原文发布日

发票争议邮件自动分级建Jira工单

每分钟监听Gmail争议邮件,自动从n8n Data Tables拉出相关付款记录、发票头、计价规则、用量日志和明细行,合并去重后重算应收金额与已付欠付汇总,交给OpenAI判定争议类型、账单是否成立并给出建议动作;账单不成立、置信度低于0.8或需人工复核的标记为升级,建最高优先级Jira工单并邮件通知财务,普通争议建常规工单。

原文要点

原模板(n8n工作流19363,WeblineIndia发布,免费)由Gmail Trigger每分钟监听争议邮件,从n8n Data Tables读取付款记录、发票头、计价规则、用量日志、发票明细行五类数据,合并去重后汇总总用量、重算应收金额、统计已付与欠付;把规范化后的争议上下文发给OpenAI,要求输出结构化JSON:争议分类、账单是否成立、置信度、建议下一步。解析校验JSON后,凡账单不成立、置信度低于0.8或需人工复核者标记升级,在Jira建Highest优先级工单并向财务发升级邮件;普通争议建常规优先级工单。需配置Gmail、OpenAI、Jira三组凭据,建好五张Data Table并按需替换表ID。

这次做成什么

在n8n搭好这条“收件箱→五表取证→AI判定→分级建Jira工单”的流程,并用本站设计的五张合成测试表与一封虚构争议邮件,验证升级与常规两条路径各自产生正确的Jira优先级和邮件行为。

准备什么

  • n8n 1.x账号,已开通Data Tables功能(1.x较新版本内置)
  • Gmail凭据:一个用于Trigger监听,一个用于发送升级通知
  • OpenAI API凭据,并在分类节点选择模型
  • Jira账号与API凭据,确认目标项目Key、Issue类型及优先级名(如Highest)
  • 一个可发测试邮件的邮箱,用于向被监听收件箱投递虚构争议邮件

具体怎么做

  1. 创建五张Data Table并灌入合成数据

    在n8n的Data Tables里建payments、invoice_data、pricing_rules、usage_logs、invoice_items五张表,字段参照下方材料中的合成CSV示例。导入模板19363后,逐个打开Data Table读取节点,把表ID指向你新建的表(节点里下拉选择即可,不必手填ID)。

  2. 绑定凭据并设定通知收件人

    Gmail Trigger节点绑定监听邮箱凭据并设定标签/发件人过滤条件;发送升级邮件的Gmail节点绑定发信凭据,把收件人设为财务邮箱;OpenAI节点绑定API凭据并选定模型;Jira节点选择项目与Issue类型,确认优先级映射Highest与常规两档。

  3. 核对OpenAI分类提示词的结构化输出要求

    打开OpenAI节点,提示词应要求模型基于注入的争议上下文(发票头、重算金额、已付欠付、计价规则、用量)输出JSON,字段含dispute_type、billing_valid、confidence、recommended_action、requires_human_review。下方材料给出本站独立编写的完整提示词,可直接替换或对照修改。

  4. 用升级场景跑通整链

    向被监听邮箱发一封测试争议邮件,主题含“发票争议”,正文引用发票号INV-2026-041,声称被重复计费。合成数据中该发票的用量重算应收为800元而实际开票1600元,账单应被判不成立。等待最多一个轮询周期,流程应:拉取五表数据→重算→OpenAI判定→因billing_valid=false升级→Jira建Highest工单→财务收到升级邮件。

  5. 用常规场景验证分支差异

    再发一封引用INV-2026-042的争议邮件,客户质疑单价但账单金额重算后成立、置信度0.92。流程应建常规优先级Jira工单,且不发送财务升级邮件。对比两次执行记录,确认升级判定只看billing_valid、confidence<0.8、requires_human_review三个条件。

可直接复制的材料

争议分类OpenAI提示词(本站独立编写,可直接粘贴)

本站按原模板描述独立撰写;注入字段名需与你合并节点实际输出的字段名对齐,模型与温度在OpenAI节点里设置。

你是发票争议审核员。以下是系统从账单数据库取出的争议上下文(JSON):
{{ $json.disputeContext }}
其中expected_charge为按计价规则与用量日志重算的应收金额,invoice_amount为实际开票金额,paid_amount为已付,pending_amount为欠付。
请只输出一个JSON对象,不要输出其他文字:
{"dispute_type":"重复计费|单价异议|用量异议|服务未交付|其他","billing_valid":true或false,"confidence":0到1的小数,"recommended_action":"退款|部分退款|维持账单并解释|转人工核查","requires_human_review":true或false,"reason":"不超过80字的依据"}
判定规则:expected_charge与invoice_amount偏差超过5%视为账单不成立;证据不足或双方说法矛盾时requires_human_review设为true。

五张合成测试表数据(CSV,逗号分隔,可直接导入Data Tables)

本站虚构合成数据:INV-2026-041用量200千次×4元=应收800元却开票1600元,用于触发升级;INV-2026-042应收1200元与开票一致,用于常规路径。金额单位为元。

invoice_data.csv:
invoice_id,customer_email,invoice_amount,issue_date
INV-2026-041,client-a@example.com,1600,2026-09-01
INV-2026-042,client-b@example.com,1200,2026-09-01

payments.csv:
invoice_id,paid_amount,payment_date
INV-2026-041,1600,2026-09-05
INV-2026-042,0,

pricing_rules.csv:
service,unit,unit_price
API调用,千次,4

usage_logs.csv:
invoice_id,service,quantity
INV-2026-041,API调用,200
INV-2026-042,API调用,300

invoice_items.csv:
invoice_id,item,quantity,line_amount
INV-2026-041,API调用费,200,1600
INV-2026-042,API调用费,300,1200

输入与输出示例

本站虚构演示,非实际运行结果;JSON与工单字段为示意格式。

输入

测试邮件:主题“发票争议 INV-2026-041”,正文“我们9月账单INV-2026-041被收了1600元,但后台显示用量只有20万次,按每千次4元应是800元,疑似重复计费。”

对应输出

OpenAI输出{"dispute_type":"重复计费","billing_valid":false,"confidence":0.95,"recommended_action":"退款","requires_human_review":false,"reason":"重算应收800元与开票1600元偏差50%"};升级条件命中,Jira建优先级Highest工单“发票争议 INV-2026-041”,Gmail向财务邮箱发出升级通知。

做完检查这些

  • 五张Data Table均建好且读取节点全部指向新表,执行时无“表不存在”报错
  • 合并重算节点输出的expected_charge=800、invoice_amount=1600,与合成数据手工核算一致
  • INV-2026-041案例产生Highest优先级Jira工单且财务收到升级邮件
  • INV-2026-042案例产生常规优先级工单且不触发升级邮件
  • OpenAI节点输出能被JSON解析节点成功解析,confidence字段为0到1之间数值

容易卡住的地方

  • Gmail Trigger按轮询工作,新邮件最长可能等一个周期才触发,测试时别反复重发造成多条工单
  • Data Tables是n8n较新版本功能,老版本自托管实例需升级后才能使用
  • Jira优先级名称区分大小写且随项目配置而异,Highest在你的项目里可能叫别的名字,需在建单节点核对
  • 升级阈值的置信度0.8与三条件是原模板设定,若改提示词字段名,解析与升级判断节点要同步改
  • 争议邮件正文需含能在表中匹配到的发票号,否则五表查询为空,AI只能凭空判断

原文与作者资料 ↗

本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。

原文标题
Triage invoice disputes from Gmail with OpenAI and Jira
原作者
WeblineIndia
原始发布日期
2026-09-08T05:35:05.266Z
来源
https://n8n.io/workflows/19363