{
  "nodes": [
    {
      "id": "39b2d4bd-b29b-4e52-864e-0090e8f8e56f",
      "name": "Test Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1360,
        1460
      ],
      "parameters": {
        "color": 6,
        "width": 300,
        "height": 220,
        "content": "## \ud83e\uddea TEST BEFORE DEPLOYING\n1. Send test email\n2. Check Sheets output\n3. Verify summary quality\n4. Adjust filters/prompt as needed"
      },
      "typeVersion": 1
    },
    {
      "id": "75cc1f51-da2d-411a-bd64-7c574c5d5d11",
      "name": "Log to 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 Trigger",
      "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": "Check Valid Email",
      "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 Chat Model1",
      "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": "info1",
      "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": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -680,
        1380
      ],
      "parameters": {
        "color": 5,
        "width": 260,
        "height": 400,
        "content": "## \ud83d\udd11 Step 1: Add Gmail Credentials \ud83d\udc47"
      },
      "typeVersion": 1
    },
    {
      "id": "5fef7b17-cca7-4f06-99c0-efe6944b6a48",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -340,
        1380
      ],
      "parameters": {
        "color": 5,
        "width": 260,
        "height": 400,
        "content": "## \ud83d\udce7 Step 2: Email Processing Node\n"
      },
      "typeVersion": 1
    },
    {
      "id": "bf269863-ccaa-4a22-aff2-a98305d8c354",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -20,
        1380
      ],
      "parameters": {
        "color": 5,
        "width": 260,
        "height": 400,
        "content": "## \u2699\ufe0f Step 3: Sender Filter\n\u2022 Replace 'YOUR_SENDER_NAME_FILTER'\n\u2022 Only emails from this sender will proceed\n\u2022 Supports multiple conditions"
      },
      "typeVersion": 1
    },
    {
      "id": "2ea54fa1-fd79-48ca-854c-14b706cf3315",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        360,
        1360
      ],
      "parameters": {
        "color": 5,
        "width": 360,
        "height": 420,
        "content": "## \u270d\ufe0f Step 4: Customize AI Prompt\n\u2022 Default: Short email summary\n\u2022 Change tone/formality as needed"
      },
      "typeVersion": 1
    },
    {
      "id": "92c18c6f-3c83-41e0-8757-67455aff44da",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -40,
        1900
      ],
      "parameters": {
        "color": 5,
        "width": 260,
        "height": 220,
        "content": "## \ud83e\udd16 Step 5: AI Configuration\n1. Add Groq API key\n2. Or replace with other AI model\n"
      },
      "typeVersion": 1
    },
    {
      "id": "56894a8f-5340-43a3-a852-7d4dadbdd376",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        800,
        1380
      ],
      "parameters": {
        "color": 4,
        "width": 500,
        "height": 400,
        "content": "## \ud83d\udcca Step 6: Google Sheets Setup\n1. Add Google credentials\n2. Paste Sheet URL\n3. Select target sheet\n4. Columns auto-map to email data"
      },
      "typeVersion": 1
    },
    {
      "id": "bb07639e-3edb-4be1-8554-cd6df8ebb22c",
      "name": "Sticky Note13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        720,
        1840
      ],
      "parameters": {
        "color": 4,
        "width": 700,
        "height": 420,
        "content": "## \u2705 Expected Output Format\nColumns: Sender | Date | Email | Subject | Summary\n\n![Example Table](https://cdn.ablebits.com/_img-blog/google-sheets-create-table/table-format.webp)"
      },
      "typeVersion": 1
    }
  ],
  "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
          }
        ]
      ]
    }
  }
}