W4 민원 이메일 AI 자동 분류 0%
🤖 Phase 2 시작 · AI Agent 합류
W4

고객 민원·문의 이메일 AI 자동 분류 라우팅

n8n AI Agent Node + OpenAI API — AI가 읽고, 분류하고, 전달합니다

AI Agent Node
OpenAI API
Gmail
Sheets
약 90분
Phase 2 · AI가 합류합니다

🤖 Phase 1 vs Phase 2 — 무엇이 달라지나?

📊
Phase 1 (W1~W3): n8n이 규칙 기반으로 동작. "연체일수 > 90이면" 처럼 우리가 조건을 정해줘야 했음.

Phase 2 (W4~W6): n8n 안에 OpenAI AI가 들어가서 판단까지 해줌. "이 이메일이 무슨 내용인지 읽고 분류해줘" — 조건을 우리가 정할 필요 없음!
💡 Phase 2 핵심 개념: AI가 "판단"하고, n8n이 "실행"한다
W2에서는 "연체 30일 이하면 1등급"이라고 우리가 규칙을 만들었습니다. 숫자니까 가능했죠.

하지만 이메일 내용은? "제 카드가 없어졌어요""카드를 분실했습니다"는 같은 뜻인데 표현이 다릅니다. 이런 건 규칙(IF/Filter)으로 분류할 수 없습니다.

OpenAI AI는 이메일을 읽고 이해해서 "이건 카드분실이다"라고 판단합니다. n8n은 그 판단 결과를 받아서 담당 팀에 전달합니다.
Context · 왜 이 실습을 하나요?

🏢 상황 설정: 이메일이 쏟아지는 아침

👨‍💼
한지민 대리
ER은행 고객지원팀 · 민원 접수 담당
매일 아침 대표 이메일(cs@ERbank.com)에 30~50건의 고객 문의가 쌓여 있습니다. 한지민 대리는 하나씩 열어보고, "이건 대출 문의니까 여신팀", "이건 카드 분실이니까 카드팀", "이건 이자 항의니까 수신팀"… 식으로 내용을 읽고 판단해서 해당 팀 이메일로 포워딩합니다. 하루 1~2시간이 이 분류 작업에 사라집니다.
😩 한지민 대리의 고민
"같은 카드 분실인데 '카드가 없어졌어요', '카드를 잃어버렸습니다', '카드 도난 신고' 등 표현이 다 달라서 키워드 필터로는 못 잡아요. 그리고 가끔 급한 부정거래 신고를 놓쳐서 큰일 날 뻔한 적도 있어요."

📊 민원 분류 체계 (5종)

🏦
대출문의
→ 여신영업팀
💳
카드분실
→ 카드팀 (긴급)
📈
이자항의
→ 수신팀
🚨
부정거래신고
→ 보안팀 (최긴급)
💬
일반문의
→ 고객지원팀
❌ Before · 수작업
1. 이메일 하나씩 열기
2. 내용 읽고 유형 판단
3. 담당 팀 이메일 포워딩
4. 분류 이력 시트 기록
→ 하루 1~2시간 + 오분류 위험
✅ After · AI 자동 분류
1. 이메일 수신 (자동 감지)
2. OpenAI - GPT가 읽고 분류 (자동)
3. 담당 팀 포워딩 (자동)
4. 분류 이력 기록 (자동)
→ 하루 0분 + 분류 정확도 95%+
Goal · 오늘 만들 워크플로

🎯 완성 워크플로 구조

