AutomationFlowsAI & RAG › Generate AI Linkedin Posts with Human Approval via Telegram and Gpt

Generate AI Linkedin Posts with Human Approval via Telegram and Gpt

ByYasser Sami @yassersami on n8n.io

This n8n template demonstrates how to build a human-in-the-loop AI workflow that helps you create professional LinkedIn posts via Telegram. The agent searches the web, drafts content, asks for your approval, and refines it based on your feedback — ensuring every post sounds…

Event trigger★★★★☆ complexityAI-powered16 nodesTelegram TriggerAgent@Tavily/N8N Nodes TavilyTelegramText ClassifierChain LlmGoogle SheetsOpenAI Chat
AI & RAG Trigger: Event Nodes: 16 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Agent → Chainllm 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": "oXYAKSV0dFJb8Ms8",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Human In The Loop",
  "tags": [],
  "nodes": [
    {
      "id": "f5f19acd-b1cc-4a0d-ad57-c8c15d0153af",
      "name": "Telegram Trigger",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        -896,
        16
      ],
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "cbefc8a8-7cdd-4b9b-91e3-cc658cd29a1e",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -688,
        16
      ],
      "parameters": {
        "text": "={{ $json.message.text }}",
        "options": {
          "systemMessage": "=# Overview\nYou are a linkedin post generator. You will be given a topic to write about and your role is to search the web using the tavily tool and write the final post ready for launch.\n\n## Instructions\n-the post must be valuable and not only talknig about some general information\n-the post must contain atleast 5 hashtags at the bottom related to the topic the post is about."
        },
        "promptType": "define"
      },
      "typeVersion": 2.2
    },
    {
      "id": "9147f506-9c74-4cea-b544-f50e7c4f9e23",
      "name": "Tavily Tool",
      "type": "@tavily/n8n-nodes-tavily.tavilyTool",
      "position": [
        -576,
        208
      ],
      "parameters": {
        "query": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Query', ``, 'string') }}",
        "options": {
          "topic": "general",
          "max_results": 3,
          "search_depth": "advanced"
        },
        "descriptionType": "manual",
        "toolDescription": "use this tool to search the web"
      },
      "credentials": {
        "tavilyApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b08e2dae-dc5c-4551-a1b8-389420451d30",
      "name": "Edit Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        -336,
        16
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "5b135ea8-7c59-4042-b266-c34fdac1130e",
              "name": "post",
              "type": "string",
              "value": "={{ $json.output }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "824ac422-255c-4e19-871b-d14c74a5da48",
      "name": "Send a text message",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -128,
        16
      ],
      "parameters": {
        "chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
        "message": "=Good to go?\n\n\n{{ $json.post }}",
        "options": {
          "appendAttribution": false
        },
        "operation": "sendAndWait",
        "responseType": "freeText"
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "95749da9-5818-4bb0-977f-10aeb189d83c",
      "name": "Text Classifier",
      "type": "@n8n/n8n-nodes-langchain.textClassifier",
      "position": [
        80,
        16
      ],
      "parameters": {
        "options": {},
        "inputText": "={{ $json.data.text }}",
        "categories": {
          "categories": [
            {
              "category": "Approved",
              "description": "=the post has been reviewed and got approval by the user and no feedback given. The approval from user maybe something like: Good to go, Send it, OK, etc."
            },
            {
              "category": "Denied",
              "description": "=The post got reviewed and the user gave feedback to edit the post or didn't like the post. It maybe something like: Make it shorter, delete part, add something, etc."
            }
          ]
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "207c61cc-ab91-494f-b32c-d8183bd2cc9f",
      "name": "Basic LLM Chain",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        528,
        208
      ],
      "parameters": {
        "text": "=the post to revise:{{ $('Edit Fields').item.json.post }}\n\nthe human feedback:{{ $('Send a text message').item.json.data.text }}",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "message": "=# Overview\nYou are a linkedin expert writer. Your job is to take the incoming post and revise it based on the human feedback.\n\n## Instructions\nOnly output the body of the post"
            }
          ]
        },
        "promptType": "define"
      },
      "typeVersion": 1.7
    },
    {
      "id": "b80c6614-23a2-45ad-9e70-00790f03faff",
      "name": "Edit Fields1",
      "type": "n8n-nodes-base.set",
      "position": [
        848,
        208
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "3241fcbd-2947-48d2-b847-288d2165a151",
              "name": "output",
              "type": "string",
              "value": "={{ $json.text }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "d09834f0-b194-4666-8890-d99f5f334789",
      "name": "Append row in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        464,
        -96
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [
            {
              "id": "Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/148yOBNcRTo7-xTwlz_KnCiJRiVh7dVyo7CN3THPi0sU/edit#gid=0",
          "cachedResultName": "\u0627\u0644\u0648\u0631\u0642\u06291"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "148yOBNcRTo7-xTwlz_KnCiJRiVh7dVyo7CN3THPi0sU",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/148yOBNcRTo7-xTwlz_KnCiJRiVh7dVyo7CN3THPi0sU/edit?usp=drivesdk",
          "cachedResultName": "contacts demo"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "853db2f9-1922-439d-8396-444cbed8b988",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -112,
        240
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "b2b933b3-04e5-487b-a98c-0e227853726a",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -160,
        224
      ],
      "parameters": {
        "width": 176,
        "height": 128,
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "4ce70328-6156-4d4b-ba5d-67ba3d93d279",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -976,
        -224
      ],
      "parameters": {
        "color": 5,
        "height": 208,
        "content": "## This template creates LinkedIn posts with AI + human feedback directly in Telegram."
      },
      "typeVersion": 1
    },
    {
      "id": "db2fa945-a5dc-4119-9133-f9c23f5d671d",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1008,
        192
      ],
      "parameters": {
        "height": 112,
        "content": "## Trigger \nStart by sending a message to your Telegram bot (e.g. \u201cWrite a LinkedIn post about AI\u201d)."
      },
      "typeVersion": 1
    },
    {
      "id": "6cbc0ceb-b0b1-4b31-8df2-4ef2b7cb0da3",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -640,
        -176
      ],
      "parameters": {
        "content": "## AI Agent \nSearches the web for fresh insights to enrich the post and Drafts a professional LinkedIn post using OpenAI or any LLM model you want"
      },
      "typeVersion": 1
    },
    {
      "id": "1719237b-81bf-4749-a1cb-2f3920e65a89",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -128,
        -128
      ],
      "parameters": {
        "width": 432,
        "height": 112,
        "content": "## Approved?\nThe bot asks \u201cGood to go?\u201d \u2014 you can approve or give feedback. Once you approve, the post is appended to a Google Sheet \u2014 ready to publish."
      },
      "typeVersion": 1
    },
    {
      "id": "4dd0977f-1323-4862-8539-453c79fcda58",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        544,
        80
      ],
      "parameters": {
        "height": 112,
        "content": "## Revision Agent \nIf not approved, another AI refines the post based on your feedback."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "c44df566-4f51-4efb-a8b3-617708212359",
  "connections": {
    "AI Agent": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields": {
      "main": [
        [
          {
            "node": "Send a text message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Tavily Tool": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields1": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Basic LLM Chain": {
      "main": [
        [
          {
            "node": "Edit Fields1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Text Classifier": {
      "main": [
        [
          {
            "node": "Append row in sheet",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Basic LLM Chain",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Telegram Trigger": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "Text Classifier",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Send a text message": {
      "main": [
        [
          {
            "node": "Text Classifier",
            "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 n8n template demonstrates how to build a human-in-the-loop AI workflow that helps you create professional LinkedIn posts via Telegram. The agent searches the web, drafts content, asks for your approval, and refines it based on your feedback — ensuring every post sounds…

Source: https://n8n.io/workflows/9472/ — 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 workflow contains community nodes that are only compatible with the self-hosted version of n8n.

Agent, OpenAI Chat, OpenAI +8
AI & RAG

Telegram Redis. Uses telegramTrigger, telegram, redis, googleSheets. Event-driven trigger; 40 nodes.

Telegram Trigger, Telegram, Redis +8
AI & RAG

This n8n template uses a Telegram chatbot to conduct a Product Satisfaction Survey and fetches questions and stores answers in a Google sheet. It augments an AI Agent to ask follow-up questions to eng

Telegram Trigger, Telegram, Redis +8
AI & RAG

Telegram ChatBot with multiple sessions. Uses lmChatOpenAi, memoryBufferWindow, telegramTrigger, googleSheets. Event-driven trigger; 38 nodes.

OpenAI Chat, Memory Buffer Window, Telegram Trigger +5
AI & RAG

This workflow creates an AI-powered Telegram chatbot with session management, allowing users to: Start new conversations (). Check current sessions (). Resume past sessions (). Get summaries (). Ask q

OpenAI Chat, Memory Buffer Window, Telegram Trigger +5