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

SNS 언급 모니터링 → 브랜드 알림

  • ▸Twitter/X, Reddit에서 브랜드명/키워드 실시간 모니터링
  • ▸신규 언급 발견 시 Slack으로 즉시 알림
  • ▸긍정/부정 언급 자동 분류 후 대응 우선순위 설정

✅사전 준비

  • □Twitter/X API v2 Bearer Token 발급 (https://developer.twitter.com)
  • □Reddit API 자격증명 설정 (https://www.reddit.com/prefs/apps)
  • □모니터링할 키워드 목록 확정
  • □Slack 웹훅 URL 준비

Twitter/X 키워드 검색 API

Node: HTTP Request
Method: GET
URL: https://api.twitter.com/2/tweets/search/recent
Query Parameters:
  query: YOUR_BRAND_NAME -is:retweet lang:ko
  max_results: 10
  tweet.fields: created_at,author_id,public_metrics
Headers:
  Authorization: Bearer YOUR_BEARER_TOKEN

Reddit 키워드 검색

Node: HTTP Request
Method: GET
URL: https://www.reddit.com/search.json
Query Parameters:
  q: YOUR_BRAND_NAME
  sort: new
  limit: 10
  t: day
Headers:
  User-Agent: n8n-brand-monitor/1.0

Slack 알림 포맷

:mega: *브랜드 언급 감지*
플랫폼: {{ $json.platform }}
작성자: @{{ $json.author }}
내용: {{ $json.text.slice(0, 200) }}
링크: {{ $json.url }}
감정: {{ $json.sentiment }}
시간: {{ $json.created_at }}
💡 TIPTwitter/X API 무료 티어는 월 500,000 트윗 읽기로 제한됩니다. 15분마다 폴링하면 월 약 2,880회 호출로 충분합니다.
⚡

워크플로우 JSON

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

📥 n8n 임포트 방법
n8n 화면 우측 상단 메뉴 (⋮) → Import from JSON → 아래 JSON 전체 복사 후 붙여넣기 → Import 클릭
{
  "recipeId": "recipe058",
  "title": "퇴직 오프보딩 체크리스트 자동 생성",
  "chapter": 5,
  "category": "HR & 조직 운영 자동화",
  "difficulty": "⭐⭐",
  "estimatedTime": "35분",
  "usedApps": [
    "Google Sheets",
    "Slack",
    "Gmail"
  ],
  "description": "퇴직자 정보가 시트에 등록되면 IT팀·경리팀·HR팀에 각 부서별 처리 항목이 포함된 Slack 알림을 보내고, 퇴직자에게는 반납 안내 이메일을 자동 발송합니다.",
  "nodes": [
    {
      "id": "trigger_offboard",
      "type": "trigger",
      "service": "Google Sheets",
      "name": "퇴직자 등록 감지",
      "config": {
        "event": "rowAdded",
        "spreadsheetId": "{{$env.HR_SHEET_ID}}",
        "sheetName": "퇴직자목록"
      }
    },
    {
      "id": "notify_it_team",
      "type": "action",
      "service": "Slack",
      "name": "IT팀 처리 항목 알림",
      "config": {
        "operation": "sendMessage",
        "channel": "{{$env.IT_SLACK_CHANNEL}}",
        "message": "🔧 퇴직 처리 요청 — IT팀\n\n👤 퇴직자: {{$json['이름']}} ({{$json['부서']}} / {{$json['직책']}})\n📅 퇴직일: {{$json['퇴직일']}}\n\n✅ IT팀 처리 항목:\n- [ ] 이메일 계정 비활성화\n- [ ] Slack 계정 비활성화\n- [ ] 사내 시스템 접근 권한 회수\n- [ ] 노션·구글 드라이브 접근 권한 회수\n- [ ] 노트북 반납 확인\n- [ ] 보안 카드 회수\n\n처리 완료 후 이 메시지에 ✅ 체크 부탁드립니다!"
      }
    },
    {
      "id": "notify_finance_team",
      "type": "action",
      "service": "Slack",
      "name": "경리팀 처리 항목 알림",
      "config": {
        "operation": "sendMessage",
        "channel": "{{$env.FINANCE_SLACK_CHANNEL}}",
        "message": "💰 퇴직 처리 요청 — 경리팀\n\n👤 퇴직자: {{$json['이름']}} ({{$json['부서']}} / {{$json['직책']}})\n📅 퇴직일: {{$json['퇴직일']}}\n\n✅ 경리팀 처리 항목:\n- [ ] 퇴직금 정산 계산\n- [ ] 마지막 급여 정산\n- [ ] 미사용 연차 수당 정산\n- [ ] 법인카드 회수 및 정산\n- [ ] 4대보험 상실 신고\n\n처리 완료 후 이 메시지에 ✅ 체크 부탁드립니다!"
      }
    },
    {
      "id": "notify_hr_team",
      "type": "action",
      "service": "Slack",
      "name": "HR팀 처리 항목 알림",
      "config": {
        "operation": "sendMessage",
        "channel": "{{$env.HR_SLACK_CHANNEL}}",
        "message": "📋 퇴직 처리 요청 — HR팀\n\n👤 퇴직자: {{$json['이름']}} ({{$json['부서']}} / {{$json['직책']}})\n📅 퇴직일: {{$json['퇴직일']}}\n\n✅ HR팀 처리 항목:\n- [ ] 퇴직 확인서 발급\n- [ ] 경력증명서 발급 (요청 시)\n- [ ] 직원 명단 업데이트\n- [ ] 인수인계 완료 확인\n- [ ] 퇴직 면담 진행\n\n처리 완료 후 이 메시지에 ✅ 체크 부탁드립니다!"
      }
    },
    {
      "id": "send_offboard_email",
      "type": "action",
      "service": "Gmail",
      "name": "퇴직자 반납 안내 이메일",
      "config": {
        "operation": "sendEmail",
        "to": "{{$json['이메일']}}",
        "subject": "[{{$env.COMPANY_NAME}}] 퇴직 처리 안내드립니다",
        "body": "안녕하세요, {{$json['이름']}}님.\n\n그동안 {{$env.COMPANY_NAME}}과 함께해 주셔서 진심으로 감사드립니다.\n\n퇴직일({{$json['퇴직일']}}) 전까지 아래 항목을 처리해 주시기 바랍니다.\n\n📦 반납 필요 물품:\n- 노트북 및 주변기기\n- 사원증 및 보안 카드\n- 법인카드 (해당자)\n\n📝 퇴직 처리 관련 문의:\n{{$env.HR_EMAIL}}\n\n새로운 시작을 진심으로 응원합니다! 🙏\n{{$env.COMPANY_NAME}} HR팀 드림"
      }
    },
    {
      "id": "update_employee_status",
      "type": "action",
      "service": "Google Sheets",
      "name": "직원 명단 상태 업데이트",
      "config": {
        "operation": "updateRow",
        "spreadsheetId": "{{$env.HR_SHEET_ID}}",
        "sheetName": "직원명단",
        "filters": {
          "이메일": "{{$json['이메일']}}"
        },
        "columns": {
          "재직상태": "퇴직",
          "퇴직일": "{{$json['퇴직일']}}"
        }
      }
    }
  ],
  "edges": [
    {
      "from": "trigger_offboard",
      "to": "notify_it_team"
    },
    {
      "from": "trigger_offboard",
      "to": "notify_finance_team"
    },
    {
      "from": "trigger_offboard",
      "to": "notify_hr_team"
    },
    {
      "from": "trigger_offboard",
      "to": "send_offboard_email"
    },
    {
      "from": "send_offboard_email",
      "to": "update_employee_status"
    }
  ],
  "tips": [
    "IT팀·경리팀·HR팀 알림은 병렬로 동시에 발송되므로 하나의 트리거에서 세 노드를 각각 연결하면 돼요.",
    "각 팀의 처리 완료 여부를 추적하려면 Slack 메시지의 체크박스 응답을 Webhook으로 받아 Google Sheets에 기록하는 흐름을 추가하세요.",
    "퇴직일 기준 D-7에 사전 안내 이메일을 보내는 Schedule 워크플로우를 별도로 만들면 더욱 체계적인 오프보딩이 가능해요."
  ],
  "qrUrl": "www.koreaaitimes.com/books/n8n-vol2/recipe058"
}
← 이전 레시피☰ 목차다음 레시피 →