Mein Blog
Dies ist ein Content Creation, Multimodal AI-Bereich Automatisierungsworkflow mit 22 Nodes. Hauptsächlich werden Set, Code, Github, GoogleSheets, Agent und andere Nodes verwendet. Automatisierter Blog-Generator basierend auf Gemini AI, GitHub und Jekyll zur Veröffentlichung
- •GitHub Personal Access Token
- •Google Sheets API-Anmeldedaten
- •Google Gemini API Key
Verwendete Nodes (22)
Kategorie
{
"id": "YOUR_WORKFLOW_ID",
"meta": {
"instanceId": "YOUR_INSTANCE_ID",
"templateCredsSetupCompleted": true
},
"name": "My blog",
"tags": [],
"nodes": [
{
"id": "2108f067-2829-4b5c-8ed5-23400753b134",
"name": "Blog generieren mit Gemini",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-208,
144
],
"parameters": {
"text": "=Write a technical blog post in Markdown using the context and topic below.\n\n## Topic:\n\"{{$json[\"Topic\"]}}\"\n\n## Context:\n{{$json[\"Context\"]}}",
"options": {
"systemMessage": "=You are a blogging assistant. Your job is to generate a complete, high-quality technical blog post in Markdown (`.md`) format. Follow these strict formatting and structure rules so the post can be directly used in a static site generator like Jekyll.\n\n---\n\n## 🔹 Front Matter Block\n\nAt the top of the file, include the following YAML front matter:\n\n---\ntitle: \"BLOG_TITLE\"\ndate: \"{{$now.toFormat('yyyy-MM-dd')}}\"\ncategories: [<blog categories with separtaed by comma>]\ntags: [<comma separated tags for the blog>]\nexcerpt: \"SHORT_EXCERPT_SUMMARIZING_THE_POST\"\nauthor: \"YOUR_NAME\"\n---\n\n## 🧱 Blog Content Structure\n\nAfter the front matter, structure the blog with clear, scannable sections using proper Markdown heading levels.\n\n## Table of Contents\n\nAdd a clickable table of contents using Markdown anchor links:\n## Table of Contents\n- [Introduction](#introduction)\n- [Main Section 1](#main-section-1)\n- [Main Section 2](#main-section-2)\n- ...\n- [Conclusion](#conclusion)\n\n## Introduction\nWrite 1–2 short paragraphs introducing the topic and its relevance to developers or the tech industry.\n\n## Main Content\nBreak down the main body using:\n# for top-level sections\n## for subsections\n### include:\n#### Code snippets using fenced code blocks with language tags (e.g. dart, yaml, bash)\n#### Bullet points and numbered lists\n#### Images using \n#### Links with [Link Text](https://url.com)\n#### Quotes with >\n\n## Conclusion\nSummarize the key takeaways from the blog. You may also include:\nA call to action (e.g. \"Try it yourself!\")\nSuggested reading or resources.\n\n## Markdown Formatting Guidelines\nUse proper heading levels (#, ##, ###)\n\n# Use **bold** and *italic* for emphasis\n# Always format code using triple backticks and the correct language\n# Avoid raw HTML unless absolutely required\n# Keep the writing technical but friendly and easy to follow\n\n## Output Requirements\n\n# Output only the Markdown content\n# Start with the YAML front matter\n# Do not include any explanation, metadata, or extra comments\n# The output must be ready to save as a .md file and publish directly\n\nYou have the access of multiple tools.\n\n## Wikipedia\nuse this tool to search about the blog topic . Also if possiable use the wikipedia image for the blog.\n"
},
"promptType": "define"
},
"typeVersion": 2
},
{
"id": "2f9e8ada-a1c2-4ff7-ab77-473fdcd5904d",
"name": "Wikipedia-Kontext abrufen",
"type": "@n8n/n8n-nodes-langchain.toolWikipedia",
"position": [
-32,
384
],
"parameters": {},
"typeVersion": 1
},
{
"id": "cdf3b5fb-31f5-4584-bc74-0cf4f3a8d025",
"name": "Blog-Titel extrahieren",
"type": "n8n-nodes-base.set",
"position": [
-1216,
144
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "303ff84c-3343-4ac5-8e4d-4b12c36bdb4f",
"name": "topic",
"type": "string",
"value": "={{ $json.Title }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "e9a37489-7d3f-43d0-aca3-f449ff032b07",
"name": "Google Gemini Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
-224,
352
],
"parameters": {
"options": {},
"modelName": "models/gemini-2.5-pro"
},
"credentials": {
"googlePalmApi": {
"id": "YOUR_GEMINI_CREDENTIAL_ID",
"name": "Your Gemini Account"
}
},
"typeVersion": 1
},
{
"id": "44ff6820-0d5d-449f-94f8-1a5b9166b35b",
"name": "Suchergebnisse zusammenfassen",
"type": "n8n-nodes-base.code",
"position": [
-592,
144
],
"parameters": {
"jsCode": "const topic = $json[\"query\"];\nconst results = $json[\"results\"];\n\nconst context = results.slice(0, 3).map(r => {\n return `### ${r.title}\\n${r.content}\\n[Source](${r.url})\\n`;\n}).join('\\n\\n');\n\nreturn [\n {\n json: {\n Topic: topic,\n Context: context\n }\n }\n];\n\n"
},
"typeVersion": 2
},
{
"id": "6e072fdd-4a78-4105-b443-3eb0e7ae79de",
"name": "Blog-Beitrag in GitHub committen",
"type": "n8n-nodes-base.github",
"position": [
704,
176
],
"webhookId": "YOUR_WEBHOOK_ID",
"parameters": {
"owner": {
"__rl": true,
"mode": "list",
"value": "YOUR_GITHUB_USERNAME",
"cachedResultUrl": "https://github.com/YOUR_GITHUB_USERNAME",
"cachedResultName": "YOUR_GITHUB_USERNAME"
},
"filePath": "=_posts/{{ $json.filePath }}",
"resource": "file",
"repository": {
"__rl": true,
"mode": "list",
"value": "YOUR_REPOSITORY_NAME",
"cachedResultUrl": "https://github.com/YOUR_GITHUB_USERNAME/YOUR_REPOSITORY_NAME",
"cachedResultName": "YOUR_REPOSITORY_NAME"
},
"fileContent": "={{ $json.fileContent }}",
"commitMessage": "={{ $json.commitMessage }}",
"authentication": "oAuth2"
},
"credentials": {
"githubOAuth2Api": {
"id": "YOUR_GITHUB_CREDENTIAL_ID",
"name": "GitHub account"
}
},
"typeVersion": 1.1
},
{
"id": "30e90692-ca16-43f3-beeb-32c113da36a6",
"name": "Datei für Commit vorbereiten",
"type": "n8n-nodes-base.set",
"position": [
384,
192
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "a6800e46-165a-4713-b789-e0047a2196af",
"name": "filePath",
"type": "string",
"value": "={{ $now.format('yyyy-MM-dd') }}-{{ $('Extract Topic').item.json.topic.toLowerCase().replace(/ /g, '-') }}.md"
},
{
"id": "e8672360-e389-498d-8b79-8cccc1a7f918",
"name": "fileContent",
"type": "string",
"value": "={{$json[\"output\"]}}"
},
{
"id": "9794aa09-d0a0-4333-97a6-76364c0f14b1",
"name": "commitMessage",
"type": "string",
"value": "=Add blog post: {{ $('get topic').item.json.Title }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "9a2cac57-7930-48ee-a493-8ca39580a660",
"name": "Tavily Web Search",
"type": "@tavily/n8n-nodes-tavily.tavily",
"position": [
-928,
144
],
"parameters": {
"query": "={{ $json.topic }}",
"options": {
"search_depth": "advanced"
}
},
"credentials": {
"tavilyApi": {
"id": "YOUR_TAVILY_CREDENTIAL_ID",
"name": "Tavily account"
}
},
"typeVersion": 1
},
{
"id": "453f3a77-15c5-41a0-bb67-c5a50369079c",
"name": "Zeitplan-Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-1776,
144
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 9
}
]
}
},
"typeVersion": 1.2
},
{
"id": "fa2c8c82-6590-45b1-9727-fff9954dd1c0",
"name": "Thema aus Google Sheet abrufen",
"type": "n8n-nodes-base.googleSheets",
"position": [
-1488,
144
],
"parameters": {
"options": {},
"filtersUI": {
"values": [
{
"lookupValue": "=",
"lookupColumn": "status"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEETS_DOCUMENT_ID/edit#gid=0",
"cachedResultName": "blog list"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "YOUR_GOOGLE_SHEETS_DOCUMENT_ID",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEETS_DOCUMENT_ID/edit?usp=drivesdk",
"cachedResultName": "My blogs"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "YOUR_GOOGLE_SHEETS_CREDENTIAL_ID",
"name": "Google Sheets account"
}
},
"typeVersion": 4.6
},
{
"id": "00c15394-315b-4038-a0c9-203439935c90",
"name": "Thema in Sheet als erledigt markieren",
"type": "n8n-nodes-base.googleSheets",
"position": [
1184,
176
],
"parameters": {
"columns": {
"value": {
"status": "done",
"row_number": "={{ $json.row_number }}"
},
"schema": [
{
"id": "Title",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "status",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"row_number"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEETS_DOCUMENT_ID/edit#gid=0",
"cachedResultName": "blog list"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "YOUR_GOOGLE_SHEETS_DOCUMENT_ID",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEETS_DOCUMENT_ID/edit?usp=drivesdk",
"cachedResultName": "My blogs"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "YOUR_GOOGLE_SHEETS_CREDENTIAL_ID",
"name": "Google Sheets account"
}
},
"typeVersion": 4.6
},
{
"id": "3ece85bb-0962-40e9-b16e-c6a7f42b8072",
"name": "Notizzettel",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2656,
-784
],
"parameters": {
"width": 752,
"height": 640,
"content": "## Automated Blog Creation \n\n**Description:**\nThis workflow automatically generates a complete blog post from a user-provided topic using an LLM (e.g., OpenAI, Gemini). It formats the content as Markdown, commits it directly to a specified GitHub repository, and triggers a Jekyll build—so your blog is live in minutes.\n\n**Features:**\n- User inputs a topic or prompts the workflow.\n- LLM generates and formats the blog post in Markdown.\n- The generated file is committed/pushed to GitHub.\n- (Optional) Triggers GitHub Pages + Jekyll build to update your site.\n- Fully automated, customizable, and end-to-end.\n\n**Required Integrations:**\n- LLM (OpenAI or similar; set API key in credentials)\n- GitHub (personal access token, target repository)\n- Jekyll static site (hosted on GitHub Pages)\n\n**Instructions/Setup:**\n1. Import the attached workflow JSON in your n8n instance.\n2. Set up credentials for Gemini (or chosen LLM provider).\n3. Set up GitHub credentials and specify repository path.\n4. (Optional) Adjust prompt/parameters for the LLM as desired.\n5. Deploy. On run, your blog will be generated and published automatically."
},
"typeVersion": 1
},
{
"id": "4acd5668-eab7-4883-b531-729a7c2b6a1c",
"name": "Notizzettel1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1840,
16
],
"parameters": {
"width": 256,
"height": 288,
"content": "## Trigger node\n##### Configure the node for your preference or else you can use other option as well."
},
"typeVersion": 1
},
{
"id": "ac9b8a20-36dc-4231-9317-6c026325ce35",
"name": "Notizzettel2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1552,
16
],
"parameters": {
"height": 288,
"content": "## Get Topic from spreadsheet\n##### This will capture the topic which is not done yet."
},
"typeVersion": 1
},
{
"id": "1be2f024-a34d-4b0c-980f-74b1ebd520b5",
"name": "Notizzettel3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1280,
16
],
"parameters": {
"height": 288,
"content": "## Extract topic\n##### This will extract topic text from the sheet node."
},
"typeVersion": 1
},
{
"id": "0d800dd4-0e8d-4558-b5bd-f632026a144c",
"name": "Notizzettel4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1024,
-32
],
"parameters": {
"width": 320,
"height": 336,
"content": "## Deep Search about topic\n##### We have a system node that gathers information about a given topic from the web, providing relevant links and concise summaries."
},
"typeVersion": 1
},
{
"id": "7cffee89-e9aa-474b-83d9-08081767c575",
"name": "Notizzettel5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-688,
-32
],
"parameters": {
"width": 320,
"height": 336,
"content": "## Format the result\n##### We have a system that receives input containing details about a topic along with associated links from a prior node. This new node extracts those details and formats them in a predefined sequence or structure.."
},
"typeVersion": 1
},
{
"id": "8524831c-4db2-4124-9eb9-a404d9e9fcbb",
"name": "Notizzettel6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-320,
16
],
"parameters": {
"width": 496,
"height": 528,
"content": "## Ai agent\n##### We have a standardized system prompt that accepts a topic and a set of relevant search results from Tavily. The prompt then generates a well-structured markdown file formatted as a blog post"
},
"typeVersion": 1
},
{
"id": "82fe6efb-29e8-4253-9e96-47ba5ae81e95",
"name": "Notizzettel7",
"type": "n8n-nodes-base.stickyNote",
"position": [
192,
16
],
"parameters": {
"width": 400,
"height": 368,
"content": "## Set the file for github upload\n#####This node retrieves data generated by the AI agent and formats it according to standardized conventions, preparing the content for seamless upload and integration into a GitHub repository."
},
"typeVersion": 1
},
{
"id": "43e7bf08-4d0e-413a-b3ac-17d7aabc64a0",
"name": "Notizzettel8",
"type": "n8n-nodes-base.stickyNote",
"position": [
624,
16
],
"parameters": {
"width": 336,
"height": 384,
"content": "## Github upload\n##### This will upload to a github repo."
},
"typeVersion": 1
},
{
"id": "d515051d-b03e-4329-9a11-a53996b9a9dd",
"name": "Notizzettel9",
"type": "n8n-nodes-base.stickyNote",
"position": [
1008,
16
],
"parameters": {
"width": 416,
"height": 384,
"content": "## Change status\n##### Once the file is uploaded to GitHub, the status of the corresponding topic in the Google Spreadsheet will be updated to “Done.”"
},
"typeVersion": 1
},
{
"id": "5d623cb5-f839-4412-9e54-18de267dc2ee",
"name": "Notizzettel10",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2656,
-128
],
"parameters": {
"width": 752,
"height": 832,
"content": "# n8n Integrations & GitHub Pages Jekyll Setup\n\n## Prerequisites\n- n8n account access\n- Tavily API key\n- Google Account for Sheets\n- LLM API key\n- GitHub account\n\n## Steps\n\n1. **Tavily API Key**\n - Sign up at [https://www.tavily.com/](https://www.tavily.com/)\n - Obtain your API key from the dashboard\n\n2. **Google Sheets Setup**\n - Add credentials in n8n and authenticate\n\n3. **LLM Connection**\n - Add LLM credentials in n8n and test\n\n4. **GitHub OAuth Setup**\n - Authorize and connect via OAuth in n8n\n\n5. **Jekyll Setup for GitHub Pages**\n - Create a repository (`<username>.github.io`)\n - Initialize a Jekyll site locally\n - Push site files to GitHub\n - Enable GitHub Pages for the repository\n - Configure `_config.yml` if needed\n"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"timezone": "Asia/Kolkata",
"callerPolicy": "workflowsFromSameOwner",
"executionOrder": "v1"
},
"versionId": "YOUR_VERSION_ID",
"connections": {
"Search": {
"main": [
[
{
"node": "summerise the resut",
"type": "main",
"index": 0
}
]
]
},
"AI Agent": {
"main": [
[
{
"node": "set files",
"type": "main",
"index": 0
}
]
]
},
"Wikipedia": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"get topic": {
"main": [
[
{
"node": "Extract Topic",
"type": "main",
"index": 0
}
]
]
},
"set files": {
"main": [
[
{
"node": "Create a file",
"type": "main",
"index": 0
}
]
]
},
"Create a file": {
"main": [
[
{
"node": "Update Status",
"type": "main",
"index": 0
}
]
]
},
"Extract Topic": {
"main": [
[
{
"node": "Search",
"type": "main",
"index": 0
}
]
]
},
"453f3a77-15c5-41a0-bb67-c5a50369079c": {
"main": [
[
{
"node": "get topic",
"type": "main",
"index": 0
}
]
]
},
"summerise the resut": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"e9a37489-7d3f-43d0-aca3-f449ff032b07": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"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 - Content-Erstellung, 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
Saswat Saubhagya Rout
@saswatsaubhagyaDiesen Workflow teilen