This workflow corresponds to n8n.io template #8563 — we link there as the canonical source.
This workflow follows the Agent → Airtable 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": "BwphfgLq7SKpdkOy",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Create LinkedIn Content from Telegram using GPT-4 and Dumpling AI",
"tags": [],
"nodes": [
{
"id": "8a311ea8-7047-444e-b389-d2a46321d29a",
"name": "Simple Memory",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
464,
304
],
"parameters": {
"sessionKey": "={{ $('Receive Telegram Input').item.json.message.from.username }}",
"sessionIdType": "customKey"
},
"typeVersion": 1.3
},
{
"id": "6a7b3fdf-7b5a-4198-9884-34bf8d77a54b",
"name": "Web_search_tool",
"type": "n8n-nodes-base.httpRequestTool",
"position": [
608,
336
],
"parameters": {
"url": "https://app.dumplingai.com/api/v1/search-news",
"method": "POST",
"options": {},
"jsonBody": "={\n \"query\": \"{{ $fromAI('query') }}\"\n}\n",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"toolDescription": "Use this tool to do web research"
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "e3f5b1a4-48c5-4ad0-a3cd-783520d5ccdc",
"name": "Image_generation_tool",
"type": "n8n-nodes-base.httpRequestTool",
"position": [
816,
320
],
"parameters": {
"url": "https://app.dumplingai.com/api/v1/generate-ai-image",
"method": "POST",
"options": {},
"jsonBody": "={\n \"model\": \"FLUX.1-pro\",\n \"input\": {\n \"prompt\": \"{{ $fromAI('prompt') }}\",\n \"seed\": 42,\n \"steps\": 25,\n \"width\": 1024,\n \"height\": 1024,\n \"guidance\": 3,\n \"aspect_ratio\": \"1:1\",\n \"output_format\": \"png\",\n \"output_quality\": 90,\n \"safety_tolerance\": 2,\n \"prompt_upsampling\": false\n }\n}\n",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"toolDescription": "Use this tool to generate images"
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "06218c34-30c6-4f29-8fb9-4fa2d1ecf2da",
"name": "Receive Telegram Input",
"type": "n8n-nodes-base.telegramTrigger",
"position": [
-720,
48
],
"parameters": {
"updates": [
"message"
],
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "d9012129-9395-4174-ad54-4f2b7b6b1d3e",
"name": "Check Message Type",
"type": "n8n-nodes-base.switch",
"position": [
-496,
48
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "text",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "18d77f22-b692-462b-8d43-34ddc5609c5e",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.message.text }}",
"rightValue": ""
}
]
},
"renameOutput": true
},
{
"outputKey": "audio",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "1a355c34-2cf5-4116-98a4-cce7c0f5caa2",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.message.voice.mime_type }}",
"rightValue": "audio/ogg"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "8f899c95-272e-4aad-aa5d-f6e1a84aad3e",
"name": "Download Telegram Audio",
"type": "n8n-nodes-base.telegram",
"position": [
-272,
144
],
"parameters": {
"fileId": "={{ $json.message.voice.file_id }}",
"resource": "file",
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "21654110-4260-4d6f-b948-581f1928763b",
"name": "Transcribe Audio to Text",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
-48,
144
],
"parameters": {
"options": {},
"resource": "audio",
"operation": "transcribe"
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.8
},
{
"id": "37fa042f-9a47-4971-9eb3-2ce2b5d5b429",
"name": "Prepare Transcribed Text",
"type": "n8n-nodes-base.set",
"position": [
176,
144
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "573add77-32e9-496c-bbbe-99fb8bbe6e6f",
"name": "text",
"type": "string",
"value": "={{ $json.text }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "d7b528a6-a57f-4ee4-87d2-9e594b4003fd",
"name": "Extract Text Message",
"type": "n8n-nodes-base.set",
"position": [
288,
-96
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "2895b578-af52-42fb-b645-d42cb9456fec",
"name": "text",
"type": "string",
"value": "={{ $json.message.text }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "ef871181-d247-4c85-98d8-b88adc8311b1",
"name": "Generate Idea, Context & Image Prompt",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
656,
48
],
"parameters": {
"text": "=user input: {{ $json.text }}",
"options": {
"systemMessage": "=System Prompt for n8n Agent\n\nYou are a content creation agent for LinkedIn.\nYou receive an input idea from user input. Your job is to research, generate context, clean the image prompt, and create a related image. Finally, return a JSON object.\n\nWorkflow\n\nResearch ideas\n\nTake the idea from user input.\n\nForm a clear query string to explore the idea further.\n\nCall Web_search_tool with the query.\n\nOnly retrieve and review 3 news results about the topic.\n\nExtract the most relevant points from those 3 results.\n\nFrom this, produce:\n\nideas: a short, clear statement based on the refined research.\n\ncontext: 2\u20134 sentences that expand on the idea with simple grammar.\n\nPrepare the image prompt\n\nCraft a descriptive visual prompt based on the idea and context.\n\nThe description should include subject, setting, and mood.\n\nOnce the ideas and context are complete, send the crafted prompt to the Code node to clean it.\n\nThe Code node must ensure that the prompt has no new line characters.\n\nThe Code node is only called once per execution, after the ideas and context are finalized.\n\nGenerate an image\n\nAfter cleaning, use the single cleaned string as the input for Image_generation_tool.\n\nCall Image_generation_tool only once per execution.\n\nRequest a professional LinkedIn-ready image.\n\nUse the returned URL as the image.\n\nFinal Output\n\nAlways return the result as a single JSON object in the format below:\n\n{\n \"ideas\": \"string\",\n \"context\": \"string\",\n \"image\": \"URL\"\n}\n\nRules\n\nGrammar must be simple, clear, and professional.\n\nNo emojis.\n\nNo hyphens.\n\nideas is one short refined idea.\n\ncontext is 2\u20134 sentences explaining the idea.\n\nimage is the direct URL returned by Image_generation_tool.\n\nAlways call the Code node once to clean the image prompt before passing it to the image tool.\n\nThe Image_generation_tool is only called once per execution, after context and ideas are complete.\n\nReturn nothing except the JSON object."
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2.2
},
{
"id": "bd2b04e9-b2a5-478c-8a4c-329a49f818ce",
"name": "GPT-4 Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
336,
272
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "dac36388-cf7b-439c-8524-7ed45e1fd8fa",
"name": "Format Output as JSON",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
1168,
272
],
"parameters": {
"jsonSchemaExample": "{\n \"ideas\": \"string\",\n \"context\": \"string\",\n \"image\": \"URL\"\n}\n"
},
"typeVersion": 1.3
},
{
"id": "01130e23-5c3e-4954-b3cd-2615c68c4e0f",
"name": "Clean Image Prompt",
"type": "@n8n/n8n-nodes-langchain.toolCode",
"position": [
992,
320
],
"parameters": {
"jsCode": "// Input comes in as `query`\nlet s = String(query ?? \"\");\n\n// Remove newline and line-separator characters, then collapse spaces\ns = s.replace(/[\\u000A\\u000D\\u2028\\u2029]+/g, \" \");\ns = s.replace(/\\s+/g, \" \").trim();\n\n// Return the cleaned prompt back to the agent\nreturn s;\n",
"description": "Call this node to clean the prompt from any newlines"
},
"typeVersion": 1.3
},
{
"id": "bfabbd38-486d-425d-ad58-3f54e4f1a7eb",
"name": "Save to Airtable",
"type": "n8n-nodes-base.airtable",
"position": [
1104,
48
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "app2L0MDmxtbrFskg",
"cachedResultUrl": "https://airtable.com/app2L0MDmxtbrFskg",
"cachedResultName": "Google search ideas"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblGXuRkIuDI1cESV",
"cachedResultUrl": "https://airtable.com/app2L0MDmxtbrFskg/tblGXuRkIuDI1cESV",
"cachedResultName": "Table 1"
},
"columns": {
"value": {
"ideas": "={{ $json.output.ideas }}",
"context": "={{ $json.output.context }}",
"Image URL": "={{ $json.output.image }}"
},
"schema": [
{
"id": "ideas",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "ideas",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "context",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "context",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image URL",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Image URL",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create"
},
"credentials": {
"airtableTokenApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "b0998942-3e41-43de-9c30-93534d1236ad",
"name": "Send Confirmation to Telegram",
"type": "n8n-nodes-base.telegram",
"position": [
1312,
48
],
"parameters": {
"text": "\u2705 Your content has been created and saved to Airtable.\n \n - Ideas and context are ready \n - Image has been generated and attached \n\nYou can review and approve everything directly in Airtable. ",
"chatId": "={{ $('Receive Telegram Input').item.json.message.chat.id }}",
"additionalFields": {
"appendAttribution": false
}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "3e0d23c1-9c4d-4499-8c2a-21072a7fc609",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-800,
-480
],
"parameters": {
"color": 4,
"width": 1024,
"height": 736,
"content": "## \ud83d\udccc LinkedIn Content Creator Workflow\n\nThis workflow helps you automatically generate polished LinkedIn content using AI. Just send a message (voice or text) to your Telegram bot, and the system will:\n\n1. Transcribe voice (if applicable) using OpenAI Whisper\n2. Use GPT-4 to generate:\n - A short content idea\n - Supporting context (2\u20134 sentences)\n - An image prompt\n3. Run a Dumpling AI web search for relevant context\n4. Clean and format the image prompt\n5. Generate a visual using Dumpling AI\n6. Save the final result to Airtable\n7. Send a confirmation message back to Telegram\n\n### Output Format (Saved to Airtable):\n```json\n{\n \"ideas\": \"string\",\n \"context\": \"string\",\n \"image\": \"URL\"\n}\n"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "845a42d0-a02a-4933-a5f8-b993fe6d0b60",
"connections": {
"Simple Memory": {
"ai_memory": [
[
{
"node": "Generate Idea, Context & Image Prompt",
"type": "ai_memory",
"index": 0
}
]
]
},
"Web_search_tool": {
"ai_tool": [
[
{
"node": "Generate Idea, Context & Image Prompt",
"type": "ai_tool",
"index": 0
}
]
]
},
"GPT-4 Chat Model": {
"ai_languageModel": [
[
{
"node": "Generate Idea, Context & Image Prompt",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Save to Airtable": {
"main": [
[
{
"node": "Send Confirmation to Telegram",
"type": "main",
"index": 0
}
]
]
},
"Check Message Type": {
"main": [
[
{
"node": "Extract Text Message",
"type": "main",
"index": 0
}
],
[
{
"node": "Download Telegram Audio",
"type": "main",
"index": 0
}
]
]
},
"Clean Image Prompt": {
"ai_tool": [
[
{
"node": "Generate Idea, Context & Image Prompt",
"type": "ai_tool",
"index": 0
}
]
]
},
"Extract Text Message": {
"main": [
[
{
"node": "Generate Idea, Context & Image Prompt",
"type": "main",
"index": 0
}
]
]
},
"Format Output as JSON": {
"ai_outputParser": [
[
{
"node": "Generate Idea, Context & Image Prompt",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Image_generation_tool": {
"ai_tool": [
[
{
"node": "Generate Idea, Context & Image Prompt",
"type": "ai_tool",
"index": 0
}
]
]
},
"Receive Telegram Input": {
"main": [
[
{
"node": "Check Message Type",
"type": "main",
"index": 0
}
]
]
},
"Download Telegram Audio": {
"main": [
[
{
"node": "Transcribe Audio to Text",
"type": "main",
"index": 0
}
]
]
},
"Prepare Transcribed Text": {
"main": [
[
{
"node": "Generate Idea, Context & Image Prompt",
"type": "main",
"index": 0
}
]
]
},
"Transcribe Audio to Text": {
"main": [
[
{
"node": "Prepare Transcribed Text",
"type": "main",
"index": 0
}
]
]
},
"Generate Idea, Context & Image Prompt": {
"main": [
[
{
"node": "Save to Airtable",
"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.
airtableTokenApihttpHeaderAuthopenAiApitelegramApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This automation turns a Telegram voice or text message into a high-quality LinkedIn post using OpenAI’s Whisper, Dumpling AI and GPT-4, and then repurposes that same message into a content idea with visual inspiration using Dumpling AI. All outputs are saved to Airtable for…
Source: https://n8n.io/workflows/8563/ — 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.
BoomerBobBot.TP. Uses agent, telegramTrigger, telegram, memoryBufferWindow. Event-driven trigger; 95 nodes.
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.
Digital marketers, content creators, social media managers, and businesses who want to use AI marketing automation for YouTube Shorts without spending hours on production. This AI workflow helps anyon
Jarvis is a powerful multi-agent productivity assistant built in n8n. It works directly from Telegram and can understand both text messages and voice notes.
This template is designed for marketers, content creators, and e-commerce brands who want to automate the creation of professional ad videos at scale. It’s ideal for teams looking to generate consiste