비공개 메시지를 통한 Instagram 댓글 자동 응답
중급
이것은Social Media분야의자동화 워크플로우로, 12개의 노드를 포함합니다.주로 If, Set, Code, HttpRequest, GoogleSheets 등의 노드를 사용하며. Instagram 댓글 자동 응답 및 Google 스프레드시트를 통한 추적
사전 요구사항
- •대상 API의 인증 정보가 필요할 수 있음
- •Google Sheets API 인증 정보
카테고리
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"id": "igcrMcr9XPqqxnqk",
"meta": {
"instanceId": "3378b0d68c3b7ebfc71b79896d94e1a044dec38e99a1160aed4e9c323910fbe2",
"templateCredsSetupCompleted": true
},
"name": "Auto-Reply to Instagram Comments with DMs",
"tags": [],
"nodes": [
{
"id": "82aaa8f5-c2fc-49b4-9d69-2b439001c7dd",
"name": "모니터링 시작",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-1520,
80
],
"parameters": {},
"typeVersion": 1
},
{
"id": "c191f69e-4483-409a-b313-2e11e0250e47",
"name": "게시물 및 메시지 설정",
"type": "n8n-nodes-base.set",
"position": [
-1300,
220
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "postUrl",
"name": "postUrl",
"type": "string",
"value": "Instagram url post/reel"
},
{
"id": "replyMessage",
"name": "replyMessage",
"type": "string",
"value": "Thanks so much! This is the template: xxxxx"
},
{
"id": "profileUsername",
"name": "profileUsername",
"type": "string",
"value": "add_upload_post_username"
}
]
}
},
"typeVersion": 3.3
},
{
"id": "66a72bd2-4f15-4c01-bbad-27d0ec3ce775",
"name": "연락된 사용자 읽기",
"type": "n8n-nodes-base.googleSheets",
"position": [
-1100,
220
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1SNZYngGfvIxZJ6VAiwD9Keuj6DugbijLH59vyK4L298/edit#gid=0",
"cachedResultName": "Hoja 1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1SNZYngGfvIxZJ6VAiwD9Keuj6DugbijLH59vyK4L298",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1SNZYngGfvIxZJ6VAiwD9Keuj6DugbijLH59vyK4L298/edit?usp=drivesdk",
"cachedResultName": "respuestas a post de instagram"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "3IOU2VjBnR4hGohx",
"name": "Google Sheets account"
}
},
"typeVersion": 4,
"alwaysOutputData": true
},
{
"id": "78881d28-aa34-408d-a6ed-d3578f92c394",
"name": "새 댓글 필터링",
"type": "n8n-nodes-base.code",
"position": [
-700,
220
],
"parameters": {
"jsCode": "const comments = $input.first().json.comments || [];\n// CRÍTICO: Usar .all() para obtener TODAS las filas, no solo la primera\nconst allContactedUsersData = $('Read Contacted Users').all();\nconsole.log('🔍 DEBUG - Raw all contacted users:', JSON.stringify(allContactedUsersData, null, 2));\nconsole.log('🔍 DEBUG - Number of items from Read Contacted Users:', allContactedUsersData.length);\n\n// Extraer todos los objetos JSON de todas las ejecuciones y aplanar en un solo array\nlet contactedUsersData = [];\nallContactedUsersData.forEach((item, index) => {\n console.log(`🔍 DEBUG - Processing item ${index}:`, JSON.stringify(item.json, null, 2));\n if (item.json) {\n if (Array.isArray(item.json)) {\n // Si es un array, agregar todos los elementos\n contactedUsersData.push(...item.json);\n console.log(`🔍 DEBUG - Added ${item.json.length} items from array`);\n } else {\n // Si es un solo objeto, agregarlo\n contactedUsersData.push(item.json);\n console.log(`🔍 DEBUG - Added 1 object`);\n }\n }\n});\n\nconsole.log('🔍 DEBUG - Total extracted contacted users:', contactedUsersData.length);\n\n// DEBUGGING DETALLADO\nconsole.log('🔍 DEBUG - Input comments found:', comments.length);\nconsole.log('🔍 DEBUG - Raw contacted users data:', JSON.stringify(contactedUsersData, null, 2));\nconsole.log('🔍 DEBUG - Contacted users data type:', typeof contactedUsersData);\nconsole.log('🔍 DEBUG - Contacted users data keys:', Object.keys(contactedUsersData));\n\n// Handle different Google Sheets response formats\nlet contactedUsers = [];\n\n// IMPORTANTE: Primero verificar si es un array directo (múltiples filas)\nif (Array.isArray(contactedUsersData)) {\n contactedUsers = contactedUsersData;\n console.log('🔍 DEBUG - Using direct array format (multiple rows)');\n} \n// Método 2: Respuesta con .values (formato común)\nelse if (contactedUsersData.values && Array.isArray(contactedUsersData.values)) {\n contactedUsers = contactedUsersData.values;\n console.log('🔍 DEBUG - Using .values format');\n} \n// Método 3: Respuesta con .data\nelse if (contactedUsersData.data && Array.isArray(contactedUsersData.data)) {\n contactedUsers = contactedUsersData.data;\n console.log('🔍 DEBUG - Using .data format');\n}\n// MÉTODO 4 CORREGIDO: Manejar objetos únicos vs múltiples\nelse if (typeof contactedUsersData === 'object' && contactedUsersData !== null) {\n // CRÍTICO: Verificar si es UN SOLO objeto con comment_id (1 fila)\n if (contactedUsersData.comment_id || contactedUsersData.username) {\n contactedUsers = [contactedUsersData];\n console.log('🔍 DEBUG - Converting single object to array (1 row)');\n } \n // Si es un objeto pero SIN comment_id directo, puede ser múltiples objetos\n else {\n // Convertir a array pero también verificar si los valores son objetos\n const values = Object.values(contactedUsersData);\n \n // Si los valores son objetos con comment_id, son múltiples filas\n if (values.length > 0 && typeof values[0] === 'object' && values[0]?.comment_id) {\n contactedUsers = values;\n console.log('🔍 DEBUG - Converting object values to array (multiple rows from object)');\n } else {\n contactedUsers = values;\n console.log('🔍 DEBUG - Converting object values to array (unknown format)');\n }\n }\n}\n\n// DEBUGGING EXTRA: Mostrar qué tipo de datos recibimos\nconsole.log('🔍 DEBUG - Raw data analysis:');\nconsole.log(' - Is Array:', Array.isArray(contactedUsersData));\nconsole.log(' - Type:', typeof contactedUsersData);\nconsole.log(' - Has comment_id:', !!contactedUsersData?.comment_id);\nconsole.log(' - Object keys:', contactedUsersData ? Object.keys(contactedUsersData) : 'null');\n\nconsole.log('🔍 DEBUG - Final contacted users array length:', contactedUsers.length);\nconsole.log('🔍 DEBUG - Final contacted users array:', JSON.stringify(contactedUsers, null, 2));\n\n// Print first few rows to see the structure\nif (contactedUsers.length > 0) {\n console.log('🔍 DEBUG - First 5 rows structure:');\n contactedUsers.slice(0, 5).forEach((row, index) => {\n console.log(` Row ${index}:`, JSON.stringify(row, null, 2));\n console.log(` Row ${index} type:`, typeof row);\n console.log(` Row ${index} keys:`, Object.keys(row || {}));\n });\n}\n\n// FUNCIÓN PARA NORMALIZAR COMMENT IDs (crítico para números largos)\nfunction normalizeCommentId(id) {\n if (!id || id === null || id === undefined) return null;\n \n // Convertir a string y limpiar espacios\n let cleanId = String(id).trim();\n \n // Si es vacío o es un header, retornar null\n if (cleanId === '' || cleanId === 'comment_id') return null;\n \n // IMPORTANTE: Manejar números largos como strings para evitar problemas de precisión\n // Los comment IDs de Instagram son números muy largos que pueden perder precisión\n return cleanId;\n}\n\n// Create a set of already contacted comment IDs\nconst contactedCommentIds = new Set();\n\ncontactedUsers.forEach((row, index) => {\n let commentId = null;\n \n console.log(`🔍 DEBUG - Processing row ${index}:`, JSON.stringify(row, null, 2));\n \n // Skip header row if it exists\n if (typeof row === 'object' && row !== null && !Array.isArray(row)) {\n // Skip if this looks like a header row\n if (row.comment_id === 'comment_id' || row.username === 'username') {\n console.log(`⚠️ Skipping header row ${index}`);\n return;\n }\n \n // Handle object format (when Google Sheets returns objects)\n commentId = row.comment_id || row.commentId || row['comment_id'] || row['commentId'];\n console.log(`🔍 DEBUG - Object format, raw comment_id: '${commentId}' (type: ${typeof commentId})`);\n } \n // Handle array format (when Google Sheets returns arrays)\n else if (Array.isArray(row)) {\n // Skip if this looks like a header row\n if (row[0] === 'comment_id' || row[1] === 'username') {\n console.log(`⚠️ Skipping header array row ${index}`);\n return;\n }\n \n // comment_id is in Column A (index 0)\n commentId = row[0];\n console.log(`🔍 DEBUG - Array format, raw comment_id: '${commentId}' (type: ${typeof commentId})`);\n }\n \n // Normalize and validate comment ID\n const normalizedId = normalizeCommentId(commentId);\n if (normalizedId) {\n contactedCommentIds.add(normalizedId);\n console.log(`✅ Added contacted comment ID: '${normalizedId}' (length: ${normalizedId.length})`);\n } else {\n console.log(`⚠️ Row ${index} has no valid comment_id:`, commentId);\n }\n});\n\nconsole.log('🔍 DEBUG - Total contacted comment IDs found:', contactedCommentIds.size);\nconsole.log('🔍 DEBUG - Contacted comment IDs list:', Array.from(contactedCommentIds));\n\n// Filter new comments - exclude already contacted ones\nconst newComments = comments.filter(comment => {\n const rawCommentId = comment.id;\n const normalizedCommentId = normalizeCommentId(rawCommentId);\n \n if (!normalizedCommentId) {\n console.log(`⚠️ Invalid comment ID found: ${rawCommentId}`);\n return false;\n }\n \n const isAlreadyContacted = contactedCommentIds.has(normalizedCommentId);\n \n console.log(`🔍 DEBUG - Checking comment ID: '${normalizedCommentId}' (raw: ${rawCommentId}, type: ${typeof rawCommentId}), Already contacted: ${isAlreadyContacted}`);\n \n // Debug: Show all contacted IDs for comparison\n if (isAlreadyContacted) {\n console.log(`🔍 DEBUG - Comment ID '${normalizedCommentId}' found in contacted list`);\n } else {\n console.log(`🔍 DEBUG - Comment ID '${normalizedCommentId}' NOT found in contacted list`);\n console.log(`🔍 DEBUG - All contacted IDs: [${Array.from(contactedCommentIds).join(', ')}]`);\n }\n \n return !isAlreadyContacted;\n});\n\nconsole.log('🔍 DEBUG - New comments after filter:', newComments.length);\n\n// Log the filtering results with emojis\nconsole.log(`📊 Total comments retrieved: ${comments.length}`);\nconsole.log(`✅ Already contacted comments: ${contactedCommentIds.size}`);\nconsole.log(`🆕 New comments to process: ${newComments.length}`);\n\n// Log details of new comments\nnewComments.forEach((comment, index) => {\n console.log(`🆕 New comment ${index + 1}: ID='${comment.id}', User='${comment.user?.username || 'unknown'}', Text='${comment.text?.substring(0, 50) || 'no text'}...'`);\n});\n\nif (newComments.length === 0) {\n console.log('😴 No new comments found. Waiting for next check...');\n console.log('🔄 Workflow will continue monitoring in 15 minutes...');\n \n // Return a special object to indicate no processing needed\n return [{\n json: {\n noNewComments: true,\n summary: `📊 Monitoring complete - Found ${comments.length} total comments, ${contactedCommentIds.size} already contacted, 0 new comments to process`,\n timestamp: new Date().toISOString(),\n status: 'no_new_comments'\n }\n }];\n}\n\n// Transform each new comment into a separate item for processing\nreturn newComments.map(comment => ({\n json: {\n commentId: normalizeCommentId(comment.id),\n commentText: comment.text,\n userId: comment.user?.id || 'unknown',\n username: comment.user?.username || 'unknown',\n timestamp: comment.timestamp || new Date().toISOString(),\n replyMessage: $('Configure Post & Message').first().json.replyMessage,\n postUrl: $('Configure Post & Message').first().json.postUrl,\n profileUsername: $('Configure Post & Message').first().json.profileUsername\n }\n}));"
},
"typeVersion": 2,
"alwaysOutputData": true
},
{
"id": "13ad0cdd-7da6-4e57-98e8-28dae0916ed4",
"name": "새 댓글 확인",
"type": "n8n-nodes-base.if",
"position": [
-540,
220
],
"parameters": {
"options": {
"ignoreCase": true,
"looseTypeValidation": true
},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": false,
"typeValidation": "loose"
},
"combinator": "or",
"conditions": [
{
"id": "has_new_comments",
"operator": {
"type": "boolean",
"operation": "notEqual"
},
"leftValue": "={{ $json.noNewComments }}",
"rightValue": true
},
{
"id": "f38ffd12-c4b2-4971-944c-b983ff3541fa",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ !$json.noNewComments }}",
"rightValue": "true"
}
]
}
},
"typeVersion": 2
},
{
"id": "f20e9a90-f8db-4f42-acdb-1e99295a0a0c",
"name": "댓글에 응답 전송",
"type": "n8n-nodes-base.httpRequest",
"position": [
-340,
120
],
"parameters": {
"url": "https://api.upload-post.com/api/uploadposts/comments/reply",
"method": "POST",
"options": {},
"jsonBody": "={\n \"platform\": \"instagram\",\n \"user\": \"{{ $json.profileUsername }}\",\n \"comment_id\": \"{{ $json.commentId }}\",\n \"message\": \"{{ $json.replyMessage }}\"\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"id": "peX0mDODPePtl6Vb",
"name": "upload-post vitor "
}
},
"typeVersion": 4.1
},
{
"id": "7e4c9bd5-973f-4a15-941d-239ae9581bd8",
"name": "응답 성공 확인",
"type": "n8n-nodes-base.if",
"position": [
-180,
20
],
"parameters": {
"options": {
"ignoreCase": true,
"looseTypeValidation": true
},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": false,
"typeValidation": "loose"
},
"combinator": "or",
"conditions": [
{
"id": "success_check",
"operator": {
"type": "boolean",
"operation": "equal"
},
"leftValue": "={{ $json.success }}",
"rightValue": true
},
{
"id": "15c2064a-8fbd-446e-8d36-29852df64def",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.success }}",
"rightValue": "=true"
}
]
}
},
"typeVersion": 2
},
{
"id": "40146447-62b1-4c97-87f6-44db758b4c8d",
"name": "연락된 사용자 기록",
"type": "n8n-nodes-base.googleSheets",
"position": [
40,
-60
],
"parameters": {
"columns": {
"value": {
"post_url": "={{ $('Filter New Comments').item.json.postUrl }}",
"username": "={{ $('Filter New Comments').item.json.username }}",
"timestamp": "={{ $('Filter New Comments').item.json.timestamp }}",
"comment_id": "={{ $('Filter New Comments').item.json.commentId }}",
"message_sent": "={{ $('Filter New Comments').item.json.replyMessage }}"
},
"schema": [
{
"id": "comment_id",
"type": "string",
"display": true,
"required": false,
"displayName": "comment_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "username",
"type": "string",
"display": true,
"required": false,
"displayName": "username",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "message_sent",
"type": "string",
"display": true,
"required": false,
"displayName": "message_sent",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "timestamp",
"type": "string",
"display": true,
"required": false,
"displayName": "timestamp",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "post_url",
"type": "string",
"display": true,
"required": false,
"displayName": "post_url",
"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/1SNZYngGfvIxZJ6VAiwD9Keuj6DugbijLH59vyK4L298/edit#gid=0",
"cachedResultName": "Hoja 1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1SNZYngGfvIxZJ6VAiwD9Keuj6DugbijLH59vyK4L298",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1SNZYngGfvIxZJ6VAiwD9Keuj6DugbijLH59vyK4L298/edit?usp=drivesdk",
"cachedResultName": "respuestas a post de instagram"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "3IOU2VjBnR4hGohx",
"name": "Google Sheets account"
}
},
"typeVersion": 4
},
{
"id": "730bb698-62e4-4944-83c3-982864140daf",
"name": "실패한 응답 로깅",
"type": "n8n-nodes-base.code",
"position": [
40,
100
],
"parameters": {
"jsCode": "// Log failed replies for debugging\nconst failedReply = {\n userId: $('Filter New Comments').item.json.userId,\n username: $('Filter New Comments').item.json.username,\n commentId: $('Filter New Comments').item.json.commentId,\n error: $json.error || 'Unknown error',\n timestamp: new Date().toISOString()\n};\n\nconsole.log('❌ Failed to send reply:', failedReply);\n\nreturn [{ json: failedReply }];"
},
"typeVersion": 2
},
{
"id": "c87fe62f-9024-4827-8c56-65075e00fb23",
"name": "요약 생성",
"type": "n8n-nodes-base.code",
"position": [
260,
240
],
"parameters": {
"jsCode": "// Summary of the monitoring session with proper error handling\nlet totalComments = 0;\nlet newComments = 0;\nlet successfulReplies = 0;\nlet failedReplies = 0;\nlet monitoredPostUrl = '';\n\ntry {\n // Get total comments (handle if node wasn't executed)\n const getPostCommentsData = $('Get Post Comments').first();\n totalComments = getPostCommentsData?.json?.comments?.length || 0;\n} catch (error) {\n console.log('⚠️ Could not get total comments data:', error.message);\n totalComments = 0;\n}\n\ntry {\n // Get new comments (handle if node wasn't executed)\n const filterNewCommentsData = $('Filter New Comments').all();\n newComments = filterNewCommentsData?.length || 0;\n} catch (error) {\n console.log('⚠️ Could not get new comments data:', error.message);\n newComments = 0;\n}\n\ntry {\n // Get successful replies (handle if node wasn't executed)\n const recordContactedData = $('Record Contacted User').all();\n successfulReplies = recordContactedData?.length || 0;\n} catch (error) {\n console.log('⚠️ Could not get successful replies data:', error.message);\n successfulReplies = 0;\n}\n\ntry {\n // Get failed replies (handle if node wasn't executed)\n const logFailedData = $('Log Failed Reply').all();\n failedReplies = logFailedData?.length || 0;\n} catch (error) {\n console.log('⚠️ Could not get failed replies data:', error.message);\n failedReplies = 0;\n}\n\ntry {\n // Get monitored post URL\n const configData = $('Configure Post & Message').first();\n monitoredPostUrl = configData?.json?.postUrl || 'Unknown URL';\n} catch (error) {\n console.log('⚠️ Could not get post URL:', error.message);\n monitoredPostUrl = 'Unknown URL';\n}\n\nconst summary = {\n totalComments,\n newComments,\n successfulReplies,\n failedReplies,\n monitoredPostUrl,\n timestamp: new Date().toISOString(),\n status: 'completed'\n};\n\nconsole.log('📈 Monitoring Summary:', JSON.stringify(summary, null, 2));\n\n// Generate appropriate emoji and message\nconst emoji = successfulReplies > 0 ? '🎉' : failedReplies > 0 ? '⚠️' : totalComments > 0 ? '👀' : '😴';\nlet message = `${emoji} Monitoring cycle complete!`;\n\nif (totalComments > 0) {\n message += ` Found ${totalComments} total comments`;\n \n if (newComments > 0) {\n message += `, ${newComments} new comments`;\n \n if (successfulReplies > 0) {\n message += `, sent ${successfulReplies} replies successfully`;\n }\n \n if (failedReplies > 0) {\n message += `, ${failedReplies} failed`;\n }\n } else {\n message += ', no new comments to process';\n }\n} else {\n message += ' No comments found or error retrieving comments';\n}\n\nconsole.log(message);\nconsole.log('⏰ Next check in 15 minutes...');\nconsole.log('🔄 Workflow will continue monitoring...');\n\nreturn [{\n json: {\n summary,\n message,\n continueMonitoring: true\n }\n}];"
},
"typeVersion": 2
},
{
"id": "1ae9c8df-41b4-42e5-9df9-691fb9b6f2ad",
"name": "게시물 댓글 가져오기",
"type": "n8n-nodes-base.httpRequest",
"position": [
-920,
220
],
"parameters": {
"url": "=https://api.upload-post.com/api/uploadposts/comments",
"options": {
"response": {
"response": {
"responseFormat": "json"
}
}
},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"queryParameters": {
"parameters": [
{
"name": "platform",
"value": "instagram"
},
{
"name": "user",
"value": "={{ $('Configure Post & Message').item.json.profileUsername }}"
},
{
"name": "post_url",
"value": "={{ $('Configure Post & Message').item.json.postUrl }}"
}
]
}
},
"credentials": {
"httpHeaderAuth": {
"id": "peX0mDODPePtl6Vb",
"name": "upload-post vitor "
}
},
"typeVersion": 4.1
},
{
"id": "08822705-3afd-4ea4-8d9e-8874d989507c",
"name": "일정 트리거",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-1520,
340
],
"parameters": {
"rule": {
"interval": [
{
"field": "minutes",
"minutesInterval": 15
}
]
}
},
"typeVersion": 1.2
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "d68f95d6-0596-4d0e-8aa7-498bab2097bc",
"connections": {
"730bb698-62e4-4944-83c3-982864140daf": {
"main": [
[
{
"node": "c87fe62f-9024-4827-8c56-65075e00fb23",
"type": "main",
"index": 0
}
]
]
},
"08822705-3afd-4ea4-8d9e-8874d989507c": {
"main": [
[
{
"node": "c191f69e-4483-409a-b313-2e11e0250e47",
"type": "main",
"index": 0
}
]
]
},
"82aaa8f5-c2fc-49b4-9d69-2b439001c7dd": {
"main": [
[
{
"node": "c191f69e-4483-409a-b313-2e11e0250e47",
"type": "main",
"index": 0
}
]
]
},
"1ae9c8df-41b4-42e5-9df9-691fb9b6f2ad": {
"main": [
[
{
"node": "78881d28-aa34-408d-a6ed-d3578f92c394",
"type": "main",
"index": 0
}
]
]
},
"7e4c9bd5-973f-4a15-941d-239ae9581bd8": {
"main": [
[
{
"node": "40146447-62b1-4c97-87f6-44db758b4c8d",
"type": "main",
"index": 0
}
],
[
{
"node": "730bb698-62e4-4944-83c3-982864140daf",
"type": "main",
"index": 0
}
]
]
},
"78881d28-aa34-408d-a6ed-d3578f92c394": {
"main": [
[
{
"node": "13ad0cdd-7da6-4e57-98e8-28dae0916ed4",
"type": "main",
"index": 0
}
]
]
},
"66a72bd2-4f15-4c01-bbad-27d0ec3ce775": {
"main": [
[
{
"node": "1ae9c8df-41b4-42e5-9df9-691fb9b6f2ad",
"type": "main",
"index": 0
}
]
]
},
"40146447-62b1-4c97-87f6-44db758b4c8d": {
"main": [
[
{
"node": "c87fe62f-9024-4827-8c56-65075e00fb23",
"type": "main",
"index": 0
}
]
]
},
"f20e9a90-f8db-4f42-acdb-1e99295a0a0c": {
"main": [
[
{
"node": "7e4c9bd5-973f-4a15-941d-239ae9581bd8",
"type": "main",
"index": 0
}
]
]
},
"c191f69e-4483-409a-b313-2e11e0250e47": {
"main": [
[
{
"node": "66a72bd2-4f15-4c01-bbad-27d0ec3ce775",
"type": "main",
"index": 0
}
]
]
},
"13ad0cdd-7da6-4e57-98e8-28dae0916ed4": {
"main": [
[
{
"node": "f20e9a90-f8db-4f42-acdb-1e99295a0a0c",
"type": "main",
"index": 0
}
],
[
{
"node": "c87fe62f-9024-4827-8c56-65075e00fb23",
"type": "main",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
중급 - 소셜 미디어
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
OpenAI, Flux, Kling, ElevenLabs의 AI 드라이브短视频 생성기 사용 및 모든 소셜 네트워크에 업로드
완전 자동화된 AI 비디오 생성 및 다중 플랫폼 발행
If
Set
Code
+
If
Set
Code
51 노드Juan Carlos Cavero Gracia
인공지능
Facebook 페이지 댓글 관리 봇: 답글, 삭제, 차단 및 알림
AI 기반 Facebook 댓글 관리: 자동 답글, 삭제, 차단 및 알림
If
Set
Code
+
If
Set
Code
59 노드SpaGreen Creative
소셜 미디어
X 트윗 및 Meta Threads 게시器
Late API 및 Google Sheets를 사용하여 플랫폼 최적화 콘텐츠를 X 및 Threads에 자동 게시
If
Set
Code
+
If
Set
Code
20 노드Fariez
소셜 미디어
Facebook 페이지에 릴스 게시
Google Sheets와 Drive를 사용한 Facebook Reels 게시 자동화
If
Set
Code
+
If
Set
Code
17 노드Đỗ Thành Nguyên
소셜 미디어
Facebook 페이지에 비디오 스토리 게시
Google Drive 및 Sheets를 사용한 비디오 스토리 Facebook 페이지 게시 자동화
If
Set
Code
+
If
Set
Code
16 노드Đỗ Thành Nguyên
소셜 미디어
Supabase, Google 스프레드시트 및 Gmail 기반 자동 사용자 재활성화 시스템
사용Supabase、Google表格및Gmail의자동화用户重新激活系统
Set
Code
Gmail
+
Set
Code
Gmail
14 노드iamvaar
소셜 미디어
워크플로우 정보
난이도
중급
노드 수12
카테고리1
노드 유형7
저자
Juan Carlos Cavero Gracia
@carlosgraciaFollow me in linkedin: https://www.linkedin.com/in/juan-carlos-cavero-gracia/
외부 링크
n8n.io에서 보기 →
이 워크플로우 공유