ChatGPT生活健康AI 评分 · 待评分AI 辅助编辑·未发现明显提示词注入风险n8n.io

通过 Webhook 追踪营养与健身,集成 OpenAI、Google Sheets 和 Slack 告警

Webhook 接收用户输入 → AI 分析食物/运动 → Google Sheets 更新数据 → Slack 超限/风险告警 → 每日定时重置

有一点经验步骤流程提示词贴士
给谁
健身应用开发者、健康平台运营者、私人教练、营养师、需要自动化饮食活动追踪的自动化工程师
你会得到
用户发送食物或运动描述后,系统自动估算卡路里和蛋白质,更新 Google Sheets 中的每日汇总,并在超标或检测到健康风险时向 Slack 发送告警,每日自动重置统计
你需要
n8n · google-sheets · slack

硬约束

前置条件:n8n 实例(自托管或云端)、结构化的 Google Sheets(含 Name/Phone/Goal/Daily_Calorie_Target/Consumed_Calories/Protein/Last_Meal/Status/Risk_Count 共 9 列)、OpenAI API 凭证、Slack 工作区 API 访问权限。将 workflow JSON 导入 n8n 后,按节点说明替换文档 ID、Sheet ID、Slack channel ID 及凭证。

他们做了什么

模板作者 weblineindia 在 n8n 中构建了一个工作流:通过 Webhook 接收用户发送的食物或运动描述,从 Google Sheets 拉取用户档案并验证存在性,使用 OpenAI 模型分析输入类型并估算营养数据,通过 Code 节点累加统计,检查卡路里阈值和健康风险后向 Slack 发送分级告警,最后将更新后的数据回写 Google Sheets 并向用户返回 JSON 响应。另设 Schedule Trigger 每日自动重置所有用户的日统计。

效果如何

作者报告该模板可实现实时营养追踪、自动告警和每日重置(author_report)。未提供具体运行数据或 ROI。

值得知道

1)AI 返回的卡路里和蛋白质为估算值,非医疗级精确数据,建议人工复核;2)模板中的 Google Sheets 文档 ID、Sheet ID 和 Slack channel ID 为作者私有值,必须替换;3)Code 节点包含 JSON.parse 容错,AI 返回非标准 JSON 时会降级为 UNKNOWN 类型;4)每日重置分支与主流程独立运行,互不影响;5)本站未实测该工作流,搭建后需用样例数据测试 Webhook 端到端流程。

n8n 工作流模板

结构已检查 · 未实际运行

下载后在 n8n 选择“Import from File”,或复制 JSON 后粘贴到编辑器。先配置自己的账号,再用测试数据运行;模板默认未启用。

配置与测试清单

需要绑定的凭证

  • Fetch User Data 节点:绑定Google Sheets OAuth2 凭证。
  • AI Model (GPT) 节点:绑定OpenAI API 凭证。
  • Alert: Calorie Limit Exceeded 节点:绑定Slack API 凭证。
  • Alert: Health Risk 节点:绑定Slack API 凭证。
  • Alert: Critical Health Issue 节点:绑定Slack API 凭证。
  • Update User Data 节点:绑定Google Sheets OAuth2 凭证。
  • Fetch All Users 节点:绑定Google Sheets OAuth2 凭证。
  • Reset Daily Stats 节点:绑定Google Sheets OAuth2 凭证。

需要替换的配置

  • 源模板来自 n8n 公开库 #14858(约 25 个节点)。导入后先保持未启用,核对触发器、表达式与外部 API 端点。
  • Sticky Note 中的说明仅供参考;按自己的账号、表结构或频道 ID 替换占位配置。

测试输入与预期结果

  • 在测试环境手动执行一次主路径,确认每个需凭证的节点已连接且无鉴权错误。
  • 用一条合成/脱敏样例数据跑通,核对输出字段与下游写入目标,再考虑生产启用。

