� Reddit zu Nachrichten-Newsletter (automatisch kuratiert mit OpenAI 4o Mini) v2
Dies ist ein Multimodal AI-Bereich Automatisierungsworkflow mit 35 Nodes. Hauptsächlich werden If, Set, Code, Gmail, Merge und andere Nodes verwendet. Gestaltete Nachrichtenbriefe aus Reddit-Diskussionen mit GPT-4o Mini und Gmail erstellen
- •Google-Konto + Gmail API-Anmeldedaten
- •OpenAI API Key
Verwendete Nodes (35)
Kategorie
{
"id": "2uApJRHiMI6VVYh0",
"meta": {
"instanceId": "e3b8c25a8cb5935de24fc3d0e60a61032f6dc1d69388fb7fdac79d48279775d0",
"templateCredsSetupCompleted": true
},
"name": "📰 Reddit to Newsletter (Automated Curation with Open AI 4o Mini ) v2",
"tags": [],
"nodes": [
{
"id": "4429a652-06ca-4abd-a864-06bdab7b4a51",
"name": "Bei Klick auf 'Workflow ausführen'",
"type": "n8n-nodes-base.manualTrigger",
"position": [
1296,
32
],
"parameters": {},
"typeVersion": 1
},
{
"id": "325fd52f-9aff-4951-983a-302da65080c5",
"name": "Viele Beiträge abrufen",
"type": "n8n-nodes-base.reddit",
"position": [
1696,
32
],
"parameters": {
"filters": {
"category": "new"
},
"operation": "getAll",
"subreddit": "microsaas"
},
"typeVersion": 1
},
{
"id": "2e5d3135-709c-4000-9d23-5dee01bacb51",
"name": "Thema des Interesses setzen",
"type": "n8n-nodes-base.set",
"position": [
2496,
32
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "8fd840da-788a-4513-9523-66fa92f32850",
"name": "topic",
"type": "string",
"value": "Strategies and tactics to get new customer"
},
{
"id": "9ba01335-5307-4c37-bd21-7e887ce934cb",
"name": "post",
"type": "object",
"value": "={{$json}}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "e2cf004a-d447-4750-a5ad-909646cb488c",
"name": "Über Elemente iterieren",
"type": "n8n-nodes-base.splitInBatches",
"position": [
4080,
16
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "201fb370-eddd-42f8-b2c9-af4d73b794ef",
"name": "Beitrag",
"type": "n8n-nodes-base.set",
"position": [
4448,
112
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "747516e0-1d6e-4e36-aaee-70b36100d307",
"name": "post",
"type": "object",
"value": "={{ $json }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "891b6023-fc8e-4a72-8e0a-0e3d196f0799",
"name": "Zusammenführen",
"type": "n8n-nodes-base.merge",
"position": [
6096,
128
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"typeVersion": 3.2
},
{
"id": "b9ee93d4-6b58-4108-a58f-0ca35e18c6f9",
"name": "Kommentare bereinigen",
"type": "n8n-nodes-base.code",
"position": [
5264,
240
],
"parameters": {
"jsCode": "// n8n Code node (JavaScript) — v2 API\n// Simplifica un comentario de Reddit (y sus replies) a una lista plana con campos clave.\n// Devuelve 1 item por entrada con: post_id, post_url, subreddit, comments_count, comments[]\n\nfunction absPermalink(permalink) {\n if (!permalink || typeof permalink !== 'string') return null;\n return permalink.startsWith('http')\n ? permalink\n : `https://www.reddit.com${permalink}`;\n}\n\nfunction extractPostIdFromLinkId(link_id) {\n // link_id suele ser \"t3_<postid>\"\n if (typeof link_id !== 'string') return null;\n const m = link_id.match(/^t3_(.+)$/i);\n return m ? m[1] : null;\n}\n\nfunction walkComment(node, out, depth = 0) {\n if (!node || typeof node !== 'object') return;\n\n // El comentario suele ir en node.data si viene envuelto con { kind: \"t1\", data: {...} }\n const c = node.data ? node.data : node;\n\n // Añade el comentario actual, si tiene cuerpo o al menos ID\n const simplified = {\n id: c.id ?? null,\n author: c.author ?? null,\n body: c.body ?? null,\n ups: typeof c.ups === 'number' ? c.ups : (typeof c.score === 'number' ? c.score : 0),\n created_utc: typeof c.created_utc === 'number' ? c.created_utc : null,\n permalink: absPermalink(c.permalink),\n parent_id: c.parent_id ?? null,\n is_submitter: Boolean(c.is_submitter),\n depth: typeof c.depth === 'number' ? c.depth : depth,\n };\n\n // Solo empuja si al menos hay id o body\n if (simplified.id || simplified.body) {\n out.push(simplified);\n }\n\n // Procesa replies: pueden ser \"\" o un Listing con data.children[]\n const replies = c.replies;\n if (replies && typeof replies === 'object' && replies.data && Array.isArray(replies.data.children)) {\n for (const child of replies.data.children) {\n walkComment(child, out, (simplified.depth ?? depth) + 1);\n }\n }\n}\n\nreturn items.map((it, idx) => {\n const c = it.json || {};\n\n // Obtén post_id desde link_id (t3_<id>), si existe\n const post_id = extractPostIdFromLinkId(c.link_id) ||\n (c.data ? extractPostIdFromLinkId(c.data.link_id) : null);\n\n // URL del post (minimal) si tenemos post_id\n const post_url = post_id ? `https://www.reddit.com/comments/${post_id}/` : null;\n\n // Subreddit (intenta varias llaves por seguridad)\n const subreddit = c.subreddit || c.subreddit_name_prefixed || (c.data ? c.data.subreddit : null) || null;\n\n // Aplana el comentario raíz + sus replies\n const flat = [];\n walkComment(c, flat, typeof c.depth === 'number' ? c.depth : 0);\n\n return {\n json: {\n post_id,\n post_url,\n subreddit,\n comments_count: flat.length,\n comments: flat,\n },\n pairedItem: { item: idx }, // conserva pairing con el item de entrada\n };\n});\n"
},
"typeVersion": 2
},
{
"id": "abbd45d2-0911-4fed-9e3d-effbabe2a228",
"name": "Kommentare zusammenführen",
"type": "n8n-nodes-base.code",
"position": [
5696,
240
],
"parameters": {
"jsCode": "// Crea un único item con un array \"list\" que contiene los N items originales\nconst list = items.map(it => it.json);\n\n// Si solo quieres ciertos campos:\n// const list = items.map(it => ({ id: it.json.id, title: it.json.title, url: it.json.url }));\n\nreturn [\n { json: { list } }\n];\n"
},
"typeVersion": 2
},
{
"id": "8052a433-8cbb-4e0e-9aa4-8158e36e7537",
"name": "Zusammenfassungen zusammenführen",
"type": "n8n-nodes-base.code",
"position": [
6992,
0
],
"parameters": {
"jsCode": "// Crea un único item con un array \"list\" que contiene los N items originales\nconst list = items.map(it => it.json);\n\n// Si solo quieres ciertos campos:\n// const list = items.map(it => ({ id: it.json.id, title: it.json.title, url: it.json.url }));\n\nreturn [\n { json: { list } }\n];\n"
},
"typeVersion": 2
},
{
"id": "8c27e26c-9220-4af9-8415-7d23c5c37f9d",
"name": "Newsletter erstellen",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
7328,
0
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "GPT-4O-MINI"
},
"options": {},
"messages": {
"values": [
{
"role": "=system",
"content": "=You are an editorial AI specialized in creating engaging newsletters from community discussions. \nYour role is not just to summarize, but to *curate and narrate* Reddit content so it feels fun, easy to read, and worth sharing.\n\nGOALS\n- Make the newsletter feel like a friendly, smart editor walking the reader through the highlights of Reddit.\n- Stay true to the source: everything must come from the JSON input (posts, comments, summaries).\n- Add flow, hooks, and personality — but never add outside facts.\n\nSTYLE\n- Warm, conversational, slightly witty.\n- Use simple words, short sentences, and a light narrative voice.\n- Structure content for skimming: headlines, bullets, quotes.\n- Sprinkle emojis thoughtfully to guide attention (🚀, 💡, 🎯, 🔥, etc).\n- Always attribute quotes with username and link.\n\nOUTPUT\n- Return only valid HTML, suitable for an email newsletter.\n- No Markdown, no code fences.\n- Use <h1>, <h2>, <p>, <ul>, <li>, <blockquote>, and <a>.\n- Keep formatting clean, responsive, and email-friendly.\n\nCONSISTENCY\n- Every post should follow the same section format: \n headline → short narrative → “What we learned” bullets → one quote → numbers line.\n- Smoothly skip elements if data is missing (never show “Unknown”).\n- Maintain a clear intro, outline, body sections, and energetic closing.\n\nYour priority: deliver an entertaining, easy-to-digest newsletter that makes the reader feel they just got the best of Reddit without doing the scrolling.\n"
},
{
"content": "=You are a creative newsletter editor. Your job is to turn a JSON array called \"list\" into an entertaining and easy-to-read HTML newsletter. \nThe newsletter must feel like a conversation with the reader, not like a dry report.\n\nSTYLE & TONE\n- Warm, engaging, slightly playful but professional.\n- Write like a smart curator who has read Reddit so the reader doesn’t have to.\n- Use short sentences, catchy hooks, and occasional rhetorical questions.\n- Make the reader feel part of an insider community.\n- Avoid generic phrases (“Author: Unknown”, “Date: Unknown”). If data is missing, just skip it smoothly.\n\nSTRUCTURE\n1. **Header**: Big catchy title (“🚀 Reddit Microsaas Weekly” or similar), date, and a friendly short intro (2–3 sentences) that sets the mood.\n2. **Outline**: Quick bullets with the main stories (like teasers with emoji).\n3. **Main body**: For EACH summary in the list:\n - Headline (H2) with a hooky title + link to Reddit post.\n - One paragraph storytelling style summary (what happened, why it matters).\n - “What we learned” section → 3 key bullets, easy to skim.\n - One spicy or emotional **quote from a comment**, styled as a blockquote, with attribution (username + link).\n - A small “By the numbers” line if ups or num_comments exist (▲ X votes · 💬 Y comments).\n4. **Closing**: A short wrap-up with energy, like: “That’s it for this week — what will YOU build next? Jump on Reddit and share your story.”\n5. **Footer**: Disclaimer: “All content curated from Reddit. Click links for full threads.”\n\nFORMATTING\n- Output only valid HTML (no Markdown, no code fences).\n- Use simple HTML tags: <h1>, <h2>, <p>, <ul>, <li>, <blockquote>, <a>.\n- Make it scannable: bold for emphasis, emoji for spice.\n- Newsletter must look good in email clients (inline styles optional but keep it simple).\n\nDATA HANDLING\n- Each item in \"list\" may contain: title, url, subreddit, author, created_utc, summary, key_learnings, comments_insights[], ups, num_comments.\n- If something is missing, don’t mention it (no placeholders).\n- Always link headlines and quotes back to Reddit with <a> tags.\n\nNow transform this JSON input into the described HTML newsletter:.\n\n{{ JSON.stringify($json.list) }}"
}
]
}
},
"typeVersion": 1.8
},
{
"id": "9dead837-9957-4eb8-aad2-39b76e04016b",
"name": "Beitrag + Kommentare zusammenfassen",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
6496,
256
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "GPT-4O-MINI"
},
"options": {},
"messages": {
"values": [
{
"role": "system",
"content": "=You are an assistant that analyzes Reddit discussions. \nYour job is to extract main insights, lessons, and takeaways ONLY from the content provided (post + comments).\nYou must strictly stick to the Reddit content and never introduce external knowledge. \nAlways include clear attribution: mention the Reddit user and include the Reddit URL of the post or comment. \nYour answers must be written in fluent, concise, and insightful English, suitable for repurposing into a newsletter and podcast script. \nFocus only on the requested topic of interest, ignoring unrelated parts of the discussion.\n"
},
{
"content": "=Here is the Reddit discussion (post + comments) in JSON:\n\n{{ JSON.stringify($json.list) }}\n\nMy topic of interest is: {{ $json.post.topic }}\n`\nPlease analyze the discussion and output a JSON with the following structure:\n\n{\n \"topic\": \"<the topic of interest>\",\n \"main_post_summary\": \"<2-3 sentence summary of the original post, in your own words>\",\n \"comments_insights\": [\n {\n \"insight\": \"<short summary of the comment’s valuable point, always from the perspective of the topic of interest>\",\n \"user\": \"<Reddit username>\",\n \"url\": \"<permalink to comment or post>\"\n }\n ],\n \"key_learnings\": [\n \"<list of 3-5 concise takeaways relevant to the topic of interest, based ONLY on post and comments>\"\n ]\n}\n"
}
]
}
},
"typeVersion": 1.8
},
{
"id": "3e9186aa-be58-4ae8-adcc-10dfd56768e0",
"name": "Thema des Interesses filtern",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
2880,
32
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "GPT-4O-MINI"
},
"options": {},
"messages": {
"values": [
{
"role": "system",
"content": "You are an assistant that reviews Reddit posts. \nYour task is to check if a given post is about a specific topic of interest. \nAlways return the original JSON structure unchanged, but add one new field: \n\"topic_of_interest\": true or false. \n\n- If the post clearly relates to the requested topic, set it to true. You have to be very strict. \n- If the relation is weak, unrelated, or ambiguous, set it to false. \n- Do not remove or modify existing fields. \n- Output must remain valid JSON.\n\n topic is: {{ $json.topic }}"
},
{
"content": "=Here is a Reddit post in JSON format:\n\n{{JSON.stringify($json.post)}}\n\nPlease return the same JSON with two additional fields:\n\"topic\":{{ $json.topic }}\n\"topic_of_interest\": true or false\n\nReturn ONLY a valid JSON object, no prose, no markdown."
}
]
}
},
"typeVersion": 1.8
},
{
"id": "72a3527f-30a1-40ff-8d74-5bd67c5881ce",
"name": "Nachricht senden",
"type": "n8n-nodes-base.gmail",
"position": [
7872,
0
],
"webhookId": "38198233-bfff-4ad6-8feb-9e739f2ada23",
"parameters": {
"sendTo": "{{YOUR_EMAIL}}",
"message": "={{ $json.message.content }}",
"options": {},
"subject": "Reddit Diggest"
},
"typeVersion": 2.1
},
{
"id": "6ca358ee-21b5-4d86-a53e-9c3f4c8e920e",
"name": "Notiz - Übersicht",
"type": "n8n-nodes-base.stickyNote",
"position": [
624,
-80
],
"parameters": {
"color": 3,
"width": 600,
"height": 1020,
"content": "## 📰 Reddit to Newsletter Workflow\n\n### Goal:\nThis workflow automates the process of curating content from Reddit based on your interests and synthesizing it into a newsletter format. By fetching posts and comments related to specific topics, it helps you generate a well-organized summary that is ready for distribution via email. This workflow allows you to reduce time spent on content collection while ensuring your newsletter contains relevant and engaging material.\n\n### How it works:\n- **Manual Trigger**: Start the workflow by clicking 'Execute workflow'.\n- **Fetch Posts**: Retrieve multiple posts from a specific subreddit.\n- **Set Topic**: Define the topic of interest to filter relevant content.\n- **Check Conditions**: Evaluate whether the posts meet your criteria.\n- **Loop through Items**: Process each post in batches to avoid overloading.\n- **Fetch Comments**: Gather comments for each post to provide context and depth.\n- **Clean Content**: Use code nodes to streamline and format fetched comments.\n- **Summarize**: Generate concise summaries for posts and comments using OpenAI.\n- **Create Newsletter**: Compile the summarized content into a newsletter format.\n- **Email Output**: Send the finalized newsletter through Gmail.\n\n### Parameters to configure:\n- Subreddit to fetch posts from.\n- Topic of interest for filtering.\n- Email settings for sending the final newsletter.\n\n### Limitations / Gotchas:\n- Rate limits imposed by Reddit can affect data retrieval.\n- Ensure proper API keys are configured for OpenAI and Gmail nodes.\n- Handle potential data formatting issues in the code nodes.\n\n### Expected result:\nA well-structured email newsletter summarizing selected Reddit posts and comments tailored to your specified topic of interest.\n\n### 📬 Need help or want to collaborate?\nIf you have any questions, need help setting this up, or want to share feedback — feel free to reach out: \n📩 **{{YOUR_EMAIL}}** or DM me on Twitter [@guanchehacker](http:\\\\www.x.com/GuancheHacker) \n\nIf you're looking to build something more advanced with content curation and AI, let me know and I’ll figure out how I can help you!"
},
"typeVersion": 1
},
{
"id": "b9529a12-26a7-48f2-baf5-c8efa810fece",
"name": "Notiz - Beitrag + Kommentare zusammenfassen",
"type": "n8n-nodes-base.stickyNote",
"position": [
6448,
528
],
"parameters": {
"color": 7,
"width": 380,
"height": 1020,
"content": "## 📝 Summarize post + comments\n\n### 🎯 Purpose \nThis node is essential for extracting and condensing insights from Reddit discussions within the workflow. It analyzes the original post and its comments to create a structured summary that highlights key points, making it easier to repurpose this valuable content into formats like newsletters or podcasts. \n\n### ✅ Preconditions / Setup \n- Reddit discussion data must be available in JSON format, with clearly defined post and comments. \n- OpenAI API credentials should be set up and linked to this node for processing the text. \n\n### 🔄 Inputs / Outputs \n- **Inputs:** The node expects a JSON object containing the Reddit discussion data, including the topic of interest and the relevant content of the post and comments. \n- **Outputs:** It generates a JSON output summarizing the main post, insights from comments, and key learnings, which can be used for further documentation and content creation.\n\n### ⚙️ Key Fields to Configure \n- **modelId:** Select the appropriate model (e.g., \"gpt-4o-mini\") for processing the Reddit content effectively. This is crucial for ensuring high-quality summaries. \n- **messages:** Provide the structured prompt that guides the AI in analyzing the discussion, which is necessary for obtaining relevant insights focused on the topic of interest.\n\n### 📝 Tips / Validation \n- Ensure the Reddit content is formatted correctly in JSON to prevent errors during processing. \n- Verify that the topic of interest is well-defined to guide the AI in focusing on the most relevant aspects of the discussion. Common pitfalls include unclear or overly broad topics, which may dilute the quality of the output."
},
"typeVersion": 1
},
{
"id": "ea88a619-c219-489a-9803-e7de41963e48",
"name": "Notiz - Zusammenführen",
"type": "n8n-nodes-base.stickyNote",
"position": [
6064,
528
],
"parameters": {
"color": 7,
"width": 380,
"height": 1020,
"content": "## 📌 Merge\n\nThis node combines multiple incoming data streams based on their position. Its role is crucial in this workflow to ensure that disparate data elements are effectively merged, allowing for cohesive processing in subsequent steps. By employing the combine method, it streamlines the data flow, making it easier to work with in later stages of the workflow."
},
"typeVersion": 1
},
{
"id": "7f061ea9-bfb5-4730-aec1-efdf74ee0694",
"name": "Notiz - Kommentare zusammenführen",
"type": "n8n-nodes-base.stickyNote",
"position": [
5648,
528
],
"parameters": {
"color": 7,
"width": 380,
"height": 1020,
"content": "## 📌 merge comments\n\n### 🎯 Purpose \nThis node combines multiple comments into a single array, streamlining data for further processing within the workflow. It consolidates the information, making it easier to handle and manipulate in subsequent steps.\n\n### 🔄 Inputs / Outputs \n- **Inputs:** Expects an array of items where each item contains a comment in its `json` format. \n- **Outputs:** Provides a single JSON object containing a `list` field, which holds the combined comments. This output can then be utilized in later nodes for actions such as analysis or display.\n\n### ⚙️ Key Fields to Configure \n- **jsCode:** This field contains the JavaScript code that dictates how the comments are merged. The customization allows for inclusion of specific fields if required, which can enhance the relevance of the output for particular use cases.\n\n### 📝 Tips / Validation \n- Ensure the input items are properly formatted with the expected `json` structure to avoid errors during the merging process. \n- Consider the necessity of including specific fields when configuring `jsCode`—this can improve the integration with downstream processes.\n\nThis node is essential for maintaining clear and organized data flow in the workflow, ultimately supporting effective documentation generation."
},
"typeVersion": 1
},
{
"id": "6609a462-5464-48bc-822f-0f98195edc7a",
"name": "Notiz - Nachricht senden",
"type": "n8n-nodes-base.stickyNote",
"position": [
7712,
528
],
"parameters": {
"color": 7,
"width": 380,
"height": 1020,
"content": "## 📩 Send a message\n\n### 🎯 Purpose \nThis node is responsible for sending an email with the content obtained from the workflow. It is essential for disseminating information, in this case, a summary or updates derived from Reddit, to the specified recipient, ensuring timely communication and engagement.\n\n### ✅ Preconditions / Setup \n- Ensure that the Gmail account credentials are set up and authenticated to allow the node to send emails.\n\n### 🔄 Inputs / Outputs \n- **Inputs:** Expects a JSON object containing the message content that will be used in the email body. \n- **Outputs:** Sends an email to the specified address. This email serves as an important communication link to share insights or information gathered during the workflow processing.\n\n### ⚙️ Key Fields to Configure \n- **sendTo:** The recipient's email address. Here, it requires a valid email format (`{{YOUR_EMAIL}}`).\n- **subject:** The subject line of the email, which is set to \"Reddit Digest\" to clarify the content of the email to the recipient.\n- **message:** This field takes the content dynamically from the previous node in the workflow (`={{ $json.message.content }}`), ensuring that the most current information is sent.\n\n### 📝 Tips / Validation \n- Verify that the recipient's email address is correct to avoid delivery failures.\n- Ensure that the dynamic content in the message field is formatted correctly and available from prior processing in the workflow to prevent sending empty or incorrect messages."
},
"typeVersion": 1
},
{
"id": "66063384-e4a3-4ca6-9d57-5bca91285c5f",
"name": "Notiz - Kommentare bereinigen",
"type": "n8n-nodes-base.stickyNote",
"position": [
5232,
528
],
"parameters": {
"color": 7,
"width": 380,
"height": 1020,
"content": "## 🧹 Clean Comments\n\n### 🎯 Purpose \nThis node is essential for processing and flattening comments from Reddit posts. It simplifies the data structure by extracting key details such as post ID, subreddit, and a list of comments along with their metadata, facilitating easier analysis and reporting in the overall workflow.\n\n### 🔄 Inputs / Outputs \n- **Inputs:** The node expects input in the form of Reddit comments data, which can include nested replies. This data structure is typically received from a previous API request or node that retrieves comments.\n- **Outputs:** It provides a simplified and flattened list of comments, including relevant details like the post ID, URL, subreddit, total comments count, and the actual comments. This output is crucial for subsequent steps that may involve data visualization or further analysis.\n\n### ⚙️ Key Fields to Configure \n- **`jsCode`:** This field contains the JavaScript code that processes the input comments data. It defines how the comments and their replies are extracted and structured. Ensure that this code matches the expected input format to successfully retrieve the desired output.\n\n### 📝 Tips / Validation \n- Make sure that the input data contains the necessary comment structure, including any replies, to avoid empty outputs.\n- Test the node with a variety of Reddit posts to ensure that it correctly flattens comments and handles different levels of nested replies. \n- Double-check the permalink formatting to ensure URLs are correctly generated for all comments."
},
"typeVersion": 1
},
{
"id": "440d3b9e-7da0-464c-8f6b-7cf2bd5691a5",
"name": "Notiz - Viele Kommentare in einem Beitrag abrufen",
"type": "n8n-nodes-base.stickyNote",
"position": [
4832,
528
],
"parameters": {
"color": 7,
"width": 380,
"height": 1020,
"content": "## 📌 Get post comments\n\n### 🎯 Purpose \nThis node retrieves multiple comments from a specific Reddit post. It plays a crucial role within the workflow by aggregating user feedback and discussions related to a post, allowing for deeper analysis or reporting on community engagement.\n\n### ✅ Preconditions / Setup \nBefore this node can execute, ensure you have authenticated access to a Reddit account via OAuth2. Additionally, the previous node should provide the subreddit name and the post ID for the intended comments retrieval.\n\n### 🔄 Inputs / Outputs \n- **Inputs:** This node expects a subreddit name and post ID from the preceding workflow, which are essential for locating the correct post. The number of comments to fetch is also derived from the post data.\n- **Outputs:** The node outputs a list of comments associated with the specified Reddit post. This data is crucial for further processing or analysis in subsequent nodes.\n\n### ⚙️ Key Fields to Configure \n- **subreddit:** This should be populated with the subreddit where the target post is located, using the expression `{{$json.post.subreddit}}` to dynamically pull this value from the previous node.\n- **postId:** Set this to the ID of the post whose comments are to be fetched, utilizing `{{$json.post.id}}` for dynamic input from the workflow context.\n- **limit:** This field should reflect how many comments to retrieve, typically sourced from `{{$json.post.num_comments}}` to match the post's properties.\n\n### 📝 Tips / Validation \n- Ensure the subreddit and post ID are correct to avoid errors during fetching. \n- Validate that the number of requested comments does not exceed Reddit's limitations or the actual comment count available, as this may lead to incomplete results."
},
"typeVersion": 1
},
{
"id": "4c8dbf2a-f141-4222-b31b-25b1ee9d3d13",
"name": "Notiz - Newsletter erstellen",
"type": "n8n-nodes-base.stickyNote",
"position": [
7280,
528
],
"parameters": {
"color": 7,
"width": 380,
"height": 1020,
"content": "## 📧 Create Newsletter\n\n### 🎯 Purpose \nThis node is designed to generate an engaging HTML newsletter from community discussions, specifically curated from Reddit. Within the workflow, it takes in a JSON array, transforms the content into a friendly narrative, and formats it for email, ensuring that readers experience the highlights without needing to scroll through Reddit themselves.\n\n### ✅ Preconditions / Setup \n- **Reddit JSON Data:** The node requires a JSON input that contains posts, comments, and summaries from Reddit. \n- **OpenAI Credentials:** Ensure that the necessary API credentials for OpenAI are configured for the node to function correctly.\n\n### 🔄 Inputs / Outputs \n- **Inputs:** Expects a JSON structure with an array named \"list\" containing elements like title, URL, summary, and user insights. \n- **Outputs:** Provides a clean, formatted HTML output suitable for an email newsletter, enhancing readability and engagement.\n\n### ⚙️ Key Fields to Configure \n- **ModelId:** Selects the specific AI model to be used (e.g., \"gpt-4o-mini\"). This is crucial as it dictates the quality and style of content generation. \n- **Messages:** This contains formatted instructions on how to write the newsletter, defining the tone, structure, and specific requirements for the HTML output. The clearer and more detailed this is, the better the results.\n\n### 📝 Tips / Validation \n- Ensure the Reddit data is complete and well-structured to avoid missing information in the final newsletter. \n- Validate the output by sending a test email to check formatting and readability across different email clients. Common pitfalls include missed elements in the list and improper HTML tags, which can break the layout."
},
"typeVersion": 1
},
{
"id": "3ae68406-b830-4888-9f8e-2c93d1a588cd",
"name": "Notiz - Beitrag",
"type": "n8n-nodes-base.stickyNote",
"position": [
4416,
528
],
"parameters": {
"color": 7,
"width": 380,
"height": 1020,
"content": "## 📌 Post\n\n### 🎯 Purpose \nThis node is responsible for capturing and saving the entire JSON object that is being passed in the workflow. By doing this, it plays a crucial role in ensuring that the data processed in previous nodes is preserved and can be utilized for documentation or further operations within the workflow.\n\n### 🔄 Inputs / Outputs \n- **Inputs:** This node accepts the complete JSON object from the previous steps in the workflow, which contains the relevant data that needs to be stored. \n- **Outputs:** It outputs the same JSON object, making it available for subsequent nodes that require this data for further processing or documentation tasks.\n\n### ⚙️ Key Fields to Configure \n- **Assignments:** This parameter is configured to map the incoming JSON object directly, allowing the stored data to be easily referenced later in the workflow.\n\n### 📝 Tips / Validation \n- Ensure that the incoming JSON object contains all the necessary data required for the subsequent operations in the workflow. \n- Check configurations in previous nodes to prevent issues with missing or malformed data being passed to the post node."
},
"typeVersion": 1
},
{
"id": "827709bf-69df-43f3-a866-abab6f2e69bc",
"name": "Notiz - Zusammenfassungen zusammenführen",
"type": "n8n-nodes-base.stickyNote",
"position": [
6864,
528
],
"parameters": {
"color": 7,
"width": 380,
"height": 1020,
"content": "## 📌 Merge Summaries\n\n### 🎯 Purpose \nThis node combines multiple summary items into a single structured record, which is essential for consolidating data in workflows that process lists of information. It streamlines the output, making it easier to work with the resultant data in subsequent nodes.\n\n### 🔄 Inputs / Outputs \n- **Inputs:** This node expects an array of items, each potentially containing various fields of data that need to be summarized.\n- **Outputs:** It outputs a single object containing a \"list\" array of all input item data, which can be utilized in later nodes for analysis or reporting.\n\n### ⚙️ Key Fields to Configure \n- **jsCode:** This JavaScript code defines how to merge the input items. By default, it collects all fields from the items, but it can be modified to include only specific fields if needed (e.g., `id`, `title`, `url`).\n\n### 📝 Tips / Validation \n- Ensure that the input items are valid and structured as expected before this node runs to prevent errors during the merging process.\n- Adjust the `jsCode` if certain fields are only needed, which can make the output more concise and relevant for downstream tasks."
},
"typeVersion": 1
},
{
"id": "57b1c2cf-970a-4704-82e4-1c10a1100fec",
"name": "Notiz - Über Elemente iterieren",
"type": "n8n-nodes-base.stickyNote",
"position": [
4032,
512
],
"parameters": {
"color": 7,
"width": 380,
"height": 1020,
"content": "## 🔄 Loop Over Items\n\n### 🎯 Purpose \nThis node is responsible for iterating through a collection of items in the workflow. It allows the subsequent nodes to process each item individually, enabling batch processing of data. This functionality is essential for workflows that require actions to be taken on multiple items sequentially, ensuring that no data is overlooked.\n\n### 🔄 Inputs / Outputs \n- **Inputs:** This node accepts an array of items from a previous node in the workflow. Each item will be processed in a separate iteration. \n- **Outputs:** Each output from this node will be a single item, making it easier for subsequent nodes to receive and work with just one piece of data at a time.\n\n### 📝 Tips / Validation \n- Ensure that the input data is formatted as an array to avoid execution issues.\n- Double-check that previous nodes output the correct data types expected by this node for seamless integration."
},
"typeVersion": 1
},
{
"id": "0c45a0a4-f762-48b3-b535-94a543fb4184",
"name": "Notiz - Wenn",
"type": "n8n-nodes-base.stickyNote",
"position": [
3632,
512
],
"parameters": {
"color": 7,
"width": 380,
"height": 1020,
"content": "## ⚖️ If topic of interest\n\n### 🎯 Purpose \nThe \"If\" node acts as a conditional checkpoint within the workflow. It evaluates whether the specified condition is true based on the input data, specifically focusing on whether the topic of interest is set (i.e., not empty). This helps determine the subsequent actions in the workflow, ensuring that only relevant paths are followed based on the provided conditions.\n\n### ✅ Preconditions / Setup \nEnsure that the input data includes a valid `topic_of_interest`. This node relies on this value to perform its conditional check.\n\n### 🔄 Inputs / Outputs \n- **Inputs:** The node expects a JSON object including a `topic_of_interest` key. This input originates from previous nodes that define the topic being evaluated. \n- **Outputs:** If the condition evaluates to true, the workflow can proceed down the specified path; if false, alternative actions can be taken. This decision-making capability is crucial for branching logic in your workflow.\n\n### ⚙️ Key Fields to Configure \n- **Left Value:** This field is set to the variable `{{$json.topic_of_interest}}`, which denotes the current topic being checked. Make sure this variable is correctly mapped to reflect the workflow's context. \n- **Right Value:** Currently configured as empty, indicating that the left value should not be blank for the condition to pass. Ensure this is aligned with your logic requirements.\n\n### 📝 Tips / Validation \n- Confirm that `topic_of_interest` is populated in the upstream workflow nodes before reaching this conditional node to avoid false negatives. \n- Utilize strict type validation to ensure the correct data type is being evaluated, minimizing unexpected behavior in the workflow."
},
"typeVersion": 1
},
{
"id": "0161818b-96e1-4233-9b19-db9366682e6a",
"name": "Notiz - Code1",
"type": "n8n-nodes-base.stickyNote",
"position": [
3248,
512
],
"parameters": {
"color": 7,
"width": 380,
"height": 1020,
"content": "## 🧑💻 String to Json\n\n### 🎯 Purpose \nThis node processes the content from the OpenAI node, transforming various JSON-like string formats into robust JSON objects. It ensures that any incoming data, regardless of its format, is parsed correctly and ready for further processing in the workflow.\n\n### ✅ Preconditions / Setup \nEnsure that the previous node in the workflow (typically the OpenAI node) outputs a message in a format that can be understood by this node (e.g., simple JSON, JSON within code fences, or escaped JSON strings).\n\n### 🔄 Inputs / Outputs \n- **Inputs:** Expects content from previous steps, specifically from `item.json.content` or `item.json.message.content`. \n- **Outputs:** Returns a parsed JSON object, or an error message with the raw input if parsing fails. This allows subsequent nodes to work with well-structured data.\n\n### ⚙️ Key Fields to Configure \n- **jsCode:** Contains the JavaScript logic for extracting and parsing the incoming content. Customize if necessary to accommodate specific formats or structures you anticipate in the input data.\n\n### 📝 Tips / Validation \n- Check that input messages are consistently formatted to reduce parsing errors. \n- Watch for common JSON issues like missing commas or improper nesting. The output will include error details to aid in troubleshooting if parsing fails."
},
"typeVersion": 1
},
{
"id": "55f6cdd0-de23-468f-ad57-319af6c92401",
"name": "Notiz - Thema des Interesses filtern",
"type": "n8n-nodes-base.stickyNote",
"position": [
2848,
512
],
"parameters": {
"color": 7,
"width": 380,
"height": 1020,
"content": "## 🗂️ Filter Topic of Interest\n\n### 🎯 Purpose \nThis node serves as a filtering mechanism within the workflow, assessing Reddit posts to determine if they pertain to a specified topic of interest. It enhances the workflow by ensuring that only relevant content is processed further, which is crucial for maintaining focus on pertinent data and insights.\n\n### ✅ Preconditions / Setup \n- The Reddit post must be provided in JSON format as input. \n- An indication of the topic of interest is required to guide the filtering process. \n- OpenAI credentials must be configured to enable the AI model processing.\n\n### 🔄 Inputs / Outputs \n- **Inputs:** A Reddit post in JSON format and the topic of interest to evaluate. \n- **Outputs:** The original JSON structure with two additional fields: `\"topic\"` indicating the topic assessed and `\"topic_of_interest\"` set to true or false based on the relevance of the post to the specified topic, which helps inform subsequent workflow decisions.\n\n### ⚙️ Key Fields to Configure \n- **Model ID:** Ensure this points to a valid AI model (e.g., `\"gpt-4o-mini\"`) to effectively perform the analysis. \n- **Messages:** These should include the assistant's instruction to review the post and the template for processing, ensuring accurate evaluation and output generation.\n\n### 📝 Tips / Validation \n- Verify that the Reddit post JSON is correctly formatted to avoid processing errors. \n- Check that the topic of interest aligns with the expectations of the review criteria to achieve accurate results. \n- Always maintain the integrity of the original JSON structure, as any alterations may disrupt subsequent processes in the workflow."
},
"typeVersion": 1
},
{
"id": "5b6c1775-9b8f-4424-864b-1c21b0e8e306",
"name": "Notiz - Thema des Interesses setzen",
"type": "n8n-nodes-base.stickyNote",
"position": [
2448,
512
],
"parameters": {
"color": 7,
"width": 380,
"height": 1020,
"content": "## 📌 Set topic of interest\n\n### 🎯 Purpose \nThis node sets a specific topic of interest for the workflow, in this case, focusing on \"Strategies and tactics to get new customers.\" It helps define the context for subsequent processing steps within the workflow, ensuring that all related actions are aligned with this established theme.\n\n### ✅ Preconditions / Setup \nEnsure that any previous nodes that provide context or content related to the topic of interest are correctly configured to pass data to this node.\n\n### 🔄 Inputs / Outputs \n- **Inputs:** This node expects an object input, represented by the value `={{$json}}`, which can originate from previous workflow steps. \n- **Outputs:** It outputs an actionable topic and the associated post details, ready to be utilized by further nodes in the workflow that may analyze or respond to this topic.\n\n### ⚙️ Key Fields to Configure \n- **Topic:** This field is set to \"Strategies and tactics to get new customers.\" Ensure this is relevant and tailored to your specific workflow goals. \n- **Post:** The configuration `={{$json}}` retrieves the necessary context to inform how the topic will be addressed in later stages of the workflow.\n\n### 📝 Tips / Validation \n- Verify that the topic defined aligns with the overall intent of the workflow to avoid disjointed outputs. \n- Ensure the input object is correctly structured before the node executes to prevent errors in downstream processing."
},
"typeVersion": 1
},
{
"id": "44145633-1107-4f76-9912-237aa053e26c",
"name": "Notiz - Code",
"type": "n8n-nodes-base.stickyNote",
"position": [
2048,
512
],
"parameters": {
"color": 7,
"width": 380,
"height": 1020,
"content": "## 📝 Select Top 10 Post\n\n### 🎯 Purpose \nThis Code node processes and sorts incoming data, specifically a list of posts, to identify the top 10 based on their popularity (measured by 'ups' and 'comments') and their creation date. It outputs simplified objects containing essential details about these posts, including their ranking, which are then used for documentation in the workflow.\n\n### 🔄 Inputs / Outputs \n- **Inputs:** This node expects an array of items, each representing a post or a collection of posts, coming from the preceding node in the workflow.\n- **Outputs:** The output is a list of the top 10 posts, each represented by selected fields (like id, subreddit, title, and URL), along with an index indicating the original source item. This output provides valuable insights for further analysis or display in the workflow.\n\n### ⚙️ Key Fields to Configure \n- **jsCode:** This field contains the JavaScript logic that handles the sorting and selection of the top posts. Users do not need to modify it for standard use, as it is built to handle various item formats efficiently.\n\n### 📝 Tips / Validation \n- Ensure that the input data structure matches expectations (single array of posts or multiple individual posts).\n- Validate that the fields like 'ups', 'num_comments', and 'created_utc' exist in the data to avoid errors in sorting and output generation. \n- Confirm that the previous node supplying the data outputs correctly formatted JSON objects to facilitate successful processing in this node."
},
"typeVersion": 1
},
{
"id": "ede3a99f-b74a-450c-83d0-7d74cabde7fe",
"name": "Notiz - Viele Beiträge abrufen",
"type": "n8n-nodes-base.stickyNote",
"position": [
1664,
512
],
"parameters": {
"color": 7,
"width": 380,
"height": 1020,
"content": "## 📌 Get many posts\n\n### 🎯 Purpose \nThis node retrieves multiple posts from the \"microsaas\" subreddit, specifically filtering for new posts. It plays a crucial role in the workflow by providing the latest content for further processing or analysis.\n\n### ✅ Preconditions / Setup \n- A valid Reddit account must be authorized and connected to n8n using OAuth2 credentials.\n\n### 🔄 Inputs / Outputs \n- **Inputs:** This node does not have specific inputs as it directly queries the Reddit API for posts.\n- **Outputs:** It generates a list of recently created posts from the subreddit, which can be used in subsequent nodes for processing or display.\n\n### ⚙️ Key Fields to Configure \n- **Subreddit:** Enter \"microsaas\" to specify which subreddit to pull posts from. \n- **Filters:** Set the category to \"new\" to ensure only the most recent posts are included in the output.\n\n### 📝 Tips / Validation \n- Verify that the Reddit API credentials are correct and have the necessary permissions.\n- Ensure that the specified subreddit exists and has recent posts available to retrieve."
},
"typeVersion": 1
},
{
"id": "e0157069-7bd7-4dee-88f8-13a68ec0f5b6",
"name": "Top-10-Beiträge auswählen",
"type": "n8n-nodes-base.code",
"position": [
2096,
32
],
"parameters": {
"jsCode": "// n8n Code node (JavaScript)\n// Top 10 by ups; outputs only selected fields + pairedItem\n\n// Build a normalized list that remembers the source item index\nconst records = [];\nif (items.length === 1 && Array.isArray(items[0].json)) {\n // Case: a single item with an array of posts inside\n items[0].json.forEach((post, _idxInArray) => {\n records.push({ data: post, src: 0 });\n });\n} else {\n // Case: one post per incoming item\n items.forEach((it, idx) => {\n records.push({ data: it.json || {}, src: idx });\n });\n}\n\n// Sort with fallbacks\nconst sorted = records\n .map(r => {\n const j = r.data || {};\n return {\n ...r,\n _ups: typeof j.ups === 'number' ? j.ups : (typeof j.score === 'number' ? j.score : 0),\n _comments: typeof j.num_comments === 'number' ? j.num_comments : 0,\n _created: typeof j.created_utc === 'number' ? j.created_utc : 0,\n };\n })\n .sort((a, b) => {\n if (b._ups !== a._ups) return b._ups - a._ups;\n if (b._comments !== a._comments) return b._comments - a._comments;\n return b._created - a._created;\n });\n\n// Take top 10 and output minimal fields + pairedItem\nconst out = sorted.slice(0, 10).map((r, i) => {\n const p = r.data || {};\n return {\n json: {\n rank: i + 1,\n id: p.id ?? null,\n subreddit: p.subreddit ?? null,\n title: p.title ?? null,\n selftext: p.selftext ?? null,\n url: p.permalink ? `https://www.reddit.com${p.permalink}` : null,\n author: p.author ?? null,\n ups: (typeof p.ups === 'number' ? p.ups : (typeof p.score === 'number' ? p.score : r._ups)),\n num_comments: (typeof p.num_comments === 'number' ? p.num_comments : r._comments),\n created_utc: (typeof p.created_utc === 'number' ? p.created_utc : r._created),\n },\n // 🔹 This keeps items \"paired\" to their original source\n pairedItem: { item: r.src },\n };\n});\n\nreturn out;\n\n"
},
"typeVersion": 2
},
{
"id": "87bc320e-220a-4cc3-a4fa-40aa4484540a",
"name": "String zu Json",
"type": "n8n-nodes-base.code",
"position": [
3280,
32
],
"parameters": {
"jsCode": "// n8n Code node (JavaScript)\n// Parsea \"message.content\" del nodo OpenAI a JSON robustamente.\n// Soporta: JSON puro, bloque ```json ... ```, y string JSON escapado.\n\nfunction extractFromCodeFence(s) {\n const m = s.match(/```(?:json)?\\s*([\\s\\S]*?)```/i);\n return m ? m[1] : null;\n}\n\nfunction extractFirstJsonObject(s) {\n // Busca el primer bloque {...} (simple pero útil como último recurso)\n const start = s.indexOf('{');\n const end = s.lastIndexOf('}');\n if (start !== -1 && end !== -1 && end > start) {\n return s.slice(start, end + 1);\n }\n return null;\n}\n\nfunction smartParse(text) {\n let t = text ?? '';\n\n // 1) Si viene dentro de code fences ```json ... ```\n const fenced = extractFromCodeFence(t);\n if (fenced) t = fenced;\n\n t = t.trim();\n\n // 2) Intento directo\n try {\n const v = JSON.parse(t);\n // Si al parsear obtenemos un string (caso de JSON doblemente escapado), parsea otra vez\n if (typeof v === 'string') {\n try { return JSON.parse(v); } catch { return v; }\n }\n return v;\n } catch {}\n\n // 3) Extrae el primer bloque {...} y reintenta\n const objText = extractFirstJsonObject(t);\n if (objText) {\n try { return JSON.parse(objText); } catch {}\n }\n\n // 4) Fallback: devuelve error con el raw para inspección\n return { error: 'Invalid JSON', raw: text };\n}\n\nreturn items.map((item) => {\n const content =\n item.json?.content ??\n item.json?.message?.content ?? // estructura típica del nodo \"Message a model\"\n '';\n\n const parsed = smartParse(String(content));\n\n return {\n json: parsed,\n // Mantén pairing si vienes encadenando nodos que lo requieren:\n pairedItem: item.pairedItem ? item.pairedItem : undefined,\n };\n});\n\n"
},
"typeVersion": 2
},
{
"id": "5f83b205-a863-4b2b-8083-4ba27ca698b5",
"name": "Wenn Thema des Interesses",
"type": "n8n-nodes-base.if",
"position": [
3680,
32
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "7d1039e0-2ae3-4935-b355-c60fbd9ffce5",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.topic_of_interest }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "12fcb916-f819-48f7-b144-eb7c40176215",
"name": "Beitragskommentare abrufen",
"type": "n8n-nodes-base.reddit",
"position": [
4880,
240
],
"parameters": {
"limit": "={{ $json.post.num_comments }}",
"postId": "={{ $json.post.id }}",
"resource": "postComment",
"operation": "getAll",
"subreddit": "={{ $json.post.subreddit }}"
},
"typeVersion": 1
},
{
"id": "341526a0-1ba3-4473-ba05-e442dc9f73c2",
"name": "Notiz",
"type": "n8n-nodes-base.stickyNote",
"position": [
624,
1008
],
"parameters": {
"width": 592,
"height": 720,
"content": "## 🛠 Set Up fields\n\nBefore running this workflow, update the following fields inside the indicated nodes:\n\n### 🔑 Credentials\n- **Reddit OAuth2** → in node **Get many posts** and **Get post comments** \n- **OpenAI API** → in nodes **filter topic of interest**, **Summarize post + comments**, and **create newsletter** \n- **Gmail OAuth2** → in node **Send a message** \n\n### 📬 Email settings\n- **Recipient email ({{YOUR_EMAIL}})** → in node **Send a message → To** \n- **Email subject ({{EMAIL_SUBJECT}})** → in node **Send a message → Subject** (default: *Reddit Digest*) \n\n### 🌐 Content filters\n- **Subreddit ({{SUBREDDIT}})** → in node **Get many posts → subreddit** (default: *microsaas*) \n- **Topic of interest ({{TOPIC_OF_INTEREST}})** → in node **Set topic of interest → value** (e.g., *finding first customers*) \n\n### ✅ Tips\n- Make sure the chosen subreddit has **new posts**; otherwise the digest will be empty \n- Keep the *topic of interest* **specific** to improve AI filtering \n- Test with your own Gmail address before sending to a list \n\n📌 Once these fields are set, run the workflow manually to generate your first digest.\n"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "5a54d98c-f7c6-4c15-b731-ef1bd3da72a3",
"connections": {
"201fb370-eddd-42f8-b2c9-af4d73b794ef": {
"main": [
[
{
"node": "12fcb916-f819-48f7-b144-eb7c40176215",
"type": "main",
"index": 0
},
{
"node": "891b6023-fc8e-4a72-8e0a-0e3d196f0799",
"type": "main",
"index": 0
}
]
]
},
"891b6023-fc8e-4a72-8e0a-0e3d196f0799": {
"main": [
[
{
"node": "9dead837-9957-4eb8-aad2-39b76e04016b",
"type": "main",
"index": 0
}
]
]
},
"325fd52f-9aff-4951-983a-302da65080c5": {
"main": [
[
{
"node": "e0157069-7bd7-4dee-88f8-13a68ec0f5b6",
"type": "main",
"index": 0
}
]
]
},
"87bc320e-220a-4cc3-a4fa-40aa4484540a": {
"main": [
[
{
"node": "5f83b205-a863-4b2b-8083-4ba27ca698b5",
"type": "main",
"index": 0
}
]
]
},
"b9ee93d4-6b58-4108-a58f-0ca35e18c6f9": {
"main": [
[
{
"node": "abbd45d2-0911-4fed-9e3d-effbabe2a228",
"type": "main",
"index": 0
}
]
]
},
"abbd45d2-0911-4fed-9e3d-effbabe2a228": {
"main": [
[
{
"node": "891b6023-fc8e-4a72-8e0a-0e3d196f0799",
"type": "main",
"index": 1
}
]
]
},
"e2cf004a-d447-4750-a5ad-909646cb488c": {
"main": [
[
{
"node": "8052a433-8cbb-4e0e-9aa4-8158e36e7537",
"type": "main",
"index": 0
}
],
[
{
"node": "201fb370-eddd-42f8-b2c9-af4d73b794ef",
"type": "main",
"index": 0
}
]
]
},
"8052a433-8cbb-4e0e-9aa4-8158e36e7537": {
"main": [
[
{
"node": "8c27e26c-9220-4af9-8415-7d23c5c37f9d",
"type": "main",
"index": 0
}
]
]
},
"12fcb916-f819-48f7-b144-eb7c40176215": {
"main": [
[
{
"node": "b9ee93d4-6b58-4108-a58f-0ca35e18c6f9",
"type": "main",
"index": 0
}
]
]
},
"8c27e26c-9220-4af9-8415-7d23c5c37f9d": {
"main": [
[
{
"node": "72a3527f-30a1-40ff-8d74-5bd67c5881ce",
"type": "main",
"index": 0
}
]
]
},
"e0157069-7bd7-4dee-88f8-13a68ec0f5b6": {
"main": [
[
{
"node": "2e5d3135-709c-4000-9d23-5dee01bacb51",
"type": "main",
"index": 0
}
]
]
},
"5f83b205-a863-4b2b-8083-4ba27ca698b5": {
"main": [
[
{
"node": "e2cf004a-d447-4750-a5ad-909646cb488c",
"type": "main",
"index": 0
}
]
]
},
"2e5d3135-709c-4000-9d23-5dee01bacb51": {
"main": [
[
{
"node": "3e9186aa-be58-4ae8-adcc-10dfd56768e0",
"type": "main",
"index": 0
}
]
]
},
"3e9186aa-be58-4ae8-adcc-10dfd56768e0": {
"main": [
[
{
"node": "87bc320e-220a-4cc3-a4fa-40aa4484540a",
"type": "main",
"index": 0
}
]
]
},
"9dead837-9957-4eb8-aad2-39b76e04016b": {
"main": [
[
{
"node": "e2cf004a-d447-4750-a5ad-909646cb488c",
"type": "main",
"index": 0
}
]
]
},
"4429a652-06ca-4abd-a864-06bdab7b4a51": {
"main": [
[
{
"node": "325fd52f-9aff-4951-983a-302da65080c5",
"type": "main",
"index": 0
}
]
]
}
}
}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?
Experte - Multimodales KI
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.
Verwandte Workflows
Luis Acosta
@podcast-toolsI'm passionate about people and technology, with a hands-on and creative approach. Lately, my main focus has shifted towards process automation using artificial intelligence and the creation of meaningful content. I enjoy exploring how emerging technologies can simplify workflows, enhance productivity, and open new creative possibilities.
Diesen Workflow teilen