N
n8n Store
Workflow Market
📰 EU Sustainability News Curation with RSS, GPT, Gmail, ElevenLabs & Telegram

📰 EU Sustainability News Curation with RSS, GPT, Gmail, ElevenLabs & Telegram

by samirsaci0 views

Description

Categories

🤖 AI & Machine Learning

Nodes Used

n8n-nodes-base.ifn8n-nodes-base.ifn8n-nodes-base.setn8n-nodes-base.coden8n-nodes-base.gmailn8n-nodes-base.mergen8n-nodes-base.telegramn8n-nodes-base.aggregaten8n-nodes-base.aggregaten8n-nodes-base.dataTable
PriceFree
Views0
Last Updated11/28/2025
workflow.json
{
  "meta": {
    "instanceId": "",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "5d229b75-1fe4-4bf5-99be-123b26bf9949",
      "name": "Loop Over News",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        112,
        -336
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "a023f0eb-a572-484d-9806-f4a8fe2ac93b",
      "name": "Trigger: 09:00 am",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -800,
        -304
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 9
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "b9898c31-7ab2-48c7-a730-af24b9351e80",
      "name": "RSS News EU",
      "type": "n8n-nodes-base.rssFeedRead",
      "position": [
        -608,
        -304
      ],
      "parameters": {
        "url": "https://www.consilium.europa.eu/en/rss/pressreleases.ashx",
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "4de2666f-d613-4248-b37b-8592fe62a172",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        752,
        -320
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "0b998795-1a1f-4f17-8651-57b6fedc7be1",
              "operator": {
                "type": "boolean",
                "operation": "equals"
              },
              "leftValue": "={{ $json.message.content.parseJson().is_relevant }}",
              "rightValue": true
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "54f09ffb-d95c-4df8-bd30-318e9d0836d4",
      "name": "Send the digest",
      "type": "n8n-nodes-base.gmail",
      "position": [
        -272,
        48
      ],
      "webhookId": "483a7e40-e4fb-4490-bda5-44937ebc6ce5",
      "parameters": {
        "sendTo": "<SET_RECIPIENT_EMAIL>",
        "message": "={{ $json.html }}",
        "options": {
          "appendAttribution": false
        },
        "subject": "={{ $json.subject }}"
      },
      "notesInFlow": true,
      "typeVersion": 2.1
    },
    {
      "id": "b453a6c4-7291-417e-985d-1d046419346b",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -832,
        -544
      ],
      "parameters": {
        "color": 7,
        "width": 860,
        "height": 444,
        "content": "## 1. Fetch the latest EU news from RSS\n"
      },
      "typeVersion": 1
    },
    {
      "id": "4fe6b4b6-389a-4bce-a75f-4f091e5b0dea",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        64,
        -544
      ],
      "parameters": {
        "color": 7,
        "width": 1036,
        "height": 444,
        "content": "## 2. Select the relevant news using an AI Classifier\n"
      },
      "typeVersion": 1
    },
    {
      "id": "ca887dd6-be25-4d13-a986-020823bbf583",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -832,
        -80
      ],
      "parameters": {
        "color": 7,
        "width": 864,
        "height": 244,
        "content": "## 3. Build the daily digest and send it by email"
      },
      "typeVersion": 1
    },
    {
      "id": "b7b964e5-148b-447a-a003-13d26f991b48",
      "name": "Archived News",
      "type": "n8n-nodes-base.dataTable",
      "position": [
        -608,
        -448
      ],
      "parameters": {
        "matchType": "allConditions",
        "operation": "get",
        "dataTableId": {
          "__rl": true,
          "mode": "",
          "value": "",
          "cachedResultUrl": "",
          "cachedResultName": ""
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b8296e41-8ff6-4367-8441-bb8fe6631f1a",
      "name": "Add Archived Guid(s)",
      "type": "n8n-nodes-base.merge",
      "position": [
        -272,
        -320
      ],
      "parameters": {
        "mode": "combineBySql",
        "options": {}
      },
      "notesInFlow": true,
      "typeVersion": 3.2
    },
    {
      "id": "2f9f60b8-d9c5-4479-9272-62937178110d",
      "name": "List of guid(s) archived",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        -432,
        -448
      ],
      "parameters": {
        "options": {},
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {
              "renameField": true,
              "outputFieldName": "guids",
              "fieldToAggregate": "guid"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "48441fbd-8c6a-4cec-a590-1c4f78da1bda",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1520,
        -544
      ],
      "parameters": {
        "width": 636,
        "height": 620,
        "content": "## AI-Powered EU News Digest by Topic\n\n### How it works\n1. Daily triggers to fetch latest news using RSS feed of the **Council of the European Union**\n2. Archived news are filtered out to avoid duplicates\n3. Filter the news based on a **topic** and **topic description** using an AI classifier\n4. Records the news including `title`, `link` and content information in a datable\n5. Loads all the recorded news of today to send them in a HTML formatted email\n6. A 30-second daily voice summary generate with **Eleven Labs** is sent via Telegram\n\n### How to setup\n- [ ] Create a **datatable** (columns = title, link, content, contentSnippet, guid, categories, createDate) with type = `string`\n- [ ] Connect **Archives News**, **Add News** and **Today's News** to this table\n- [ ] Setup the topic description in **Topic Config**\n- [ ] Add you OpenAI credentials in the node **Classify News based on a Topic**\n- [ ] Set up your Gmail credential in the **Send Digest** node with the destination email\n- [ ] Set up your Eleven Labs in the node **Generate Voice Message** - \n- [ ] Set up your Telegram credentials and the Chat ID to send the audio summary \n\n### Customisation\n1. Change the **topics** and **topic descriptions** to fit with your needs in the **Topic Config** node\n2. Adapt the footer of the digest in the code with your own company identity in the code node\n3. Change the subject of the email in the **Gmail node**"
      },
      "typeVersion": 1
    },
    {
      "id": "92f4c68d-f73b-4ba6-88bb-91a91b5e5956",
      "name": "Today's News",
      "type": "n8n-nodes-base.dataTable",
      "position": [
        -800,
        48
      ],
      "parameters": {
        "filters": {
          "conditions": [
            {
              "keyName": "createDate",
              "keyValue": "={{ $now.minus(5,'days').toFormat('yyyy-MM-dd') }}"
            }
          ]
        },
        "matchType": "allConditions",
        "operation": "get",
        "dataTableId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "",
          "cachedResultName": ""
        }
      },
      "typeVersion": 1
    },
    {
      "id": "239890a0-8634-4ab8-8cf5-35e22731b113",
      "name": "Add News",
      "type": "n8n-nodes-base.dataTable",
      "position": [
        944,
        -336
      ],
      "parameters": {
        "columns": {
          "value": {
            "guid": "={{ $('Loop Over Items1').item.json.guid }}",
            "link": "={{ $('Loop Over Items1').item.json.link }}",
            "title": "={{ $('Loop Over Items1').item.json.title }}",
            "content": "={{ $('Loop Over Items1').item.json.content }}",
            "categories": "={{ $('Loop Over Items1').item.json.categories.join(', ') }}",
            "createDate": "={{ $now.toFormat('yyyy-MM-dd') }}",
            "contentSnippet": "={{ $('Loop Over Items1').item.json.contentSnippet }}"
          },
          "schema": [
            {
              "id": "title",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "title",
              "defaultMatch": false
            },
            {
              "id": "link",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "link",
              "defaultMatch": false
            },
            {
              "id": "content",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "content",
              "defaultMatch": false
            },
            {
              "id": "contentSnippet",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "contentSnippet",
              "defaultMatch": false
            },
            {
              "id": "guid",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "guid",
              "defaultMatch": false
            },
            {
              "id": "categories",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "categories",
              "defaultMatch": false
            },
            {
              "id": "createDate",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "createDate",
              "defaultMatch": false
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "dataTableId": {
          "__rl": true,
          "mode": "",
          "value": "",
          "cachedResultUrl": "",
          "cachedResultName": ""
        }
      },
      "typeVersion": 1
    },
    {
      "id": "63c17be1-ffbc-43f3-80e5-769a14449cd2",
      "name": "Classify News based on a Topic",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        464,
        -320
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini",
          "cachedResultName": "GPT-4O-MINI"
        },
        "options": {
          "temperature": 0.3
        },
        "messages": {
          "values": [
            {
              "content": "=You are an AI classifier for EU news. Your task is to determine if a news item is related to a specific topic.\n\nTopic Name: {{ $json.topic_name }}\nTopic Description: {{ $json.topic_description }}\n\nNews Item to Classify:\nTitle: {{ $('Loop Over Items1').item.json.title }}\nContent: {{ $('Loop Over Items1').item.json.content }}\nCategories: {{ $('Loop Over Items1').item.json.categories.join(', ') }}\n\nAnalyze this news item and respond with a JSON object:\n{\n  \"is_relevant\": true/false,\n  \"relevance_score\": 0-100,\n  \"key_topics_found\": [\"list\", \"of\", \"relevant\", \"aspects\"],\n  \"reasoning\": \"Brief explanation of why this is or isn't relevant\"\n}\n\nOnly respond with the JSON object, no additional text."
            }
          ]
        }
      },
      "typeVersion": 1.4
    },
    {
      "id": "a7861a39-fac3-452a-a3de-d15b9820bbe2",
      "name": "Topic Config",
      "type": "n8n-nodes-base.set",
      "position": [
        320,
        -320
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "4fc644c2-7f3e-4cd3-87d7-27eb35a6d0d3",
              "name": "topic_name",
              "type": "string",
              "value": "SUSTAINABILITY"
            },
            {
              "id": "bf8fface-1272-4254-b64e-fbffb348852b",
              "name": "topic_description",
              "type": "string",
              "value": "News related to climate change, carbon neutrality, Green Deal initiatives, renewable energy, energy efficiency, circular economy, biodiversity protection, sustainable finance, ESG regulations, environmental standards, emission reduction targets, clean technology, sustainable transport, green bonds, nature restoration, water management, waste reduction, sustainable agriculture, forest protection, ocean conservation, green transition funding, climate adaptation, net-zero policies, sustainable development goals (SDGs), environmental compliance, and eco-innovation in the European Union."
            }
          ]
        }
      },
      "notesInFlow": true,
      "typeVersion": 3.4
    },
    {
      "id": "e025cfca-6753-455e-8a4d-08e3872e92d7",
      "name": "Avoid Duplicates",
      "type": "n8n-nodes-base.if",
      "position": [
        -96,
        -320
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "f700606b-061a-47fd-840f-0d059b896d8d",
              "operator": {
                "type": "boolean",
                "operation": "false",
                "singleValue": true
              },
              "leftValue": "={{ $json.guids.includes($json.guid) }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "af38b182-8398-46cc-8f1b-f0b5243a5357",
      "name": "Generate a Digest in HTML",
      "type": "n8n-nodes-base.code",
      "position": [
        -512,
        48
      ],
      "parameters": {
        "jsCode": "// Get all news items from the input\nconst newsItems = $input.all().map(item => item.json);\n\n// Generate the HTML email\nconst htmlEmail = `\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>EU Sustainability News Digest</title>\n    <style>\n        body {\n            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif;\n            line-height: 1.6;\n            color: #333;\n            max-width: 700px;\n            margin: 0 auto;\n            padding: 0;\n            background-color: #f5f5f5;\n        }\n        .container {\n            background-color: #ffffff;\n            margin: 20px auto;\n            border-radius: 12px;\n            overflow: hidden;\n            box-shadow: 0 2px 10px rgba(0,0,0,0.1);\n        }\n        .header {\n            background: linear-gradient(135deg, #2e7d32 0%, #66bb6a 100%);\n            color: white;\n            padding: 30px 40px;\n            text-align: center;\n        }\n        .header h1 {\n            margin: 0;\n            font-size: 28px;\n            font-weight: 600;\n            letter-spacing: -0.5px;\n        }\n        .header p {\n            margin: 10px 0 0 0;\n            font-size: 16px;\n            opacity: 0.95;\n        }\n        .date-badge {\n            display: inline-block;\n            background-color: rgba(255, 255, 255, 0.2);\n            padding: 5px 15px;\n            border-radius: 20px;\n            margin-top: 10px;\n            font-size: 14px;\n        }\n        .content {\n            padding: 30px 40px;\n        }\n        .news-item {\n            margin-bottom: 30px;\n            padding-bottom: 30px;\n            border-bottom: 1px solid #e0e0e0;\n        }\n        .news-item:last-of-type {\n            border-bottom: none;\n            margin-bottom: 0;\n            padding-bottom: 0;\n        }\n        .news-number {\n            display: inline-block;\n            background-color: #2e7d32;\n            color: white;\n            width: 28px;\n            height: 28px;\n            border-radius: 50%;\n            text-align: center;\n            line-height: 28px;\n            font-size: 14px;\n            font-weight: 600;\n            margin-right: 10px;\n            flex-shrink: 0;\n        }\n        .news-title {\n            font-size: 18px;\n            font-weight: 600;\n            color: #1a1a1a;\n            margin: 0 0 10px 0;\n            line-height: 1.4;\n            display: flex;\n            align-items: flex-start;\n        }\n        .news-title a {\n            color: #1a1a1a;\n            text-decoration: none;\n            flex-grow: 1;\n        }\n        .news-title a:hover {\n            color: #2e7d32;\n        }\n        .news-meta {\n            display: flex;\n            gap: 15px;\n            margin-bottom: 12px;\n            flex-wrap: wrap;\n        }\n        .category-tag {\n            background-color: #e8f5e9;\n            color: #2e7d32;\n            padding: 4px 10px;\n            border-radius: 12px;\n            font-size: 12px;\n            font-weight: 500;\n        }\n        .date-tag {\n            color: #666;\n            font-size: 12px;\n            padding: 4px 0;\n        }\n        .news-content {\n            color: #555;\n            font-size: 15px;\n            line-height: 1.6;\n            margin: 12px 0 0 38px;\n        }\n        .read-more {\n            display: inline-block;\n            margin: 10px 0 0 38px;\n            color: #2e7d32;\n            text-decoration: none;\n            font-size: 14px;\n            font-weight: 500;\n        }\n        .read-more:hover {\n            text-decoration: underline;\n        }\n        .footer {\n            background-color: #f8f9fa;\n            padding: 25px 40px;\n            text-align: center;\n            border-top: 1px solid #e0e0e0;\n        }\n        .footer-logo {\n            font-size: 20px;\n            font-weight: 600;\n            color: #2e7d32;\n            margin-bottom: 10px;\n        }\n        .footer-links {\n            margin-top: 15px;\n        }\n        .footer-links a {\n            color: #2e7d32;\n            text-decoration: none;\n            margin: 0 10px;\n            font-size: 14px;\n        }\n        .footer-links a:hover {\n            text-decoration: underline;\n        }\n        .footer-divider {\n            margin: 0 5px;\n            color: #999;\n        }\n        .footer-note {\n            margin-top: 15px;\n            font-size: 12px;\n            color: #666;\n        }\n        @media (max-width: 600px) {\n            .header {\n                padding: 25px 20px;\n            }\n            .header h1 {\n                font-size: 24px;\n            }\n            .content {\n                padding: 20px;\n            }\n            .footer {\n                padding: 20px;\n            }\n            .news-meta {\n                gap: 8px;\n            }\n        }\n    </style>\n</head>\n<body>\n    <div class=\"container\">\n        <div class=\"header\">\n            <h1>🌱 EU Sustainability News Digest</h1>\n            <p>Your curated selection of EU environmental and climate updates</p>\n            <span class=\"date-badge\">${new Date().toLocaleDateString('en-GB', { \n                weekday: 'long', \n                year: 'numeric', \n                month: 'long', \n                day: 'numeric' \n            })}</span>\n        </div>\n        \n        <div class=\"content\">\n            ${newsItems.map((item, index) => `\n                <div class=\"news-item\">\n                    <h2 class=\"news-title\">\n                        <span class=\"news-number\">${index + 1}</span>\n                        <a href=\"${item.link}\" target=\"_blank\">${item.title}</a>\n                    </h2>\n                    <div class=\"news-meta\">\n                        ${item.categories.split(',').map(cat => \n                            `<span class=\"category-tag\">${cat.trim()}</span>`\n                        ).join('')}\n                        <span class=\"date-tag\">📅 ${new Date(item.createDate).toLocaleDateString('en-GB', { \n                            day: 'numeric',\n                            month: 'short',\n                            year: 'numeric'\n                        })}</span>\n                    </div>\n                    <p class=\"news-content\">${item.contentSnippet}</p>\n                    <a href=\"${item.link}\" target=\"_blank\" class=\"read-more\">Read full article →</a>\n                </div>\n            `).join('')}\n        </div>\n        \n        <div class=\"footer\">\n            <div class=\"footer-logo\">🤖 LogiGreen Bot</div>\n            <div style=\"color: #666; font-size: 14px; margin-bottom: 10px;\">\n                Automated EU Sustainability News Monitoring\n            </div>\n            <div class=\"footer-links\">\n                <a href=\"https://logi-green.com\" target=\"_blank\">🌐 Website</a>\n                <span class=\"footer-divider\">|</span>\n                <a href=\"https://linktr.ee/samirsaci\" target=\"_blank\">🔗 Contact & Links</a>\n            </div>\n            <div class=\"footer-note\">\n                Powered by LogiGreen Consulting - AI-driven sustainability insights for better business decisions\n            </div>\n        </div>\n    </div>\n</body>\n</html>\n`;\n\n// Return the HTML email and metadata\nreturn {\n  html: htmlEmail,\n  subject: `EU Sustainability Digest - ${new Date().toLocaleDateString('en-GB', { day: 'numeric', month: 'short', year: 'numeric' })}`,\n  newsCount: newsItems.length,\n  generatedAt: new Date().toISOString()\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "87ca7616-168b-4f7e-bd3b-4cc9580f3198",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        304,
        336
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "a6a23f06-1a59-4d39-bd35-71d3899f1f65",
      "name": "Create Daily Voice Summary",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        352,
        176
      ],
      "parameters": {
        "text": "={{ $json.titles.toJsonString() }}",
        "options": {
          "systemMessage": "You are a news anchor summarizing EU sustainability news for a 30-second Telegram voice note.\n\nThe user will send you a JSON array called `titles` that contains the headlines of today’s EU news already filtered for sustainability and climate topics.\n\nYour task:\n- Group the headlines into 2–4 main themes.\n- Create a natural, spoken-style summary that connects these themes.\n- Mention “the European Union” or “the EU” at least once.\n- Use clear B1–B2 level English suitable for an international audience.\n- Length: 55–80 words (about 30 seconds of audio).\n- Do NOT read the titles one by one; synthesize them into a coherent story.\n- No bullet points, no headings, no emojis, no markdown.\n- Output ONE single paragraph of plain text only, ready to be sent to a text-to-speech API."
        },
        "promptType": "define"
      },
      "typeVersion": 2.2
    },
    {
      "id": "143a112b-3b6d-4e38-8d54-c563ec5e622f",
      "name": "Send Voice Summary",
      "type": "n8n-nodes-base.telegram",
      "position": [
        896,
        176
      ],
      "webhookId": "5e6560dd-22c3-407b-948a-df5f15c08603",
      "parameters": {
        "chatId": "1698247520",
        "operation": "sendAudio",
        "binaryData": true,
        "additionalFields": {
          "caption": "=EU Sustainability News Digest - {{ $now.toFormat('yyyy-MM-dd') }}"
        }
      },
      "notesInFlow": true,
      "typeVersion": 1.2
    },
    {
      "id": "5f432783-94ed-47c4-b28e-4b3c695887c9",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        64,
        80
      ],
      "parameters": {
        "color": 7,
        "width": 1056,
        "height": 388,
        "content": "## 4. Send a 30-second voice message summarizing the news using titles"
      },
      "typeVersion": 1
    },
    {
      "id": "b59a890e-9a79-4a8b-8e6e-9b31716aaf75",
      "name": "Generate Voice Message",
      "type": "@elevenlabs/n8n-nodes-elevenlabs.elevenLabs",
      "position": [
        688,
        176
      ],
      "parameters": {
        "text": "={{ $json.output }}",
        "voice": {
          "__rl": true,
          "mode": "list",
          "value": "5Q0t7uMcjvnagumLfvZi",
          "cachedResultName": "Paul"
        },
        "resource": "speech",
        "requestOptions": {},
        "additionalOptions": {}
      },
      "notesInFlow": true,
      "typeVersion": 1
    },
    {
      "id": "bfd9b83b-0350-41b7-a02e-fe11de91bb6d",
      "name": "Aggregate Titles",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        128,
        176
      ],
      "parameters": {
        "options": {},
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {
              "renameField": true,
              "outputFieldName": "titles",
              "fieldToAggregate": "title"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b4c633f6-c0e3-4104-b0ea-d9d400e3bb3b",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1520,
        112
      ],
      "parameters": {
        "width": 656,
        "height": 368,
        "content": "@[youtube](vNavNGRqcK4)"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Add News",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "RSS News EU": {
      "main": [
        [
          {
            "node": "Add Archived Guid(s)",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Today's News": {
      "main": [
        [
          {
            "node": "Generate a Digest in HTML",
            "type": "main",
            "index": 0
          },
          {
            "node": "Aggregate Titles",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Topic Config": {
      "main": [
        [
          {
            "node": "Classify News based on a Topic",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Archived News": {
      "main": [
        [
          {
            "node": "List of guid(s) archived",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate Titles": {
      "main": [
        [
          {
            "node": "Create Daily Voice Summary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Create Daily Voice Summary",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Trigger: 09:00 am": {
      "main": [
        [
          {
            "node": "Today's News",
            "type": "main",
            "index": 0
          },
          {
            "node": "RSS News EU",
            "type": "main",
            "index": 0
          },
          {
            "node": "Archived News",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add Archived Guid(s)": {
      "main": [
        [
          {
            "node": "Avoid Duplicates",
            "type": "main",
            "index": 0
          },
          {
            "node": "Generate a Digest in HTML",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Voice Message": {
      "main": [
        [
          {
            "node": "Send Voice Summary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "List of guid(s) archived": {
      "main": [
        [
          {
            "node": "Add Archived Guid(s)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate a Digest in HTML": {
      "main": [
        [
          {
            "node": "Send the digest",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Daily Voice Summary": {
      "main": [
        [
          {
            "node": "Generate Voice Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Classify News based on a Topic": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

相关工作流