발행일: 2026-10-06(화) 11:44
← 목차로 돌아가기|하루 30분 n8n 시리즈 ② 실무 자동화 레시피 100
RECIPE 072

소셜미디어 게시물 자동 예약 & 크로스 포스팅

  • ▸Notion 콘텐츠 캘린더에서 예약된 게시물 자동 발행
  • ▸Instagram, Twitter/X, LinkedIn 동시 크로스 포스팅
  • ▸게시물별 성과 수집 및 Notion 업데이트

✅사전 준비

  • □Instagram Business Account + Facebook Graph API 앱 생성
  • □Twitter/X API v2 OAuth 2.0 설정
  • □LinkedIn API 앱 및 Organizations API 접근 권한
  • □Notion 콘텐츠 캘린더 DB (속성: 게시일시, 콘텐츠, 이미지URL, 채널, 상태)

Notion 예약 게시물 조회

Node: Notion (Query Database)
Database ID: YOUR_CONTENT_CALENDAR_DB

Filter:
{
  "and": [
    { "property": "게시일시", "date": { "on_or_before": "{{ $now.toISO() }}" } },
    { "property": "상태", "select": { "equals": "예약" } }
  ]
}

Twitter/X 게시 API

Node: HTTP Request
Method: POST
URL: https://api.twitter.com/2/tweets
Authentication: OAuth 2.0

Body:
{
  "text": "{{ $json.content.slice(0, 280) }}"
}

LinkedIn 게시 API

Node: HTTP Request
Method: POST
URL: https://api.linkedin.com/v2/ugcPosts
Headers:
  Authorization: Bearer YOUR_ACCESS_TOKEN
  X-Restli-Protocol-Version: 2.0.0

Body:
{
  "author": "urn:li:organization:YOUR_ORG_ID",
  "lifecycleState": "PUBLISHED",
  "specificContent": {
    "com.linkedin.ugc.ShareContent": {
      "shareCommentary": { "text": "{{ $json.content }}" },
      "shareMediaCategory": "NONE"
    }
  },
  "visibility": { "com.linkedin.ugc.MemberNetworkVisibility": "PUBLIC" }
}
⚠️ 주의Instagram 자동 포스팅은 개인 계정이 아닌 Business/Creator 계정만 가능하며, Facebook Graph API를 통해서만 지원됩니다. 개인 계정에 직접 포스팅 API는 없습니다.
⚡

워크플로우 JSON

아래 JSON을 복사해 n8n에 바로 임포트하세요

📥 n8n 임포트 방법
n8n 화면 우측 상단 메뉴 (⋮) → Import from JSON → 아래 JSON 전체 복사 후 붙여넣기 → Import 클릭
{
  "recipeId": "recipe072",
  "title": "유튜브 댓글 인사이트 자동 수집",
  "chapter": 7,
  "category": "콘텐츠 & 미디어 자동화",
  "difficulty": "⭐⭐",
  "estimatedTime": "35분",
  "usedApps": [
    "YouTube Data API",
    "OpenAI",
    "Google Sheets"
  ],
  "description": "주 2회(화·금) 오전 10시에 YouTube API로 최근 영상의 상위 댓글 50개를 자동 수집하고, OpenAI가 댓글을 분석해 시청자가 가장 원하는 다음 영상 주제 3가지를 추천합니다. 결과는 Google Sheets에 기록되고 Slack으로 요약 발송됩니다.",
  "nodes": [
    {
      "id": "node1",
      "type": "n8n-nodes-base.scheduleTrigger",
      "name": "주 2회 오전 10시 실행",
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 10 * * 2,5"
            }
          ]
        }
      }
    },
    {
      "id": "node2",
      "type": "n8n-nodes-base.httpRequest",
      "name": "최근 영상 댓글 50개 수집",
      "parameters": {
        "method": "GET",
        "url": "https://www.googleapis.com/youtube/v3/commentThreads",
        "queryParameters": {
          "part": "snippet",
          "videoId": "={{$env.YOUTUBE_VIDEO_ID}}",
          "maxResults": "50",
          "order": "relevance",
          "key": "={{$env.YOUTUBE_API_KEY}}"
        }
      }
    },
    {
      "id": "node3",
      "type": "n8n-nodes-base.openAi",
      "name": "댓글 분석 & 다음 주제 추천",
      "parameters": {
        "resource": "chat",
        "model": "gpt-4o-mini",
        "messages": {
          "values": [
            {
              "role": "user",
              "content": "다음 유튜브 댓글들을 분석해서, 시청자들이 가장 원하는 다음 영상 주제 3가지를 추천해주세요.\n결과는 JSON 형식으로: {\"topics\": [{\"rank\": 1, \"topic\": \"\", \"reason\": \"\"}]}\n\n댓글 목록:\n{{$json['items'].map(i => i.snippet.topLevelComment.snippet.textOriginal).join('\\n')}}"
            }
          ]
        }
      }
    },
    {
      "id": "node4",
      "type": "n8n-nodes-base.googleSheets",
      "name": "인사이트 시트 기록",
      "parameters": {
        "operation": "appendOrUpdate",
        "spreadsheetId": "={{$env.CONTENT_IDEA_SHEET_ID}}",
        "sheetName": "유튜브인사이트",
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "분석일": "={{$now.format('YYYY-MM-DD')}}",
            "1순위주제": "={{JSON.parse($json['message']['content'])['topics'][0]['topic']}}",
            "2순위주제": "={{JSON.parse($json['message']['content'])['topics'][1]['topic']}}",
            "3순위주제": "={{JSON.parse($json['message']['content'])['topics'][2]['topic']}}"
          }
        }
      }
    },
    {
      "id": "node5",
      "type": "n8n-nodes-base.slack",
      "name": "Slack 요약 발송",
      "parameters": {
        "channel": "={{$env.CONTENT_SLACK_CHANNEL}}",
        "text": "🎬 유튜브 댓글 인사이트 분석 완료!\n\n시청자가 원하는 다음 주제:\n1️⃣ {{JSON.parse($node['댓글 분석 & 다음 주제 추천'].json['message']['content'])['topics'][0]['topic']}}\n2️⃣ {{JSON.parse($node['댓글 분석 & 다음 주제 추천'].json['message']['content'])['topics'][1]['topic']}}\n3️⃣ {{JSON.parse($node['댓글 분석 & 다음 주제 추천'].json['message']['content'])['topics'][2]['topic']}}"
      }
    }
  ],
  "envVariables": {
    "YOUTUBE_VIDEO_ID": "분석할 유튜브 영상 ID",
    "YOUTUBE_API_KEY": "YouTube Data API 키",
    "CONTENT_IDEA_SHEET_ID": "Google Sheets 콘텐츠 아이디어 시트 ID",
    "CONTENT_SLACK_CHANNEL": "콘텐츠 팀 Slack 채널 ID"
  },
  "tips": [
    "특정 영상 하나가 아니라 채널 전체 최신 영상을 분석하려면 YouTube API의 search.list 엔드포인트로 최근 영상 목록을 먼저 가져온 뒤 Loop Over Items 노드로 각 영상을 순차 분석하세요.",
    "부정적인 댓글을 별도로 감지해 CS팀에 전달하려면 OpenAI 프롬프트에 감성 분석 조건을 추가하세요.",
    "레시피 077(조회수 목표 알림)과 함께 운영하면 영상 성과와 시청자 피드백을 동시에 관리할 수 있어요."
  ],
  "qrUrl": "www.koreaaitimes.com/books/n8n-vol2/recipe072"
}
← 이전 레시피☰ 목차다음 레시피 →