8
n8n 中文网amn8n.com

使用 Gmail、Groq AI 和 Google Sheets 自动化邮件过滤与 AI 摘要

中级

这是一个Ticket Management, AI Summarization领域的自动化工作流,包含 14 个节点。主要使用 If, Code, GmailTrigger, GoogleSheets, Agent 等节点。 使用 Gmail、Groq AI 和 Google Sheets 自动化邮件过滤与 AI 摘要

前置要求
  • Google 账号和 Gmail API 凭证
  • Google Sheets API 凭证
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "meta": {
    "instanceId": "a62a87f42cfae9ad2ff7f238a8854ab1946946f1bd38cb9d8b7442e62435a1d5"
  },
  "nodes": [
    {
      "id": "39b2d4bd-b29b-4e52-864e-0090e8f8e56f",
      "name": "测试注释",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1360,
        1460
      ],
      "parameters": {
        "color": 6,
        "width": 300,
        "height": 220,
        "content": "## 🧪 部署前测试"
      },
      "typeVersion": 1
    },
    {
      "id": "75cc1f51-da2d-411a-bd64-7c574c5d5d11",
      "name": "记录到 Google Sheets1",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        980,
        1560
      ],
      "parameters": {
        "columns": {
          "value": {
            "Date": "={{ $('info1').item.json.Date }}",
            "summary": "={{ $json.output }}",
            "subject ": "={{ $('info1').item.json.Subject }}",
            "sender name": "={{ $('info1').item.json[\"Sender Name\"] }}",
            "sender email": "={{ $('info1').item.json[\"Sender Email\"] }}"
          },
          "schema": [
            {
              "id": "sender name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "sender name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "sender email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "sender email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "subject ",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "subject ",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "summary",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Date",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "sender name"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "YOUR_GOOGLE_SHEETS_URL",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "YOUR_GOOGLE_SHEETS_DOCUMENT_ID"
        }
      },
      "typeVersion": 4
    },
    {
      "id": "b5d3d06e-116f-4c40-bbd0-c22cd622af96",
      "name": "AI Agent1",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        400,
        1500
      ],
      "parameters": {
        "text": "=Please read this email \"{{ $json.Content }}\" and provide a very short, concise summary containing only the most important information. Keep the summary as brief as possible without losing essential details. ",
        "options": {},
        "promptType": "define"
      },
      "typeVersion": 2
    },
    {
      "id": "a69f2251-947b-444c-b314-d510870b6583",
      "name": "Gmail 触发器",
      "type": "n8n-nodes-base.gmailTrigger",
      "position": [
        -600,
        1600
      ],
      "parameters": {
        "simple": false,
        "filters": {
          "labelIds": [
            "CATEGORY_PERSONAL"
          ]
        },
        "options": {
          "downloadAttachments": false
        },
        "pollTimes": {
          "item": [
            {
              "mode": "=everyHour",
              "minute": 59
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "a7024314-9303-42f3-a854-dcb385c991f7",
      "name": "检查有效邮箱",
      "type": "n8n-nodes-base.if",
      "position": [
        60,
        1600
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "c1d2e3f4-g5h6-i7j8-k9l0-m1n2o3p4q5r6",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json[\"Sender Name\"] }}",
              "rightValue": "YOUR_SENDER_NAME_FILTER"
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "eab995bb-43bf-4c23-9cc1-41b80a9deb0a",
      "name": "Groq 聊天模型1",
      "type": "@n8n/n8n-nodes-langchain.lmChatGroq",
      "position": [
        260,
        2000
      ],
      "parameters": {
        "model": "llama-3.1-8b-instant",
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "d408d58f-c818-4601-8109-f90bb152e381",
      "name": "信息1",
      "type": "n8n-nodes-base.code",
      "position": [
        -260,
        1600
      ],
      "parameters": {
        "jsCode": "const items = [];\n\nfor (const item of $input.all()) {\n  const emailData = item.json;\n  \n  // Handle sender information (unchanged)\n  let senderEmail = '';\n  let senderName = '';\n\n  if (emailData.from?.value?.[0]) {\n    senderEmail = emailData.from.value[0].address || '';\n    senderName = emailData.from.value[0].name || senderEmail;\n  } else if (emailData.from?.text) {\n    const emailMatch = emailData.from.text.match(/<([^>]+)>/) || \n                      emailData.from.text.match(/([^\\s]+@[^\\s]+)/);\n    senderEmail = emailMatch ? emailMatch[1] : emailData.from.text;\n    \n    const nameMatch = emailData.from.text.match(/^([^<]+)/);\n    senderName = nameMatch ? nameMatch[1].trim().replace(/\\\"/g, '') : senderEmail;\n  }\n\n  // Format date (unchanged)\n  const receivedDate = new Date(emailData.date || emailData.receivedTime);\n  const formattedDate = receivedDate.toLocaleString('en-US', {\n    year: 'numeric',\n    month: '2-digit',\n    day: '2-digit',\n    hour: '2-digit',\n    minute: '2-digit',\n    hour12: true\n  });\n\n  // FIXED CONTENT EXTRACTION\n  let emailContent = '';\n  \n  // 1. First priority: Plain text version\n  if (emailData.text) {\n    emailContent = emailData.text;\n  } \n  // 2. Second priority: HTML version (convert to plain text)\n  else if (emailData.html) {\n    emailContent = emailData.html\n      .replace(/<style[^>]*>.*?<\\/style>/gs, '')  // Remove CSS\n      .replace(/<[^>]*>/g, ' ')                   // Strip HTML tags\n      .replace(/\\s+/g, ' ')                       // Collapse whitespace\n      .trim();\n  }\n  // 3. Fallback to other possible fields\n  else if (emailData.body || emailData.textPlain || emailData.textHtml) {\n    emailContent = emailData.body || emailData.textPlain || emailData.textHtml;\n  }\n\n  // Truncate content if too long\n  const maxContentLength = 5000;\n  if (emailContent.length > maxContentLength) {\n    emailContent = emailContent.substring(0, maxContentLength) + '... [truncated]';\n  }\n\n  // Create row data\n  const rowData = {\n    'Date': formattedDate,\n    'Sender Name': senderName,\n    'Sender Email': senderEmail,\n    'Subject': emailData.subject || 'No Subject',\n    'Content': emailContent,\n    //'Message ID': emailData.messageId || '',\n    'Has Attachments': emailData.attachments?.length > 0 ? 'Yes' : 'No'\n  };\n  \n  items.push({ json: rowData });\n}\n\nreturn items;"
      },
      "typeVersion": 2
    },
    {
      "id": "2bb19466-2a13-48d1-8f9c-be3db440c061",
      "name": "便签7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -680,
        1380
      ],
      "parameters": {
        "color": 5,
        "width": 260,
        "height": 400,
        "content": "## 🔑 步骤 1:添加 Gmail 凭据 👇"
      },
      "typeVersion": 1
    },
    {
      "id": "5fef7b17-cca7-4f06-99c0-efe6944b6a48",
      "name": "便签8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -340,
        1380
      ],
      "parameters": {
        "color": 5,
        "width": 260,
        "height": 400,
        "content": "## 📧 步骤 2:邮件处理节点"
      },
      "typeVersion": 1
    },
    {
      "id": "bf269863-ccaa-4a22-aff2-a98305d8c354",
      "name": "便签9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -20,
        1380
      ],
      "parameters": {
        "color": 5,
        "width": 260,
        "height": 400,
        "content": "## ⚙️ 步骤 3:发件人过滤器"
      },
      "typeVersion": 1
    },
    {
      "id": "2ea54fa1-fd79-48ca-854c-14b706cf3315",
      "name": "便签 10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        360,
        1360
      ],
      "parameters": {
        "color": 5,
        "width": 360,
        "height": 420,
        "content": "## ✍️ 步骤 4:自定义 AI 提示"
      },
      "typeVersion": 1
    },
    {
      "id": "92c18c6f-3c83-41e0-8757-67455aff44da",
      "name": "便签 11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -40,
        1900
      ],
      "parameters": {
        "color": 5,
        "width": 260,
        "height": 220,
        "content": "## 🤖 步骤 5:AI 配置"
      },
      "typeVersion": 1
    },
    {
      "id": "56894a8f-5340-43a3-a852-7d4dadbdd376",
      "name": "便签12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        800,
        1380
      ],
      "parameters": {
        "color": 4,
        "width": 500,
        "height": 400,
        "content": "## 📊 步骤 6:Google Sheets 设置"
      },
      "typeVersion": 1
    },
    {
      "id": "bb07639e-3edb-4be1-8554-cd6df8ebb22c",
      "name": "便签13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        720,
        1840
      ],
      "parameters": {
        "color": 4,
        "width": 700,
        "height": 420,
        "content": "## ✅ 预期输出格式"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "info1": {
      "main": [
        [
          {
            "node": "Check Valid Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent1": {
      "main": [
        [
          {
            "node": "Log to Google Sheets1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gmail Trigger": {
      "main": [
        [
          {
            "node": "info1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Groq Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent1",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Check Valid Email": {
      "main": [
        [
          {
            "node": "AI Agent1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

中级 - 工单管理, AI 摘要总结

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
中级
节点数量14
分类2
节点类型7
难度说明

适合有一定经验的用户,包含 6-15 个节点的中等复杂度工作流

作者
ARRE

ARRE

@arre

Automation Architect | I transform complexity into simplicity Building intelligent n8n workflows that do your heavy lifting in minutes, not hours. My mission: Eliminate repetitive tasks, streamline your operations, and give you back the most valuable resource – your time. Let’s make work feel lighter together.

外部链接
在 n8n.io 查看

分享此工作流