AutomationFlowsAI & RAG › Create and Approve AI Social Posts with Openai, Telegram and Blotato

Create and Approve AI Social Posts with Openai, Telegram and Blotato

ByDr. Firas @drfiras on n8n.io

This workflow runs daily to generate an AI-written social post and DALL·E image with OpenAI, sends it to Telegram for approval, and—if approved—publishes it to LinkedIn, X, Instagram, Facebook, and Threads via Blotato while logging outcomes to Google Sheets. Runs every 24 hours…

Cron / scheduled trigger★★★★☆ complexityAI-powered24 nodesChain LlmOpenAI ChatOutput Parser StructuredOpenAITelegram@Blotato/N8N Nodes BlotatoGoogle Sheets
AI & RAG Trigger: Cron / scheduled Nodes: 24 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #17010 — we link there as the canonical source.

This workflow follows the Blotaton8N Nodes Blotato → Telegram recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "sIc6gsuo1dB3WOkA",
  "meta": {
    "builderVariant": "mcp",
    "aiBuilderAssisted": true
  },
  "name": "Generate AI social posts and publish to multiple networks with Blotato",
  "tags": [],
  "nodes": [
    {
      "id": "07ab9f6d-2ec1-4a8b-80a4-335912784045",
      "name": "Run on schedule",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        0,
        0
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 24
            }
          ]
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "7d97340c-6f7e-45e1-9507-c9c85b8db29c",
      "name": "Configuration",
      "type": "n8n-nodes-base.set",
      "position": [
        224,
        0
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "c1",
              "name": "content_language",
              "type": "string",
              "value": "English"
            },
            {
              "id": "c2",
              "name": "brand_niche",
              "type": "string",
              "value": "AI automation, n8n workflows and content systems for creators and solopreneurs"
            },
            {
              "id": "c3",
              "name": "target_audience",
              "type": "string",
              "value": "creators, solopreneurs and marketing teams"
            },
            {
              "id": "c4",
              "name": "post_tone",
              "type": "string",
              "value": "expert but accessible, direct, concrete, one strong idea, short paragraphs"
            },
            {
              "id": "c5",
              "name": "image_style",
              "type": "string",
              "value": "clean modern professional editorial illustration, brand-consistent, no text, high quality"
            },
            {
              "id": "c6",
              "name": "hashtag_count",
              "type": "number",
              "value": 5
            },
            {
              "id": "c7",
              "name": "text_model",
              "type": "string",
              "value": "gpt-5-mini"
            },
            {
              "id": "c8",
              "name": "image_model",
              "type": "string",
              "value": "dall-e-3"
            },
            {
              "id": "c9",
              "name": "image_size",
              "type": "string",
              "value": "1024x1024"
            },
            {
              "id": "c10",
              "name": "telegram_chat_id",
              "type": "string",
              "value": ""
            },
            {
              "id": "c11",
              "name": "approval_wait_minutes",
              "type": "number",
              "value": 30
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "be64b7d4-fb51-467b-9642-b98c8c6f630f",
      "name": "Generate content topic",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        400,
        0
      ],
      "parameters": {
        "text": "Generate ONE fresh, specific content idea now. Return only the structured fields.",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "message": "=You are a senior content strategist for a personal brand in {{ $('Configuration').item.json.brand_niche }}. Audience: {{ $('Configuration').item.json.target_audience }}. Propose a single high-value, non-generic topic with a clear angle and a scroll-stopping hook. Favor systemized, practical, slightly contrarian insight. Avoid hype and jargon. Write in {{ $('Configuration').item.json.content_language }}."
            }
          ]
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.9
    },
    {
      "id": "03298104-734a-4c63-bf93-4dee29ab5572",
      "name": "Topic model (OpenAI)",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        400,
        208
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "={{ $('Configuration').item.json.text_model }}",
          "cachedResultName": "gpt-5-mini"
        },
        "options": {},
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "c9ca9886-3f25-4932-a974-b5c14c3d0b59",
      "name": "Topic parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        560,
        208
      ],
      "parameters": {
        "jsonSchemaExample": "{ \"topic_title\": \"A specific content idea in one line\", \"angle\": \"why it matters in 1-2 sentences\", \"hook\": \"a scroll-stopping opening line\" }"
      },
      "typeVersion": 1.3
    },
    {
      "id": "9d887652-1f3f-4f59-a413-6e23b032ec85",
      "name": "Write post",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        672,
        0
      ],
      "parameters": {
        "text": "=Topic: {{ $('Generate content topic').item.json.output.topic_title }}\nAngle: {{ $('Generate content topic').item.json.output.angle }}\nHook: {{ $('Generate content topic').item.json.output.hook }}",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "message": "=You are an expert social media copywriter. Write ONE post in {{ $('Configuration').item.json.content_language }}. Tone: {{ $('Configuration').item.json.post_tone }}. Rules: one strong idea; short punchy paragraphs; open with a strong hook; be honest and never claim a tool is 100% automatic when a human check is involved; end with a light, clear call to action. Do NOT put hashtags inside post_content. Separately return exactly {{ $('Configuration').item.json.hashtag_count }} relevant hashtags as a single space-separated string. Also return image_prompt: a vivid visual concept in this style: {{ $('Configuration').item.json.image_style }}."
            }
          ]
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.9
    },
    {
      "id": "54869242-efab-47f5-98e5-9e313e5e3d6d",
      "name": "Writer model (OpenAI)",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        672,
        208
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "={{ $('Configuration').item.json.text_model }}",
          "cachedResultName": "gpt-5-mini"
        },
        "options": {},
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "61a34388-d74d-4019-92cd-784725877462",
      "name": "Post parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        800,
        208
      ],
      "parameters": {
        "jsonSchemaExample": "{ \"post_content\": \"the full social media post body, no hashtags inside\", \"hashtags\": \"#tag1 #tag2 #tag3 #tag4 #tag5\", \"image_prompt\": \"a vivid description of a matching visual\" }"
      },
      "typeVersion": 1.3
    },
    {
      "id": "8181791d-a65e-4511-84a4-39375b1775b0",
      "name": "Generate image",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        912,
        0
      ],
      "parameters": {
        "images": {
          "values": [
            {}
          ]
        },
        "prompt": "={{ $('Write post').item.json.output.image_prompt }}",
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "={{ $('Configuration').item.json.image_model }}",
          "cachedResultName": "dall-e-3"
        },
        "options": {
          "size": "={{ $('Configuration').item.json.image_size }}",
          "returnImageUrls": true
        },
        "resource": "image"
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "39deb2df-d1a7-40a9-acfb-87fc4d9c3cab",
      "name": "Get image URL",
      "type": "n8n-nodes-base.set",
      "position": [
        1120,
        0
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "i1",
              "name": "image_url",
              "type": "string",
              "value": "={{ $json.url || ($json.data && $json.data[0] ? $json.data[0].url : '') }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "373205d5-fe57-471a-b445-90ae7b6cbad9",
      "name": "Approve on Telegram",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1344,
        0
      ],
      "parameters": {
        "chatId": "={{ $('Configuration').item.json.telegram_chat_id }}",
        "message": "=New social post ready for review:\n\n{{ $('Write post').item.json.output.post_content }}\n\n{{ $('Write post').item.json.output.hashtags }}\n\nImage: {{ $('Get image URL').item.json.image_url }}",
        "options": {
          "limitWaitTime": {
            "values": {
              "resumeUnit": "minutes",
              "resumeAmount": "={{ $('Configuration').item.json.approval_wait_minutes }}"
            }
          }
        },
        "operation": "sendAndWait",
        "approvalOptions": {
          "values": {
            "approvalType": "double",
            "approveLabel": "\u2705 Publish",
            "disapproveLabel": "\u274c Skip"
          }
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "cd801259-6040-4322-bda0-5e41590ff1b2",
      "name": "Approved?",
      "type": "n8n-nodes-base.if",
      "position": [
        1568,
        0
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "a1",
              "operator": {
                "type": "boolean",
                "operation": "equals"
              },
              "leftValue": "={{ $json.data.approved }}",
              "rightValue": true
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "ef8f9a93-dbfc-4549-971a-f923b988be50",
      "name": "Publish to LinkedIn",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        1792,
        -128
      ],
      "parameters": {
        "options": {},
        "platform": "linkedin",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "1446",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/1446",
          "cachedResultName": "Samuel Amalric"
        },
        "postContentText": "={{ $('Write post').item.json.output.post_content }}\n\n{{ $('Write post').item.json.output.hashtags }}",
        "postContentMediaUrls": "={{ $('Get image URL').item.json.image_url }}"
      },
      "credentials": {
        "blotatoApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "849c2e02-0ed1-4d76-8947-d0e809e3fa16",
      "name": "Publish to X",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        1984,
        -128
      ],
      "parameters": {
        "options": {},
        "platform": "twitter",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "1289",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/1289",
          "cachedResultName": "Docteur_Firas"
        },
        "postContentText": "={{ $('Write post').item.json.output.post_content }}\n\n{{ $('Write post').item.json.output.hashtags }}",
        "postContentMediaUrls": "={{ $('Get image URL').item.json.image_url }}"
      },
      "credentials": {
        "blotatoApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "f09f89a0-121d-4405-b56f-e9a89a8848d8",
      "name": "Publish to Instagram",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        2192,
        -128
      ],
      "parameters": {
        "options": {},
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "11892",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/11892",
          "cachedResultName": "doc.firass"
        },
        "postContentText": "={{ $('Write post').item.json.output.post_content }}\n\n{{ $('Write post').item.json.output.hashtags }}",
        "postContentMediaUrls": "={{ $('Get image URL').item.json.image_url }}"
      },
      "credentials": {
        "blotatoApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "2c2fd209-28ea-4a5c-9086-0813f779f99a",
      "name": "Publish to Facebook",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        2384,
        -128
      ],
      "parameters": {
        "options": {},
        "platform": "facebook",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "1759",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/1759",
          "cachedResultName": "Firass Ben"
        },
        "facebookPageId": {
          "__rl": true,
          "mode": "list",
          "value": "101603614680195",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/1759/subaccounts/101603614680195",
          "cachedResultName": "Dr. Firas"
        },
        "postContentText": "={{ $('Write post').item.json.output.post_content }}\n\n{{ $('Write post').item.json.output.hashtags }}",
        "postContentMediaUrls": "={{ $('Get image URL').item.json.image_url }}"
      },
      "credentials": {
        "blotatoApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "13f2d7f8-f931-4ead-9e0c-47d15d3f19c5",
      "name": "Publish to Threads",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        2592,
        -128
      ],
      "parameters": {
        "options": {},
        "platform": "threads",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "2280",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/2280",
          "cachedResultName": "doc.firass"
        },
        "postContentText": "={{ $('Write post').item.json.output.post_content }}\n\n{{ $('Write post').item.json.output.hashtags }}",
        "postContentMediaUrls": "={{ $('Get image URL').item.json.image_url }}"
      },
      "credentials": {
        "blotatoApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "f820f373-5002-4ae9-be82-0b16b579c18d",
      "name": "Log published post",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2784,
        -128
      ],
      "parameters": {
        "columns": {
          "value": {
            "date": "={{ $now.toFormat('yyyy-LL-dd HH:mm:ss') }}",
            "topic": "={{ $('Generate content topic').item.json.output.topic_title }}",
            "status": "Published",
            "hashtags": "={{ $('Write post').item.json.output.hashtags }}",
            "image_url": "={{ $('Get image URL').item.json.image_url }}",
            "platforms": "LinkedIn, X, Instagram, Facebook, Threads",
            "post_content": "={{ $('Write post').item.json.output.post_content }}"
          },
          "schema": [
            {
              "id": "date",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "date",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "topic",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "topic",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "post_content",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "post_content",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "hashtags",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "hashtags",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "image_url",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "image_url",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "status",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "platforms",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "platforms",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            }
          ],
          "mappingMode": "defineBelow"
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "linkedin"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultName": "linkedin content"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "126ce3c1-02e5-47c5-b591-29d428021565",
      "name": "Log skipped post",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1792,
        192
      ],
      "parameters": {
        "columns": {
          "value": {
            "date": "={{ $now.toFormat('yyyy-LL-dd HH:mm:ss') }}",
            "topic": "={{ $('Generate content topic').item.json.output.topic_title }}",
            "status": "Skipped",
            "hashtags": "={{ $('Write post').item.json.output.hashtags }}",
            "image_url": "={{ $('Get image URL').item.json.image_url }}",
            "platforms": "",
            "post_content": "={{ $('Write post').item.json.output.post_content }}"
          },
          "schema": [
            {
              "id": "date",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "date",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "topic",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "topic",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "post_content",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "post_content",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "hashtags",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "hashtags",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "image_url",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "image_url",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "status",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "platforms",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "platforms",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            }
          ],
          "mappingMode": "defineBelow"
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "linkedin"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultName": "linkedin content"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "187365b0-50ec-4e11-a2e0-2c8602f32194",
      "name": "Main sticky",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -688,
        -624
      ],
      "parameters": {
        "color": 3,
        "width": 640,
        "height": 1848,
        "content": "# Generate AI social posts and publish to multiple networks with Blotato\n# \ud83d\udce5  [Open full documentation on Notion](https://automatisation.notion.site/Course-Generate-AI-social-posts-and-publish-to-multiple-networks-with-Blotato-39a3d6550fd981e29df3f2a5cd8cc5c6)\n\n# \ud83d\udce5  [Copy my Google Sheets](https://docs.google.com/spreadsheets/d/1UD41eCVTGJYZxqVUElnD8OJZkfB541IQ0LyPUtdqOvQ/copy)\n\n\n## How it works\nOn a schedule, GPT picks a fresh content topic in your niche, writes a ready-to-post caption in your voice, and generates a matching image with DALL\u00b7E. You get a Telegram message with the post + image and two buttons (Publish / Skip). Only after you approve, the post is published to LinkedIn, X, Instagram, Facebook and Threads via [Blotato](https://blotato.com/?ref=firas). Every run is logged to Google Sheets. The AI proposes, you approve before anything goes live.\n\n## Setup\n1. Open the **Configuration** node: set your language, niche, audience, tone, image style and **telegram_chat_id** (ask @get_id_bot on Telegram for your ID).\n2. Select your **OpenAi account** credential on the two model nodes and on **Generate image**.\n3. Select your **Telegram account** credential on **Approve on Telegram**.\n4. On each **Publish to \u2026** node, select your **Blotato account** credential and pick the matching social account in the dropdown.\n5. On both Google Sheets nodes, select your **Google Sheets account**, then pick the log spreadsheet and the `linkedin` tab.\n\n## Requirements\n- n8n **self-hosted** (or Cloud with Verified Community Nodes) \u2014 this template uses the [Blotato](https://blotato.com/?ref=firas) community node.\n- An OpenAI API key, a [Blotato](https://blotato.com/?ref=firas) account with your networks connected, a Telegram bot, and a Google Sheet.\n- DALL\u00b7E 3 image cost \u2248 $0.04 per image; GPT text cost is a few cents per run.\n\n## Customization\n- Change the schedule (default: every 24h) on **Run on schedule**.\n- Add or remove networks by duplicating / deleting a **Publish to \u2026** node (set its `platform`).\n- Tune the topic and writing prompts in **Generate content topic** and **Write post**.\n- Note: X (Twitter) has a 280-character limit \u2014 keep captions short or let Blotato handle threading.\n\n---\nNeed help customizing?\nContact me for consulting and support : [Linkedin](https://www.linkedin.com/in/doctor-firass/)\n\n# MY NEW YOUTUBE CHANNEL\n\ud83d\udc49 [Subscribe to my new YouTube channel](https://www.youtube.com/@DrFiras_AI). Here I'll share videos and Shorts with practical tutorials and FREE templates for n8n.\n\n[![The AI Doctor](https://www.dr-firas.com/the-ai-doctor.png)](https://www.youtube.com/@DrFiras_AI)"
      },
      "typeVersion": 1
    },
    {
      "id": "c3cf9750-dbaf-47af-9981-fe64e363eadb",
      "name": "Sticky 1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        368,
        -176
      ],
      "parameters": {
        "color": 7,
        "width": 520,
        "height": 520,
        "content": "## 1. Configure & generate\nSet every adjustable variable in **Configuration** (language, niche, audience, models, telegram_chat_id). GPT then picks a topic and writes the post + image prompt + hashtags."
      },
      "typeVersion": 1
    },
    {
      "id": "5ad75215-433e-409e-891c-af49e38c1ef8",
      "name": "Sticky 2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        880,
        -176
      ],
      "parameters": {
        "color": 7,
        "width": 420,
        "height": 520,
        "content": "## 2. Create the visual\nDALL\u00b7E generates a matching image and returns its URL for the post."
      },
      "typeVersion": 1
    },
    {
      "id": "4fece39c-df80-4d4c-9719-57120647a005",
      "name": "Sticky 3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1328,
        -176
      ],
      "parameters": {
        "color": 7,
        "width": 420,
        "height": 520,
        "content": "## 3. Review & approve\nA Telegram message shows the post + image with Publish / Skip buttons. Nothing is posted without your approval."
      },
      "typeVersion": 1
    },
    {
      "id": "4381afe1-fe52-4b8f-a27f-c0dab493f69e",
      "name": "Sticky 4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1760,
        -304
      ],
      "parameters": {
        "color": 7,
        "width": 1240,
        "height": 400,
        "content": "## 4. Publish & log\nOn approval, the post goes to LinkedIn, X, Instagram, Facebook and Threads via Blotato, then the run is logged to Google Sheets (Skipped runs are logged too)."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "availableInMCP": true,
    "executionOrder": "v1"
  },
  "versionId": "4c5ac9c4-1c1d-4ab3-9d88-9cd19b93ba4c",
  "nodeGroups": [],
  "connections": {
    "Approved?": {
      "main": [
        [
          {
            "node": "Publish to LinkedIn",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Log skipped post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Write post": {
      "main": [
        [
          {
            "node": "Generate image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Post parser": {
      "ai_outputParser": [
        [
          {
            "node": "Write post",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Publish to X": {
      "main": [
        [
          {
            "node": "Publish to Instagram",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Topic parser": {
      "ai_outputParser": [
        [
          {
            "node": "Generate content topic",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Configuration": {
      "main": [
        [
          {
            "node": "Generate content topic",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get image URL": {
      "main": [
        [
          {
            "node": "Approve on Telegram",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate image": {
      "main": [
        [
          {
            "node": "Get image URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Run on schedule": {
      "main": [
        [
          {
            "node": "Configuration",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Publish to Threads": {
      "main": [
        [
          {
            "node": "Log published post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Approve on Telegram": {
      "main": [
        [
          {
            "node": "Approved?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Publish to Facebook": {
      "main": [
        [
          {
            "node": "Publish to Threads",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Publish to LinkedIn": {
      "main": [
        [
          {
            "node": "Publish to X",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Publish to Instagram": {
      "main": [
        [
          {
            "node": "Publish to Facebook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Topic model (OpenAI)": {
      "ai_languageModel": [
        [
          {
            "node": "Generate content topic",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Writer model (OpenAI)": {
      "ai_languageModel": [
        [
          {
            "node": "Write post",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Generate content topic": {
      "main": [
        [
          {
            "node": "Write post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow runs daily to generate an AI-written social post and DALL·E image with OpenAI, sends it to Telegram for approval, and—if approved—publishes it to LinkedIn, X, Instagram, Facebook, and Threads via Blotato while logging outcomes to Google Sheets. Runs every 24 hours…

Source: https://n8n.io/workflows/17010/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

This n8n workflow automates the creation of viral CCTV-style animal videos using AI, perfect for TikTok content creators looking to capitalize on the popular security camera animal footage trend. The

OpenAI, HTTP Request, Telegram +5
AI & RAG

⚠️ DISCLAIMER: This workflow uses the AnySite LinkedIn community node, which is only available on self-hosted n8n instances. It will not work on n8n.cloud.

OpenAI Chat, Output Parser Structured, Google Sheets +6
AI & RAG

Generate AI viral videos with NanoBanana & VEO3, shared on socials via Blotato 2. Uses @blotato/n8n-nodes-blotato, googleSheets, lmChatOpenAi, toolThink. Event-driven trigger; 94 nodes.

@Blotato/N8N Nodes Blotato, Google Sheets, OpenAI Chat +9
AI & RAG

This workflow is designed for: Content creators and marketers E-commerce and product-based businesses Agencies producing social media visuals and videos Automation builders looking for AI-powered crea

HTTP Request, Edit Image, Google Drive +7
AI & RAG

Generate product images with NanoBanana Pro to Veo videos and Blotato - vide 2 ok. Uses httpRequest, editImage, googleDrive, googleSheets. Scheduled trigger; 76 nodes.

HTTP Request, Edit Image, Google Drive +7