n8n + Claude API로 문의 자동 분류 파이프라인 구축하기
문의가 들어오면 24시간 안에 분류·제안서 초안이 생기는 자동화 구조
왜 문의 분류를 자동화했나
문의가 하루에 1~2건이라면 직접 읽고 분류해도 됩니다. 하지만 각 문의에 적절히 응답하려면 내용을 분석하고, 어떤 서비스에 해당하는지 판단하고, 초안을 작성하는 과정이 필요합니다.
이 과정을 사람이 매번 처음부터 하면 반복이 발생합니다. 반복은 자동화의 신호입니다.
gachiham.com의 /work 문의 파이프라인은 이렇게 구성됩니다:
- 사용자가
/work폼을 제출 - Supabase에 저장 + Claude API로 서비스 유형 자동 분류
- 의뢰자에게 접수 이메일 + 진행 링크 발송
- Amos에게 분류 결과 포함 알림 이메일 발송
이 글은 이 구조를 n8n으로 확장하는 방법을 설명합니다.
전제 조건
- Supabase 프로젝트 (PostgreSQL DB)
- Anthropic API 키
- n8n 셀프호스팅 또는 n8n.cloud 계정
- Resend 계정 (이메일 발송)
파이프라인 전체 구조
Supabase Trigger (INSERT on inquiries)
↓
Claude API (서비스 유형 분류)
↓
Supabase UPDATE (ai_category 저장)
↓
Resend (의뢰자 이메일 + 관리자 알림)
Step 1: Supabase Webhook 설정
Supabase 대시보드 → Database → Webhooks에서 새 웹훅을 만듭니다.
- 이름:
new-inquiry-trigger - 테이블:
inquiries - 이벤트:
INSERT - URL: n8n 웹훅 엔드포인트 (Step 2에서 생성)
Step 2: n8n 워크플로우 구성
노드 1: Webhook (트리거)
n8n에서 새 워크플로우를 만들고 Webhook 노드를 추가합니다.
- HTTP Method: POST
- Path:
/inquiry-received - Response Mode: Immediately
이 노드가 Supabase에서 보낸 INSERT 이벤트를 수신합니다.
노드 2: Claude API 분류
HTTP Request 노드로 Anthropic API를 호출합니다.
{
"method": "POST",
"url": "https://api.anthropic.com/v1/messages",
"headers": {
"x-api-key": "{{ $env.ANTHROPIC_API_KEY }}",
"anthropic-version": "2023-06-01",
"content-type": "application/json"
},
"body": {
"model": "claude-sonnet-4-5",
"max_tokens": 200,
"messages": [
{
"role": "user",
"content": "다음 문의를 분석해 서비스 유형을 분류하세요.\n유형: homepage | web-service | custom-software | ai-automation | complex\n\n업무 어려움: {{ $json.record.pain_point }}\n기대 효과: {{ $json.record.desired_outcome }}\n\nJSON 형식으로만 응답: {\"category\": \"유형\", \"reason\": \"이유 한 문장\"}"
}
]
}
}
노드 3: 분류 결과 파싱
Code 노드로 Claude 응답을 파싱합니다.
const response = $json.content[0].text
const parsed = JSON.parse(response)
return [{
category: parsed.category,
reason: parsed.reason,
inquiry_id: $('Webhook').item.json.record.id
}]
노드 4: Supabase UPDATE
HTTP Request 노드로 Supabase REST API를 호출해 분류 결과를 저장합니다.
{
"method": "PATCH",
"url": "https://[your-project].supabase.co/rest/v1/inquiries?id=eq.{{ $json.inquiry_id }}",
"headers": {
"apikey": "{{ $env.SUPABASE_SERVICE_ROLE_KEY }}",
"Authorization": "Bearer {{ $env.SUPABASE_SERVICE_ROLE_KEY }}"
},
"body": {
"ai_category": "{{ $json.category }}"
}
}
노드 5: 이메일 발송 (Resend)
HTTP Request 노드로 Resend API를 호출합니다.
{
"method": "POST",
"url": "https://api.resend.com/emails",
"headers": {
"Authorization": "Bearer {{ $env.RESEND_API_KEY }}"
},
"body": {
"from": "no-reply@gachiham.com",
"to": "{{ $('Webhook').item.json.record.email }}",
"subject": "[가치함께 AI] 의뢰가 접수됐습니다",
"html": "<p>안녕하세요, {{ $('Webhook').item.json.record.name }}님.<br>의뢰가 접수됐습니다. 진행 상황은 아래 링크에서 확인하실 수 있습니다.</p><p><a href='https://gachiham.com/work/{{ $('Webhook').item.json.record.access_token }}'>진행 현황 보기 →</a></p>"
}
}
Next.js API Route에서 직접 처리하는 경우
n8n 없이 Next.js app/api/work/route.ts에서 바로 처리할 수도 있습니다. gachiham.com은 현재 이 방식을 사용합니다.
// app/api/work/route.ts
import Anthropic from '@anthropic-ai/sdk'
const client = new Anthropic()
async function classifyInquiry(painPoint: string, desiredOutcome: string) {
const message = await client.messages.create({
model: 'claude-sonnet-4-5',
max_tokens: 200,
messages: [
{
role: 'user',
content: `다음 문의를 분석해 서비스 유형을 분류하세요.
유형: homepage | web-service | custom-software | ai-automation | complex
업무 어려움: ${painPoint}
기대 효과: ${desiredOutcome}
JSON 형식으로만 응답: {"category": "유형", "reason": "이유 한 문장"}`,
},
],
})
const text = message.content[0].type === 'text' ? message.content[0].text : '{}'
return JSON.parse(text)
}
n8n vs API Route: 언제 어느 것을?
| 기준 | API Route | n8n | |------|----------|-----| | 실시간 처리 | ✅ 즉시 | ⚠️ 약간의 지연 | | 복잡한 분기 | 코드 작성 필요 | 시각적으로 구성 | | 외부 서비스 연동 | HTTP fetch 코딩 | 드래그 앤 드롭 | | 운영 가시성 | 로그 직접 조회 | 실행 이력 UI 제공 | | 비개발자 수정 | 불가 | 가능 |
단순한 파이프라인은 API Route가 더 빠릅니다. 여러 서비스를 연결하거나 운영 중 흐름을 바꿔야 한다면 n8n이 유리합니다.
한 가지 원칙
자동화를 만들 때 항상 이 질문을 먼저 합니다.
"이 자동화가 없어지면 무슨 일이 생기나?"
답이 "사람이 수동으로 하면 된다"이면, 자동화는 편의 도구입니다. 답이 "처리를 놓치게 된다"이면, 자동화는 필수 인프라입니다.
문의 분류 파이프라인은 전자에 해당합니다. 없어도 운영되지만, 있으면 응답 품질과 속도가 확실히 올라갑니다. 이 차이를 알고 만들면, 과도한 자동화에 시간을 낭비하지 않습니다.
관련 스토리
업무의 어떤 어려움을 해결하고 싶은가요?
서비스 메뉴 전에, 업무에서 가장 불편한 것을 먼저 이야기해주세요.
개발 의뢰하기 →