Gmail Trigger
cs@ERbank.com에 새 이메일 도착 → n8n 자동 감지
🆕 AI Agent Node (OpenAI)
이메일 제목+본문을 OpenAI에게 전달 → "대출문의 / 카드분실 / 이자항의 / 부정거래신고 / 일반문의" 중 하나로 분류 + 긴급도 판정 + 1줄 요약
Set Node — AI 결과 파싱
OpenAI 응답에서 분류·긴급도·요약을 필드로 분리
Switch Node — 팀별 라우팅
분류 결과에 따라 5개 팀 이메일로 자동 포워딩
Gmail × 5 — 팀별 포워딩
각 팀 이메일에 원본 + AI 요약 포함 전달
Google Sheets — 분류 이력 기록
모든 분류 결과를 시트에 자동 기록 (날짜·제목·분류·긴급도·담당팀)
💡 W2의 Filter vs W4의 AI Agent
W2에서는 "연체일수 ≤ 30"처럼 숫자 조건으로 분류했습니다. 사람이 규칙을 정의했죠.
W4에서는 OpenAI가 이메일 텍스트를 이해해서 분류합니다. "카드가 없어졌어요" = "카드분실"이라고 AI가 판단합니다.

규칙 기반 → AI 기반으로의 첫 전환입니다!
Preparation · 시작 전 준비

📋 사전 준비 (15분)

A
OpenAI API Key 발급
🆕 처음 하는 작업! AI를 연결하는 열쇠
🆕 First Time

API Key란?

API Key는 "n8n이 OpenAI를 사용해도 된다"는 출입증입니다. Credential과 같은 개념이지만, Google 로그인 대신 텍스트 코드를 직접 입력합니다.

1. https://platform.openai.com/settings 접속 → 회원가입/로그인

2. 좌측 메뉴 "API Keys""Create new secret Key"

3. 이름: n8n-ERbank → 생성된 키 복사 (sk-ant-...로 시작)

⚠️ API Key 보안 주의!
· 키를 다른 사람에게 공유하지 마세요 (비밀번호와 같습니다)
· 키를 잃어버리면 새로 발급하면 됩니다

4. n8n에서 Settings → Credentials → Add Credential"OpenAI" 검색

5. API Key 필드에 복사한 키 붙여넣기 → Save

B
테스트 이메일 5건 준비
각 분류 유형별 테스트 이메일 작성

아래 5종 이메일을 직접 보내서 테스트합니다. 본인 Gmail에서 본인에게 보내도 됩니다.

C
분류 이력 시트 만들기
AI 분류 결과를 기록할 시트 생성

Google Sheets에 「민원분류이력」 시트를 만들고 헤더를 입력합니다:

A: 접수일시B: 보낸사람C: 제목D: AI분류E: 긴급도F: AI요약G: 담당팀
(데이터 없음 — 자동 채워질 예정)
Step-by-Step · 모범답안 가이드

🔧 실습: 워크플로 만들기 (60분)

1
Gmail Trigger — 새 이메일 감지
⏱ 약 5분 · 🆕 이메일 수신 트리거
🆕 New Trigger

W1~W3는 Sheets/Forms 트리거를 썼지만, 오늘은 Gmail Trigger입니다.

// Gmail Trigger 설정 Credential: Gmail OAuth2 Poll Times: Every Minute Simple: false ← 이메일 본문까지 가져오기! Label: INBOX (또는 특정 라벨)
⚠️ Simple 옵션을 반드시 false로!
Simple: true면 제목만 가져옵니다. AI가 본문까지 읽어야 정확하게 분류할 수 있으므로 반드시 false로 설정하세요.

"Test step" → Output에 이메일 제목(subject)과 본문(text 또는 html)이 모두 나오면 성공.

2
🤖 AI Agent Node — OpenAI로 이메일 분류
⏱ 약 20분 · 🆕🆕🆕 오늘의 핵심! AI 노드 첫 사용!
🆕🆕🆕 Core Concept

AI Agent Node란?

n8n의 AI Agent Node는 워크플로 안에서 OpenAI를 호출하는 노드입니다. 쉽게 말해 "이 데이터를 GPT에게 보내고 답변을 받아라"입니다.

엑셀로 비유하면?
엑셀의 VLOOKUP은 "이 값을 다른 표에서 찾아와라"죠.
AI Agent Node는 "이 텍스트를 AI에게 보내서 분류해 달라고 하고, 결과를 받아와라"입니다.

VLOOKUP이 표를 참조하듯, AI Agent는 OpenAI의 지능을 참조합니다.

📝 노드 추가 & 기본 설정

