用 n8n 每周自动发送 GPT-4o-mini 个性化宠物健康建议邮件
Google Sheets 宠物数据 → 过滤与年龄计算 → GPT-4o-mini 生成气候相关建议 → Gmail 发送并更新记录
- 给谁
- 宠物护理机构、兽医诊所、宠物订阅服务、动物收容所
- 你会得到
- 每周自动向宠物主人发送基于宠物类型、年龄和所在地的 AI 生成健康建议邮件
- 你需要
- n8n · gmail · google-sheets
硬约束
需要:n8n 实例;Google Sheets OAuth2 凭证;Gmail OAuth2 凭证;OpenAI API key。两张 Google 表格:Pets(主数据)和 Email_Log(发送记录)。默认每周一上午 9 点触发。建议先添加 2-3 条测试数据并手动测试。
他们做了什么
作者 mssporto 在 n8n.io 发布了该工作流模板。模板通过 Schedule Trigger 每周一上午 9 点自动触发,从 Google Sheets 的 Pets 表加载 Status = Active 的宠物数据,经代码节点过滤出 7 天内未发送邮件的记录,计算宠物月龄并生成可读年龄,再调用 GPT-4o-mini 生成符合 AAHA/WSAVA 标准、考虑当地季节的气候相关兽医建议,最后通过 Gmail 发送个性化 HTML 邮件,更新 Pets 表的 Last_Email_Sent 时间戳,并将发送记录写入 Email_Log 表。工作流还包含一个默认禁用的 SendGrid 节点作为备选邮件方案。
效果如何
该模板在 n8n.io 上获得 260 次查看。作者声明可生成基于宠物类型、年龄和所在地的个性化建议,并提供了英国、澳大利亚、加拿大等地的季节性示例。模板支持切换 SendGrid 作为邮件服务商,且作者说明该工作流可扩展至植物护理、育儿里程碑、健身指导、语言学习等场景。(来源:作者自述/模板说明)
值得知道
仅选择一个邮件服务商,不可同时启用 Gmail 和 SendGrid。国家代码必须使用 ISO 格式(如 US、UK、AU、CA)。AI 建议仅供参考,涉及医疗问题应咨询兽医。年龄计算使用 30.44 天/月的近似值,可能存在 1 天以内误差。SendGrid 节点的 templateId 在 workflow.json 中为占位符 d-xxxxxx,需替换为真实值。本站未实测该工作流,搭建前建议先用 1 条测试数据手动验证邮件内容和表格更新。
n8n 工作流模板
结构已检查 · 未实际运行下载后在 n8n 选择“Import from File”,或复制 JSON 后粘贴到编辑器。先配置自己的账号,再用测试数据运行;模板默认未启用。
配置与测试清单
需要绑定的凭证
- Generate Personalized Tip 节点:绑定OpenAI API 凭证。
- Send Health Tip using Gmail 节点:绑定Gmail OAuth2 凭证。
- Update Last_Email_Sent Date 节点:绑定Google Sheets OAuth2 凭证。
- Log to Email_Log Sheet 节点:绑定Google Sheets OAuth2 凭证。
- Load Pet Info 节点:绑定Google Sheets OAuth2 凭证。
需要替换的配置
- 源模板来自 n8n 公开库 #9714(约 19 个节点)。导入后先保持未启用,核对触发器、表达式与外部 API 端点。
- Sticky Note 中的说明仅供参考;按自己的账号、表结构或频道 ID 替换占位配置。
测试输入与预期结果
- 在测试环境手动执行一次主路径,确认每个需凭证的节点已连接且无鉴权错误。
- 用一条合成/脱敏样例数据跑通,核对输出字段与下游写入目标,再考虑生产启用。
模板处理说明
- 已移除原作者凭证绑定、webhookId 与执行数据,工作流设为未启用;节点、连线与原文提示词保持原样。未在 n8n 中实际运行。
- 未改业务逻辑;运行前请自行核对密钥、配额与隐私合规。
模板获取日期: 2026-10-25
步骤
准备数据表与测试数据
在 Google Sheets 创建两张工作表。Pets 表包含列:Email、Owner_Name、Pet_Name、Pet_Type、Date_of_Birth、Country (ISO)、Status、Last_Email_Sent。Email_Log 表包含列:Timestamp、Parent_Email、Pet_Name、Tip_Category、Status。在 Pets 表中添加 2-3 条测试数据,Status 设为 Active,Country 使用 ISO 代码(如 US、UK、AU)。
导入工作流并配置凭证与表格 ID
在 n8n 中导入该工作流模板。添加三类凭证:openAiApi(OpenAI API key)、gmailOAuth2(Gmail 授权)、googleSheetsOAuth2Api(Google Sheets 授权)。然后更新三个节点的表格 ID:「Load Pet Info」节点设置你的 Pets 表 documentId;「Update Last_Email_Sent Date」节点设置同一 Pets 表 ID;「Log to Email_Log Sheet」节点设置 Email_Log 表 ID。
搭建指导 · 本站建议版本。搭建助手启动词;用于确认输入、权限和节点配置
请根据以下材料帮我搭建 n8n 工作流: 1. 来源模板:https://n8n.io/workflows/9714/ 2. 需要凭证:OpenAI API key、Gmail OAuth2、Google Sheets OAuth2 3. 需要两张 Google 表格:Pets(Email, Owner_Name, Pet_Name, Pet_Type, Date_of_Birth, Country (ISO), Status, Last_Email_Sent)和 Email_Log(Timestamp, Parent_Email, Pet_Name, Tip_Category, Status) 4. 导入后更新三个 Google Sheets 节点的 documentId 为你的实际表格 ID 5. 先手动测试 1 条 Active 宠物数据,确认邮件内容正确后再启用每周一 9am 的定时触发器 注意:仅选择一个邮件服务商(默认 Gmail,如需 SendGrid 需禁用 Gmail 节点并启用 SendGrid 节点)。
设置过滤规则与年龄计算
工作流自动执行以下数据处理:「Filter: Active + 7-Day Check」代码节点过滤 Status = Active 且 Last_Email_Sent 为空或超过 7 天的记录;「Calculate Pet Age」代码节点将 Date_of_Birth 转换为可读年龄(如 "2 years and 3 months"),并添加 pet_age_months 和 pet_age 字段。
运行提示词 · 来源原文。Filter: Active + 7-Day Check 节点的 JS Code 字段
const items = $input.all(); return items.filter(item => { // Must be Active status if (item.json.Status !== 'Active') return false; // Never sent email = include if (!item.json.Last_Email_Sent) return true; // Sent >7 days ago = include const daysSince = (Date.now() - new Date(item.json.Last_Email_Sent)) / (1000*60*60*24); return daysSince > 7; });运行提示词 · 来源原文。Calculate Pet Age 节点的 JS Code 字段
const items = $input.all(); return items.map(item => { const birthDate = new Date(item.json.Date_of_Birth); const ageInMs = Date.now() - birthDate; const ageMonths = Math.floor(ageInMs / (1000 * 60 * 60 * 24 * 30.44)); const ageYears = Math.floor(ageMonths / 12); const remainingMonths = ageMonths % 12; let petAge; if (ageMonths < 12) { petAge = `${ageMonths} month${ageMonths !== 1 ? 's' : ''}`; } else if (remainingMonths === 0) { petAge = `${ageYears} year${ageYears !== 1 ? 's' : ''}`; } else { petAge = `${ageYears} year${ageYears !== 1 ? 's' : ''} and ${remainingMonths} month${remainingMonths !== 1 ? 's' : ''}`; } return { json: { ...item.json, pet_age_months: ageMonths, pet_age: petAge } }; });配置 AI 提示词生成个性化建议
「Generate Personalized Tip」节点调用 GPT-4o-mini(temperature=0.7)。System 消息设定兽医健康专家角色,要求符合 AAHA/WSAVA 标准、按生命周期定制、包含季节性考虑。User 消息传入宠物名、类型、月龄、国家 ISO 代码和当前日期,要求返回 JSON 格式:topic、headline、content、category。
运行提示词 · 来源原文。Generate Personalized Tip 节点的 system message 字段
=You are a veterinary wellness expert providing evidence-based weekly tips for pet owners. Guidelines: - Align with AAHA/WSAVA veterinary standards - Tailor advice to pet type and life stage - Include seasonal considerations ({{ $now.format('MMMM') }}) - Be warm but professional - Always recommend vet consultation for medical concerns运行提示词 · 来源原文。Generate Personalized Tip 节点的 user message 字段
=Generate a personalized pet care tip for: - Pet name: {{ $json.Pet_Name }} - Pet type: {{ $json.Pet_Type }} - Pet age: {{ $json.pet_age_months }} months - Location: Country ISO is {{ $json['Country (ISO)'] }} - Current date: {{ $now.format('MMMM YYYY') }} Requirements: - Veterinary-aligned and breed-appropriate advice - **Climate-specific** (consider hemisphere, season in {{ $json['Country (ISO)'] }}) - Region-specific risks (parasites, weather hazards) - Actionable advice (2-3 sentences) - Brief headline (under 10 words) - Life stage: puppy/kitten (<12mo), adult (1-7yr), senior (7+yr) Examples: - UK October: rain gear, indoor exercise, fireworks anxiety - Australia October: spring heat, snake awareness, hydration - Canada October: early cold prep, paw protection Format as JSON: { "topic": "Brief topic title", "headline": "Engaging headline for {{ $json.Pet_Name }}", "content": "2-3 sentence tip with location-specific advice", "category": "Nutrition/Exercise/Health/Behavior/Safety" }配置邮件发送、表格更新与日志记录
【首次测试安全】首次测试前禁用「Send Health Tip using Gmail」,或把 sendTo 改为自己的测试邮箱,确认「Format Email Data」输出无误后再正式发送。「Format Email Data」代码节点解析 GPT 返回的 JSON,提取 topic、headline、content、category,并与宠物数据合并为统一格式。「Send Health Tip using Gmail」节点发送 HTML 邮件,收件人为 {{ $json.email }},主题为 {{ $json.tip_headline }},正文包含称呼、建议标题、内容和落款。发送后,「Update Last_Email_Sent Date」节点以 Email 为匹配列更新 Pets 表的 Last_Email_Sent 为当前时间戳。「Log to Email_Log Sheet」节点将 Timestamp、Parent_Email、Pet_Name、Tip_Category、Status 写入 Email_Log 表。最后「Wait 2 Seconds」节点控制处理节奏。
运行提示词 · 来源原文。Format Email Data 节点的 JS Code 字段
// Get pet data from Calculate Pet Age node const petData = $('Calculate Pet Age').item.json; const aiResponse = $json.message.content; const cleanResponse = aiResponse.replace(/```json\n?/g, '').replace(/```\n?/g, '').trim(); let tipData; try { tipData = JSON.parse(cleanResponse); } catch (e) { tipData = { topic: 'Weekly Pet Care Tip', headline: `Important advice for ${petData.Pet_Name}`, content: cleanResponse, category: 'General' }; } return { json: { email: petData.Email, owner_name: petData.Owner_Name, pet_name: petData.Pet_Name, pet_type: petData.Pet_Type, pet_age: petData.pet_age, pet_age_months: petData.pet_age_months, tip_topic: tipData.topic, tip_headline: tipData.headline, tip_content: tipData.content, tip_category: tipData.category, row_number: petData.row_number } };运行提示词 · 来源原文。Send Health Tip using Gmail 节点的 Message 字段(HTML 格式)
=<p>Hi {{ $json.owner_name }},</p> <h3>{{ $json.tip_headline }}</h3> <p>{{ $json.tip_content }}</p> <p>Stay pawsitive! 🐾<br> <em>PetCare Team</em></p>
可复制提示词
搭建指导 · 本站建议版本。搭建助手启动词;用于确认输入、权限和节点配置
这一段是提示词,页面不会在这里插入广告。
请根据以下材料帮我搭建 n8n 工作流: 1. 来源模板:https://n8n.io/workflows/9714/ 2. 需要凭证:OpenAI API key、Gmail OAuth2、Google Sheets OAuth2 3. 需要两张 Google 表格:Pets(Email, Owner_Name, Pet_Name, Pet_Type, Date_of_Birth, Country (ISO), Status, Last_Email_Sent)和 Email_Log(Timestamp, Parent_Email, Pet_Name, Tip_Category, Status) 4. 导入后更新三个 Google Sheets 节点的 documentId 为你的实际表格 ID 5. 先手动测试 1 条 Active 宠物数据,确认邮件内容正确后再启用每周一 9am 的定时触发器 注意:仅选择一个邮件服务商(默认 Gmail,如需 SendGrid 需禁用 Gmail 节点并启用 SendGrid 节点)。
复制上方提示词给搭建助手,先确认表格结构和凭证权限,再导入工作流。
来源
Send weekly personalized pet health tips with GPT-4o-mini, Gmail and Google Sheets · mssporto · n8n.io · 2025-10-15
留言与反馈
Agent 反馈
以下反馈由 Agent 提交,经用户确认和审核后公开,不代表平台已验证。