Automatisation n8n : collecte d'événements mensuels par email
Ce workflow n8n a pour objectif d'automatiser la collecte d'événements mensuels et leur envoi par email. Dans un contexte où les entreprises doivent régulièrement informer leurs équipes ou clients des événements à venir, cette automatisation permet de gagner du temps et d'assurer une communication fluide. En utilisant n8n, l'agence d'automatisation Uclic propose une solution efficace pour extraire des données d'une page web et les transmettre par email.
- Étape 1 : le workflow débute avec un déclencheur programmé qui s'active chaque mois.
- Étape 2 : il envoie une requête HTTP pour récupérer la page contenant les événements.
- Étape 3 : une fois la page obtenue, le workflow vérifie s'il y a d'autres pages à traiter.
- Étape 4 : il extrait les événements de la page et les traite un par un pour obtenir les données nécessaires.
- Étape 5 : après avoir collecté toutes les informations, le workflow les compile et les prépare pour l'envoi.
- Étape 6 : enfin, un email est envoyé avec les détails des événements. Grâce à cette automatisation n8n, les entreprises peuvent réduire le temps passé à rechercher des informations et améliorer la réactivité de leur communication.
Workflow n8n email, collecte de données, événements : vue d'ensemble
Schéma des nœuds et connexions de ce workflow n8n, généré à partir du JSON n8n.
Workflow n8n email, collecte de données, événements : détail des nœuds
Inscris-toi pour voir l'intégralité du workflow
Inscription gratuite
S'inscrire gratuitementBesoin d'aide ?{
"meta": {
"instanceId": "cb484ba7b742928a2048bf8829668bed5b5ad9787579adea888f05980292a4a7"
},
"nodes": [
{
"id": "fe775b06-0264-49ea-af29-16289fee1100",
"name": "Get events page",
"type": "n8n-nodes-base.httpRequest",
"position": [
-660,
1160
],
"parameters": {
"url": "={{ $json.location }}/this-month?page={{ $runIndex+1}}",
"options": {}
},
"typeVersion": 3
},
{
"id": "c55554f4-f06c-4084-b9c2-454cf290682b",
"name": "Last page?",
"type": "n8n-nodes-base.if",
"position": [
0,
1160
],
"parameters": {
"conditions": {
"number": [
{
"value1": "={{ $items().length }}",
"value2": "=50"
}
]
}
},
"typeVersion": 1
},
{
"id": "3d750b8a-4288-45ac-af2d-24fc6b7126ec",
"name": "Get all events from the page",
"type": "n8n-nodes-base.htmlExtract",
"position": [
-440,
1160
],
"parameters": {
"options": {
"trimValues": true
},
"extractionValues": {
"values": [
{
"key": "events",
"cssSelector": "li.event-listings-element",
"returnArray": true,
"returnValue": "html"
}
]
}
},
"typeVersion": 1
},
{
"id": "84b570d5-60ad-4cb1-9428-1cc3372954cb",
"name": "Get each event data",
"type": "n8n-nodes-base.htmlExtract",
"position": [
420,
1140
],
"parameters": {
"options": {},
"dataPropertyName": "events",
"extractionValues": {
"values": [
{
"key": "date",
"attribute": "datetime",
"cssSelector": "time",
"returnArray": true,
"returnValue": "attribute"
},
{
"key": "artist",
"cssSelector": "p.artists strong"
},
{
"key": "support",
"cssSelector": "p.artists span.support"
},
{
"key": "location",
"cssSelector": "p.location"
},
{
"key": "eventLink",
"attribute": "href",
"cssSelector": "a.event-link",
"returnValue": "attribute"
}
]
}
},
"typeVersion": 1
},
{
"id": "783555d1-1c9c-4bda-8969-0ac46dced10e",
"name": "Limit to one",
"type": "n8n-nodes-base.itemLists",
"position": [
420,
1300
],
"parameters": {
"operation": "limit"
},
"typeVersion": 1
},
{
"id": "fdd1c66b-5e20-4c2d-8c01-38555621ec84",
"name": "Wait 3s",
"type": "n8n-nodes-base.wait",
"position": [
220,
1300
],
"webhookId": "617f8c35-66e5-4fca-b974-cf9fc4130d68",
"parameters": {
"unit": "seconds",
"amount": 3
},
"typeVersion": 1
},
{
"id": "49b5b5c7-9645-42cb-89ec-bb9972c8b379",
"name": "Split events",
"type": "n8n-nodes-base.itemLists",
"position": [
-220,
1160
],
"parameters": {
"options": {},
"fieldToSplitOut": "events"
},
"typeVersion": 1
},
{
"id": "30b06dc8-d896-4684-9c79-3d845f1041ac",
"name": "Collect all results",
"type": "n8n-nodes-base.code",
"position": [
220,
1140
],
"parameters": {
"jsCode": "let results = [],\n i = 0;\n\ndo {\n try {\n results = results.concat($items('Split events', 0, i));\n } catch (error) {\n return results;\n }\n i++;\n} while(true);"
},
"typeVersion": 1
},
{
"id": "ea9444ad-06a3-4567-9638-ce8ef8bfff23",
"name": "🤖 Each month",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-1220,
1160
],
"parameters": {
"rule": {
"interval": [
{
"field": "months",
"triggerAtHour": 20
}
]
}
},
"typeVersion": 1
},
{
"id": "73f7295d-c0f7-42b6-8784-3198538e6e48",
"name": "Setup location and email",
"type": "n8n-nodes-base.set",
"position": [
-880,
1160
],
"parameters": {
"values": {
"string": [
{
"name": "location"
},
{
"name": "email"
}
]
},
"options": {},
"keepOnlySet": true
},
"typeVersion": 1
},
{
"id": "a3529743-a7fd-4056-80a9-63b0dac259d6",
"name": "💄 Lick the stamp",
"type": "n8n-nodes-base.code",
"position": [
620,
1140
],
"parameters": {
"jsCode": "const monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ];\n\nlet html = `<table style=\"width: 100%\">`;\nfor (const item of $input.all()) {\n const eventDate = new Date(item.json.date[0]);\n \n html += `\n <tr>\n <td style=\"width: 60px; background-color: #2e2e32; font-family: sans-serif\">\n <a href=\"https://www.songkick.com${item.json.eventLink}\" style=\"color: #dcdfe6; text-decoration: none\">\n <p style=\"font-weight: bold; text-align: center; margin: 5px 0 0; padding: 0 0.5em\">${monthNames[eventDate.getMonth()]}</p>\n <p style=\"font-weight: bold; font-size: 1.5em; text-align: center; margin: 0 0 2px\">${eventDate.getDate()}</p>\n </a>\n </td>\n <td style=\"background-color: #f2f4f8; font-family: sans-serif; padding: 0.3em 0.5em\">\n <a href=\"https://www.songkick.com${item.json.eventLink}\" style=\"color: #555555; text-decoration: none\">\n <div>\n <p style=\"font-size: 1.2em; margin: 0\"><b>${item.json.artist}</b>`\n\n if (item.json.support) {\n html = html + `<span style=\"color: #7d7d87; margin:0\"> + ${item.json.support}</span>`;\n }\n \n html += `\n </p><p style=\"color: #7d7d87; margin: 0\">${item.json.location.split(',')[0].replace(/(\\r\\n|\\n|\\r)/gm, \"\")}</p>\n </div>\n </a>\n </td>\n </tr>\n `\n}\nhtml += '</table>';\n\nreturn { \n \"html\": html,\n \"total\": $input.all().length \n};\n//$input.all();"
},
"typeVersion": 1
},
{
"id": "a8f0e1cf-e8b5-402f-9336-4c623980a315",
"name": "✉️ Send it",
"type": "n8n-nodes-base.gmail",
"position": [
820,
1140
],
"parameters": {
"sendTo": "={{ $('Setup location and email').params[\"values\"][\"string\"][1][\"value\"] }}",
"message": "={{ $json[\"html\"] }}",
"options": {
"senderName": "=Monthly event newsletter"
},
"subject": "=📫 This month: {{$json[\"total\"]}} events!"
},
"typeVersion": 2
},
{
"id": "e23fd2fc-baf3-4494-ae4a-ddb51f45ff3c",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-940,
1080
],
"parameters": {
"color": 7,
"height": 230.21423635107112,
"content": "### Setup your location link and receiver email(s) here"
},
"typeVersion": 1
},
{
"id": "58300fe9-e3b3-452f-b13b-a9296cf05a71",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
800,
1060
],
"parameters": {
"color": 3,
"height": 230.21423635107112,
"content": "### Don't forget to connect a GMail account to this node!"
},
"typeVersion": 1
},
{
"id": "663147c1-1af0-49f3-9671-3d1d66e7a6f0",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
460,
720
],
"parameters": {
"color": 4,
"content": "## Don't forget to activate the workflow here ☝️"
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"Wait 3s": {
"main": [
[
{
"node": "Limit to one",
"type": "main",
"index": 0
}
]
]
},
"Last page?": {
"main": [
[
{
"node": "Collect all results",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait 3s",
"type": "main",
"index": 0
}
]
]
},
"Limit to one": {
"main": [
[
{
"node": "Setup location and email",
"type": "main",
"index": 0
}
]
]
},
"Split events": {
"main": [
[
{
"node": "Last page?",
"type": "main",
"index": 0
}
]
]
},
"Get events page": {
"main": [
[
{
"node": "Get all events from the page",
"type": "main",
"index": 0
}
]
]
},
"🤖 Each month": {
"main": [
[
{
"node": "Setup location and email",
"type": "main",
"index": 0
}
]
]
},
"Collect all results": {
"main": [
[
{
"node": "Get each event data",
"type": "main",
"index": 0
}
]
]
},
"Get each event data": {
"main": [
[
{
"node": "💄 Lick the stamp",
"type": "main",
"index": 0
}
]
]
},
"💄 Lick the stamp": {
"main": [
[
{
"node": "✉️ Send it",
"type": "main",
"index": 0
}
]
]
},
"Setup location and email": {
"main": [
[
{
"node": "Get events page",
"type": "main",
"index": 0
}
]
]
},
"Get all events from the page": {
"main": [
[
{
"node": "Split events",
"type": "main",
"index": 0
}
]
]
}
}
}Workflow n8n email, collecte de données, événements : pour qui est ce workflow ?
Ce workflow s'adresse aux entreprises qui organisent régulièrement des événements et souhaitent automatiser la communication avec leurs équipes ou clients. Il est particulièrement utile pour les équipes marketing, les responsables d'événements et les PME qui cherchent à optimiser leur gestion du temps. Un niveau technique intermédiaire est recommandé pour la personnalisation.
Workflow n8n email, collecte de données, événements : problème résolu
Ce workflow résout le problème de la collecte manuelle d'informations sur les événements, qui peut être chronophage et sujette à des erreurs. En automatisant ce processus, les utilisateurs éliminent les frustrations liées à la recherche d'événements et réduisent le risque de manquer des informations importantes. À la fin de la mise en place, les utilisateurs bénéficient d'une communication régulière et structurée sur les événements à venir, ce qui améliore leur efficacité opérationnelle.
Workflow n8n email, collecte de données, événements : étapes du workflow
Étape 1 : le workflow se déclenche chaque mois via un planificateur.
- Étape 1 : il envoie une requête HTTP pour récupérer la page des événements.
- Étape 2 : il vérifie s'il y a d'autres pages à traiter.
- Étape 3 : les événements de la page sont extraits et traités un par un pour obtenir les données nécessaires.
- Étape 4 : les résultats sont collectés et préparés pour l'envoi.
- Étape 5 : un email est envoyé avec les détails des événements.
Workflow n8n email, collecte de données, événements : guide de personnalisation
Pour personnaliser ce workflow, vous pouvez modifier l'URL de la requête HTTP pour pointer vers la page contenant vos événements. Ajustez également les paramètres d'extraction dans les nœuds HTML pour correspondre à la structure de votre page. Si vous souhaitez changer le destinataire de l'email, modifiez le champ 'sendTo' dans le nœud Gmail. Il est aussi possible d'ajouter des filtres pour ne récupérer que certains types d'événements. Assurez-vous de tester le workflow après chaque modification pour garantir son bon fonctionnement.