8
n8n 한국어amn8n.com

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)는 사용자 직접 비용을 지불해야 할 수 있습니다.

워크플로우 정보
난이도
중급
노드 수14
카테고리1
노드 유형8
난이도 설명

일정 경험을 가진 사용자를 위한 6-15개 노드의 중간 복잡도 워크플로우

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34