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

2026-10-07 · 原文发布日

n8n自动跟踪合同续约期限并草拟终止函

管理合同台账的n8n免费模板:监控Google Drive文件夹,新合同PDF进来后用LlamaParse解析成文本,GPT-4o-mini提取关键条款、风险和义务,算出通知截止日写入Sheets的合同与义务两张表并发Slack摘要;每天9点扫描90/60/30天续约节点推送带Renew/Terminate按钮的Slack消息,点击经一次性token校验后记录决定,选终止则由OpenAI起草终止通知存为Gmail草稿。

原文要点

作者Rahul Joshi发布的n8n免费模板(工作流20605):监听Google Drive文件夹中新PDF,用LlamaParse解析成markdown,OpenAI(gpt-4o-mini)抽取合同条款、风险与义务,计算通知决策截止日后写入Google Sheets的Contracts与Obligations两个标签页并发Slack摘要;每天9点扫描90/60/30天及逾期续约节点,推送带Renew/Terminate按钮的Slack消息,点击经webhook一次性token校验记录决定,选终止则由OpenAI起草终止通知存为Gmail草稿。需配置Google Drive/Sheets/Slack/Gmail/OpenAI凭据及LlamaCloud的HTTP Header Auth。

这次做成什么

在n8n中复现一套合同续约台账:新合同PDF自动入库、抽取条款义务、按续约节点推送审批按钮、终止时生成Gmail草稿。因未提供可导入的工作流文件,以下为按原文节点顺序独立设计的搭建与练习方案,需对照原模板逐一核对。

准备什么

  • 一个n8n实例(自托管需有公网可达地址,用于Slack按钮回调webhook)
  • Google Drive文件夹、含Contracts和Obligations两个标签页的Google Sheet及OAuth凭据
  • OpenAI API凭据、LlamaCloud API Key(HTTP Header Auth:Authorization Bearer)
  • Slack工作区凭据与一个测试频道、Gmail OAuth凭据
  • 一份练习用的虚构合同PDF(可用材料中的提示词先生成文本再导出)

具体怎么做

  1. 建台账表结构

    新建Google Sheet,第一个标签页命名Contracts,表头至少含contract_id、counterparty、renewal_date、decision_deadline、approval_token、milestones_sent、decision;第二个标签页命名Obligations,表头含obligation_id、contract_id、description、due_date、status。记下Spreadsheet ID备用。

  2. 搭建Drive触发与PDF解析段

    添加Google Drive Trigger监听指定文件夹的fileCreated事件,后接IF节点判断mimeType是否为application/pdf;是则Download节点取文件,用HTTP Request节点(Header Auth填Bearer LlamaCloud密钥)提交到LlamaParse,再用轮询节点循环查任务状态,超时或失败分支连Slack节点发告警到测试频道。

  3. 抽取条款并写入两张表

    取回解析后的markdown,接OpenAI节点用材料中的抽取提示词(模型按原文为gpt-4o-mini)返回结构化JSON;用Code节点计算decision_deadline(如续约日前90天),Google Sheets节点以contract_id为键upsert进Contracts,再对obligations数组逐条upsert进Obligations,最后Slack节点发合同摘要。

  4. 搭建每日9点续约扫描与按钮审批

    加Schedule Trigger(每天9:00),读取Contracts全表,Code节点计算每份合同距decision_deadline的天数,命中90/60/30或逾期且未发送过则发Slack交互消息(带Renew/Terminate按钮,value里放contract_id与一次性token),并把该节点标记写入milestones_sent列。另建Webhook节点接收按钮回调,在Sheets中校验approval_token未使用:合法则记录decision;为Terminate时调OpenAI用终止函提示词起草,Gmail节点存为草稿并Slack通知;token无效则直接回复拒绝。

  5. 端到端联测

    把示例输入的虚构合同PDF上传到被监听文件夹,确认Contracts新增一行且decision_deadline正确、Obligations写入对应义务、Slack收到摘要;手动把decision_deadline改成距今60天触发次日扫描(或临时改Schedule时间),点击Terminate按钮,确认Gmail出现草稿且token二次点击被拒绝。

可直接复制的材料

