MS_Météo
Intermédiaire
Ceci est unPersonal Productivityworkflow d'automatisation du domainecontenant 12 nœuds.Utilise principalement des nœuds comme Set, Code, Merge, Telegram, OpenWeatherMap. Rapport météo automatisé avec OpenWeatherMap et Telegram ☀️
Prérequis
- •Token Bot Telegram
Nœuds utilisés (12)
Catégorie
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
"id": "BiCF5Nmdl7SK4qjp",
"meta": {
"instanceId": "c92a0c76586da37fb3ac600956b62e842bfa4bd5f52acc7feb4e8a6e75ca1381",
"templateCredsSetupCompleted": true
},
"name": "MS_WEATHER",
"tags": [],
"nodes": [
{
"id": "4a9e2697-2172-4e55-bd17-96170d5640a8",
"name": "Déclencheur Planifié",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-360,
0
],
"parameters": {
"rule": {
"interval": [
{
"field": "hours",
"hoursInterval": 12
}
]
}
},
"typeVersion": 1.2
},
{
"id": "8474a7c2-523f-4da8-a9e5-bfdfa6b432df",
"name": "Définir Localisation",
"type": "n8n-nodes-base.set",
"position": [
-80,
0
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "b9f4869a-2059-4b09-84e3-26c7d1e95d30",
"name": "lat",
"type": "string",
"value": "={{ $env.lat }}"
},
{
"id": "cc1b0b3a-4c99-4220-bfcb-439f817980a8",
"name": "long",
"type": "string",
"value": "={{ $env.long }}"
},
{
"id": "7d1ace36-bd24-43b1-928c-3e3b9c2dc655",
"name": "telegram_chat_id",
"type": "string",
"value": "={{ $env.telegram_chat_id }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "6c789184-4971-4407-8401-334b47165daf",
"name": "Météo : Actuelle",
"type": "n8n-nodes-base.openWeatherMap",
"position": [
320,
-180
],
"parameters": {
"language": "en",
"latitude": "={{ $json.lat }}",
"longitude": "={{ $json.long }}",
"locationSelection": "coordinates"
},
"credentials": {
"openWeatherMapApi": {
"id": "gxU3zHUaRcFe8A4U",
"name": "OpenWeatherMap account"
}
},
"typeVersion": 1
},
{
"id": "1bab62d5-d884-46e8-94af-9484a5ba2fbf",
"name": "Météo : 5Jours",
"type": "n8n-nodes-base.openWeatherMap",
"position": [
320,
180
],
"parameters": {
"language": "en",
"latitude": "={{ $json.lat }}",
"longitude": "={{ $json.long }}",
"operation": "5DayForecast",
"locationSelection": "coordinates"
},
"credentials": {
"openWeatherMapApi": {
"id": "gxU3zHUaRcFe8A4U",
"name": "OpenWeatherMap account"
}
},
"typeVersion": 1
},
{
"id": "cb860b7f-2dc6-4aaf-8d7b-01d391437342",
"name": "Fusionner",
"type": "n8n-nodes-base.merge",
"position": [
660,
0
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"typeVersion": 3.2
},
{
"id": "43d58689-f6fa-4a88-8a3c-04cfc212b498",
"name": "Rapport : Préparer",
"type": "n8n-nodes-base.code",
"position": [
920,
0
],
"parameters": {
"jsCode": "/* ── Weather-to-Telegram Markdown ────────────────────────────────────────────\n Input: $json ← OpenWeatherMap /forecast (5-day / 3-hour) single object\n Output: telegram-ready markdown string in msg.markdown_report\n────────────────────────────────────────────────────────────────────────────── */\n\nconst data = $json; // full API response\nconst city = data.city; // city block\nconst blocks = data.list ?? []; // 3-hour forecasts\n\n/* ── helpers ──────────────────────────────────────────────────────────────── */\nconst esc = t => t.toString().replace(/[_*[\\]()~`>#+\\-=|{}.!]/g, '\\\\$&');\nconst fmtT = t => `${Math.round(t)}°C`;\nconst fmtDay = ts => new Date(ts * 1000)\n\t.toLocaleDateString('en-US', { weekday:'short', month:'short', day:'numeric' });\nconst emoji = id => (\n\tid === 800 ? '☀️' :\n\tid >= 801 && id <= 804 ? '☁️' :\n\tid >= 200 && id <= 232 ? '⛈️' :\n\tid >= 300 && id <= 321 ? '🌦️' :\n\tid >= 500 && id <= 531 ? '🌧️' :\n\tid >= 600 && id <= 622 ? '❄️' :\n\tid >= 700 && id <= 781 ? '🌫️' : '🌤️'\n);\n\n/* ── aggregate daily lows / highs (and grab a noon sample for the icon) ──── */\nconst days = {}; // key = yyyy-mm-dd\n\nfor (const b of blocks) {\n\tconst d = new Date(b.dt * 1000);\n\tconst key = d.toISOString().slice(0,10); // YYYY-MM-DD\n\tconst bucket = days[key] ?? (days[key] = {\n\t\ttsNoon : b.dt, // will be overwritten until closest to 12:00\n\t\ticonId : b.weather[0].id,\n\t\tdesc : b.weather[0].main,\n\t\tlo : b.main.temp_min,\n\t\thi : b.main.temp_max\n\t});\n\n\tbucket.lo = Math.min(bucket.lo, b.main.temp_min);\n\tbucket.hi = Math.max(bucket.hi, b.main.temp_max);\n\n\t// keep icon sample closest to noon (12:00 ±1h)\n\tconst hr = d.getHours();\n\tif (Math.abs(hr - 12) < Math.abs(new Date(bucket.tsNoon*1000).getHours() - 12)) {\n\t\tbucket.tsNoon = b.dt;\n\t\tbucket.iconId = b.weather[0].id;\n\t\tbucket.desc = b.weather[0].main;\n\t}\n}\n\n/* sort days & take first 5 */\nconst dayKeys = Object.keys(days).sort().slice(0,5);\n\n/* today’s range (index 0) */\nconst today = days[dayKeys[0]];\n\n/* ── build markdown ───────────────────────────────────────────────────────── */\nconst ln = '\\n';\nconst hr = '\\n──────────\\n';\n\nlet md = `*${esc(city.name)}, ${esc(city.country)} – Weather*${hr}`;\n\nmd += '*Now*\\n';\nmd += `🌡️ Temp: \\`${fmtT(data.list[0].main.temp)}\\` (feels like \\`${fmtT(data.list[0].main.feels_like)}\\`)${ln}`;\nmd += `📉 Low / High today: \\`${fmtT(today.lo)} – ${fmtT(today.hi)}\\`${ln}`;\nmd += `🛰️ Condition: \\`${esc(data.list[0].weather[0].description)}\\`${ln}`;\nmd += `💧 Humidity: \\`${data.list[0].main.humidity}%\\` `;\nmd += `💨 Wind: \\`${Math.round(data.list[0].wind.speed*3.6)} km/h\\`${hr}`;\n\nmd += '*5-Day Forecast*' + ln;\nfor (const k of dayKeys) {\n\tconst d = days[k];\n\tmd += `➡️ *${esc(fmtDay(d.tsNoon))}* `;\n\tmd += `\\`${fmtT(d.lo)} – ${fmtT(d.hi)}\\` `;\n\tmd += `${emoji(d.iconId)} _${esc(d.desc)}_\\n`;\n}\n\n/* ── return for Telegram node ─────────────────────────────────────────────── */\nreturn { json: { markdown_report: md }};"
},
"typeVersion": 2
},
{
"id": "7cab6251-db7f-4fb0-ad08-bf0e060cfc64",
"name": "Envoyer un message texte",
"type": "n8n-nodes-base.telegram",
"position": [
1240,
0
],
"webhookId": "5738ca6e-ad42-4f46-8938-bf37c033ec3e",
"parameters": {
"text": "={{ $json.markdown_report }}",
"chatId": "={{ $('Set Location').item.json.telegram_chat_id }}",
"additionalFields": {
"parse_mode": "Markdown",
"appendAttribution": false
}
},
"credentials": {
"telegramApi": {
"id": "OymlVCuTPYhVa2B9",
"name": "Telegram account"
}
},
"typeVersion": 1.2
},
{
"id": "c4f57a04-c22d-4f7b-a0aa-dd08c384d4bd",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
-140,
-140
],
"parameters": {
"color": 5,
"width": 220,
"height": 340,
"content": "## Set inputs \n- lat\n- long\n- telegram_chat_id"
},
"typeVersion": 1
},
{
"id": "8b144fce-d64a-42ec-b381-c49ff7f5fc89",
"name": "Note adhésive1",
"type": "n8n-nodes-base.stickyNote",
"position": [
260,
-240
],
"parameters": {
"color": 4,
"width": 220,
"height": 220,
"content": "## Current Weather"
},
"typeVersion": 1
},
{
"id": "440fb2e0-148a-4d4c-85f3-1031f13e0554",
"name": "Note adhésive2",
"type": "n8n-nodes-base.stickyNote",
"position": [
260,
120
],
"parameters": {
"color": 4,
"width": 220,
"height": 220,
"content": "## 5-Day Weather"
},
"typeVersion": 1
},
{
"id": "a537e327-dfcc-455c-a821-1d5d2f4cae21",
"name": "Note adhésive3",
"type": "n8n-nodes-base.stickyNote",
"position": [
860,
-60
],
"parameters": {
"color": 3,
"width": 220,
"height": 220,
"content": "## Report"
},
"typeVersion": 1
},
{
"id": "493b915f-b04b-445f-b603-6378463b6e91",
"name": "Note adhésive4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1180,
-60
],
"parameters": {
"color": 6,
"width": 220,
"height": 220,
"content": "## Send"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "a7059c98-a414-42fb-a0b5-5991d90e4dcf",
"connections": {
"cb860b7f-2dc6-4aaf-8d7b-01d391437342": {
"main": [
[
{
"node": "43d58689-f6fa-4a88-8a3c-04cfc212b498",
"type": "main",
"index": 0
}
]
]
},
"8474a7c2-523f-4da8-a9e5-bfdfa6b432df": {
"main": [
[
{
"node": "6c789184-4971-4407-8401-334b47165daf",
"type": "main",
"index": 0
},
{
"node": "1bab62d5-d884-46e8-94af-9484a5ba2fbf",
"type": "main",
"index": 0
}
]
]
},
"1bab62d5-d884-46e8-94af-9484a5ba2fbf": {
"main": [
[
{
"node": "cb860b7f-2dc6-4aaf-8d7b-01d391437342",
"type": "main",
"index": 1
}
]
]
},
"43d58689-f6fa-4a88-8a3c-04cfc212b498": {
"main": [
[
{
"node": "7cab6251-db7f-4fb0-ad08-bf0e060cfc64",
"type": "main",
"index": 0
}
]
]
},
"4a9e2697-2172-4e55-bd17-96170d5640a8": {
"main": [
[
{
"node": "8474a7c2-523f-4da8-a9e5-bfdfa6b432df",
"type": "main",
"index": 0
}
]
]
},
"6c789184-4971-4407-8401-334b47165daf": {
"main": [
[
{
"node": "cb860b7f-2dc6-4aaf-8d7b-01d391437342",
"type": "main",
"index": 0
}
]
]
}
}
}Foire aux questions
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 - Productivité personnelle
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
MS_Suivi du prix de l'or
Suivi automatisé du prix de l'or sur Telegram avec conversion de devises multiples 📈
Set
Code
Merge
+
Set
Code
Merge
12 NœudsM Sayed
Trading crypto
Recherche d'emploi automatisée avec lettres de motivation IA
Automatisation de la recherche d'offres d'emploi avec lettre de motivation IA via Google Jobs, RemoteOK et GPT-3.5
If
Set
Code
+
If
Set
Code
17 NœudsShelly-Ann Davy
Productivité personnelle
Automatisation de la recherche d'emploi et de la personnalisation des CV avec Mistral AI, LinkedIn et Google Sheets
Automatisation de la recherche d'offres d'emploi et de la personnalisation de CV avec Mistral AI, LinkedIn et Google Sheets
Set
Code
Html
+
Set
Code
Html
46 NœudsJordan Hoyle
Productivité personnelle
Assistant IA multimodal Telegram avec Gemini, génération vocale et d'images
Construire un assistant IA multimodal sur Telegram avec Gemini, la voix et la génération d'images
If
Set
Code
+
If
Set
Code
95 NœudsIniyavan JC
Productivité personnelle
Résumé quotidien
Utiliser l'IA Google Gemini et les sources RSS pour créer un bulletin d'actualités quotidien personnalisé
Set
Code
Merge
+
Set
Code
Merge
23 NœudsDixit Ram
Productivité personnelle
Recherche d'offres d'emploi LinkedIn
Recherche d'offres LinkedIn : correspondance automatique du CV (GPT/Gemini) + générateur de lettre de motivation + rappels Telegram
If
Set
Code
+
If
Set
Code
33 NœudsHojjat Jashnniloofar
Productivité personnelle
Informations sur le workflow
Niveau de difficulté
Intermédiaire
Nombre de nœuds12
Catégorie1
Types de nœuds7
Description de la difficulté
Auteur
M Sayed
@msayed-csLiens externes
Voir sur n8n.io →
Partager ce workflow