RECIPE 081
이메일 첨부파일 자동 분류 → Google Drive 저장
- ▸Gmail 수신 첨부파일을 파일 유형별로 자동 분류
- ▸분류된 파일을 Google Drive 폴더에 자동 저장
- ▸처리 결과를 Slack으로 일일 요약 보고
✅사전 준비
- □Gmail OAuth2 자격증명 설정
- □Google Drive 분류별 폴더 구조 생성 (이미지/문서/스프레드시트/기타)
- □Slack 웹훅 URL 준비
- □처리 제외할 발신자 목록 정의 (예: 뉴스레터 발신자)
Gmail Trigger + 첨부파일 추출
Node: Gmail Trigger
Event: Message Received
Filters:
Has Attachment: true
// 첨부파일 MIME 타입별 분류 (Code 노드)
const mimeMap = {
'application/pdf': '문서/PDF',
'application/vnd.openxmlformats-officedocument.wordprocessingml.document': '문서/Word',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': '스프레드시트',
'image/jpeg': '이미지',
'image/png': '이미지'
};
const mimeType = $json.attachments[0].mimeType;
const folder = mimeMap[mimeType] || '기타';
return [{ json: { ...$json, targetFolder: folder } }];Google Drive 폴더 ID 매핑
// Code 노드
const folderIds = {
'문서/PDF': 'FOLDER_ID_PDF',
'문서/Word': 'FOLDER_ID_WORD',
'스프레드시트': 'FOLDER_ID_SHEETS',
'이미지': 'FOLDER_ID_IMAGES',
'기타': 'FOLDER_ID_OTHER'
};
const folderId = folderIds[$json.targetFolder] || folderIds['기타'];
return [{ json: { ...$json, folderId } }];Google Drive 파일 업로드
Node: Google Drive (Upload File)
Folder ID: {{ $json.folderId }}
File Name: {{ $now.toFormat('yyyyMMdd') }}_{{ $json.attachments[0].name }}
Binary Property: attachment_0💡 TIPGmail에서 첨부파일이 여러 개인 경우 SplitInBatches 노드로 하나씩 처리하면 각 파일을 개별 폴더에 정확히 저장할 수 있습니다.
⚡
워크플로우 JSON
아래 JSON을 복사해 n8n에 바로 임포트하세요
📥 n8n 임포트 방법
n8n 화면 우측 상단 메뉴 (⋮) → Import from JSON → 아래 JSON 전체 복사 후 붙여넣기 → Import 클릭
n8n 화면 우측 상단 메뉴 (⋮) → Import from JSON → 아래 JSON 전체 복사 후 붙여넣기 → Import 클릭
{
"recipeId": "recipe081",
"title": "카카오워크 알림 자동 발송",
"chapter": 8,
"category": "국내 서비스 특화 레시피",
"difficulty": "⭐⭐",
"estimatedTime": "30분",
"usedApps": [
"카카오워크 API"
],
"description": "사내 메신저로 카카오워크를 사용하는 기업에서 어떤 트리거(Schedule, Gmail, Sheets 등)와도 연결해 카카오워크 채널로 자동 알림을 발송합니다. HTTP Request 노드로 카카오워크 Bot API를 직접 호출하는 방식입니다.",
"apiGuide": {
"platform": "카카오워크",
"issueUrl": "kakaowork.com",
"steps": [
"카카오워크 관리자 콘솔(kakaowork.com) 접속",
"앱 등록 메뉴에서 새 Bot 앱 생성",
"Bot API 키 발급",
"발송할 채널 또는 멤버 ID 확인"
]
},
"nodes": [
{
"id": "node1",
"type": "n8n-nodes-base.scheduleTrigger",
"name": "원하는 트리거 설정",
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "0 9 * * *"
}
]
}
}
},
{
"id": "node2",
"type": "n8n-nodes-base.httpRequest",
"name": "카카오워크 메시지 발송",
"parameters": {
"method": "POST",
"url": "https://api.kakaowork.com/v1/messages.send",
"headers": {
"Authorization": "Bearer {{$env.KAKAOWORK_API_KEY}}",
"Content-Type": "application/json"
},
"body": {
"conversation_id": "={{$env.KAKAOWORK_CHANNEL_ID}}",
"text": "{{$env.MESSAGE_TEXT}}",
"blocks": [
{
"type": "section",
"text": "안녕하세요! n8n에서 자동 발송된 알림입니다.\n\n내용: {{$json['알림내용']}}\n시각: {{$now.format('MM월 DD일 HH:mm')}}"
}
]
}
}
}
],
"envVariables": {
"KAKAOWORK_API_KEY": "카카오워크 Bot API 키",
"KAKAOWORK_CHANNEL_ID": "발송할 카카오워크 채널 또는 대화 ID",
"MESSAGE_TEXT": "기본 알림 텍스트"
},
"tips": [
"카카오워크 Bot API는 blocks 형식을 지원해요. 버튼·이미지·텍스트 카드 등 다양한 형태의 메시지를 만들 수 있어요.",
"이 레시피는 Slack 노드 대신 HTTP Request 노드를 사용하는 패턴입니다. 어떤 레시피든 Slack 발송 부분을 이 노드로 교체하면 카카오워크 알림으로 전환할 수 있어요.",
"발송 대상을 개인 DM으로 하려면 conversation_id를 해당 직원의 1:1 대화 ID로 설정하세요."
],
"qrUrl": "www.koreaaitimes.com/books/n8n-vol2/recipe081"
}