合同关键条款抽取提示词

本站独立编写的示例提示词,字段名需与你Sheets表头一致;接入OpenAI节点时把{{$json.markdown}}替换为实际markdown字段。

你是合同分析助手。下面是合同正文(markdown格式)。请只输出一个JSON对象,不要输出任何其他文字,字段如下:
{"contract_id":"合同编号或文件名","counterparty":"对方主体名称","contract_type":"合同类型","effective_date":"生效日期YYYY-MM-DD","renewal_date":"续约日期YYYY-MM-DD","notice_period_days":需提前通知天数(整数),"auto_renewal":true或false,"key_risks":["风险点1","风险点2"],"obligations":[{"description":"义务描述","due_date":"YYYY-MM-DD或null","owner":"我方或对方"}],"termination_clause":"终止条款摘要"}
如某字段在文中找不到,日期填null,数组填空数组。合同正文:
{{$json.markdown}}

终止通知函起草提示词

本站独立编写示例,输出建议由人工复核后再发;变量在n8n中用表达式从前序节点取值。

你是企业法务文书助手。根据以下合同信息起草一份中文合同到期不续约/终止通知函,要求:正式公文语气;包含合同编号、对方名称、续约日期、依据的通知期限条款、明确表达到期不续约的决定、联系方式占位;不超过500字;不要虚构法律条文编号。
合同信息:
合同编号:{{contract_id}}
对方主体:{{counterparty}}
续约日期:{{renewal_date}}
通知期限:提前{{notice_period_days}}天书面通知
终止条款:{{termination_clause}}

Contracts表测试数据

本站虚构练习数据,decision_deadline按续约日前90天手工预填用于测试扫描分支;实际由工作流计算写入。approval_token由回调校验逻辑生成,这里仅为占位示例。

contract_id,counterparty,renewal_date,decision_deadline,approval_token,milestones_sent,decision
HT-2026-001,云启数据服务(虚构)有限公司,2026-12-31,2026-10-02,tok-9f3a2c,,, 
HT-2026-002,北辰办公租赁(虚构)中心,2027-03-15,2026-12-15,tok-71bd48,,,

输入与输出示例

本站虚构演示,非原作者运行结果;日期为按90天通知期推算的练习值。

输入

上传虚构合同《云服务框架协议-云启数据.pdf》:约定服务期至2026-12-31自动续约,任一方须提前90天书面通知方可到期终止,含义务“乙方每季度首月10日前提交服务报告”。

对应输出

Contracts表新增一行:HT-2026-001 | 云启数据服务(虚构)有限公司 | 2026-12-31 | 2026-10-02;Obligations表新增:ob-001 | HT-2026-001 | 每季度首月10日前提交服务报告 | 2027-01-10 | open;Slack测试频道收到摘要:新合同HT-2026-001已入库,决策截止日2026-10-02。

做完检查这些

  • 上传PDF后Contracts表自动出现新行,且decision_deadline等于renewal_date减去通知期天数
  • 抽取的每条义务在Obligations表各占一行且contract_id与合同行一致
  • 把deadline改到60天窗口内后,定时任务发出带Renew/Terminate按钮的Slack消息且milestones_sent被标记
  • 同一token第二次点击回调被拒绝,Terminate首次点击后Gmail出现一份草稿
  • 非PDF文件进入文件夹时流程不进入解析分支

容易卡住的地方

  • Slack按钮回调要求n8n的webhook URL公网可达,内网自托管需配反向代理并在链接构建处填公网base URL
  • LlamaParse为异步任务,未做轮询超时处理会无限等待,失败必须走Slack告警分支
  • Sheets表头与节点字段映射不一致会静默写空列,先用手动执行核对每一列
  • gpt-4o-mini与LlamaCloud均可能产生费用,免费模板不等于调用免费
  • webhook需用生产URL而非测试URL,否则Slack点击后无人接收

原文与作者资料 ↗

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

原文标题
Track contract renewals and obligations with LlamaParse, GPT-4o-mini and Slack
原作者
Rahul Joshi
原始发布日期
2026-10-07T07:20:01.003Z
来源
https://n8n.io/workflows/20605