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

월간 마케팅 성과 대시보드 자동 업데이트

  • ▸회의록 텍스트에서 OpenAI로 액션아이템을 자동 추출할 수 있다
  • ▸추출된 액션아이템을 담당자별로 분류해 Notion에 등록할 수 있다
  • ▸담당자에게 Slack DM으로 할일을 자동 전달할 수 있다

✅사전 준비

  • □OpenAI API 자격증명 연결 완료
  • □Notion 자격증명 연결 완료 (할일 데이터베이스 준비)
  • □Slack 자격증명 연결 완료
  • □담당자 이름 ↔ Slack User ID 매핑 테이블 준비
  • □회의록 입력 방법 결정 (Webhook / Google Docs / Notion 페이지)

액션아이템 추출 — OpenAI 프롬프트

Model: gpt-4o-mini
System: 너는 회의록에서 액션아이템을 추출하는 전문가야.

User:
다음 회의록에서 액션아이템을 추출해서 반드시 아래 JSON 배열 형식으로만 응답해.
[
  { "task": "할일 내용", "assignee": "담당자 이름", "deadline": "YYYY-MM-DD 또는 null" }
]

회의록:
{{ $json.meetingNote }}

JSON 파싱 — Code 노드

const raw = $input.first().json.message.content;
// 코드블록 마크다운 제거
const cleaned = raw.replace(/```json|```/g, '').trim();
const items = JSON.parse(cleaned);
return items.map(item => ({ json: item }));

담당자 → Slack ID 매핑 — Code 노드

const slackIds = {
  '김철수': 'U012ABC',
  '이영희': 'U023DEF',
  '박지원': 'U034GHI',
};

const assignee = $json.assignee;
const slackId = slackIds[assignee] ?? null;
return [{ json: { ...$json, slackId } }];

Slack DM 메시지

To:      {{ $json.slackId }}
채널 아닌 DM 발송 시 User 탭에서 ID 입력

메시지:
📋 회의 액션아이템이 배정되었습니다!
할일: {{ $json.task }}
마감: {{ $json.deadline ?? '미정' }}
⚠️ 주의OpenAI가 JSON 외 텍스트를 포함해 응답할 수 있습니다. Code 노드에서 JSON.parse 전에 반드시 마크다운 코드블록(```json)을 제거하는 정제 과정을 넣으세요.
⚡

워크플로우 JSON

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

📥 n8n 임포트 방법
n8n 화면 우측 상단 메뉴 (⋮) → Import from JSON → 아래 JSON 전체 복사 후 붙여넣기 → Import 클릭
{
  "name": "recipe025_monthly_marketing_dashboard",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 8 1 * *"
            }
          ]
        }
      },
      "id": "schedule-025-01",
      "name": "매월 1일 오전 8시",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.1,
      "position": [
        200,
        400
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://analyticsdata.googleapis.com/v1beta/properties/{{ $env.GA4_PROPERTY_ID }}:runReport",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "dateRanges",
              "value": "[{\"startDate\": \"30daysAgo\", \"endDate\": \"yesterday\"}]"
            },
            {
              "name": "metrics",
              "value": "[{\"name\": \"sessions\"}, {\"name\": \"newUsers\"}]"
            }
          ]
        },
        "options": {}
      },
      "id": "http-025-02",
      "name": "GA4 월간 트래픽 수집",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        420,
        200
      ]
    },
    {
      "parameters": {
        "method": "GET",
        "url": "https://us1.api.mailchimp.com/3.0/reports?count=4&sort_field=send_time&sort_dir=DESC",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "options": {}
      },
      "id": "http-025-03",
      "name": "Mailchimp 월간 성과 수집",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        420,
        400
      ]
    },
    {
      "parameters": {
        "method": "GET",
        "url": "=https://www.googleapis.com/youtube/v3/channels?part=statistics&id={{ $env.YOUTUBE_CHANNEL_ID }}&key={{ $env.YOUTUBE_API_KEY }}",
        "options": {}
      },
      "id": "http-025-04",
      "name": "YouTube 월간 성과 수집",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        420,
        600
      ]
    },
    {
      "parameters": {
        "mode": "combine",
        "combinationMode": "mergeByPosition",
        "options": {}
      },
      "id": "merge-025-05",
      "name": "전체 채널 데이터 통합",
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3,
      "position": [
        640,
        400
      ]
    },
    {
      "parameters": {
        "operation": "appendOrUpdate",
        "documentId": {
          "value": "={{ $env.MARKETING_DASHBOARD_SHEET_ID }}"
        },
        "sheetName": {
          "value": "monthly"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "month": "={{ $now.minus({months:1}).format('YYYY-MM') }}",
            "gaSessions": "={{ $('GA4 월간 트래픽 수집').item.json.rows[0].metricValues[0].value }}",
            "gaNewUsers": "={{ $('GA4 월간 트래픽 수집').item.json.rows[0].metricValues[1].value }}",
            "youtubeSubscribers": "={{ $('YouTube 월간 성과 수집').item.json.items[0].statistics.subscriberCount }}",
            "updatedAt": "={{ $now.format('YYYY-MM-DD HH:mm') }}"
          }
        },
        "options": {
          "upsertOptions": {
            "upsertKey": "month"
          }
        }
      },
      "id": "sheets-025-06",
      "name": "대시보드 시트 자동 업데이트",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.4,
      "position": [
        860,
        400
      ]
    },
    {
      "parameters": {
        "resource": "message",
        "operation": "post",
        "channel": "#marketing-team",
        "text": "=📊 지난달 마케팅 성과 보고서가 준비됐어요!\n기간: {{ $now.minus({months:1}).format('YYYY년 M월') }}\n→ 구글 시트에서 전체 리포트를 확인하세요!"
      },
      "id": "slack-025-07",
      "name": "Slack 완료 알림",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2.2,
      "position": [
        1080,
        400
      ]
    }
  ],
  "connections": {
    "매월 1일 오전 8시": {
      "main": [
        [
          {
            "node": "GA4 월간 트래픽 수집",
            "type": "main",
            "index": 0
          },
          {
            "node": "Mailchimp 월간 성과 수집",
            "type": "main",
            "index": 0
          },
          {
            "node": "YouTube 월간 성과 수집",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GA4 월간 트래픽 수집": {
      "main": [
        [
          {
            "node": "전체 채널 데이터 통합",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mailchimp 월간 성과 수집": {
      "main": [
        [
          {
            "node": "전체 채널 데이터 통합",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "YouTube 월간 성과 수집": {
      "main": [
        [
          {
            "node": "전체 채널 데이터 통합",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "전체 채널 데이터 통합": {
      "main": [
        [
          {
            "node": "대시보드 시트 자동 업데이트",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "대시보드 시트 자동 업데이트": {
      "main": [
        [
          {
            "node": "Slack 완료 알림",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "timezone": "Asia/Seoul"
  },
  "meta": {
    "chapter": 2,
    "recipe": "025",
    "title": "월간 마케팅 성과 대시보드 자동 업데이트",
    "difficulty": "⭐⭐⭐",
    "estimatedTime": "60분",
    "apps": [
      "Google Analytics",
      "Mailchimp",
      "YouTube API",
      "Google Sheets",
      "Slack"
    ]
  }
}
← 이전 레시피☰ 목차다음 레시피 →