Workflow: SEO Blog Generator with GPT-4o, Perplexity, and Telegram Integration
Integrations: aggregate, formTrigger, merge, noOp, stickyNote, stopAndError, telegram, telegramTrigger

{"id": "Xfz2YRxH6qFfpqHw", "meta": {"instanceId": "workflow-0202c043", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:45.005776", "updatedAt": "2025-09-29T07:07:45.005795", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "name": "SEO Blog Generator with GPT-4o, Perplexity, and Telegram Integration", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "nodes": [{"id": "17ab0b24-b1eb-4e4e-a249-9889c9876fe4", "name": "Note4", "type": "n8n-nodes-base.stickyNote", "position": [880, 180], "parameters": {"color": 3, "width": 420, "height": 440, "content": "## Write SEO Optimized Blog Post\n\n\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "6bf602e0-ad29-47e6-93d7-79fd2a4228c2", "name": "OpenAI Chat Model", "type": "n8n-nodes-base.noOp", "position": [1480, -120], "parameters": {"model": {"__rl": true, "mode": "list", "value": "gpt-4o-mini"}, "options": {}}, "credentials": {"openAiApi": {"id": "qX50oKgUA6tXfxne", "name": "ChatBot Content"}}, "typeVersion": 1.2, "notes": "This lmChatOpenAi node performs automated tasks as part of the workflow."}, {"id": "8a3739ac-9492-400c-b5b8-eeb305647752", "name": "Structured Output Parser", "type": "n8n-nodes-base.noOp", "position": [1740, -100], "parameters": {"jsonSchemaExample": "{\n\"slug\": \"rpo-benefits-recruitment\",\n\"title\": \"7 Key Advantages of RPO for Modern Recruitment\",\n\"meta\": \"Explore how Recruitment Process Outsourcing (RPO) enhances hiring efficiency, reduces costs, and expands talent pools for businesses seeking top candidates.\"\n}"}, "typeVersion": 1.2, "notes": "This outputParserStructured node performs automated tasks as part of the workflow."}, {"id": "af02ee94-4c26-4be5-bd21-09e020bff876", "name": "Metadata Generator", "type": "n8n-nodes-base.noOp", "position": [1500, -300], "parameters": {"text": "=**Create a slug, blog post title, and meta description for the following blog post:**\n\n{{ $json.output }}\n\n**Slug Guidelines:**\n- Keep it concise (4-5 words maximum).\n- Include the primary keyword related to recruitment or HR.\n- Use hyphens to separate words.\n- Avoid unnecessary words, articles, or prepositions.\n- Ensure it reflects the main topic of the blog post.\n- Make it readable and relevant for both users and search engines.\n\n**Title Guidelines:**\n- Avoid AI words like \"Transform\" or \"Revolutionize\" and similar overused terms.\n- Avoid using a colon (:) in the title.\n- Never structure it as a primary/secondary title separated by a colon.\n- Include the primary keyword related to recruitment or HR (e.g., 'AI in recruitment' or 'talent acquisition trends').\n- Clearly inform users what they can expect from reading the blog post.\n- Be concise and engaging, ideally 50-60 characters long.\n- Incorporate power words that appeal to HR professionals and recruiters.\n\n**Meta Description Guidelines:**\n- Avoid AI words like \"Transform\" or \"Revolutionize\" and similar overused terms.\n- Be concise: Limit to 150-160 characters to ensure full visibility in search results.\n- Include keywords: Naturally incorporate primary recruitment-related keywords to enhance relevance and visibility.\n- Provide value: Clearly convey the benefits or insights readers will gain from the article.\n- Be engaging: Use action-oriented language or a thought-provoking question to encourage clicks.\n- Align with content: Accurately reflect the blog post's content to meet user expectations and reduce bounce rates.\n- Highlight expertise: Subtly emphasize SocialFind's authority in the recruitment field.\n\nYour output must be a single valid JSON object with these 3 fields:\n-slug: The slug\n-title: The blog post title\n-meta: The meta description  \n\nEach should be presented without any additional text, explanation, quotation marks, or formatting.\n", "options": {}, "promptType": "define", "hasOutputParser": true}, "typeVersion": 1.8, "notes": "This agent node performs automated tasks as part of the workflow."}, {"id": "4756c8f2-406e-4a56-adb0-0c4708dabe6a", "name": "Merge", "type": "n8n-nodes-base.merge", "position": [2020, 140], "parameters": {"mode": "combine", "options": {}, "combineBy": "combineByPosition"}, "typeVersion": 3, "notes": "This merge node performs automated tasks as part of the workflow."}, {"id": "bf05eaf3-2522-488e-893d-1ed9b2ed88b2", "name": "Note5", "type": "n8n-nodes-base.stickyNote", "position": [220, 240], "parameters": {"color": 4, "width": 620, "height": 300, "content": "## Perplexity Research\n\n\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "22e8c044-ed98-495a-957e-c5e3fecc2b7d", "name": "On form submission", "type": "n8n-nodes-base.formTrigger", "position": [-260, 260], "webhookId": "a29cbcd3-9d11-4f7c-9aad-14681c356c53", "parameters": {"options": {}, "formTitle": "Blog Factory", "formFields": {"values": [{"fieldType": "textarea", "fieldLabel": "Research Query", "placeholder": "=What are the most common challenges facing Canadian employers regarding recruitment and why would they want to hire a recruiting firm to solve these problems.", "requiredField": true}]}, "formDescription": "Create SEO optimized blog posts"}, "typeVersion": 2.2, "notes": "This formTrigger node performs automated tasks as part of the workflow."}, {"id": "6e6d4952-793f-4dc5-8d29-219d420149a9", "name": "Note", "type": "n8n-nodes-base.stickyNote", "position": [360, 580], "parameters": {"width": 460, "height": 500, "content": "## Sample Generic Search Terms and write content\n\nYou are part of a marketing team that creates high-quality blog posts for the Men's Health Consulting and Workflow Automation industry based in Da Nang City, Vietnam.\n\nYour goal is to create engaging, SEO-optimized content that positions you as an authority in the Men's Health Consulting industry and attracts leads.\n\nUpon receiving the information, your team will post a blog on the most trending topics in Men's Health Consulting and Care. As a copywriter/blogger, you are provided with the following information:\n\n- Query: The main topic for the blog post, representing the most trending news in the Men's Health field.\n\n- Other Keywords: A list of high-volume keywords related to Men's Health Consulting and Support and Care. Incorporate these keywords naturally into the blog post when relevant, without forcing it or changing the meaning of the post.\n\n- Research findings: Detailed information from credible sources relevant to the blog topic. Your post should be based on this research.\n\nWith this information, write a comprehensive blog post that:\n\n- Include the query in the blog title, H2 heading, and the beginning of the introduction.\n\n- Incorporate all the details from the research findings, including the source URL for potential hyperlinks.\n\n- Be detailed and informative, demonstrating the company's expertise in Urology consulting and the support and care process for automation.\n\n- Use a professional but engaging tone, highlighting interesting developments and challenges in the industry.\n\n- Speak in a natural and logical manner, making it easy for readers to follow.\n\n- Be 1500 to 2000 words long.\n\n- Be written at a level that can be read by people who are interested in learning more. And want to receive additional care and support to solve the problem of interest.\n\nAdditional Requirements:\n- Include practical lessons or helpful tips for recruiters and HR professionals.\n\n- Highlight how the topic relates to the company's services or expertise.\n\n- Include a call to action (CTA) that encourages readers to explore the company's services or contact you for more information.\n\nCreate an entire blog post draft in your first output. Don't stop or cut it short.\n\nYour output should be the blog post and nothing else.\n\nHere are the details for this blog post project:\nQuery: [Execute previous nodes for preview]"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "f81c9505-111f-473a-94b6-c79364410810", "name": "Blog Content Generator", "type": "n8n-nodes-base.noOp", "position": [920, 260], "parameters": {"text": "=You are part of a marketing team that creates high-quality blog posts for the Men's Health Consulting and Workflow Automation industry based in Da Nang City, Vietnam.\n\nYour goal is to create engaging, SEO-optimized content that positions you as an authority in the Men's Health Consulting industry and attracts leads.\n\nUpon receiving the information, your team will post a blog on the most trending topics in Men's Health Consulting and Care. As a copywriter/blogger, you are provided with the following information:\n\n- Query: The main topic for the blog post, representing the most trending news in the Men's Health field.\n\n- Other Keywords: A list of high-volume keywords related to Men's Health Consulting and Support and Care. Incorporate these keywords naturally into the blog post when relevant, without forcing it or changing the meaning of the post.\n\n- Research findings: Detailed information from credible sources relevant to the blog topic. Your post should be based on this research.\n\nWith this information, write a comprehensive blog post that:\n\n- Include the query in the blog title, H2 heading, and the beginning of the introduction.\n\n- Incorporate all the details from the research findings, including the source URL for potential hyperlinks.\n\n- Be detailed and informative, demonstrating the company's expertise in Urology consulting and the support and care process for automation.\n\n- Use a professional but engaging tone, highlighting interesting developments and challenges in the industry.\n\n- Speak in a natural and logical manner, making it easy for readers to follow.\n\n- Be 1500 to 2000 words long.\n\n- Be written at a level that can be read by people who are interested in learning more. And want to receive additional care and support to solve the problem of interest.\n\nAdditional Requirements:\n- Include practical lessons or helpful tips for recruiters and HR professionals.\n\n- Highlight how the topic relates to the company's services or expertise.\n\n- Include a call to action (CTA) that encourages readers to explore the company's services or contact you for more information.\n\nCreate an entire blog post draft in your first output. Don't stop or cut it short.\n\nYour output should be the blog post and nothing else.\n\nHere are the details for this blog post project:\nQuery: {{ $json.output }}\n\n\n\n\n", "options": {}, "promptType": "define"}, "typeVersion": 1.8, "notes": "This agent node performs automated tasks as part of the workflow."}, {"id": "1ee6bb8f-6441-4ed9-83e0-d0839b2d0e01", "name": "Note7", "type": "n8n-nodes-base.stickyNote", "position": [1440, -380], "parameters": {"color": 7, "width": 440, "height": 440, "content": "## Create Title, Slug & Meta\n\n\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "30f0fa84-9918-4bf6-86e4-ef8f1dcf079c", "name": "gpt-4o-mini", "type": "n8n-nodes-base.noOp", "position": [920, 460], "parameters": {"model": {"__rl": true, "mode": "list", "value": "gpt-4o-mini"}, "options": {}}, "credentials": {"openAiApi": {"id": "qX50oKgUA6tXfxne", "name": "ChatBot Content"}}, "typeVersion": 1.2, "notes": "This lmChatOpenAi node performs automated tasks as part of the workflow."}, {"id": "d2d83cc5-1502-4b04-ac12-0bb351a90e58", "name": "Combine Blog Details", "type": "n8n-nodes-base.aggregate", "position": [2620, 160], "parameters": {"options": {}, "aggregate": "aggregateAllItemData"}, "typeVersion": 1, "notes": "This aggregate node performs automated tasks as part of the workflow."}, {"id": "bbb5b2c7-18a1-49f7-88d5-ebc0c585d128", "name": "Perplexity_Searcher", "type": "n8n-nodes-base.noOp", "position": [700, 420], "parameters": {"name": "Perplexity_Searcher", "workflowId": {"__rl": true, "mode": "id", "value": "5uapJIjLLhwnhX0n"}, "description": "=T\u00f4i s\u1eed d\u1ee5ng AI agent n\u00e0y \u0111\u1ec3 t\u00ecm ki\u1ebfm nh\u1eefng th\u00f4ng tin m\u1edbi nh\u1ea5t. Nh\u1eb1m ph\u1ee5c v\u1ee5 cho vi\u1ec7c t\u00ecm ki\u1ebfm th\u00f4ng tin, d\u1eef li\u1ec7u v\u1edbi \u0111\u1ea7y \u0111\u1ee7 th\u00f4ng tin m\u1edbi nh\u1ea5t.", "workflowInputs": {"value": {}, "schema": [], "mappingMode": "defineBelow", "matchingColumns": [], "attemptToConvertTypes": false, "convertFieldsToString": false}}, "typeVersion": 2.1, "notes": "This toolWorkflow node performs automated tasks as part of the workflow."}, {"id": "e0d9a29e-2dd9-42ff-a0b8-d81c02014b05", "name": "Tele HoangSP_Social_Media", "type": "n8n-nodes-base.telegramTrigger", "position": [-260, 440], "webhookId": "302be40c-6f54-4447-88a9-1c415a1fd72d", "parameters": {"updates": ["message"], "additionalFields": {}}, "credentials": {"telegramApi": {"id": "mjSBJIunOl3D8zbe", "name": "Telegram account"}}, "typeVersion": 1.1, "notes": "This telegramTrigger node performs automated tasks as part of the workflow."}, {"id": "95cc8220-d484-4ec9-a191-46a749de94a2", "name": "AI Agent", "type": "n8n-nodes-base.noOp", "position": [480, 260], "parameters": {"text": "=T\u00f4i l\u00e0 m\u1ed9t b\u00e1c s\u0129 y khoa l\u00e0m vi\u1ec7c trong l\u0129nh v\u1ef1c y t\u1ebf, chuy\u00ean m\u00f4n c\u1ee7a t\u00f4i l\u00e0 c\u00e1c V\u1ea5n \u0111\u1ec1 li\u00ean quan \u0111\u1ebfn b\u1ec7nh Nam Khoa. \n- T\u00f4i mu\u1ed1n d\u00f9ng d\u1eef li\u1ec7u n\u00e0y \u0111\u1ec3 t\u00ecm ki\u1ebfm th\u00f4ng tin, d\u1ef1a tr\u00ean t\u1eeb kho\u00e1 m\u00e0 t\u00f4i \u0111\u01b0a v\u00e0 \u0111\u1ec3 t\u00ecm nh\u1eefng th\u00f4ng tin m\u1edbi nh\u1ea5t c\u00f3 li\u00ean quan. \n\n- Chu\u1ea9n b\u1ecb n\u1ed9i dung/ ngu\u1ed3n cho vi\u1ec7c vi\u1ebft blog.\n\n- H\u00e3y \u0111\u01b0a ra nh\u1eefng list n\u1ed9i dung \u0111\u1ea7u d\u00f2ng ng\u1eafn g\u1ecdn, hi\u1ec7u qu\u1ea3 \u0111\u1ec3 l\u00e0m n\u1ed9i dung ch\u00ednh cho nh\u1eefng blog s\u1eafp t\u1edbi.\n\n\u0110\u00e2y l\u00e0 n\u1ed9i dung t\u00f4i \u0111\u01b0a v\u00e0o t\u00ecm ki\u1ebfm: {{ $json['Research Query'] }}\nHo\u1eb7c n\u1ed9i dung n\u00e0y: {{ $json.message.text }}", "options": {"systemMessage": "B\u1ea1n l\u00e0m vi\u1ec7c r\u1ea5t chuy\u00ean nghi\u1ec7p trong l\u0129nh v\u1ef1c c\u1ee7a m\u00ecnh"}, "promptType": "define"}, "typeVersion": 1.8, "notes": "This agent node performs automated tasks as part of the workflow."}, {"id": "1321ee35-f97d-475f-81cb-de00f833c89b", "name": "OpenAI Chat Model1", "type": "n8n-nodes-base.noOp", "position": [420, 420], "parameters": {"model": {"__rl": true, "mode": "list", "value": "gpt-4o-mini"}, "options": {}}, "credentials": {"openAiApi": {"id": "ScDgXbCy0e7Omp6y", "name": "OpenAi account 3"}}, "typeVersion": 1.2, "notes": "This lmChatOpenAi node performs automated tasks as part of the workflow."}, {"id": "88ed96de-99da-4e8d-ba61-c7742109bc06", "name": "AI Agent1", "type": "n8n-nodes-base.noOp", "position": [1520, 360], "parameters": {"text": "=\nExtract a JSON object from the following content: {{ $json.output }}.\nThe object must contain the following fields:\n{\n  \"title\": string,\n  \"subtitle\": string,\n  \"content\": string,\n  \"hashtags\": [string]\n}\nIf any field is missing, infer it based on the content. Respond only with the JSON object. Do not include explanations.\n\n", "options": {}, "promptType": "define", "hasOutputParser": true}, "typeVersion": 1.8, "notes": "This agent node performs automated tasks as part of the workflow."}, {"id": "cad725b7-9360-4f4a-8f72-1034f09192b5", "name": "OpenAI Chat Model2", "type": "n8n-nodes-base.noOp", "position": [1480, 700], "parameters": {"model": {"__rl": true, "mode": "list", "value": "gpt-4o-mini"}, "options": {}}, "credentials": {"openAiApi": {"id": "ScDgXbCy0e7Omp6y", "name": "OpenAi account 3"}}, "typeVersion": 1.2, "notes": "This lmChatOpenAi node performs automated tasks as part of the workflow."}, {"id": "5e5e91c5-787e-4c6e-99bf-a2d08638b26f", "name": "Metadata Extractor", "type": "n8n-nodes-base.noOp", "position": [1740, 640], "parameters": {"schemaType": "manual", "inputSchema": "{\n  \"type\": \"object\",\n  \"properties\": {\n    \"title\": {\n      \"type\": \"string\"\n    },\n    \"subtitle\": {\n      \"type\": \"string\"\n    },\n    \"content\": {\n      \"type\": \"string\"\n    },\n    \"hashtags\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"maxItems\": 5\n    }\n  },\n  \"required\": [\"title\", \"content\"]\n}\n"}, "typeVersion": 1.2, "notes": "This outputParserStructured node performs automated tasks as part of the workflow."}, {"id": "38fd2a3b-bbc3-41d5-9d13-eb61b67709cb", "name": "Telegram", "type": "n8n-nodes-base.telegram", "position": [2620, 380], "webhookId": "13eeb1fb-8890-430b-b988-3e90fdf032c9", "parameters": {"text": "={{ $json.output.title }}\n{{ $json.output.title }}\n{{ $json.output.subtitle }}\n{{ $json.output.content }}", "chatId": "={{ $('Tele HoangSP_Social_Media').item.json.message.chat.id }}", "additionalFields": {"appendAttribution": false, "disable_notification": false}}, "credentials": {"telegramApi": {"id": "1kmgeuArwvrmbfeu", "name": "Telegram account 2"}}, "typeVersion": 1.2, "notes": "This telegram node performs automated tasks as part of the workflow."}, {"id": "6a165afa-074d-4f2c-9f3b-2c8f02f3ae46", "name": "Simple Memory", "type": "n8n-nodes-base.noOp", "position": [1600, 540], "parameters": {"sessionKey": "YOUR_CREDENTIAL_HERE", "sessionIdType": "customKey", "contextWindowLength": 10}, "typeVersion": 1.3, "notes": "This memoryBufferWindow node performs automated tasks as part of the workflow."}, {"id": "433b5974-6bd9-4bd8-a718-e9a1970de35b", "name": "Simple Memory1", "type": "n8n-nodes-base.noOp", "position": [1600, -60], "parameters": {"sessionKey": "YOUR_CREDENTIAL_HERE", "sessionIdType": "customKey", "contextWindowLength": 10}, "typeVersion": 1.3, "notes": "This memoryBufferWindow node performs automated tasks as part of the workflow."}, {"id": "error-c03e804b", "name": "Error Handler", "type": "n8n-nodes-base.stopAndError", "typeVersion": 1, "position": [1000, 400], "parameters": {"message": "Workflow execution error", "options": {}}}], "active": false, "pinData": {}, "settings": {"executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000}, "versionId": "ecebdadc-5bb8-43e7-bd42-48fd894195b1", "connections": {"6bf602e0-ad29-47e6-93d7-79fd2a4228c2": {"main": [[{"node": "error-handler-6bf602e0-ad29-47e6-93d7-79fd2a4228c2-4c6b1982", "type": "main", "index": 0}]]}, "30f0fa84-9918-4bf6-86e4-ef8f1dcf079c": {"main": [[{"node": "error-handler-30f0fa84-9918-4bf6-86e4-ef8f1dcf079c-5d4cb5b8", "type": "main", "index": 0}]]}, "e0d9a29e-2dd9-42ff-a0b8-d81c02014b05": {"main": [[{"node": "error-handler-e0d9a29e-2dd9-42ff-a0b8-d81c02014b05-c6f53202", "type": "main", "index": 0}]]}, "1321ee35-f97d-475f-81cb-de00f833c89b": {"main": [[{"node": "error-handler-1321ee35-f97d-475f-81cb-de00f833c89b-abf4ddb6", "type": "main", "index": 0}]]}, "cad725b7-9360-4f4a-8f72-1034f09192b5": {"main": [[{"node": "error-handler-cad725b7-9360-4f4a-8f72-1034f09192b5-f9e6ba71", "type": "main", "index": 0}]]}, "38fd2a3b-bbc3-41d5-9d13-eb61b67709cb": {"main": [[{"node": "error-handler-38fd2a3b-bbc3-41d5-9d13-eb61b67709cb-60b09651", "type": "main", "index": 0}]]}}, "description": "Automated workflow: SEO Blog Generator with GPT-4o, Perplexity, and Telegram Integration. This workflow integrates 12 different services: stickyNote, formTrigger, telegramTrigger, telegram, agent. It contains 28 nodes and follows best practices for error handling and security.", "notes": "Excellent quality workflow: SEO Blog Generator with GPT-4o, Perplexity, and Telegram Integration. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}