2026-09-04 · 原文发布日
每天自动汇总freee未结发票并推送提醒
面向使用日本freee记账的团队的n8n流程:每天早上九点从freee Invoices API拉取未结清发票,计算每张逾期天数并按紧急度排序,交给Gemini生成简短摘要和建议的下一步动作,随后把结果追加到Google Sheets留档、发到Slack频道并邮件通知会计联系人。逾期阈值、摘要口吻、发送渠道都可在配置节点调整。
原文要点
该n8n模板每天早晨9点(Schedule Trigger,cron可改)从freee Invoices API拉取未结清发票,计算逾期天数并按紧急度排序,交给Google Gemini生成简短纯文本摘要和建议下一步,再追加到Google Sheets指定标签页、经Slack Incoming Webhook发帖、用Gmail邮件发给会计联系人。配置集中在Config节点:freee company_id、overdue_threshold_days、Sheets ID与标签名、Slack webhook URL、升级通知邮箱。freee部分发票功能可能需付费套餐;freee OAuth令牌会定期过期,节点返回401时需在凭据设置里刷新连接。
这次做成什么
复刻这条“定时→freee拉数→算逾期排序→Gemini摘要→三渠道分发”的链路,并用一份合成发票数据先跑通整条流程,确认字段映射和提示词后再接真实freee账号。
准备什么
- 一个n8n实例(自托管或n8n Cloud均可)及创建工作流权限
- freee账号与freee OAuth2应用(Client ID和Secret),能访问Invoices API
- Google账号:Gemini API密钥、Sheets与Gmail的OAuth2凭据
- Slack工作区已创建Incoming Webhook并能拿到webhook URL
- 用于隔离测试的合成发票JSON,绝不直接使用生产数据
具体怎么做
搭好Config配置节点
在工作流开头放一个Set节点命名为Config,写入以下字段:company_id(freee后台事业所ID)、overdue_threshold_days=30、spreadsheet_id与sheet_tab(先在Google Sheets建好“发票跟进日志”标签页)、slack_webhook_url(Slack Incoming Webhook的URL)、notify_email(会计联系人邮箱)。后续所有节点从这里读取,改阈值只动这一个节点。
配置定时与freee拉取节点
加Schedule Trigger,cron设为0 9 * * *(每天早9点)。接一个HTTP Request节点(或freee专用节点),用freee OAuth2凭据请求发票列表,筛选status为未结清(如unsettled)的发票。先用示例材料里的合成JSON粘贴到Code节点模拟API返回,验证链路再切真实凭据。
计算逾期天数并排序
在Code节点里对每张发票计算 days_overdue = 今天 - due_date(负值记0),附加上invoice_number、partner_name、amount、total_unsettled_count等汇总字段,按days_overdue降序排序,把数组和合计金额拼成一段纯文本清单传给下一步。
接Gemini生成摘要
加Gemini节点,粘贴材料中的提示词,把上一步的排序清单作为变量插入。输出要求为简短纯文本(无Markdown),包含总张数、总金额、前3张最紧急发票和一句建议下一步。
三渠道分发并留档
Google Sheets节点选Append模式,列映射为date=当天日期、summary=Gemini输出、total_amount=合计金额;Slack节点用HTTP POST向webhook发送{"text": 摘要};Gmail节点发给Config里的notify_email。三个渠道不需要的可整节点删除,其余连线不受影响。
可直接复制的材料
Gemini逾期发票摘要提示词
本站独立编写的提示词,{{变量}}在n8n中用表达式替换;原文只说prompt可编辑,未给出全文,此为本站补写。
你是会计团队的应收助理。下面是公司当前所有未结清发票,已按逾期天数降序排列。\n\n发票清单:\n{{invoice_list}}\n\n汇总:共{{total_count}}张未结清,合计{{total_amount}}日元。严重逾期阈值为{{overdue_threshold_days}}天。\n\n请输出一段不超过200字的日文或中文纯文本(不要使用Markdown符号),包含:1) 一句话总览(张数与合计金额);2) 最紧急的3张发票(编号、客户名、金额、逾期天数);3) 一条具体的下一步建议(例如今天先电话催收某客户)。语气简洁、务实,面向会计负责人。合成未结清发票测试数据
本站虚构的合成数据,假设运行日为2026-09-04,对应逾期30天、10天、3天;先粘到Code节点当假API返回使用。
[{"invoice_number":"INV-2026-041","partner_name":"株式会社サンプル商事","amount":320000,"due_date":"2026-08-05"},{"invoice_number":"INV-2026-052","partner_name":"山田デザイン合同会社","amount":88000,"due_date":"2026-08-25"},{"invoice_number":"INV-2026-058","partner_name":"テストフーズ株式会社","amount":154000,"due_date":"2026-09-01"}]Config节点字段清单
company_id和spreadsheet_id需替换成你自己的值;webhook与邮箱请用测试频道和测试邮箱验证后再换生产。
company_id: 1234567\noverdue_threshold_days: 30\nspreadsheet_id: 1AbCdEfGh_你的表格ID\nsheet_tab: 发票跟进日志\nslack_webhook_url: https://hooks.slack.com/services/T000/B000/XXXX\nnotify_email: accounting@example.com输入与输出示例
本站虚构演示,用于说明期望输出格式,非原作者运行结果,未实际调用Gemini。
输入
运行日2026-09-04,三张合成发票:INV-2026-041(サンプル商事,32万日元,到期2026-08-05)、INV-2026-052(山田デザイン,8.8万日元,到期2026-08-25)、INV-2026-058(テストフーズ,15.4万日元,到期2026-09-01)对应输出
【未结清发票日结】共3张未结清,合计562,000日元。最紧急:INV-2026-041 サンプル商事 320,000日元(逾期30天);INV-2026-052 山田デザイン 88,000日元(逾期10天);INV-2026-058 テストフーズ 154,000日元(逾期3天)。建议:今天上午先致电サンプル商事确认付款进度,并同步向对方财务重发发票PDF。做完检查这些
- Schedule Trigger手动执行一次后,Code节点输出中每张发票的days_overdue与到期日相差天数一致且按降序排列
- Google Sheets“发票跟进日志”标签页新增一行,date、summary、total_amount三列均有值且金额与合计一致
- Slack测试频道收到一条纯文本消息,内容与Sheets留档的摘要完全相同
- Gmail草稿箱或收件箱出现发往notify_email的邮件,正文中不含{{变量}}残留
- 把overdue_threshold_days从30改为7再跑一次,提示词中的阈值文本随之变化,无需改动其他节点
容易卡住的地方
- freee的OAuth访问令牌会定期过期,freee节点返回401时需到凭据设置刷新连接,不是工作流本身坏了
- freee部分发票相关功能可能要求付费套餐,接入前先到freee官方确认你的套餐含Invoices API权限
- Gemini有时输出Markdown加粗符号,Slack会显示星号,可在提示词里强调纯文本或加一步正则清理
- Cron时区默认按n8n实例所在时区,9点没触发时先检查实例时区设置
- 真实切换前务必用合成数据和测试频道演练,避免把测试摘要发给真实会计联系人
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Summarize unpaid freee invoices with Gemini, Slack, Google Sheets, and Gmail
- 原作者
- 手嶋弘樹
- 原始发布日期
- 2026-09-04T03:59:51.431Z
- 来源
- https://n8n.io/workflows/19177