1. Gmail Trigger 뒤에 "AI Agent" 노드를 추가·연결합니다.

2. 기본 설정:

// AI Agent Chat Model 설정 Chat Model: OpenAI ← 모델 연결 (아래 참조)

3. AI Agent 노드 하단에 "Chat Model" 서브노드가 있습니다. 클릭해서:

// Chat Model (OpenAI) 설정 Credential: 방금 등록한 OpenAI API Key Model: gpt-5-mini ← 빠르고 정확한 모델

📝 프롬프트 작성 — 가장 중요한 부분!

System Message에 아래 프롬프트를 입력합니다:

📋 System Prompt (시스템 메시지)
당신은 ER은행 고객 민원 이메일 분류 전문가입니다. 고객이 보낸 이메일의 제목과 본문을 읽고, 아래 5가지 유형 중 하나로 분류하세요. 【분류 유형】 1. 대출문의 — 대출 신청, 금리, 한도, 상환 관련 2. 카드분실 — 카드 분실, 도난, 정지 요청 3. 이자항의 — 예금/적금 이자, 금리 불만 4. 부정거래신고 — 본인 모르는 거래, 사기 의심, 해킹 5. 일반문의 — 영업시간, 서류, 계좌개설 등 기타 【담당팀 유형】 1. 대출문의 : 여신영업팀, 여신상담팀, 대출상담센터 2. 카드분실 : 카드고객센터, 카드분실신고센터, 카드운영팀 3. 이자항의 : 수신팀, 예금상품팀, 고객민원팀 4. 부정거래신고 : 금융사기대응팀, 이상거래탐지팀, 전자금융보안팀, 사고신고센터 5. 일반문의 : 고객센터, 영업지원팀, 지점창구, 고객상담팀 【긴급도 판정】 - 긴급: 카드분실, 부정거래신고 - 보통: 이자항의, 대출문의 - 낮음: 일반문의 【응답 형식 — 반드시 아래 JSON 형식으로만 응답】 { "분류": "대출문의", "긴급도": "보통", "요약": "중소 제조업체 운전자금 대출 한도·금리 문의", "담당팀": "여신영업팀" } JSON 외에 다른 텍스트를 절대 추가하지 마세요.

User Message (사용자 메시지)에:

// User Message (Expression 모드) 이메일 제목: {{ $json.subject }} 이메일 본문: {{ $json.text }}

✅ 테스트 확인

"Test step" → GPT가 JSON 형태로 분류 결과를 반환합니다:

🤖 GPT 응답 예시
{ "분류": "카드분실", "긴급도": "긴급", "요약": "지갑 분실로 인한 ER카드 긴급 정지 요청", "담당팀": "카드팀" }
🎉 축하합니다! AI가 이메일을 읽고 분류했습니다! 이것이 "AI Agent"의 핵심입니다. 프롬프트만 잘 쓰면 GPT는 거의 모든 텍스트 판단 작업을 수행합니다.
3
Set 노드 — AI 응답 JSON 파싱
⏱ 약 10분 · GPT 응답을 개별 필드로 분리

GPT가 반환한 JSON 문자열을 n8n이 쓸 수 있는 개별 필드로 분리합니다.

// Set 노드 — AI 응답 파싱 // GPT의 응답은 $json.output 또는 $json.text에 있습니다 AI분류: {{ JSON.parse($json.output).분류 }} 긴급도: {{ JSON.parse($json.output).긴급도 }} AI요약: {{ JSON.parse($json.output).요약 }} 담당팀: {{ JSON.parse($json.output).담당팀 }} 원본제목: {{ $('Gmail Trigger').item.json.subject }} 보낸사람: {{ $('Gmail Trigger').item.json.from.value[0].address }} 접수일시: {{ $now.format('yyyy-MM-dd HH:mm') }}
💡 JSON.parse()가 뭔가요?
GPT는 응답을 텍스트 문자열로 보내줍니다. 겉보기엔 JSON이지만, n8n은 이걸 그냥 "글자"로 인식해요.

