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

2026-09-01 · 原文发布日

自动盯日本法定年假达标并生成提醒

每月一号运行的n8n流程:从Google Sheets两个分页读员工名册和休假记录,按员工ID合并后算出每人的年假授予日、截止日和缺口天数,筛出临近截止仍未达法定最低天数的人。然后让Gemini生成两段日文文案,给员工发Gmail提醒、给HR发Slack汇总,并把通知记录回写Sheets。休假规则、提醒窗口都在配置里可调。

原文要点

原模板是一个每月1号运行的n8n工作流:从Google Sheets的Employees与LeaveLog两个分页按employeeId合并数据,计算每位在职员工的年假授予日、截止日、已休天数与法定最低天数的缺口,只保留截止日落在提醒窗口内且仍有缺口的人,再调用Google Gemini生成两段日文文案(员工版提醒和一行HR汇总),经Gmail发给员工、Slack发给HR频道,并把通知记录追加到NotificationLog分页。休假规则与提醒窗口都写在配置值里。原工作流文件需在n8n.io模板页自行导入,本站不附其JSON。

这次做成什么

照着本页搭好这套月度合规检查:准备好三个分页的Sheet、填好配置值、接好四个凭据,跑通一次后启用定时,让临近截止未休满法定年假的员工自动收到日文提醒。

准备什么

  • 一个可编辑的Google Sheets表格,含Employees、LeaveLog、NotificationLog三个分页且都有employeeId列
  • n8n实例(云端或自建)及从模板页导入的原工作流
  • Google Sheets、Gmail、Slack、Google Gemini(PaLM)四类凭据各一份
  • 目标Slack频道已创建并把机器人邀请进去
  • 休假日期统一为YYYY-MM-DD格式,否则解析会失败

具体怎么做

  1. 建表并填入分页数据

    新建一个Google Sheets,建三个分页:Employees列建议为employeeId、name、email、hireDate、status;LeaveLog列为employeeId、leaveDate、days;NotificationLog先建好表头employeeId、notifiedAt、deadline、shortfallDays、channel。用本站示例CSV各填几行测试数据。

  2. 导入工作流并填配置值

    从n8n.io/workflows/18953导入模板后,找到配置值节点,填入spreadsheetId(表格URL中/d/与/edit之间的串),并按下方配置示例设置grantMethod、fixedGrantMonthDay、requiredDays、alertBeforeDays和slackChannel名称。

  3. 连接四个凭据

    在n8n凭据页分别创建Google Sheets(OAuth或服务账号)、Gmail(OAuth)、Slack(Bot Token)和Gemini(PaLM) API Key,回到工作流逐节点选中对应凭据;Slack机器人必须已加入目标频道。

  4. 手工跑一次核对输出

    点Execute Workflow手动触发,确认Filter节点只放行有缺口且在窗口内的员工,Gmail发出日文邮件、Slack收到一行汇总、NotificationLog追加一行记录。确认无误后激活Schedule Trigger,使其每月1号自动运行。

可直接复制的材料

配置值示例(Configuration节点用)

本站独立编写的示例。grantMethod为fixed时用fixedGrantMonthDay统一授予日;requiredDays和alertBeforeDays按你的规则调整,日本法定常见最低为5天仅供参考,请以公司适用法规为准。

{
  "spreadsheetId": "替换为你的表格ID",
  "grantMethod": "hire_anniversary",
  "fixedGrantMonthDay": "04-01",
  "requiredDays": 5,
  "alertBeforeDays": 90,
  "slackChannel": "hr-leave-alerts"
}

Employees与LeaveLog测试数据

本站合成的虚构数据,邮箱为示例域。E003为inactive应被排除;日期必须YYYY-MM-DD。

Employees分页:
employeeId,name,email,hireDate,status
E001,佐藤 花,sato.hana@example.com,2024-04-01,active
E002,鈴木 一郎,suzuki.ichiro@example.com,2024-10-15,active
E003,高橋 美咲,takahashi.misaki@example.com,2023-06-01,inactive

LeaveLog分页:
employeeId,leaveDate,days
E001,2025-08-12,1
E001,2025-11-03,1
E002,2026-01-20,1

NotificationLog表头:
employeeId,notifiedAt,deadline,shortfallDays,channel

Gemini日文文案提示词(双段输出)

本站独立编写的示例提示词,字段名需与你工作流中实际变量名对齐;模型调用可能产生API费用。

あなたは人事部のアシスタントです。以下の従業員情報をもとに、2つの日本語テキストを作成してください。

従業員ID: {{$json.employeeId}}
氏名: {{$json.name}}
年次有給休暇の付与日: {{$json.grantDate}}
取得期限: {{$json.deadline}}
必要日数: {{$json.requiredDays}}日
取得済み日数: {{$json.daysTaken}}日
残り不足日数: {{$json.shortfallDays}}日

出力は必ず次のJSON形式のみで返してください:
{
  "employeeMessage": "従業員本人向けの丁寧で短いリマインド文。期限と不足日数を含め、取得を促す",
  "hrSummary": "人事向けの1行サマリー。氏名・期限・不足日数を含める"
}

注意:押し付けがましい表現は避け、事実に基づいた案内にしてください。

输入与输出示例

本站虚构演示,文案为提示词预期风格示例,非真实Gemini返回结果,未实际运行。

输入

员工E001佐藤花:hireDate=2024-04-01,授予日2025-04-01,截止日2026-03-31,requiredDays=5,LeaveLog中已休2天,alertBeforeDays=90,当前检查日2026-01-05。

对应输出

缺口=3天且截止日距今85天≤90天窗口,E001被放行。Gemini输出示例:employeeMessage=「佐藤 花様、年次有給休暇の取得期限(2026-03-31)まであと約3か月です。法定の必要日数5日に対し、あと3日の取得が必要です。早めの取得計画をご検討ください。」;hrSummary=「佐藤 花(E001):期限2026-03-31、残3日不足」。Gmail发给员工,Slack收到该行,NotificationLog追加:E001,2026-01-05,2026-03-31,3,gmail+slack。

做完检查这些

  • 手动执行后NotificationLog分页新增的行中employeeId、deadline、shortfallDays与测试数据一致
  • E003(inactive)不出现在任何通知和日志中,E002若不在窗口内也不应被提醒
  • Slack目标频道收到一行含姓名、截止日和缺口天数的日文汇总
  • Gmail发出的邮件正文含截止日与缺口天数,且收件人为Employees表中的email
  • 激活后Schedule Trigger显示每月1号的下次运行时间

容易卡住的地方

  • 休假日期不是YYYY-MM-DD会在解析节点报错或算错截止日,导入前统一格式
  • Slack机器人未被邀请进频道时发送节点会报not_in_channel
  • spreadsheetId填错或分页名不是Employees/LeaveLog/NotificationLog会直接读取失败
  • Gemini输出若含JSON以外的说明文字,下游解析可能失败,提示词里必须强调只输出JSON
  • 提醒窗口alertBeforeDays设得太短会导致员工已无法安排休假,建议预留足够天数

原文与作者资料 ↗

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

原文标题
Track mandatory paid leave with Gemini, Gmail, Google Sheets and Slack
原作者
sho oda
原始发布日期
2026-08-31T17:34:35.298Z
来源
https://n8n.io/workflows/18953