模板处理说明

  • 已移除原作者凭证绑定、webhookId 与执行数据,工作流设为未启用;节点、连线与原文提示词保持原样。未在 n8n 中实际运行。
  • 未改业务逻辑;运行前请自行核对密钥、配额与隐私合规。

模板获取日期: 2026-10-25

步骤

  1. 配置 Webhook 接收用户输入

    在 n8n 中添加 Webhook 节点(Receive User Input),设置路径如 /diet-input,响应模式设为 responseNode。此端点将接收包含 phone 和 message 的 POST 请求。

  2. 连接 Google Sheets 并映射用户数据

    添加 Google Sheets 节点(Fetch User Data),选择 Search 操作,按 Phone 列匹配传入的 body.phone。填入你的文档 ID 和工作表名称,确保列名与模板一致。

  3. 验证用户是否存在

    添加 If 节点(Validate User Exists),检查上一步输出对象是否存在($json exists)。仅当用户存在于表格中时才继续流程,避免对未注册用户进行 AI 处理。

  4. 配置 AI 营养分析器

    添加 AI Agent 节点(AI Nutrition Analyzer),promptType 设为 define,将以下提示词粘贴到 Text 字段。该节点需连接 OpenAI Chat Model 子节点。

    运行提示词 · 来源原文。AI Nutrition Analyzer 节点的 Text 字段(promptType=define)

    =You are an advanced nutrition and fitness AI.
    
    User Goal: {{ $json.Goal }}
    Daily Calorie Target: {{ $json.Daily_Calorie_Target }}
    
    User Input:
    "{{ $('Receive User Input').item.json.body.message }}"
    
    Tasks:
    1. Detect type:
       - FOOD
       - ACTIVITY
       - UNKNOWN
    
    2. If FOOD:
       - Estimate calories
       - Estimate protein
       - Detect meal type (breakfast/lunch/dinner/snack)
    
    3. If ACTIVITY:
       - Estimate calories burned
    
    4. Detect risk:
       - OVER_EATING
       - LOW_PROTEIN
       - UNHEALTHY
       - NONE
    
    Return STRICT JSON:
    
    {
      "type": "FOOD | ACTIVITY | UNKNOWN",
      "calories": number,
      "protein": number,
      "calories_burned": number,
      "meal_type": "breakfast | lunch | dinner | snack",
      "risk": "NONE | OVER_EATING | LOW_PROTEIN | UNHEALTHY",
      "suggestion": "short advice",
      "reply": "friendly message"
    }
  5. 配置 AI 模型与凭证

    添加 OpenAI Chat Model 子节点(AI Model (GPT)),选择 gpt-4.1-mini(或 gpt-4.1 / gpt-4),连接 OpenAI API 凭证。确保凭证可用且有余额。

  6. 处理营养数据

    添加 Code 节点(Process Nutrition Data),运行以下 JavaScript 代码,将 AI 返回的 JSON 与用户现有数据合并,计算累计卡路里、蛋白质和风险计数。

    运行提示词 · 来源原文。Process Nutrition Data 节点的 JS Code 字段

    const raw = $input.first().json.output;
    
    let parsed;
    
    try {
      parsed = JSON.parse(raw);
    } catch (e) {
      parsed = {
        type: "UNKNOWN",
        calories: 0,
        protein: 0,
        calories_burned: 0,
        risk: "NONE",
        suggestion: "AI parsing failed",
        reply: "Sorry, I couldn't understand. Try again."
      };
    }
    
    // Get user data
    let user = $('Fetch User Data').first().json;
    
    let totalCalories = parseInt(user.Consumed_Calories || 0);
    let protein = parseInt(user.Protein || 0);
    let riskCount = parseInt(user.Risk_Count || 0);
    
    // FOOD
    if (parsed.type === "FOOD") {
      totalCalories += parsed.calories;
      protein += parsed.protein;
    }
    
    // ACTIVITY
    if (parsed.type === "ACTIVITY") {
      totalCalories -= parsed.calories_burned;
    }
    
    // Risk tracking
    if (parsed.risk !== "NONE") {
      riskCount += 1;
    }
    
    return [{
      json: {
        ...user,
        ...parsed,
        Consumed_Calories: totalCalories,
        Protein: protein,
        Risk_Count: riskCount,
        message: $('Receive User Input').first().json.body.message
      }
    }];
  7. 检查卡路里阈值并告警

    添加 If 节点(Check Calorie Threshold),判断 Consumed_Calories > Daily_Calorie_Target。若超限,触发 Slack 节点(Alert: Calorie Limit Exceeded)发送告警。

    运行提示词 · 来源原文。Alert: Calorie Limit Exceeded 节点的 Text 字段

    =You have exceeded your daily calorie limit.  Consumed: {{ $('Process Nutrition Data').item.json.Consumed_Calories }} Target: {{ $('Process Nutrition Data').item.json.Daily_Calorie_Target }}
    {{ $('Process Nutrition Data').item.json.suggestion }}
    
    
    
    Calorie Limit Exceeded
    
    User: {{$json.Name}}
    Consumed: {{$json.Consumed_Calories}}
    Target: {{$json.Daily_Calorie_Target}}
    
    {{$json.suggestion}}
  8. 检测健康风险并升级告警

    继续添加 If 节点(Check Health Risk)判断 risk != 'NONE',触发 Slack 节点(Alert: Health Risk)发送风险告警。再添加 If 节点(Check Critical Risk)判断 Risk_Count >= 3,触发 Slack 节点(Alert: Critical Health Issue)发送严重告警。

    运行提示词 · 来源原文。Alert: Health Risk 节点的 Text 字段

    =Health Risk Detected  User: {{ $('Process Nutrition Data').item.json.Name }} Risk: {{ $('Process Nutrition Data').item.json.risk }}  
    {{ $('Process Nutrition Data').item.json.suggestion }}

    运行提示词 · 来源原文。Alert: Critical Health Issue 节点的 Text 字段

    =CRITICAL ALERT  User: {{ $('Process Nutrition Data').item.json.Name }} Multiple unhealthy patterns detected.  Immediate attention required.
  9. 返回 API 响应并更新用户数据

    添加 Respond to Webhook 节点(Send API Response),返回 JSON 包含 AI 回复、本次卡路里和今日累计。再添加 Google Sheets 节点(Update User Data),选择 Update 操作,以 Phone 为匹配列,回写 Consumed_Calories、Protein、Risk_Count、Status、Last_Meal。

  10. 配置每日定时重置

    添加 Schedule Trigger 节点(Daily Reset Trigger),设置每日执行时间。连接 Google Sheets 节点(Fetch All Users)读取全部用户,再连接 Google Sheets 节点(Reset Daily Stats)选择 Update 操作,以 Phone 匹配,将 Consumed_Calories、Protein、Risk_Count 重置为 0,Status 设为 NEW_DAY。

可复制提示词

搭建指导 · 本站建议版本。交给搭建助手,先确认输入和权限,再按步骤复现

这一段是提示词,页面不会在这里插入广告。

你正在搭建一个 n8n AI 营养追踪工作流。请先确认你已准备好:1)n8n 实例;2)列名正确的 Google Sheets;3)OpenAI API 凭证;4)Slack API 凭证。然后按步骤导入 workflow JSON 或手动创建节点,替换所有文档 ID、Sheet ID、channel ID 和凭证引用。

先检查 Google Sheets 列名是否完全匹配模板要求,再连接凭证

来源

Track nutrition and fitness via webhook with OpenAI, Google Sheets and Slack alerts · weblineindia · n8n.io · 2026-04-07

留言与反馈

试过这个方法吗?分享效果、遇到的问题或改进建议。留言审核后公开,请勿填写敏感信息。

正在加载…

    相关用例