JSON.parse()"이 텍스트를 데이터로 바꿔라"라는 명령입니다. 바꾼 뒤에야 .분류처럼 개별 값에 접근할 수 있습니다.

엑셀로 치면, CSV 파일을 열 때 "텍스트를 열로 나누기"를 하는 것과 같습니다.
⚠️ AI 응답 위치가 다를 수 있어요!
AI Agent Node 버전에 따라 응답이 $json.output, $json.text, 또는 $json.response.text에 있을 수 있습니다.
"Test step"으로 AI 노드를 실행한 뒤 Output 패널에서 응답이 어떤 필드에 있는지 확인하세요!
4
Switch Node — 분류 결과별 5경로 라우팅
⏱ 약 10분 · W2의 Filter 3개를 Switch 1개로!
💡 W2 복습: Filter vs Switch
W2에서는 Filter 노드 3개를 따로 만들었죠? Switch 노드는 하나의 노드로 N개 경로를 분기합니다. 더 깔끔!

Filter = "이 조건 맞으면 통과" (하나씩 따로)
Switch = "이 값이 A면 1번 출구, B면 2번 출구, C면 3번 출구" (한꺼번에)
// Switch 노드 설정 Mode: Rules Data Type: String Value: {{ $json.AI분류 }} ← Set 노드에서 파싱한 분류값 Output 0 (대출문의): Operation: Equal Value: 대출문의 Output 1 (카드분실): Operation: Equal Value: 카드분실 Output 2 (이자항의): Operation: Equal Value: 이자항의 Output 3 (부정거래신고): Operation: Equal Value: 부정거래신고 Output 4 (Fallback — 일반문의): Fallback: true ← 위 4개에 안 걸리면 여기로

Switch 노드의 각 Output(0~4)에서 해당 팀 Gmail 노드를 연결합니다.

5
Gmail × 5 — 팀별 포워딩 이메일
⏱ 약 10분 · AI 요약 포함 전달

5개 Gmail 노드는 받는 사람(To)만 다르고 구조는 동일합니다. 하나를 만들고 복사(Ctrl+D)하면 빠릅니다.

분류받는 사람 (To)제목 앞 태그
대출문의loan@ERbank.com[대출문의]
카드분실card@ERbank.com🚨[긴급·카드분실]
이자항의deposit@ERbank.com[이자항의]
부정거래security@ERbank.com🚨🚨[최긴급·부정거래]
일반문의cs@ERbank.com[일반문의]

이메일 본문 템플릿 (공통):

<div style="font-family:sans-serif;max-width:560px;padding:24px"> <div style="background:#f3f0ff;border-left:4px solid #7c3aed;padding:14px;border-radius:0 8px 8px 0;margin-bottom:16px"> <strong>🤖 AI 자동 분류 결과</strong><br> 분류: <strong>{{ $json.AI분류 }}</strong> · 긴급도: {{ $json.긴급도 }}<br> 요약: {{ $json.AI요약 }} </div> <hr style="border:1px solid #eee"> <p><strong>원본 이메일 정보</strong></p> <p>보낸 사람: {{ $json.보낸사람 }}</p> <p>제목: {{ $json.원본제목 }}</p> <p style="color:#888;font-size:12px;margin-top:20px">이 메일은 n8n + ChatGPT AI에 의해 자동 분류·전달되었습니다.</p> </div>
6
Sheets 이력 기록 + 전체 테스트
⏱ 약 15분 · 분류 로그 기록 + 5건 테스트

📝 Google Sheets 노드 (이력 기록)

Set 노드의 출력(●)에서 별도의 선으로 Sheets 노드를 연결합니다. (Switch와 병렬)

// Google Sheets 노드 — 분류 이력 기록 Credential: Google Sheets OAuth2 Operation: Append Row Document: 민원분류이력 Sheet: Sheet1 // Column Mapping: 접수일시: {{ $json.접수일시 }} 보낸사람: {{ $json.보낸사람 }} 제목: {{ $json.원본제목 }} AI분류: {{ $json.AI분류 }} 긴급도: {{ $json.긴급도 }} AI요약: {{ $json.AI요약 }} 담당팀: {{ $json.담당팀 }}

