Automatisation de l'inscription et du suivi des événements avec Gmail et Google Sheets
Ceci est unSocial Mediaworkflow d'automatisation du domainecontenant 14 nœuds.Utilise principalement des nœuds comme If, Set, Code, Wait, Gmail. Automatisation de l'inscription et du suivi des événements avec les rappels Gmail et les feuilles de calcul Google
- •Compte Google et informations d'identification Gmail API
- •Point de terminaison HTTP Webhook (généré automatiquement par n8n)
- •Informations d'identification Google Sheets API
Nœuds utilisés (14)
Catégorie
{
"nodes": [
{
"id": "1",
"name": "Inscription à l'événement Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
240,
300
],
"parameters": {
"path": "event-registration",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 1
},
{
"id": "2",
"name": "Note adhésive",
"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": "Paramètres de l'événement",
"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": "Valider l'inscription",
"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": "Traiter l'inscription",
"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": "Envoyer l'e-mail de confirmation",
"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": "Attendre jusqu'à une semaine avant",
"type": "n8n-nodes-base.wait",
"position": [
1240,
200
],
"parameters": {
"unit": "days",
"amount": 7,
"resume": "={{ $json.reminderDates.weekBefore }}"
},
"typeVersion": 1
},
{
"id": "8",
"name": "Envoyer le rappel hebdomadaire",
"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": "Attendre jusqu'à la veille",
"type": "n8n-nodes-base.wait",
"position": [
1640,
200
],
"parameters": {
"unit": "days",
"amount": 6,
"resume": "={{ $json.reminderDates.dayBefore }}"
},
"typeVersion": 1
},
{
"id": "10",
"name": "Envoyer le rappel de la veille",
"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": "Attendre jusqu'à 2h avant",
"type": "n8n-nodes-base.wait",
"position": [
2040,
200
],
"parameters": {
"unit": "hours",
"amount": 22,
"resume": "={{ $json.reminderDates.twoHoursBefore }}"
},
"typeVersion": 1
},
{
"id": "12",
"name": "Envoyer le rappel final",
"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": "Note adhésive 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": "Suivi de l'inscription",
"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
}
]
]
}
}
}Comment utiliser ce workflow ?
Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.
Dans quelles scénarios ce workflow est-il adapté ?
Intermédiaire - Réseaux sociaux
Est-ce payant ?
Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.
Workflows recommandés
Rodrigue
@gbadouPartager ce workflow