Gmail 알림과 Google 스프레드시트를 사용한 이벤트 등록 및 후속 자동화
중급
이것은Social Media분야의자동화 워크플로우로, 14개의 노드를 포함합니다.주로 If, Set, Code, Wait, Gmail 등의 노드를 사용하며. Gmail 알림과 Google Sheets를 사용한 이벤트 등록 및 후속 조치 자동화
사전 요구사항
- •Google 계정 및 Gmail API 인증 정보
- •HTTP Webhook 엔드포인트(n8n이 자동으로 생성)
- •Google Sheets API 인증 정보
카테고리
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"nodes": [
{
"id": "1",
"name": "이벤트 등록 웹훅",
"type": "n8n-nodes-base.webhook",
"position": [
240,
300
],
"parameters": {
"path": "event-registration",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 1
},
{
"id": "2",
"name": "메모지",
"type": "n8n-nodes-base.stickyNote",
"position": [
140,
180
],
"parameters": {
"width": 240,
"height": 160,
"content": "## Event Management Config\n\n⚙️ **Customize event settings:**\n- Event details and schedules\n- Email templates by event type\n- Reminder timings\n- Capacity limits"
},
"typeVersion": 1
},
{
"id": "3",
"name": "이벤트 설정",
"type": "n8n-nodes-base.set",
"position": [
440,
300
],
"parameters": {
"values": {
"number": [
{
"name": "maxCapacity",
"value": 100
}
],
"string": [
{
"name": "eventDate",
"value": "2025-07-25T14:00:00Z"
},
{
"name": "eventEndDate",
"value": "2025-07-25T16:00:00Z"
}
]
}
},
"typeVersion": 1
},
{
"id": "4",
"name": "등록 유효성 검사",
"type": "n8n-nodes-base.if",
"position": [
640,
300
],
"parameters": {
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"operator": {
"type": "string",
"operation": "isNotEmpty"
},
"leftValue": "={{ $json.email }}",
"rightValue": ""
},
{
"operator": {
"type": "string",
"operation": "isNotEmpty"
},
"leftValue": "={{ $json.name }}",
"rightValue": ""
},
{
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $json.email }}",
"rightValue": "@"
}
]
}
},
"typeVersion": 2
},
{
"id": "5",
"name": "등록 처리",
"type": "n8n-nodes-base.code",
"position": [
840,
300
],
"parameters": {
"jsCode": "// Process registration and generate unique details\nconst registration = $json;\nconst eventSettings = $node['Event Settings'].json;\n\n// Generate unique registration ID\nconst registrationId = `REG_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n\n// Calculate reminder dates\nconst eventDate = new Date(eventSettings.eventDate);\nconst reminderDates = {\n weekBefore: new Date(eventDate.getTime() - 7 * 24 * 60 * 60 * 1000).toISOString(),\n dayBefore: new Date(eventDate.getTime() - 24 * 60 * 60 * 1000).toISOString(),\n twoHoursBefore: new Date(eventDate.getTime() - 2 * 60 * 60 * 1000).toISOString()\n};\n\n// Generate calendar event data\nconst calendarEvent = {\n summary: eventSettings.eventTitle,\n start: eventSettings.eventDate,\n end: eventSettings.eventEndDate,\n location: eventSettings.eventLocation,\n description: `Vous êtes inscrit(e) à ${eventSettings.eventTitle}. Détails: ${eventSettings.eventLocation}`\n};\n\n// Create access credentials for online events\nconst accessCredentials = {\n meetingId: eventSettings.eventLocation.includes('zoom') ? 'ID: 123 456 789' : null,\n accessCode: Math.random().toString(36).substr(2, 8).toUpperCase()\n};\n\nreturn {\n ...registration,\n registrationId,\n eventDetails: eventSettings,\n reminderDates,\n calendarEvent,\n accessCredentials,\n registeredAt: new Date().toISOString(),\n status: 'confirmed'\n};"
},
"typeVersion": 1
},
{
"id": "6",
"name": "확인 이메일 전송",
"type": "n8n-nodes-base.gmail",
"position": [
1040,
300
],
"parameters": {
"sendTo": "={{ $json.email }}",
"message": "=<!DOCTYPE html>\n<html>\n<head>\n <style>\n body { font-family: Arial, sans-serif; margin: 20px; background-color: #f8f9fa; }\n .container { max-width: 600px; margin: 0 auto; background: white; padding: 30px; border-radius: 10px; }\n .header { text-align: center; margin-bottom: 30px; background: #007bff; color: white; padding: 20px; border-radius: 8px; }\n .event-details { background: #e8f4f8; padding: 20px; margin: 20px 0; border-radius: 8px; }\n .access-info { background: #d4edda; padding: 15px; margin: 15px 0; border-radius: 5px; border-left: 4px solid #28a745; }\n .calendar-button { background: #28a745; color: white; padding: 15px 30px; text-decoration: none; border-radius: 5px; display: inline-block; margin: 20px 0; }\n .next-steps { background: #fff3cd; padding: 15px; margin: 15px 0; border-radius: 5px; border-left: 4px solid #ffc107; }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <div class=\"header\">\n <h2>🎉 Inscription Confirmée !</h2>\n <p>Merci {{ $json.name }}, votre place est réservée</p>\n </div>\n \n <div class=\"event-details\">\n <h3>📅 Détails de l'Événement</h3>\n <p><strong>Titre:</strong> {{ $json.eventDetails.eventTitle }}</p>\n <p><strong>Date:</strong> {{ new Date($json.eventDetails.eventDate).toLocaleDateString('fr-FR', { \n weekday: 'long', \n year: 'numeric', \n month: 'long', \n day: 'numeric', \n hour: '2-digit', \n minute: '2-digit' \n }) }}</p>\n <p><strong>Durée:</strong> 2 heures</p>\n <p><strong>Format:</strong> En ligne</p>\n <p><strong>Lieu:</strong> {{ $json.eventDetails.eventLocation }}</p>\n </div>\n \n {{#if $json.accessCredentials.meetingId}}\n <div class=\"access-info\">\n <h3>🔑 Informations d'Accès</h3>\n <p><strong>Lien de connexion:</strong> {{ $json.eventDetails.eventLocation }}</p>\n <p><strong>{{ $json.accessCredentials.meetingId }}</strong></p>\n <p><strong>Code d'accès:</strong> {{ $json.accessCredentials.accessCode }}</p>\n </div>\n {{/if}}\n \n <div style=\"text-align: center;\">\n <a href=\"data:text/calendar;charset=utf8,BEGIN:VCALENDAR\nVERSION:2.0\nBEGIN:VEVENT\nDTSTART:{{ $json.calendarEvent.start }}\nDTEND:{{ $json.calendarEvent.end }}\nSUMMARY:{{ $json.calendarEvent.summary }}\nLOCATION:{{ $json.calendarEvent.location }}\nDESCRIPTION:{{ $json.calendarEvent.description }}\nEND:VEVENT\nEND:VCALENDAR\" class=\"calendar-button\">\n 📅 Ajouter à mon calendrier\n </a>\n </div>\n \n <div class=\"next-steps\">\n <h3>📋 Prochaines Étapes</h3>\n <ul>\n <li>Vous recevrez un rappel 7 jours avant l'événement</li>\n <li>Un email de rappel sera envoyé la veille</li>\n <li>Les liens de connexion seront rappelés 2h avant</li>\n <li>Préparez vos questions pour la session Q&A</li>\n </ul>\n </div>\n \n <p style=\"color: #666; font-size: 14px; margin-top: 30px;\">\n ID de réservation: {{ $json.registrationId }}<br>\n Pour toute question: {{ $json.eventDetails.organizerEmail }}\n </p>\n </div>\n</body>\n</html>",
"options": {
"contentType": "html"
},
"subject": "✅ Confirmation d'inscription - {{ $json.eventDetails.eventTitle }}"
},
"typeVersion": 1
},
{
"id": "7",
"name": "이벤트 1주 전까지 대기",
"type": "n8n-nodes-base.wait",
"position": [
1240,
200
],
"parameters": {
"unit": "days",
"amount": 7,
"resume": "={{ $json.reminderDates.weekBefore }}"
},
"typeVersion": 1
},
{
"id": "8",
"name": "주간 알림 전송",
"type": "n8n-nodes-base.gmail",
"position": [
1440,
200
],
"parameters": {
"sendTo": "={{ $json.email }}",
"message": "=<!DOCTYPE html>\n<html>\n<head>\n <style>\n body { font-family: Arial, sans-serif; margin: 20px; background-color: #f8f9fa; }\n .container { max-width: 600px; margin: 0 auto; background: white; padding: 30px; border-radius: 10px; }\n .reminder-header { text-align: center; margin-bottom: 30px; background: #ffc107; color: #212529; padding: 20px; border-radius: 8px; }\n .countdown { background: #e9ecef; padding: 20px; margin: 20px 0; border-radius: 8px; text-align: center; }\n .agenda { background: #f8f9fa; padding: 15px; margin: 15px 0; border-radius: 5px; }\n .preparation { background: #d1ecf1; padding: 15px; margin: 15px 0; border-radius: 5px; border-left: 4px solid #17a2b8; }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <div class=\"reminder-header\">\n <h2>⏰ Rappel - Plus qu'une semaine !</h2>\n <p>{{ $json.eventDetails.eventTitle }}</p>\n </div>\n \n <div class=\"countdown\">\n <h3>🗓️ Dans 7 jours</h3>\n <p>{{ new Date($json.eventDetails.eventDate).toLocaleDateString('fr-FR', { \n weekday: 'long', \n year: 'numeric', \n month: 'long', \n day: 'numeric', \n hour: '2-digit', \n minute: '2-digit' \n }) }}</p>\n </div>\n \n <div class=\"agenda\">\n <h3>📋 Programme de la Session</h3>\n <ul>\n <li>14h00 - 14h15 : Accueil et présentation</li>\n <li>14h15 - 15h00 : Présentation principale</li>\n <li>15h00 - 15h15 : Pause</li>\n <li>15h15 - 15h45 : Démonstration pratique</li>\n <li>15h45 - 16h00 : Questions & réponses</li>\n </ul>\n </div>\n \n <div class=\"preparation\">\n <h3>🎯 Comment bien se préparer</h3>\n <ul>\n <li>Testez votre connexion internet</li>\n <li>Préparez vos questions à l'avance</li>\n <li>Ayez un carnet pour prendre des notes</li>\n <li>Rejoignez-nous 5 minutes avant le début</li>\n </ul>\n </div>\n \n <p style=\"color: #666; font-size: 14px; margin-top: 30px;\">\n Lien de connexion: {{ $json.eventDetails.eventLocation }}<br>\n Code d'accès: {{ $json.accessCredentials.accessCode }}\n </p>\n </div>\n</body>\n</html>",
"options": {
"contentType": "html"
},
"subject": "📅 Rappel - {{ $json.eventDetails.eventTitle }} dans 7 jours"
},
"typeVersion": 1
},
{
"id": "9",
"name": "이벤트 전날까지 대기",
"type": "n8n-nodes-base.wait",
"position": [
1640,
200
],
"parameters": {
"unit": "days",
"amount": 6,
"resume": "={{ $json.reminderDates.dayBefore }}"
},
"typeVersion": 1
},
{
"id": "10",
"name": "전날 알림 전송",
"type": "n8n-nodes-base.gmail",
"position": [
1840,
200
],
"parameters": {
"sendTo": "={{ $json.email }}",
"message": "=<!DOCTYPE html>\n<html>\n<head>\n <style>\n body { font-family: Arial, sans-serif; margin: 20px; background-color: #f8f9fa; }\n .container { max-width: 600px; margin: 0 auto; background: white; padding: 30px; border-radius: 10px; }\n .urgent-reminder { text-align: center; margin-bottom: 30px; background: #dc3545; color: white; padding: 20px; border-radius: 8px; }\n .quick-access { background: #d4edda; padding: 20px; margin: 20px 0; border-radius: 8px; border-left: 4px solid #28a745; }\n .final-details { background: #fff3cd; padding: 15px; margin: 15px 0; border-radius: 5px; border-left: 4px solid #ffc107; }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <div class=\"urgent-reminder\">\n <h2>🚨 C'est demain !</h2>\n <p>{{ $json.eventDetails.eventTitle }}</p>\n <h3>{{ new Date($json.eventDetails.eventDate).toLocaleDateString('fr-FR', { \n hour: '2-digit', \n minute: '2-digit' \n }) }}</h3>\n </div>\n \n <div class=\"quick-access\">\n <h3>🔗 Accès Rapide</h3>\n <p><strong>Lien direct:</strong> <a href=\"{{ $json.eventDetails.eventLocation }}\">Cliquez ici pour rejoindre</a></p>\n <p><strong>Code d'accès:</strong> {{ $json.accessCredentials.accessCode }}</p>\n <p><strong>Sauvegardez ce lien</strong> pour un accès rapide demain</p>\n </div>\n \n <div class=\"final-details\">\n <h3>✅ Checklist Finale</h3>\n <ul>\n <li>📱 Notifications activées</li>\n <li>🎧 Audio/micro testés</li>\n <li>📝 Questions préparées</li>\n <li>☕ Café/thé prêt</li>\n <li>🚪 Rejoindre 5 min avant</li>\n </ul>\n </div>\n \n <p style=\"color: #666; font-size: 14px; margin-top: 30px;\">\n Vous recevrez un dernier rappel 2h avant l'événement.<br>\n Hâte de vous voir demain ! 🎉\n </p>\n </div>\n</body>\n</html>",
"options": {
"contentType": "html"
},
"subject": "🚨 Demain - {{ $json.eventDetails.eventTitle }} - Dernières infos"
},
"typeVersion": 1
},
{
"id": "11",
"name": "이벤트 2시간 전까지 대기",
"type": "n8n-nodes-base.wait",
"position": [
2040,
200
],
"parameters": {
"unit": "hours",
"amount": 22,
"resume": "={{ $json.reminderDates.twoHoursBefore }}"
},
"typeVersion": 1
},
{
"id": "12",
"name": "최종 알림 전송",
"type": "n8n-nodes-base.gmail",
"position": [
2240,
200
],
"parameters": {
"sendTo": "={{ $json.email }}",
"message": "=<!DOCTYPE html>\n<html>\n<head>\n <style>\n body { font-family: Arial, sans-serif; margin: 20px; background-color: #f8f9fa; }\n .container { max-width: 600px; margin: 0 auto; background: white; padding: 30px; border-radius: 10px; }\n .final-call { text-align: center; margin-bottom: 30px; background: #28a745; color: white; padding: 20px; border-radius: 8px; }\n .join-now { background: #007bff; color: white; padding: 20px 40px; text-decoration: none; border-radius: 5px; display: inline-block; margin: 20px 0; font-size: 18px; font-weight: bold; }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <div class=\"final-call\">\n <h2>🏁 C'est l'heure !</h2>\n <p>{{ $json.eventDetails.eventTitle }}</p>\n <h3>Dans 2 heures</h3>\n </div>\n \n <div style=\"text-align: center;\">\n <a href=\"{{ $json.eventDetails.eventLocation }}\" class=\"join-now\">\n 🚀 Rejoindre maintenant\n </a>\n </div>\n \n <p style=\"text-align: center; color: #666; font-size: 14px; margin-top: 30px;\">\n Code d'accès: {{ $json.accessCredentials.accessCode }}<br>\n À tout de suite ! 🎉\n </p>\n </div>\n</body>\n</html>",
"options": {
"contentType": "html"
},
"subject": "🏁 MAINTENANT - {{ $json.eventDetails.eventTitle }} commence dans 2h"
},
"typeVersion": 1
},
{
"id": "13",
"name": "메모지1",
"type": "n8n-nodes-base.stickyNote",
"position": [
2140,
60
],
"parameters": {
"width": 240,
"height": 160,
"content": "## Post-Event Follow-up\n\n📊 **After event completion:**\n- Thank you email\n- Feedback survey\n- Resource sharing\n- Next event invitations"
},
"typeVersion": 1
},
{
"id": "14",
"name": "등록 추적",
"type": "n8n-nodes-base.googleSheets",
"position": [
1040,
450
],
"parameters": {
"values": {
"values": [
"={{ $json.registrationId }}",
"={{ $json.name }}",
"={{ $json.email }}",
"={{ $json.company }}",
"={{ $json.eventDetails.eventTitle }}",
"={{ $json.registeredAt }}",
"={{ $json.status }}"
]
},
"resource": "sheet",
"operation": "appendRow",
"sheetName": "Event Registrations",
"documentId": "your-google-sheet-id"
},
"typeVersion": 1
}
],
"connections": {
"1": {
"main": [
[
{
"node": "3",
"type": "main",
"index": 0
}
]
]
},
"3": {
"main": [
[
{
"node": "4",
"type": "main",
"index": 0
}
]
]
},
"4": {
"main": [
[
{
"node": "5",
"type": "main",
"index": 0
}
]
]
},
"5": {
"main": [
[
{
"node": "6",
"type": "main",
"index": 0
},
{
"node": "14",
"type": "main",
"index": 0
}
]
]
},
"6": {
"main": [
[
{
"node": "7",
"type": "main",
"index": 0
}
]
]
},
"7": {
"main": [
[
{
"node": "8",
"type": "main",
"index": 0
}
]
]
},
"8": {
"main": [
[
{
"node": "9",
"type": "main",
"index": 0
}
]
]
},
"9": {
"main": [
[
{
"node": "10",
"type": "main",
"index": 0
}
]
]
},
"10": {
"main": [
[
{
"node": "11",
"type": "main",
"index": 0
}
]
]
},
"11": {
"main": [
[
{
"node": "12",
"type": "main",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
중급 - 소셜 미디어
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
Gmail 및 Google 스프레드시트 분석을 사용한 버려진 장바구니 복구 기능
사용Gmail및Google表格분석의废弃购物车恢复功能
If
Set
Code
+
If
Set
Code
13 노드Rodrigue
소셜 미디어
AI 평점과 Gmail을 사용하여 소셜 미디어 인플루언서 활동을 홍보 관리
AI 평점과 Gmail 프로모션을 통해 소셜 미디어 인플루언서 활동 관리
If
Set
Code
+
If
Set
Code
15 노드Rodrigue
소셜 미디어
GPT-4 점수 매기기 및 Gmail 알림을 사용한 후보자 평가 자동화
GPT-4 점수 매기기와 Gmail 알림을 사용한 후보자 평가 자동화
If
Set
Code
+
If
Set
Code
12 노드Rodrigue
인사
공급업체 위험 점수 자동화
D&B, NewsAPI 및 Gmail 알림을 사용한 공급업체 위험 점수 자동화
If
Set
Code
+
If
Set
Code
16 노드Rodrigue
기타
HubSpot 연락처와 SharePoint에 AI 작성된 뉴스레터와 자료 생성
GPT-4o, AI 이미지, 비디오를 통해 HubSpot과 SharePoint으로 양어 뉴스 레이터 생성
If
Set
Code
+
If
Set
Code
49 노드plemeo
소셜 미디어
리드 생성 및 이메일 워크플로
Google 지도, SendGrid 및 AI를 사용한 B2B 잠재 고객 개발 및 이메일 마케팅 자동화
If
Set
Code
+
If
Set
Code
141 노드Ezema Kingsley Chibuzo
리드 생성