Mit n8n API und E-Mail versendete wöchentliche Workflow-Analyseberichte erstellen
Dies ist ein DevOps-Bereich Automatisierungsworkflow mit 19 Nodes. Hauptsächlich werden N8n, Set, Code, Gmail, Merge und andere Nodes verwendet. Wöchentliche Arbeitsfluss-Analyseberichte mit n8n API und E-Mail generieren und versenden
- •Google-Konto + Gmail API-Anmeldedaten
Verwendete Nodes (19)
Kategorie
{
"meta": {
"instanceId": "89249a8a187ba6e01e16112a0d334a3aa01d510ad8f88d223e12cc0a2a8beb6b"
},
"nodes": [
{
"id": "9c2f922e-2f23-417f-9e26-f2f91d719728",
"name": "Zeitplan-Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
912,
16
],
"parameters": {
"rule": {
"interval": [
{
"daysInterval": 7
}
]
}
},
"typeVersion": 1.1
},
{
"id": "ea56ce13-5b66-439c-8241-3c8eecb06eb8",
"name": "Get all previous executions",
"type": "n8n-nodes-base.n8n",
"position": [
1824,
112
],
"parameters": {
"filters": {},
"options": {},
"resource": "execution",
"returnAll": true,
"requestOptions": {}
},
"notesInFlow": false,
"typeVersion": 1
},
{
"id": "22cefb90-bce7-402d-a996-6489bda7c136",
"name": "Get all Workflows",
"type": "n8n-nodes-base.n8n",
"position": [
1424,
-160
],
"parameters": {
"filters": {},
"requestOptions": {}
},
"typeVersion": 1
},
{
"id": "b6395b45-7c15-4ab4-9dc4-905ddf04d54b",
"name": "Zusammenführen",
"type": "n8n-nodes-base.merge",
"position": [
2496,
0
],
"parameters": {
"mode": "combine",
"options": {
"clashHandling": {
"values": {
"resolveClash": "preferLast"
}
}
},
"advanced": true,
"joinMode": "enrichInput2",
"mergeByFields": {
"values": [
{
"field1": "workflowId",
"field2": "workflowId"
}
]
}
},
"typeVersion": 3.2
},
{
"id": "8e131881-f7ab-46cf-9ebc-f006a819d66d",
"name": "Edit Field ID to workflowId",
"type": "n8n-nodes-base.set",
"position": [
2160,
-160
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "474e54af-e79e-4d58-8c11-dbd920f0511c",
"name": "workflowId",
"type": "string",
"value": "={{ $json.id }}"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "12a17b24-b3c7-4d40-8a03-3b84c932521b",
"name": "Filter executions last week",
"type": "n8n-nodes-base.filter",
"position": [
2896,
0
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "31745f1d-793a-4674-80ab-77afede449d6",
"operator": {
"type": "dateTime",
"operation": "after"
},
"leftValue": "={{ $json.startedAt }}",
"rightValue": "={{ DateTime.now().minus({ days: 7 }) }}"
}
]
}
},
"typeVersion": 2,
"alwaysOutputData": false
},
{
"id": "2e18c677-62ae-4228-9aeb-ba665f8d05c8",
"name": "Prepare html report",
"type": "n8n-nodes-base.code",
"position": [
3376,
0
],
"parameters": {
"jsCode": "// Calculate the date range (7 days ago to now)\nconst now = new Date();\nconst sevenDaysAgo = new Date(now.getTime() - (7 * 24 * 60 * 60 * 1000));\n\n// Group executions by workflow\nconst workflowStats = {};\n\nfor (const item of $input.all()) {\n const workflowId = item.json.workflowId;\n const workflowName = item.json.name;\n const status = item.json.status;\n const startedAt = new Date(item.json.startedAt);\n const stoppedAt = item.json.stoppedAt ? new Date(item.json.stoppedAt) : null;\n \n // Calculate runtime in seconds\n let runtime = 0;\n if (stoppedAt) {\n runtime = (stoppedAt - startedAt) / 1000; // Convert to seconds\n }\n \n // Initialize workflow stats if not exists\n if (!workflowStats[workflowId]) {\n workflowStats[workflowId] = {\n name: workflowName,\n id: workflowId,\n error: { count: 0, totalRuntime: 0 },\n success: { count: 0, totalRuntime: 0 },\n waiting: { count: 0, totalRuntime: 0 }\n };\n }\n \n // Update counts and runtime based on status\n if (status === 'error') {\n workflowStats[workflowId].error.count++;\n workflowStats[workflowId].error.totalRuntime += runtime;\n } else if (status === 'success') {\n workflowStats[workflowId].success.count++;\n workflowStats[workflowId].success.totalRuntime += runtime;\n } else if (status === 'waiting') {\n workflowStats[workflowId].waiting.count++;\n workflowStats[workflowId].waiting.totalRuntime += runtime;\n }\n}\n\n// Helper function to format date (without time)\nfunction formatDate(date) {\n const options = { \n year: 'numeric', \n month: 'long', \n day: 'numeric'\n };\n return date.toLocaleDateString('en-US', options);\n}\n\n// Helper function to format runtime\nfunction formatRuntime(seconds) {\n if (seconds < 60) {\n return `${seconds.toFixed(2)}s`;\n } else if (seconds < 3600) {\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = (seconds % 60).toFixed(0);\n return `${minutes}m ${remainingSeconds}s`;\n } else {\n const hours = Math.floor(seconds / 3600);\n const minutes = Math.floor((seconds % 3600) / 60);\n return `${hours}h ${minutes}m`;\n }\n}\n\n// Format date range for header and subject (7 days ago to now)\nconst fromDate = formatDate(sevenDaysAgo);\nconst toDate = formatDate(now);\nconst dateRangeText = `${fromDate} - ${toDate}`;\nconst subject = `n8n Execution Report ${fromDate} - ${toDate}`;\n\n// Build HTML report\nlet html = `\n<!DOCTYPE html>\n<html>\n<head>\n <style>\n body {\n font-family: Arial, sans-serif;\n margin: 20px;\n background-color: #f5f5f5;\n }\n .header {\n background-color: white;\n padding: 20px;\n margin-bottom: 20px;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n }\n h1 {\n color: #333;\n margin: 0 0 10px 0;\n }\n .date-range {\n color: #666;\n font-size: 1.1em;\n margin: 10px 0;\n }\n .summary {\n display: flex;\n gap: 20px;\n margin-top: 15px;\n }\n .summary-item {\n padding: 10px 15px;\n border-radius: 4px;\n font-weight: bold;\n }\n .summary-error {\n background-color: #ffebee;\n color: #c62828;\n }\n .summary-success {\n background-color: #e8f5e9;\n color: #2e7d32;\n }\n .summary-waiting {\n background-color: #fff3e0;\n color: #ef6c00;\n }\n table {\n width: 100%;\n border-collapse: collapse;\n background-color: white;\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n border-radius: 8px;\n overflow: hidden;\n }\n th {\n background-color: #4CAF50;\n color: white;\n padding: 12px;\n text-align: left;\n font-weight: bold;\n }\n td {\n padding: 10px 12px;\n border-bottom: 1px solid #ddd;\n }\n tr:hover {\n background-color: #f5f5f5;\n }\n .workflow-name {\n font-weight: bold;\n color: #333;\n }\n .workflow-id {\n color: #666;\n font-size: 0.9em;\n display: block;\n margin-top: 4px;\n }\n .status-cell {\n text-align: center;\n }\n .status-badge {\n display: inline-block;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 0.85em;\n font-weight: bold;\n margin-bottom: 4px;\n }\n .error { background-color: #ffebee; color: #c62828; }\n .success { background-color: #e8f5e9; color: #2e7d32; }\n .waiting { background-color: #fff3e0; color: #ef6c00; }\n .runtime {\n font-size: 0.8em;\n color: #666;\n display: block;\n margin-top: 2px;\n }\n .no-data {\n color: #999;\n font-style: italic;\n }\n </style>\n</head>\n<body>\n <div class=\"header\">\n <h1>n8n Execution Report</h1>\n <div class=\"date-range\">\n <strong>Period:</strong> ${dateRangeText}\n </div>\n`;\n\n// Calculate totals for summary\nlet totalError = 0;\nlet totalSuccess = 0;\nlet totalWaiting = 0;\n\nfor (const workflowId in workflowStats) {\n const stats = workflowStats[workflowId];\n totalError += stats.error.count;\n totalSuccess += stats.success.count;\n totalWaiting += stats.waiting.count;\n}\n\nhtml += `\n <div class=\"summary\">\n <div class=\"summary-item summary-error\">\n ✗ ${totalError} Errors\n </div>\n <div class=\"summary-item summary-success\">\n ✓ ${totalSuccess} Success\n </div>\n <div class=\"summary-item summary-waiting\">\n ⏳ ${totalWaiting} Waiting\n </div>\n </div>\n </div>\n \n <table>\n <thead>\n <tr>\n <th>Workflow</th>\n <th class=\"status-cell\">Error</th>\n <th class=\"status-cell\">Success</th>\n <th class=\"status-cell\">Waiting</th>\n </tr>\n </thead>\n <tbody>\n`;\n\n// Add rows for each workflow\nfor (const workflowId in workflowStats) {\n const stats = workflowStats[workflowId];\n \n html += `\n <tr>\n <td>\n <span class=\"workflow-name\">${stats.name}</span>\n <span class=\"workflow-id\">${stats.id}</span>\n </td>\n `;\n \n // Error column\n html += '<td class=\"status-cell\">';\n if (stats.error.count > 0) {\n const avgRuntime = stats.error.totalRuntime / stats.error.count;\n html += `\n <span class=\"status-badge error\">✗ ${stats.error.count}</span>\n <span class=\"runtime\">Avg: ${formatRuntime(avgRuntime)}</span>\n <span class=\"runtime\">Total: ${formatRuntime(stats.error.totalRuntime)}</span>\n `;\n } else {\n html += '<span class=\"no-data\">-</span>';\n }\n html += '</td>';\n \n // Success column\n html += '<td class=\"status-cell\">';\n if (stats.success.count > 0) {\n const avgRuntime = stats.success.totalRuntime / stats.success.count;\n html += `\n <span class=\"status-badge success\">✓ ${stats.success.count}</span>\n <span class=\"runtime\">Avg: ${formatRuntime(avgRuntime)}</span>\n <span class=\"runtime\">Total: ${formatRuntime(stats.success.totalRuntime)}</span>\n `;\n } else {\n html += '<span class=\"no-data\">-</span>';\n }\n html += '</td>';\n \n // Waiting column\n html += '<td class=\"status-cell\">';\n if (stats.waiting.count > 0) {\n const avgRuntime = stats.waiting.totalRuntime / stats.waiting.count;\n html += `\n <span class=\"status-badge waiting\">⏳ ${stats.waiting.count}</span>\n <span class=\"runtime\">Avg: ${formatRuntime(avgRuntime)}</span>\n <span class=\"runtime\">Total: ${formatRuntime(stats.waiting.totalRuntime)}</span>\n `;\n } else {\n html += '<span class=\"no-data\">-</span>';\n }\n html += '</td>';\n \n html += '</tr>';\n}\n\nhtml += `\n </tbody>\n </table>\n</body>\n</html>\n`;\n\nreturn [{ json: { html: html, subject: subject } }];"
},
"typeVersion": 2
},
{
"id": "4b1154e2-76bc-4b8c-a2b6-f4338a3c3f10",
"name": "Send a message gmail",
"type": "n8n-nodes-base.gmail",
"position": [
3792,
-176
],
"webhookId": "c0581cd3-0b50-4ed9-844d-2e4c7af1b30a",
"parameters": {
"message": "={{ $json.html }}",
"options": {},
"subject": "={{ $json.subject }}"
},
"typeVersion": 2.1
},
{
"id": "2946c6b2-f93f-4e31-bca1-14995de72e7d",
"name": "Send a message outlook",
"type": "n8n-nodes-base.microsoftOutlook",
"position": [
3792,
96
],
"webhookId": "87fa1111-29bb-471d-b68f-ae35f785dc6f",
"parameters": {
"subject": "={{ $json.subject }}",
"bodyContent": "={{ $json.html }}",
"additionalFields": {
"bodyContentType": "html"
}
},
"typeVersion": 2
},
{
"id": "0faa8265-c32e-479f-873d-c603722afe12",
"name": "Haftnotiz - Overview",
"type": "n8n-nodes-base.stickyNote",
"position": [
224,
-160
],
"parameters": {
"color": 3,
"width": 600,
"height": 1020,
"content": "## Workflow Overview for Documenting n8n Executions\n\n### Goal:\nThis workflow automates the process of documenting all previous workflow executions within n8n. By fetching data on past executions and workflows, it generates a comprehensive report that can be sent via email. This helps users keep track of their automation tasks and assess performance efficiently.\n\n### How it works:\n- 🕑 **Schedule Trigger**: Initiates the workflow at defined intervals.\n- 🔄 **Get All Previous Executions**: Fetches logs of past executions from n8n.\n- 📄 **Get All Workflows**: Retrieves current workflows set up in the environment.\n- 🔗 **Merge**: Combines data from previous executions and workflows for comprehensive analysis.\n- 🏷️ **Edit Field ID to workflowId**: Updates specific identifiers to ensure correct mapping.\n- 🔎 **Filter Executions Last Week**: Filters data to only include executions from the last week.\n- 📝 **Prepare HTML Report**: Formats the filtered data into a structured HTML report.\n- 📧 **Send a Message via Gmail & Outlook**: Delivers the report to users' email accounts for easy access.\n\n### Parameters to configure:\n- 🕑 **Schedule settings**: Specify the frequency of the trigger.\n- ✉️ **Email configurations**: Set Gmail and Outlook authentication details for message delivery.\n\n### Limitations / Gotchas:\n- 📅 Ensure the schedule does not overlap with high load times.\n- 🔒 Check permissions for accessing previous executions data.\n\n### Expected result:\nUsers receive an HTML report in their inbox summarizing workflow executions from the past week, facilitating performance tracking and documentation.\n"
},
"typeVersion": 1
},
{
"id": "595171e1-c6b0-48b8-bf86-86ffb155e118",
"name": "Haftnotiz - Send a message gmail",
"type": "n8n-nodes-base.stickyNote",
"position": [
3664,
-1056
],
"parameters": {
"color": 7,
"width": 380,
"height": 860,
"content": "## 📧 Send a message Gmail \n\n### Purpose\nSend an email using Gmail service with specified subject and message content.\n\n### Inputs / Outputs\n- **Inputs:** \n - Subject: The title of the email.\n - Message: The main body content of the email in HTML format.\n- **Outputs:** \n - Confirmation of the email sent or error details if the process fails.\n\n### Key Fields to Configure\n- **Subject:** \n - Set using the expression `={{ $json.subject }}`, allowing dynamic subject lines based on input data.\n- **Message:** \n - Set using the expression `={{ $json.html }}`, allowing HTML formatted content for the email body.\n \n### Tip / Validation\n- Ensure that Gmail OAuth2 credentials are correctly configured and authorized for sending emails.\n- Check the formatting of the HTML content to ensure proper rendering in the recipient's email client.\n- This node is currently **disabled**; enable it for functionality.\n- Remember to handle potential API errors and response codes from Gmail when sending messages."
},
"typeVersion": 1
},
{
"id": "7a12b760-b67c-47ff-995c-6ac53194a036",
"name": "Haftnotiz - Send a message outlook",
"type": "n8n-nodes-base.stickyNote",
"position": [
3680,
304
],
"parameters": {
"color": 7,
"width": 380,
"height": 1020,
"content": "## 📩 Send a message outlook \n\n### Purpose\nSend an email through Microsoft Outlook to specified recipients, integrating with workflows for communication purposes.\n\n### Inputs / Outputs\n- **Inputs:** \n - Recipients' email address (e.g., `wessel@bulte.org`).\n - Email subject and body content (HTML format).\n- **Outputs:**\n - Confirmation that the message was sent successfully.\n\n### Key Fields to Configure\n- **toRecipients:** \n - Email addresses of the recipients. \n- **subject:** \n - Subject line of the email. Can use dynamic values (e.g., `\"={{ $json.subject }}\"`).\n- **bodyContent:** \n - Main content of the email, formatted as HTML (e.g., `\"={{ $json.html }}\"`).\n- **bodyContentType:** \n - Default is set to `\"html\"` to ensure proper formatting.\n\n### Tip / Validation\n- Verify that the email address provided in `toRecipients` is valid to avoid delivery failures.\n- Ensure the subject and body contain meaningful content for better communication.\n- Check that the OAuth credentials for Microsoft Outlook are correctly configured to avoid authentication errors."
},
"typeVersion": 1
},
{
"id": "a85a215d-c1ef-4695-b965-9d3a56cfd9b1",
"name": "Haftnotiz - Prepare html report",
"type": "n8n-nodes-base.stickyNote",
"position": [
3248,
304
],
"parameters": {
"color": 7,
"width": 380,
"height": 1020,
"content": "## 📁 Prepare HTML Report \n\n### Purpose\nGenerate an HTML report summarizing workflow execution statistics over the past 7 days, including counts of errors, successes, and waiting workflows.\n\n### Inputs / Outputs\n- **Inputs:** \n - Data from previous nodes containing execution records with fields like `workflowId`, `name`, `status`, `startedAt`, and `stoppedAt`.\n- **Outputs:** \n - An HTML string containing the formatted report and an email subject line for reference.\n\n### Key Operations\n- **Date Range Calculation:**\n - Retrieves execution data from the last 7 days.\n \n- **Statistics Grouping:**\n - Aggregates execution counts and total runtimes by workflow status (error, success, waiting).\n\n- **HTML Report Construction:**\n - Builds a styled HTML document that visually represents workflow execution statistics, including a summary and detailed table format."
},
"typeVersion": 1
},
{
"id": "d134b4f0-1fbc-404c-9edc-9f2884824226",
"name": "Sticky Note - Filter executions last week",
"type": "n8n-nodes-base.stickyNote",
"position": [
2848,
304
],
"parameters": {
"color": 7,
"width": 380,
"height": 1020,
"content": "## Filter Executions Last Week\n\n### Purpose\nFilter out executions that were started in the last week, allowing for targeted analysis and documentation of recent workflow activities.\n\n### Inputs / Outputs\n- **Inputs:** \n - Workflow execution data including start date (`startedAt`).\n- **Outputs:** \n - Filtered data of executions that occurred within the past week.\n\n### Key Fields to Configure\n- **Conditions:** \n - Uses a single condition to check if the `startedAt` date is after the date that was exactly 7 days prior to the current date.\n - **Operator:** \n - Type: `dateTime`\n - Operation: `after`\n - **Left Value:** \n - `={{ $json.startedAt }}`\n - **Right Value:**\n - `={{ DateTime.now().minus({ days: 7 }) }}`\n\n### Tip / Validation\n- Ensure the `startedAt` date formatted correctly (ISO 8601 is recommended) for accurate filtering.\n- Remember that the comparison is case-sensitive due to the option `caseSensitive: true`. Adjust if necessary for your context.\n- This node does not always output data; ensure downstream nodes handle the absence of expected data gracefully."
},
"typeVersion": 1
},
{
"id": "d6d8301c-b2f7-4e8b-b3ed-f32edd84c92b",
"name": "Sticky Note - Zusammenführen",
"type": "n8n-nodes-base.stickyNote",
"position": [
2448,
304
],
"parameters": {
"color": 7,
"width": 380,
"height": 1020,
"content": "## Merge \n\n### Purpose\nCombine two data sets based on specified fields to enrich the input with additional information.\n\n### Inputs / Outputs\n- **Inputs:** \n - Two data sets to be merged, identified by the `workflowId` field.\n- **Outputs:** \n - A single data set that merges the attributes of both inputs according to the defined merging strategy.\n"
},
"typeVersion": 1
},
{
"id": "95f22f9d-86fa-4cc3-aeba-38d90320ca29",
"name": "Haftnotiz - Edit Field ID to workflowId",
"type": "n8n-nodes-base.stickyNote",
"position": [
2064,
304
],
"parameters": {
"color": 7,
"width": 380,
"height": 1020,
"content": "## Edit Field ID to workflowId \n\n### Purpose\nThis node updates the field ID in the provided JSON data to a new key named `workflowId`, streamlining the data structure for easier identification and reference.\n\n### Inputs / Outputs\n- **Inputs:** \n - JSON data containing an `id` field to be transformed into `workflowId`.\n- **Outputs:** \n - Modified JSON data with the `workflowId` field instead of the original `id`.\n\n### Key Fields to Configure\n- **Assignments:**\n - **ID:** Unique identifier for the newly created field.\n - **Name:** Set to `workflowId` to reflect the new key.\n - **Value:** Expression `={{ $json.id }}` to extract the original `id` value.\n\n### Tip / Validation\n- Ensure the original JSON contains the `id` field for successful transformation; otherwise, the output may not reflect the desired structure.\n- Use the `includeOtherFields` option to retain additional fields during the transformation process."
},
"typeVersion": 1
},
{
"id": "9be4bac7-d68a-47d8-87c5-99df34830f13",
"name": "Haftnotiz - Get all previous executions",
"type": "n8n-nodes-base.stickyNote",
"position": [
1664,
304
],
"parameters": {
"color": 7,
"width": 380,
"height": 1020,
"content": "## Get All Previous Executions \n\n### Purpose\nRetrieve all previous executions of a specified resource, enabling users to track and document the history of actions performed in workflows.\n\n### Inputs / Outputs\n- **Inputs:** \n - None required; the node automatically fetches all previous executions.\n- **Outputs:** \n - A list of previous execution records, which can be used for analysis or logging purposes.\n\n### Key Fields to Configure\n- **Resource:**\n - Set to `execution` to specify that the node is fetching execution records.\n- **Return All:**\n - Set to `true` to ensure all previous executions are retrieved.\n- **Filters:** \n - Can be customized to narrow down results based on specific criteria (currently empty).\n- **Options & Request Options:** \n - Additional configurations can be added if necessary (currently empty).\n"
},
"typeVersion": 1
},
{
"id": "9946f889-e6c4-46e0-bd6e-b5fe41a6e991",
"name": "Haftnotiz - Get all Workflows",
"type": "n8n-nodes-base.stickyNote",
"position": [
1264,
304
],
"parameters": {
"color": 7,
"width": 380,
"height": 1020,
"content": "## Get all Workflows \n\n### Purpose\nFetch all workflows stored in n8n to facilitate documentation and management of automation processes.\n\n### Inputs / Outputs\n- **Inputs:** \n - None (The node retrieves all workflows without needing specific parameters).\n- **Outputs:** \n - A list of all available workflows, including their metadata (IDs, names, etc.).\n\n### Key Fields to Configure\n- **Filters:** \n - Currently configured as empty (no specific filters are set).\n- **Request Options:** \n - Also currently empty, allowing for default request behavior.\n\n### Tip / Validation\n- Make sure you have the appropriate permissions set in your n8n account to access workflow data.\n- This node may return a large dataset if numerous workflows exist, so consider handling the response efficiently to avoid performance issues."
},
"typeVersion": 1
},
{
"id": "27a53d26-b49c-41f9-9cde-49c81e3a5454",
"name": "Sticky Note - Zeitplan-Trigger",
"type": "n8n-nodes-base.stickyNote",
"position": [
864,
304
],
"parameters": {
"color": 7,
"width": 380,
"height": 1020,
"content": "## 🗓️ Schedule Trigger \n\n### Purpose\nThis node initiates a scheduled trigger, allowing workflows to run at specified intervals."
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"Merge": {
"main": [
[
{
"node": "12a17b24-b3c7-4d40-8a03-3b84c932521b",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "ea56ce13-5b66-439c-8241-3c8eecb06eb8",
"type": "main",
"index": 0
},
{
"node": "22cefb90-bce7-402d-a996-6489bda7c136",
"type": "main",
"index": 0
}
]
]
},
"22cefb90-bce7-402d-a996-6489bda7c136": {
"main": [
[
{
"node": "8e131881-f7ab-46cf-9ebc-f006a819d66d",
"type": "main",
"index": 0
}
]
]
},
"2e18c677-62ae-4228-9aeb-ba665f8d05c8": {
"main": [
[
{
"node": "2946c6b2-f93f-4e31-bca1-14995de72e7d",
"type": "main",
"index": 0
},
{
"node": "4b1154e2-76bc-4b8c-a2b6-f4338a3c3f10",
"type": "main",
"index": 0
}
]
]
},
"8e131881-f7ab-46cf-9ebc-f006a819d66d": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"12a17b24-b3c7-4d40-8a03-3b84c932521b": {
"main": [
[
{
"node": "2e18c677-62ae-4228-9aeb-ba665f8d05c8",
"type": "main",
"index": 0
}
]
]
},
"ea56ce13-5b66-439c-8241-3c8eecb06eb8": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
}
}
}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 - DevOps
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
Wessel Bulte
@uuesselCybersecurity and automation consultant specializing in n8n workflows for GDPR compliance, process optimization, and business integration. Helping teams streamline operations with secure, scalable automation solutions.
Diesen Workflow teilen