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 →
{
"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.
googleSheetsOAuth2ApiopenAiApitavilyApitelegramApi
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 →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.
Telegram Redis. Uses telegramTrigger, telegram, redis, googleSheets. Event-driven trigger; 40 nodes.
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 ChatBot with multiple sessions. Uses lmChatOpenAi, memoryBufferWindow, telegramTrigger, googleSheets. Event-driven trigger; 38 nodes.
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