🧪 전체 테스트

1. "Test workflow" 클릭

2. 준비한 테스트 이메일 5건을 하나씩 보냅니다

3. 확인 포인트:

· 이메일마다 다른 Switch 출구가 활성화되는가?
· 해당 팀 이메일에 AI 요약이 포함된 전달 메일이 도착하는가?
· 민원분류이력 시트에 7개 열이 모두 채워지는가?
· "카드 분실"과 "부정거래" 이메일의 긴급도가 "긴급"으로 나오는가?

🔧 자주 발생하는 문제

GPT가 JSON이 아닌 텍스트를 반환해요
System Prompt 마지막 줄 "JSON 외에 다른 텍스트를 절대 추가하지 마세요"가 빠졌는지 확인. 또는 Max Tokens를 300 이상으로 설정했는지 확인.
JSON.parse() 에러
GPT가 JSON 앞뒤에 ```json 마크다운을 붙이는 경우가 있습니다. Set 노드에서 $json.output.replace(/```json|```/g, '').trim()으로 정리 후 parse 하세요.
Switch에서 어떤 출구로도 안 가요
AI가 "카드 분실" (공백 포함)로 응답했는데 Switch 조건이 "카드분실" (공백 없음)인 경우. 프롬프트에서 분류 유형을 정확히 지정하고, Switch 조건값과 일치시키세요.
Self-Check · 완료 확인

✅ W4 실습 완료 체크리스트

OpenAI API Key를 발급하고 n8n에 등록했다
AI Agent Node에서 GPT가 JSON으로 분류 결과를 반환한다
Set 노드에서 JSON.parse()로 분류·긴급도·요약이 분리된다
Switch 노드에서 5개 경로가 분류에 따라 정확히 분기된다
각 팀 이메일에 AI 요약이 포함된 전달 메일이 도착한다
민원분류이력 시트에 모든 분류 결과가 자동 기록된다
5건 테스트 이메일이 모두 올바른 팀으로 분류되었다
워크플로를 Active로 전환했다
Key Concepts · 오늘 배운 것

📌 W4 핵심 개념 정리

AI
AI Agent Node
n8n 워크플로 안에서 GPT를 호출하는 노드. 프롬프트(지시문)를 보내고 응답을 받습니다. "AI가 판단, n8n이 실행" 구조의 핵심.
P
프롬프트 (Prompt)
AI에게 보내는 지시문. "역할 부여 + 분류 기준 + 출력 형식"을 명확히 적어야 정확한 결과가 나옵니다. 프롬프트 품질 = AI 성능입니다.
J
JSON.parse()
AI의 텍스트 응답을 n8n이 쓸 수 있는 데이터 구조로 변환. AI에게 JSON 형식으로 응답하라고 지시한 뒤, parse로 개별 필드를 추출합니다.
S
Switch 노드
Filter 여러 개 대신 하나의 노드로 N경로 분기. "이 값이 A면 1번, B면 2번…" 방식. W2의 Filter 3개 = Switch 1개와 동일.
🎯 Phase 2 프롬프트 설계 3원칙
1. 역할: "당신은 ~전문가입니다" — AI에게 맥락 부여
2. 규칙: 분류 기준, 판단 조건을 명확하게 나열
3. 형식: JSON 등 정해진 형식으로 출력하라고 강제 — n8n이 결과를 파싱할 수 있도록
Next Week Preview

👉 W5 미리보기

🔀
여신 신청 금액·등급별 자동 승인 경로 분기
AI 분석 + Switch 3경로: 자동승인 / 팀장승인 / 본부위임

W5에서는 GPT가 신용등급과 업종 위험도를 분석하고, 그 결과와 금액 조건을 결합해 여신 승인 경로를 자동 분기합니다. AI 판단 + 규칙 판단이 합쳐진 하이브리드 분기를 배웁니다.

n8n IF/Switch OpenAI API Slack
ER은행 AX 업무혁신 과정 · Track 1 · W4 실습 가이드 · 2026