URL 기반 AI, Telegram 및 다중 플랫폼 게시를 사용한 소셜 미디어 게시물 자동 생성
고급
이것은Content Creation, Multimodal AI분야의자동화 워크플로우로, 42개의 노드를 포함합니다.주로 If, Set, Code, Merge, Function 등의 노드를 사용하며. URL 기반 AI, Telegram 및 다중 플랫폼 게시를 사용하여 소셜 미디어 게시물 자동 생성
사전 요구사항
- •LinkedIn API 인증 정보
- •Telegram Bot Token
- •대상 API의 인증 정보가 필요할 수 있음
- •Google Sheets API 인증 정보
- •OpenAI API Key
- •Google Gemini API Key
사용된 노드 (42)
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"nodes": [
{
"name": "Telegram Bot Trigger",
"type": "n8n-nodes-base.telegramTrigger",
"position": [
0,
544
],
"webhookId": "9ea69b50-b6ca-4968-918a-8ca35b8ad7d7",
"parameters": {
"updates": [
"message"
],
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"id": "",
"name": "YOUR_TELEGRAM_API_CREDENTIAL"
}
},
"typeVersion": 1,
"id": "Telegram-Bot-Trigger-0"
},
{
"name": "Workflow Overview",
"type": "n8n-nodes-base.stickyNote",
"position": [
-576,
336
],
"parameters": {
"width": 389,
"height": 384,
"content": "# 📱 Telegram URL Processor\n\nThis workflow receives URLs from Telegram and processes them into social media content:\n\n- ✅ Extracts URL from message\n- 📊 Saves to Google Sheets\n- 📄 Fetches content\n- 🤖 AI summarization\n- 🎨 Image generation\n- 📱 Multi-platform posting\n- ✅ Returns post URLs"
},
"typeVersion": 1,
"id": "Workflow-Overview-1"
},
{
"name": "Extract URL",
"type": "n8n-nodes-base.function",
"position": [
448,
448
],
"parameters": {
"functionCode": "// Extract URL from Telegram message\nconst message = $json.message.text;\nconst urlRegex = /(https?:\\/\\/[^\\s]+)/g;\nconst urls = message.match(urlRegex);\n\nif (!urls || urls.length === 0) {\n throw new Error('No URL found in the message');\n}\n\nconst extractedUrl = urls[0];\nconst chatId = $json.message.chat.id;\nconst messageId = $json.message.message_id;\nconst timestamp = new Date().toISOString();\n\nreturn {\n json: {\n url: extractedUrl,\n chatId: chatId,\n messageId: messageId,\n timestamp: timestamp,\n originalMessage: message\n }\n};"
},
"typeVersion": 1,
"id": "Extract-URL-2"
},
{
"name": "Fetch URL Content",
"type": "n8n-nodes-base.httpRequest",
"position": [
896,
448
],
"parameters": {
"url": "={{ $node['Extract URL'].json.url }}",
"options": {
"redirect": {
"redirect": {}
},
"response": {
"response": {
"fullResponse": true
}
}
}
},
"typeVersion": 4.2,
"id": "Fetch-URL-Content-3"
},
{
"name": "Extract Text Content",
"type": "n8n-nodes-base.function",
"position": [
1120,
448
],
"parameters": {
"functionCode": "// Extract text content from HTML\nconst html = $json.data;\nconst url = $node['Extract URL'].json.url;\n\n// Simple HTML to text conversion\nlet textContent = html\n .replace(/<script[^>]*>.*?<\\/script>/gi, '')\n .replace(/<style[^>]*>.*?<\\/style>/gi, '')\n .replace(/<[^>]*>/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim();\n\n// Extract title (simple approach)\nconst titleMatch = html.match(/<title[^>]*>([^<]+)<\\/title>/i);\nconst title = titleMatch ? titleMatch[1].trim() : 'Article';\n\n// Limit content length for AI processing\nif (textContent.length > 8000) {\n textContent = textContent.substring(0, 8000) + '...';\n}\n\nif (textContent.length < 100) {\n throw new Error('Could not extract meaningful content from the URL');\n}\n\nreturn {\n json: {\n url: url,\n title: title,\n content: textContent,\n wordCount: textContent.split(' ').length\n }\n};"
},
"typeVersion": 1,
"id": "Extract-Text-Content-4"
},
{
"name": "AI Processing",
"type": "n8n-nodes-base.stickyNote",
"position": [
1328,
64
],
"parameters": {
"width": 280,
"height": 864,
"content": "# 🤖 AI Content Generation\n\nThis section handles:\n- Content summarization\n- Social media post creation\n- Image description generation\n- Platform-specific optimization"
},
"typeVersion": 1,
"id": "AI-Processing-5"
},
{
"name": "Post to Facebook",
"type": "n8n-nodes-base.httpRequest",
"position": [
3520,
276
],
"parameters": {
"url": "=https://graph.facebook.com/v19.0/[INSERT_YOUR_SITE_ID]/photos",
"method": "POST",
"options": {},
"sendBody": true,
"contentType": "form-urlencoded",
"sendHeaders": true,
"authentication": "predefinedCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "caption",
"value": "={{ $input.first().json.message.content }}"
},
{
"name": "=url",
"value": "={{ $item(0).$node[\"Supabase Public URL\"].json[\"public_url\"] }}"
},
{
"value": "="
}
]
},
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/x-www-form-urlencoded"
}
]
},
"nodeCredentialType": "facebookGraphApi"
},
"credentials": {
"facebookGraphApi": {
"id": "",
"name": "YOUR_FACEBOOK_GRAPH_API_CREDENTIAL"
}
},
"typeVersion": 4.2,
"id": "Post-to-Facebook-6"
},
{
"name": "Post to Instagram",
"type": "n8n-nodes-base.httpRequest",
"position": [
3520,
468
],
"parameters": {
"url": "=https://graph.facebook.com/v23.0/[INSERT_YOUR_SITE_ID]/media",
"method": "POST",
"options": {},
"sendBody": true,
"contentType": "form-urlencoded",
"sendHeaders": true,
"authentication": "predefinedCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "image_url",
"value": "={{ $item(0).$node[\"Supabase Public URL\"].json[\"public_url\"] }}"
},
{
"name": "caption",
"value": "={{ $input.first().json.message.content }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/x-www-form-urlencoded"
}
]
},
"nodeCredentialType": "facebookGraphApi"
},
"credentials": {
"facebookGraphApi": {
"id": "",
"name": "YOUR_FACEBOOK_GRAPH_API_CREDENTIAL"
}
},
"typeVersion": 4.2,
"id": "Post-to-Instagram-7"
},
{
"name": "Final Status Update",
"type": "n8n-nodes-base.googleSheets",
"position": [
4864,
448
],
"parameters": {
"columns": {
"value": {
"Image URL": "={{ $item(0).$node[\"Supabase Public URL\"].json[\"public_url\"] }}",
"Source URL": "={{ $node[\"Telegram Bot Trigger\"].json.message.text }}",
"Facebook URL": "={{ $json.facebook_post_url }}",
"LinkedIn URL": "={{ $json.linkedin_post_url }}",
"Instagram URL": "={{ $json.instagram_post_url }}",
"Facebook Content": "={{ $node[\"Facebook Post\"].json.message.content }}",
"Instagram Content": "={{ $node[\"Instagram Post\"].json.message.content }}",
"LinkedIn Content ": "={{ $node[\"LinkedIn Post\"].json.message.content }}"
},
"schema": [
{
"id": "Source URL",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Source URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Facebook Content",
"type": "string",
"display": true,
"required": false,
"displayName": "Facebook Content",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Facebook URL",
"type": "string",
"display": true,
"required": false,
"displayName": "Facebook URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Instagram Content",
"type": "string",
"display": true,
"required": false,
"displayName": "Instagram Content",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Instagram URL",
"type": "string",
"display": true,
"required": false,
"displayName": "Instagram URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "LinkedIn Content ",
"type": "string",
"display": true,
"required": false,
"displayName": "LinkedIn Content ",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "LinkedIn URL",
"type": "string",
"display": true,
"required": false,
"displayName": "LinkedIn URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image URL",
"type": "string",
"display": true,
"required": false,
"displayName": "Image URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Source URL"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1b7k0A06DY_oI3Ex6fR48FN0PXK6g59U4714wBYUCezw/edit#gid=0",
"cachedResultName": "Arkusz1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1b7k0A06DY_oI3Ex6fR48FN0PXK6g59U4714wBYUCezw",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1b7k0A06DY_oI3Ex6fR48FN0PXK6g59U4714wBYUCezw/edit?usp=drivesdk",
"cachedResultName": "n8n - Telegram Social Media Content Automation"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "",
"name": "YOUR_GOOGLE_SHEETS_OAUTH2_API_CREDENTIAL"
}
},
"typeVersion": 4,
"alwaysOutputData": true,
"id": "Final-Status-Update-8"
},
{
"name": "Publishing Phase",
"type": "n8n-nodes-base.stickyNote",
"position": [
4568,
-44
],
"parameters": {
"height": 652,
"content": "# 📱 Social Media Publishing\n\nPosts content to:\n- Facebook Pages via Graph API\n- Instagram Business via Graph API\n- LinkedIn via REST API"
},
"typeVersion": 1,
"id": "Publishing-Phase-9"
},
{
"name": "Post to Instagram1",
"type": "n8n-nodes-base.httpRequest",
"position": [
3744,
468
],
"parameters": {
"url": "=https://graph.facebook.com/v23.0/[INSERT_YOUR_SITE_ID]/media_publish",
"method": "POST",
"options": {},
"sendBody": true,
"contentType": "form-urlencoded",
"sendHeaders": true,
"authentication": "predefinedCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "creation_id",
"value": "={{ $json.id }}"
},
{
"name": "access_token",
"value": "={{ $credentials.facebookGraph.accessToken }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/x-www-form-urlencoded"
}
]
},
"nodeCredentialType": "facebookGraphApi"
},
"credentials": {
"facebookGraphApi": {
"id": "",
"name": "YOUR_FACEBOOK_GRAPH_API_CREDENTIAL"
}
},
"typeVersion": 4.2,
"id": "Post-to-Instagram1-10"
},
{
"name": "Facebook Post",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
1344,
368
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-nano",
"cachedResultName": "GPT-4.1-NANO"
},
"options": {},
"messages": {
"values": [
{
"content": "=Based on the provided article content, create a Facebook post that is professional yet approachable, ranging from 100-200 words. The tone should be informative and engaging, with occasional light humor when appropriate to the topic. Focus on the key takeaway or most interesting insight from the article. Include a clear call-to-action that encourages meaningful discussion in the comments. The post should feel conversational and relatable while maintaining credibility. If the topic allows, incorporate a subtle touch of humor or a relatable analogy that your professional network would appreciate. Keep the language of the original text. End with a thoughtful question to spark engagement.: {{ $('Extract Text Content').item.json.content }}"
}
]
}
},
"credentials": {
"openAiApi": {
"id": "",
"name": "YOUR_OPEN_AI_API_CREDENTIAL"
}
},
"typeVersion": 1.8,
"id": "Facebook-Post-11"
},
{
"name": "Instagram Post",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
1344,
560
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-nano",
"cachedResultName": "GPT-4.1-NANO"
},
"options": {},
"messages": {
"values": [
{
"content": "=Transform the article content into a punchy Instagram post of 50-80 words maximum. Use a casual, energetic tone with 2-3 relevant emojis strategically placed. Include wordplay, puns, or clever turns of phrase when they fit naturally. Focus on one compelling hook or surprising fact from the article. Write in short, impactful sentences that work well with Instagram's visual-first format. Include 3-5 relevant hashtags at the end. The post should feel fresh, scrollable, and shareable while still delivering value from the original content. Keep the languafe of the original: {{ $('Extract Text Content').item.json.content }}"
}
]
}
},
"credentials": {
"openAiApi": {
"id": "",
"name": "YOUR_OPEN_AI_API_CREDENTIAL"
}
},
"typeVersion": 1.8,
"id": "Instagram-Post-12"
},
{
"name": "LinkedIn Post",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
1344,
744
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-nano",
"cachedResultName": "GPT-4.1-NANO"
},
"options": {},
"messages": {
"values": [
{
"content": "=Create an engaging, professional LinkedIn post (max 400 characters) based on this article: {{ $('Extract Text Content').item.json.content }}"
}
]
}
},
"credentials": {
"openAiApi": {
"id": "",
"name": "YOUR_OPEN_AI_API_CREDENTIAL"
}
},
"typeVersion": 1.8,
"id": "LinkedIn-Post-13"
},
{
"name": "병합",
"type": "n8n-nodes-base.merge",
"position": [
3296,
276
],
"parameters": {},
"typeVersion": 3.2,
"id": "--14"
},
{
"name": "병합1",
"type": "n8n-nodes-base.merge",
"position": [
3296,
468
],
"parameters": {},
"typeVersion": 3.2,
"id": "-1-15"
},
{
"name": "병합2",
"type": "n8n-nodes-base.merge",
"position": [
3296,
888
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"typeVersion": 3.2,
"id": "-2-16"
},
{
"name": "If message contains URL",
"type": "n8n-nodes-base.if",
"position": [
224,
544
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "dc0117b8-213b-4c6f-934e-583fe2ec7d45",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "=={{ ($json.message.text || '').match(/https?:\\/\\/\\S+/) !== null }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2,
"id": "If-message-contains-URL-17"
},
{
"name": "Telegram",
"type": "n8n-nodes-base.telegram",
"position": [
448,
640
],
"webhookId": "7e3d2ccb-9161-43d5-99c6-a2286541886a",
"parameters": {
"text": "You can't do this here. You need to upload a URL with an article.",
"chatId": "={{ $json.message.chat.id }}",
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"id": "",
"name": "YOUR_TELEGRAM_API_CREDENTIAL"
}
},
"typeVersion": 1.2,
"id": "Telegram-18"
},
{
"name": "코드",
"type": "n8n-nodes-base.code",
"position": [
3968,
272
],
"parameters": {
"jsCode": "const id = $json.post_id || $json.id || '';\nconst parts = id.split('_');\nconst postId = parts.length > 1 ? parts[1] : '';\nconst facebookUsername = '<YOUR_FACEBOOK_PAGE_USERNAME>';\nconst facebookPostUrl = postId\n ? `https://facebook.com/${facebookUsername}/posts/${postId}`\n : '';\n\nreturn {\n json: {\n facebook_post_id: postId,\n facebook_post_url: facebookPostUrl,\n facebook_published: !!postId\n }\n};\n"
},
"typeVersion": 2,
"id": "--19"
},
{
"name": "코드1",
"type": "n8n-nodes-base.code",
"position": [
4192,
468
],
"parameters": {
"jsCode": "const mediaId = $json.id || '';\nreturn {\n json: {\n instagram_post_id: mediaId,\n instagram_post_url: $input.first().json.permalink, // nie mamy shortcode :(\n instagram_published: !!mediaId\n }\n};\n"
},
"typeVersion": 2,
"id": "-1-20"
},
{
"name": "LinkedIn",
"type": "n8n-nodes-base.linkedIn",
"position": [
3744,
888
],
"parameters": {
"text": "={{ $('LinkedIn Post').item.json.message.content }}",
"person": "wZFKPz_aPr",
"additionalFields": {},
"shareMediaCategory": "IMAGE"
},
"credentials": {
"linkedInOAuth2Api": {
"id": "",
"name": "YOUR_LINKED_IN_OAUTH2_API_CREDENTIAL"
}
},
"typeVersion": 1,
"id": "LinkedIn-21"
},
{
"name": "Binary File",
"type": "n8n-nodes-base.httpRequest",
"position": [
3520,
888
],
"parameters": {
"url": "={{ $json.public_url }}",
"options": {
"response": {
"response": {
"responseFormat": "file"
}
}
}
},
"typeVersion": 4.2,
"id": "Binary-File-22"
},
{
"name": "병합3",
"type": "n8n-nodes-base.merge",
"position": [
4416,
432
],
"parameters": {
"numberInputs": 3
},
"typeVersion": 3.2,
"id": "-3-23"
},
{
"name": "Get Post URL",
"type": "n8n-nodes-base.httpRequest",
"position": [
3968,
468
],
"parameters": {
"url": "={{ `https://graph.facebook.com/${$json.fbApiVersion || 'v19.0'}/${$json.id}?fields=permalink` }}",
"options": {},
"sendHeaders": true,
"authentication": "predefinedCredentialType",
"headerParameters": {
"parameters": [
{}
]
},
"nodeCredentialType": "facebookGraphApi"
},
"credentials": {
"facebookGraphApi": {
"id": "",
"name": "YOUR_FACEBOOK_GRAPH_API_CREDENTIAL"
}
},
"typeVersion": 4.2,
"id": "Get-Post-URL-24"
},
{
"name": "코드2",
"type": "n8n-nodes-base.code",
"position": [
3968,
888
],
"parameters": {
"jsCode": "const urn = $json.urn || ''; // example: urn:li:share:7342310895114420224\nconst postId = urn.split(':').pop(); // get the numeric ID\n\nconst linkedinPostUrl = postId \n ? `https://www.linkedin.com/feed/update/${urn.replace('urn:li:', '').replace(/:/g, '%3A')}/`\n : '';\n\nreturn {\n json: {\n linkedin_post_id: postId,\n linkedin_post_url: linkedinPostUrl,\n linkedin_published: !!postId\n }\n};\n"
},
"typeVersion": 2,
"id": "-2-25"
},
{
"name": "코드3",
"type": "n8n-nodes-base.code",
"position": [
4640,
448
],
"parameters": {
"jsCode": "return [\n {\n json: Object.assign({}, ...items.map(item => item.json))\n }\n];\n"
},
"typeVersion": 2,
"id": "-3-26"
},
{
"name": "Edit Fields",
"type": "n8n-nodes-base.set",
"position": [
2272,
716
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "bb4004a1-9c8b-4603-b8ed-227e50940f87",
"name": "filename",
"type": "string",
"value": "={{$now.toMillis()}}.png"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4,
"id": "Edit-Fields-27"
},
{
"name": "Generate an image1",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
2048,
716
],
"parameters": {
"model": "gpt-image-1",
"prompt": "={{ $json.text }}",
"options": {
"size": "1024x1024",
"quality": "high"
},
"resource": "image"
},
"credentials": {
"openAiApi": {
"id": "",
"name": "YOUR_OPEN_AI_API_CREDENTIAL"
}
},
"typeVersion": 1.8,
"id": "Generate-an-image1-28"
},
{
"name": "Basic LLM 체인2",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
1696,
716
],
"parameters": {
"text": "=Wygeneruj prompt dla Recraft, tak, aby wygenerował profesjonalny obraz na social media (Facebook, Instagram) do tego TEMATU: {{ $json.text }} Pamiętaj, że obraz ma być interesujący, pasujący do bloga technologicznego, na przykład fotorealistyczne fotki ekspertów w biurze, w terenie, zdjęcia konkretnych sprzetow, technologii czy koncepcji opisanych w artykule. Obrazki mają być esetyczne, wywołujące pozytywne uczucia. Tematyka i wygląd obrazka ma ściśle wiązać się z treścią zadanego TEMATU. W Prawym dolnym rogu ma być mały napis SmartCamp.AI. Pamiętaj, że to jest prompt, który później będzie wklejany do body w api, wiec unikaj elementów, które moga popsuć json (Nie możesz używać cudzysłowów). Wygeneruj sam prompt, bez wstępu, bez cudzysłowów. Cała wiadomość musi mieć mniej niż 1000 znaków.",
"batching": {},
"promptType": "define"
},
"typeVersion": 1.7,
"id": "Basic-LLM-2-29"
},
{
"name": "Send a photo message",
"type": "n8n-nodes-base.telegram",
"position": [
5088,
448
],
"webhookId": "90e30a0b-989d-4a48-9779-d83dda1ca336",
"parameters": {
"file": "={{ $item(0).$node[\"Supabase Public URL\"].json[\"public_url\"] }}",
"chatId": "={{ $node[\"Telegram Bot Trigger\"].json.message.chat.id }}",
"operation": "sendPhoto",
"additionalFields": {
"caption": "=Content published!\n\nFacebook Post: {{ $node[\"Code3\"].json.facebook_post_url }}\n\nInstagram Post: {{ $node[\"Code3\"].json.instagram_post_url }}\n\nLinkedIn Post: {{ $node[\"Code3\"].json.linkedin_post_url }}\n"
}
},
"credentials": {
"telegramApi": {
"id": "",
"name": "YOUR_TELEGRAM_API_CREDENTIAL"
}
},
"typeVersion": 1.2,
"id": "Send-a-photo-message-30"
},
{
"name": "Append or update row in sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
672,
448
],
"parameters": {
"columns": {
"value": {
"Source URL": "={{ $json.url }}"
},
"schema": [
{
"id": "Source URL",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Source URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Facebook Content",
"type": "string",
"display": true,
"required": false,
"displayName": "Facebook Content",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Facebook URL",
"type": "string",
"display": true,
"required": false,
"displayName": "Facebook URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Instagram Content",
"type": "string",
"display": true,
"required": false,
"displayName": "Instagram Content",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Instagram URL",
"type": "string",
"display": true,
"required": false,
"displayName": "Instagram URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "LinkedIn Content ",
"type": "string",
"display": true,
"required": false,
"displayName": "LinkedIn Content ",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "LinkedIn URL",
"type": "string",
"display": true,
"required": false,
"displayName": "LinkedIn URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image URL",
"type": "string",
"display": true,
"required": false,
"displayName": "Image URL",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Source URL"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1b7k0A06DY_oI3Ex6fR48FN0PXK6g59U4714wBYUCezw/edit#gid=0",
"cachedResultName": "Arkusz1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1b7k0A06DY_oI3Ex6fR48FN0PXK6g59U4714wBYUCezw",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1b7k0A06DY_oI3Ex6fR48FN0PXK6g59U4714wBYUCezw/edit?usp=drivesdk",
"cachedResultName": "n8n - Telegram Social Media Content Automation"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "",
"name": "YOUR_GOOGLE_SHEETS_OAUTH2_API_CREDENTIAL"
}
},
"typeVersion": 4.6,
"id": "Append-or-update-row-in-sheet-31"
},
{
"name": "Credentials",
"type": "n8n-nodes-base.stickyNote",
"position": [
-560,
768
],
"parameters": {
"width": 360,
"height": 172,
"content": "🔐 Credentials\nThis template uses n8n Credentials.\n- Facebook/Instagram: `facebookGraph`\n- Supabase: `supabase`\n- Google Sheets: OAuth2\n- OpenAI/Gemini: API key\nNo API keys are stored inside the template."
},
"typeVersion": 1,
"id": "Credentials-32"
},
{
"name": "Input",
"type": "n8n-nodes-base.stickyNote",
"position": [
-132,
316
],
"parameters": {
"width": 360,
"height": 388,
"content": "🧪 Input assumption\nSend a Telegram message with a single URL. The workflow extracts the URL and processes the article."
},
"typeVersion": 1,
"id": "Input-33"
},
{
"name": "Image pipeline",
"type": "n8n-nodes-base.stickyNote",
"position": [
2240,
592
],
"parameters": {
"width": 920,
"height": 284,
"content": "🖼️ Image handling\nGenerates an image with OpenAI and uploads it to Supabase Storage.\nSet your bucket name in the Set node or via JSON."
},
"typeVersion": 1,
"id": "Image-pipeline-34"
},
{
"name": "Sheets mapping",
"type": "n8n-nodes-base.stickyNote",
"position": [
604,
268
],
"parameters": {
"width": 232,
"height": 340,
"content": "📊 Sheet mapping\nUpdate `YOUR_GOOGLE_SHEET_ID` and `Sheet1`.\nColumns will be created automatically on first run."
},
"typeVersion": 1,
"id": "Sheets-mapping-35"
},
{
"name": "Google Gemini",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
1768,
940
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "",
"name": "YOUR_GOOGLE_PALM_API_CREDENTIAL"
}
},
"typeVersion": 1,
"id": "Google-Gemini-36"
},
{
"name": "Publishing Phase1",
"type": "n8n-nodes-base.stickyNote",
"position": [
4832,
-48
],
"parameters": {
"width": 400,
"height": 652,
"content": "# Final step \nUpdates Google Sheets with post details and sends a Telegram message with image + direct post links as confirmation."
},
"typeVersion": 1,
"id": "Publishing-Phase1-37"
},
{
"name": "Upload to Supabase (uses credentials)",
"type": "n8n-nodes-base.httpRequest",
"position": [
2720,
716
],
"parameters": {
"url": "={{ ($json.supabase_base_url || '').trim().replace(/\\/+$/,'') + '/storage/v1/object/' + ($json.bucket || 'social-media-ai-generated') + '/' + $json.filename }}",
"method": "POST",
"options": {},
"sendBody": true,
"contentType": "binaryData",
"sendHeaders": true,
"authentication": "predefinedCredentialType",
"headerParameters": {
"parameters": [
{
"name": "content-type",
"value": "=={{ $binary.data?.mimeType || 'application/octet-stream' }}"
},
{
"name": "x-upsert",
"value": "true"
}
]
},
"inputDataFieldName": "data",
"nodeCredentialType": "supabaseApi"
},
"credentials": {
"supabaseApi": {
"id": "",
"name": "YOUR_SUPABASE_API_CREDENTIAL"
}
},
"typeVersion": 4.2,
"id": "Upload-to-Supabase-uses-credentials--38"
},
{
"name": "Supabase Config",
"type": "n8n-nodes-base.set",
"position": [
2496,
716
],
"parameters": {
"options": {
"stripBinary": false
},
"assignments": {
"assignments": [
{
"id": "1dbcf7c4-2e01-4df2-874e-93868b74a519",
"name": "bucket",
"type": "string",
"value": "social-media-ai-generated"
},
{
"id": "4e88d63f-01de-4265-8271-fd0ed637b5fd",
"name": "filename",
"type": "string",
"value": "={{ $json.filename }}"
},
{
"id": "b5579b42-bc9e-44d9-b997-2f1e505c0692",
"name": "link_ttl_seconds",
"type": "string",
"value": "3600"
},
{
"id": "ab260017-3161-4cbf-ad86-84d23a94e780",
"name": "supabase_base_url",
"type": "string",
"value": "https://api.supabase.smartcamp.ai"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4,
"id": "Supabase-Config-39"
},
{
"name": "Supabase Public URL",
"type": "n8n-nodes-base.set",
"position": [
2960,
720
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "cdc9fb52-3d91-4af4-9ff4-8fb15e6543c4",
"name": "public_url",
"type": "string",
"value": "={{ $node[\"Supabase Config\"].json.supabase_base_url.toString().trim().replace(/\\/+$/,'') + \"/storage/v1/object/public/\" + encodeURIComponent($node[\"Supabase Config\"].json.bucket) + \"/\" + encodeURIComponent($node[\"Supabase Config\"].json.filename) }}"
}
]
}
},
"typeVersion": 3.4,
"id": "Supabase-Public-URL-40"
},
{
"name": "Publishing Phase2",
"type": "n8n-nodes-base.stickyNote",
"position": [
3456,
-16
],
"parameters": {
"width": 432,
"height": 652,
"content": "# Instagram & Facebook Site IDs\n\nRemember to replace the palceholder with your respective site IDs"
},
"typeVersion": 1,
"id": "Publishing-Phase2-41"
}
],
"active": false,
"settings": {
"timezone": "Europe/Warsaw",
"callerPolicy": "workflowsFromSameOwner",
"errorWorkflow": "yGK0VwXqcskQjGJG",
"executionOrder": "v1",
"timeSavedPerExecution": 20
},
"connections": {
"Code": {
"main": [
[
{
"node": "Merge3",
"type": "main",
"index": 0
}
]
]
},
"Code1": {
"main": [
[
{
"node": "Merge3",
"type": "main",
"index": 1
}
]
]
},
"Code2": {
"main": [
[
{
"node": "Merge3",
"type": "main",
"index": 2
}
]
]
},
"Code3": {
"main": [
[
{
"node": "Final-Status-Update-8",
"type": "main",
"index": 0
}
]
]
},
"Merge": {
"main": [
[
{
"node": "Post-to-Facebook-6",
"type": "main",
"index": 0
}
]
]
},
"Merge1": {
"main": [
[
{
"node": "Post-to-Instagram-7",
"type": "main",
"index": 0
}
]
]
},
"Merge2": {
"main": [
[
{
"node": "Binary-File-22",
"type": "main",
"index": 0
}
]
]
},
"Merge3": {
"main": [
[
{
"node": "Code3",
"type": "main",
"index": 0
}
]
]
},
"LinkedIn-21": {
"main": [
[
{
"node": "Code2",
"type": "main",
"index": 0
}
]
]
},
"Binary-File-22": {
"main": [
[
{
"node": "LinkedIn-21",
"type": "main",
"index": 0
}
]
]
},
"Edit-Fields-27": {
"main": [
[
{
"node": "Supabase-Config-39",
"type": "main",
"index": 0
}
]
]
},
"Extract-URL-2": {
"main": [
[
{
"node": "Append-or-update-row-in-sheet-31",
"type": "main",
"index": 0
}
]
]
},
"Get-Post-URL-24": {
"main": [
[
{
"node": "Code1",
"type": "main",
"index": 0
}
]
]
},
"Facebook-Post-11": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Google-Gemini-36": {
"ai_languageModel": [
[
{
"node": "Basic LLM Chain2",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"LinkedIn-Post-13": {
"main": [
[
{
"node": "Basic LLM Chain2",
"type": "main",
"index": 0
},
{
"node": "Merge2",
"type": "main",
"index": 0
}
]
]
},
"Instagram-Post-12": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 0
}
]
]
},
"Supabase-Config-39": {
"main": [
[
{
"node": "Upload-to-Supabase-uses-credentials--38",
"type": "main",
"index": 0
}
]
]
},
"Basic LLM Chain2": {
"main": [
[
{
"node": "Generate-an-image1-28",
"type": "main",
"index": 0
}
]
]
},
"Post-to-Facebook-6": {
"main": [
[
{
"node": "Code",
"type": "main",
"index": 0
}
]
]
},
"Fetch-URL-Content-3": {
"main": [
[
{
"node": "Extract-Text-Content-4",
"type": "main",
"index": 0
}
]
]
},
"Post-to-Instagram-7": {
"main": [
[
{
"node": "Post-to-Instagram1-10",
"type": "main",
"index": 0
}
]
]
},
"Generate-an-image1-28": {
"main": [
[
{
"node": "Edit-Fields-27",
"type": "main",
"index": 0
}
]
]
},
"Post-to-Instagram1-10": {
"main": [
[
{
"node": "Get-Post-URL-24",
"type": "main",
"index": 0
}
]
]
},
"Final-Status-Update-8": {
"main": [
[
{
"node": "Send-a-photo-message-30",
"type": "main",
"index": 0
}
]
]
},
"Supabase-Public-URL-40": {
"main": [
[
{
"node": "Merge2",
"type": "main",
"index": 1
},
{
"node": "Merge1",
"type": "main",
"index": 1
},
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Extract-Text-Content-4": {
"main": [
[
{
"node": "Facebook-Post-11",
"type": "main",
"index": 0
},
{
"node": "Instagram-Post-12",
"type": "main",
"index": 0
},
{
"node": "LinkedIn-Post-13",
"type": "main",
"index": 0
}
]
]
},
"Telegram-Bot-Trigger-0": {
"main": [
[
{
"node": "If-message-contains-URL-17",
"type": "main",
"index": 0
}
]
]
},
"If-message-contains-URL-17": {
"main": [
[
{
"node": "Extract-URL-2",
"type": "main",
"index": 0
}
],
[
{
"node": "Telegram-18",
"type": "main",
"index": 0
}
]
]
},
"Append-or-update-row-in-sheet-31": {
"main": [
[
{
"node": "Fetch-URL-Content-3",
"type": "main",
"index": 0
}
]
]
},
"Upload-to-Supabase-uses-credentials--38": {
"main": [
[
{
"node": "Supabase-Public-URL-40",
"type": "main",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
고급 - 콘텐츠 제작, 멀티모달 AI
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
RSS에서 Facebook 및 Instagram 게시
AI 요약 및 이미지 생성을 통한 RSS to 소셜 미디어 발행 자동화
If
Set
Code
+
If
Set
Code
34 노드Karol
콘텐츠 제작
LinkedIn 자동화
Gemini AI와 승인 프로세스를 사용하여 Telegram 메시지를 전문적인 LinkedIn 게시물로 변환합니다.
If
Set
Code
+
If
Set
Code
54 노드Sateesh
콘텐츠 제작
LinkedIn 및 X 바이럴 콘텐츠 자동 엔진
사용AI생성및게시자동생성LinkedIn및X의病毒콘텐츠
If
Set
Wait
+
If
Set
Wait
156 노드Diptamoy Barman
콘텐츠 제작
Telegram을 통해 Pollinations을 사용하여 이미지 생성하고 Gemini 2.5을 사용하여 블로그 기사 생성
Telegram을 통해 Pollinations을 사용하여 이미지 생성하고 Gemini 2.5을 사용하여 블로그 기사 생성
If
Set
Code
+
If
Set
Code
34 노드Fahmi Oktafian
콘텐츠 제작
Gemini, Tavily 및 인공审核을 사용하여 SEO 최적화 WordPress 블로그 생성
사용Gemini, Tavily, 인공审核으로 SEO 최적화된 WordPress 블로그 생성
If
Set
Code
+
If
Set
Code
38 노드Aryan Shinde
콘텐츠 제작
AI 기반 동영상 제작 및 Instagram, TikTok, YouTube 업로드
클라우드 드라이브 기반 AI 기반 비디오 제작 및 Instagram, TikTok, YouTube 업로드
If
Set
Code
+
If
Set
Code
53 노드DevCode Journey
콘텐츠 제작