Tägliche Zusammenfassung positiver Nachrichten mit OpenAI und Gmail

Fortgeschritten

Dies ist ein Personal Productivity, AI Summarization-Bereich Automatisierungsworkflow mit 9 Nodes. Hauptsächlich werden If, Cron, Gmail, OpenAi, RssFeed und andere Nodes verwendet. Tägliche positive Nachrichten-Zusammenfassung mit OpenAI und Gmail

Voraussetzungen
  • Google-Konto + Gmail API-Anmeldedaten
  • OpenAI API Key
Workflow-Vorschau
Visualisierung der Node-Verbindungen, mit Zoom und Pan
Workflow exportieren
Kopieren Sie die folgende JSON-Konfiguration und importieren Sie sie in n8n
{
  "nodes": [
    {
      "name": "Täglicher Morgen-Trigger (7 AM)",
      "type": "n8n-nodes-base.cron",
      "notes": {
        "text": "### 1. Daily Morning Trigger (7 AM)\n\nThis `Cron` node triggers the workflow automatically every **day at 7:00 AM** (based on your n8n server's local time zone).\n\n**To change the schedule:** Adjust the 'Hour' and 'Minute' fields to your preferred time for receiving the news digest.",
        "position": "right"
      },
      "position": [
        240,
        300
      ],
      "parameters": {
        "mode": "everyDay",
        "value": {
          "hour": [
            7
          ],
          "minute": [
            0
          ]
        },
        "options": {}
      },
      "typeVersion": 1,
      "id": "T-glicher-Morgen-Trigger-7-AM--0"
    },
    {
      "name": "Positive Nachrichten abrufen (RSS)",
      "type": "n8n-nodes-base.rssFeed",
      "notes": {
        "text": "### 2. Fetch Positive News (RSS)\n\nThis `RSS Feed` node fetches the latest articles from the Good News Network, a reliable source for positive stories.\n\n**Setup:**\n1.  **URL:** Pre-filled with `https://www.goodnewsnetwork.org/feed/`.\n2.  **To add more sources:** You can add more `RSS Feed` nodes in parallel and then use an `Item Lists` node set to 'Merge Items' to combine their outputs before the 'Prepare for AI' node.",
        "position": "right"
      },
      "position": [
        480,
        300
      ],
      "parameters": {
        "url": "https://www.goodnewsnetwork.org/feed/",
        "options": {}
      },
      "typeVersion": 1,
      "id": "Positive-Nachrichten-abrufen-RSS--1"
    },
    {
      "name": "Für AI vorbereiten",
      "type": "n8n-nodes-base.function",
      "notes": {
        "text": "### 3. Prepare for AI\n\nThis `Function` node formats the news articles' titles and descriptions into a single `articleText` field, which is easier for the AI to process.\n\nIt also preserves the original title, description, and link for the final summary.\n\n**No configuration needed**; it automatically processes the RSS feed items.",
        "position": "right"
      },
      "position": [
        720,
        300
      ],
      "parameters": {
        "options": {},
        "function": "const preparedItems = [];\n\nfor (const item of items) {\n  const title = item.json.title || 'No Title';\n  const description = item.json.contentSnippet || item.json.description || 'No Description';\n  const link = item.json.link || '#';\n\n  preparedItems.push({\n    json: {\n      originalTitle: title,\n      originalDescription: description,\n      originalLink: link,\n      articleText: `Title: ${title}\\nDescription: ${description}`\n    }\n  });\n}\n\nreturn preparedItems;"
      },
      "typeVersion": 1,
      "id": "F-r-AI-vorbereiten-2"
    },
    {
      "name": "AI: Positive Nachrichten zusammenfassen",
      "type": "n8n-nodes-base.openAi",
      "notes": {
        "text": "### 4. AI: Summarize Positive News\n\nThis `OpenAI` node is the core of the 'positive news' filtering and summarization.\n\n**Setup:**\n1.  **OpenAI Credential:** Click 'Credentials' and select 'New Credential'. Provide your OpenAI API Key (starts with `sk-`). Save it.\n2.  **Model:** `gpt-3.5-turbo` is pre-selected. For higher quality summaries and better sentiment discernment, consider `gpt-4o` (may incur higher costs).\n3.  **Prompts:** The 'System' prompt guides the AI to only summarize positive/neutral-to-positive articles and output 'SKIP' otherwise.\n\n**Output:** The AI's summary or the word 'SKIP'.",
        "position": "right"
      },
      "position": [
        960,
        300
      ],
      "parameters": {
        "model": "gpt-3.5-turbo",
        "options": {},
        "messages": [
          {
            "role": "system",
            "content": "You are a news summarizer focused only on positive and uplifting news. Read the provided article text. If it is clearly positive or neutral-to-positive, summarize its core message in 2-3 concise sentences, focusing on the positive aspects. If it is negative, neutral, or not news (e.g., ads), output the single word 'SKIP'."
          },
          {
            "role": "user",
            "content": "Article:\n{{ $json.articleText }}"
          }
        ]
      },
      "credentials": {
        "openAiApi": {
          "id": "YOUR_OPENAI_CREDENTIAL_ID",
          "resolve": false
        }
      },
      "typeVersion": 1,
      "id": "AI-Positive-Nachrichten-zusammenfassen-3"
    },
    {
      "name": "Positive Zusammenfassungen filtern & vorbereiten",
      "type": "n8n-nodes-base.function",
      "notes": {
        "text": "### 5. Filter & Prepare Positive Summaries\n\nThis `Function` node filters out any items where the AI responded with 'SKIP' (meaning the news was not positive enough).\n\nFor the remaining items, it prepares a clean object containing the original title, link, and the AI-generated positive summary.\n\n**No configuration needed**; it automatically processes the AI output.",
        "position": "right"
      },
      "position": [
        1200,
        300
      ],
      "parameters": {
        "options": {},
        "function": "const positiveSummaries = [];\n\nfor (const item of items) {\n  const aiResponse = item.json.choices[0].message.content.trim();\n\n  if (aiResponse.toUpperCase() !== 'SKIP') {\n    positiveSummaries.push({\n      json: {\n        originalTitle: item.json.originalTitle,\n        originalLink: item.json.originalLink,\n        summary: aiResponse\n      }\n    });\n  }\n}\n\nreturn positiveSummaries;"
      },
      "typeVersion": 1,
      "id": "Positive-Zusammenfassungen-filtern-vorbereiten-4"
    },
    {
      "name": "Wenn positive Nachrichten gefunden",
      "type": "n8n-nodes-base.if",
      "notes": {
        "text": "### 6. If Positive News Found\n\nThis `If` node checks if any positive news articles were actually found and summarized after filtering.\n\n* **'True' branch:** If positive news exists, the workflow proceeds to format and send the email.\n* **'False' branch:** If no positive news was found for the day, the workflow will still send an email, but with a message indicating no positive news was found (handled by the 'Format No Positive News Message' node).\n\n**No configuration needed**; it checks if the array of items is not empty.",
        "position": "right"
      },
      "position": [
        1440,
        300
      ],
      "parameters": {
        "conditions": [
          {
            "value1": "={{ $json.length }}",
            "value2": "0",
            "operation": "notEqual"
          }
        ]
      },
      "typeVersion": 1,
      "id": "Wenn-positive-Nachrichten-gefunden-5"
    },
    {
      "name": "E-Mail für positive Nachrichten formatieren",
      "type": "n8n-nodes-base.function",
      "notes": {
        "text": "### 7. Format Positive News Email\n\nThis `Function` node compiles all the positive news summaries into a single, formatted email body.\n\n**Customization:**\n* You can customize the greeting, closing, and the way each news item is presented.\n* The email body is formatted using Markdown for bolding and line breaks, which Gmail supports.\n\n**No configuration needed** if your previous node's output matches expectations.",
        "position": "right"
      },
      "position": [
        1680,
        220
      ],
      "parameters": {
        "options": {},
        "function": "let emailBody = \"\";\n\nemailBody += \"Good morning! Here's your daily dose of positive news:\\n\\n\";\n\nfor (const item of items) {\n  emailBody += `**${item.json.originalTitle}**\\n` +\n               `${item.json.summary}\\n` +\n               `Read more: ${item.json.originalLink}\\n\\n---\\n\\n`;\n}\n\nemailBody += \"Have a wonderful day!\\n\\nThis digest was brought to you by n8n.\";\n\nreturn [{ json: { emailSubject: \"☀️ Your Daily Positive News Digest!\", emailBody: emailBody } }];"
      },
      "typeVersion": 1,
      "id": "E-Mail-f-r-positive-Nachrichten-formatieren-6"
    },
    {
      "name": "Keine-positive-Nachrichten-Nachricht formatieren",
      "type": "n8n-nodes-base.function",
      "notes": {
        "text": "### 7. Format No Positive News Message\n\nThis `Function` node creates a fallback message for your email if the workflow doesn't find any positive news articles after filtering.\n\n**No configuration needed**; it provides a default message when there's no positive news.",
        "position": "right"
      },
      "position": [
        1680,
        380
      ],
      "parameters": {
        "options": {},
        "function": "return [{ json: { emailSubject: \"☁️ Daily Positive News Digest: No Positive News Today\", emailBody: \"Good morning!\\n\\nUnfortunately, I couldn't find any predominantly positive news articles for your digest today.\\n\\nStay positive, and check back tomorrow!\\n\\nThis digest was brought to you by n8n.\" } }];"
      },
      "typeVersion": 1,
      "id": "Keine-positive-Nachrichten-Nachricht-formatieren-7"
    },
    {
      "name": "Tägliche Digest-E-Mail senden",
      "type": "n8n-nodes-base.gmail",
      "notes": {
        "text": "### 8. Send Daily Digest Email\n\nThis `Gmail` node sends the final email digest (either with positive news or the 'no news found' message) to your mailbox.\n\n**Setup:**\n1.  **Gmail Credential:** Select your Gmail API credential.\n2.  **From Email:** Enter your Gmail address (must match the authenticated account).\n3.  **To Email:** **IMPORTANT: Change `YOUR_RECIPIENT_EMAIL@example.com` to your actual email address!**\n4.  **Subject & Text:** These fields pull the formatted subject and body from the previous 'Format' nodes.\n\n**Test this node by running the workflow** to ensure you receive the email.",
        "position": "right"
      },
      "position": [
        1920,
        300
      ],
      "parameters": {
        "text": "={{ $json.emailBody }}",
        "options": {},
        "subject": "={{ $json.emailSubject }}",
        "toEmail": "YOUR_RECIPIENT_EMAIL@example.com",
        "fromEmail": "YOUR_GMAIL_EMAIL@gmail.com"
      },
      "credentials": {
        "gmailApi": {
          "id": "YOUR_GMAIL_CREDENTIAL_ID",
          "resolve": false
        }
      },
      "typeVersion": 2,
      "id": "T-gliche-Digest-E-Mail-senden-8"
    }
  ],
  "pinData": {},
  "version": 1,
  "connections": {
    "F-r-AI-vorbereiten-2": {
      "main": [
        [
          {
            "node": "AI-Positive-Nachrichten-zusammenfassen-3",
            "type": "main"
          }
        ]
      ]
    },
    "Wenn-positive-Nachrichten-gefunden-5": {
      "main": [
        [
          {
            "node": "E-Mail-f-r-positive-Nachrichten-formatieren-6",
            "type": "main"
          }
        ],
        [
          {
            "node": "Keine-positive-Nachrichten-Nachricht-formatieren-7",
            "type": "main"
          }
        ]
      ]
    },
    "Positive-Nachrichten-abrufen-RSS--1": {
      "main": [
        [
          {
            "node": "F-r-AI-vorbereiten-2",
            "type": "main"
          }
        ]
      ]
    },
    "E-Mail-f-r-positive-Nachrichten-formatieren-6": {
      "main": [
        [
          {
            "node": "T-gliche-Digest-E-Mail-senden-8",
            "type": "main"
          }
        ]
      ]
    },
    "AI-Positive-Nachrichten-zusammenfassen-3": {
      "main": [
        [
          {
            "node": "Positive-Zusammenfassungen-filtern-vorbereiten-4",
            "type": "main"
          }
        ]
      ]
    },
    "T-glicher-Morgen-Trigger-7-AM--0": {
      "main": [
        [
          {
            "node": "Positive-Nachrichten-abrufen-RSS--1",
            "type": "main"
          }
        ]
      ]
    },
    "Keine-positive-Nachrichten-Nachricht-formatieren-7": {
      "main": [
        [
          {
            "node": "T-gliche-Digest-E-Mail-senden-8",
            "type": "main"
          }
        ]
      ]
    },
    "Positive-Zusammenfassungen-filtern-vorbereiten-4": {
      "main": [
        [
          {
            "node": "Wenn-positive-Nachrichten-gefunden-5",
            "type": "main"
          }
        ]
      ]
    }
  }
}
Häufig gestellte Fragen

Wie verwende ich diesen Workflow?

Kopieren Sie den obigen JSON-Code, erstellen Sie einen neuen Workflow in Ihrer n8n-Instanz und wählen Sie "Aus JSON importieren". Fügen Sie die Konfiguration ein und passen Sie die Anmeldedaten nach Bedarf an.

Für welche Szenarien ist dieser Workflow geeignet?

Fortgeschritten - Persönliche Produktivität, KI-Zusammenfassung

Ist es kostenpflichtig?

Dieser Workflow ist völlig kostenlos. Beachten Sie jedoch, dass Drittanbieterdienste (wie OpenAI API), die im Workflow verwendet werden, möglicherweise kostenpflichtig sind.

Workflow-Informationen
Schwierigkeitsgrad
Fortgeschritten
Anzahl der Nodes9
Kategorie2
Node-Typen6
Schwierigkeitsbeschreibung

Für erfahrene Benutzer, mittelkomplexe Workflows mit 6-15 Nodes

Autor
Piotr Sobolewski

Piotr Sobolewski

@piotrsobolewski

AI PhD with 7 years experience as a game dev CEO, currently teaching, helping others and building something new.

Externe Links
Auf n8n.io ansehen

Diesen Workflow teilen

Kategorien

Kategorien: 34