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

VIP 고객 문의 → 즉시 에스컬레이션

  • ▸Webhook으로 고객 문의를 수신해 OpenAI로 1차 답변을 자동 생성할 수 있다
  • ▸FAQ 데이터베이스를 참조해 정확도 높은 답변을 만들 수 있다
  • ▸생성된 답변을 담당자 검토 후 발송하는 승인 플로우를 구현할 수 있다

✅사전 준비

  • □OpenAI API 자격증명 연결 완료
  • □Google Sheets에 FAQ 데이터베이스 구축 (질문 유형 / 답변 템플릿 / 담당팀)
  • □Gmail 또는 Slack 자격증명 연결 완료 (담당자 검토 알림용)
  • □고객 문의 수신 채널 결정 (Webhook / Gmail / Typeform)

FAQ 컨텍스트 주입 — Code 노드

const faqs = $('Google Sheets').all().map(i => i.json);
const inquiry = $('Webhook').first().json.message;

// 관련 FAQ 상위 3개 추출 (키워드 매칭)
const relevant = faqs
  .filter(f => inquiry.includes(f.키워드) || f.키워드.split(',').some(k => inquiry.includes(k.trim())))
  .slice(0, 3)
  .map(f => `Q: ${f.질문}\nA: ${f.답변}`)
  .join('\n\n');

return [{ json: { inquiry, faqContext: relevant || '관련 FAQ 없음' } }];

1차 답변 생성 — OpenAI 프롬프트

Model: gpt-4o-mini

System:
너는 친절한 고객 서비스 담당자야.
아래 FAQ를 참고해서 고객 문의에 답변해줘.
답변은 공손하고 명확하게, 3~5문장으로 작성해.
모르면 '담당자에게 연결해드리겠습니다'라고 답변해.

FAQ 참고 자료:
{{ $json.faqContext }}

User:
고객 문의: {{ $json.inquiry }}

담당자 검토 요청 — Slack 메시지

📬 *고객 문의 1차 답변 검토 요청*

*문의 내용:*
{{ $json.inquiry }}

*AI 초안:*
{{ $json.draftReply }}

승인하려면 아래 링크에서 발송하세요:
{{ $json.approveUrl }}
💡 TIP승인 플로우는 n8n의 Wait 노드(Webhook 재수신 대기)를 활용하면 구현할 수 있어요. 담당자가 승인 버튼 클릭 시 Webhook URL로 신호가 오면 Wait가 해제되어 이메일이 발송됩니다.
⚡

워크플로우 JSON

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

📥 n8n 임포트 방법
n8n 화면 우측 상단 메뉴 (⋮) → Import from JSON → 아래 JSON 전체 복사 후 붙여넣기 → Import 클릭
{
  "recipeId": "recipe043",
  "title": "VIP 고객 문의 → 즉시 에스컬레이션",
  "chapter": 4,
  "category": "고객 응대 자동화",
  "difficulty": "⭐⭐",
  "estimatedTime": "30분",
  "usedApps": [
    "Gmail",
    "Google Sheets",
    "Slack"
  ],
  "description": "VIP 고객 이메일 명단을 구글 시트로 관리하고, 해당 고객의 문의 이메일이 수신되는 즉시 팀장 Slack DM에 이메일 전문과 함께 긴급 알림을 보냅니다.",
  "nodes": [
    {
      "id": "trigger_gmail",
      "type": "trigger",
      "service": "Gmail",
      "name": "새 이메일 감지",
      "config": {
        "event": "messageReceived",
        "pollInterval": "every 5 minutes",
        "filters": {
          "to": "{{$env.SUPPORT_EMAIL}}"
        }
      }
    },
    {
      "id": "read_vip_list",
      "type": "action",
      "service": "Google Sheets",
      "name": "VIP 명단 조회",
      "config": {
        "operation": "readRows",
        "spreadsheetId": "{{$env.VIP_SHEET_ID}}",
        "sheetName": "VIP고객목록",
        "columns": [
          "이메일",
          "고객명",
          "등급",
          "담당자슬랙ID"
        ]
      }
    },
    {
      "id": "check_vip",
      "type": "condition",
      "service": "IF",
      "name": "VIP 여부 확인",
      "config": {
        "condition": "{{$node['read_vip_list'].json.map(row => row['이메일']).includes($json['from']['value'][0]['address'])}}"
      }
    },
    {
      "id": "notify_manager",
      "type": "action",
      "service": "Slack",
      "name": "팀장 즉시 알림",
      "config": {
        "operation": "sendDM",
        "userId": "{{$env.MANAGER_SLACK_ID}}",
        "message": "⭐ VIP 고객 문의 도착!\n\n👤 고객명: {{$node['check_vip'].json['고객명']}}\n📧 이메일: {{$json['from']['value'][0]['address']}}\n📌 제목: {{$json['subject']}}\n\n💬 내용 요약:\n{{$json['text'].slice(0, 300)}}...\n\n👉 즉시 확인 부탁드립니다!"
      }
    },
    {
      "id": "no_action",
      "type": "noOp",
      "name": "일반 고객 — 스킵",
      "config": {}
    }
  ],
  "edges": [
    {
      "from": "trigger_gmail",
      "to": "read_vip_list"
    },
    {
      "from": "read_vip_list",
      "to": "check_vip"
    },
    {
      "from": "check_vip",
      "to": "notify_manager",
      "branch": "true"
    },
    {
      "from": "check_vip",
      "to": "no_action",
      "branch": "false"
    }
  ],
  "tips": [
    "VIP 명단 시트는 '이메일' 열을 기준으로 검색하므로 이메일 주소를 정확히 입력해두세요.",
    "담당자가 여러 명일 경우 VIP 시트에 '담당자슬랙ID' 열을 추가하고 해당 담당자에게 직접 DM을 보낼 수 있어요.",
    "알림 메시지에 Zendesk 또는 구글 시트 티켓 링크를 함께 첨부하면 팀장이 바로 상황을 파악할 수 있어요."
  ],
  "qrUrl": "www.koreaaitimes.com/books/n8n-vol2/recipe043"
}
← 이전 레시피☰ 목차다음 레시피 →