Automatisation Telegram avec n8n : gestion des liens en temps réel
Ce workflow n8n a pour objectif d'automatiser la gestion des liens partagés dans un canal Telegram, facilitant ainsi leur sauvegarde et leur organisation. Dans un contexte où les équipes doivent souvent gérer un flux constant d'informations, ce processus permet de centraliser les liens importants et de les enregistrer dans des outils comme Readeck et Hoarder. Les cas d'usage incluent la collecte de ressources pour des projets, la gestion de contenu ou encore l'organisation de références pour des équipes de travail.
- Étape 1 : Le workflow commence par un déclencheur programmé qui active le processus à intervalles réguliers.
- Étape 2 : Les données sont ensuite divisées à l'aide d'un nœud de séparation, permettant de traiter les informations de manière distincte.
- Étape 3 : Plusieurs nœuds de notes autocollantes sont utilisés pour stocker temporairement les liens non sauvegardés.
- Étape 4 : Des requêtes HTTP sont effectuées pour récupérer et sauvegarder les liens dans Readeck et Hoarder, assurant ainsi que toutes les ressources pertinentes sont enregistrées.
- Étape 5 : Enfin, le workflow se termine par la mise à jour des notes autocollantes avec les liens sauvegardés, garantissant une traçabilité et une accessibilité des informations. Les bénéfices business de cette automatisation incluent une réduction significative du temps passé à gérer manuellement les liens, une meilleure organisation des ressources et une augmentation de la productivité des équipes.
Workflow n8n Telegram, gestion des liens, productivité : vue d'ensemble
Schéma des nœuds et connexions de ce workflow n8n, généré à partir du JSON n8n.
Workflow n8n Telegram, gestion des liens, productivité : détail des nœuds
Inscris-toi pour voir l'intégralité du workflow
Inscription gratuite
S'inscrire gratuitementBesoin d'aide ?{
"id": "Gd4MsAZGnSGfBwaw",
"meta": {
"instanceId": "8fb543b511022c43ab705107ba101545bb8b0fdb9bd6ebc4cca28dc9591a036e"
},
"name": "Telegram channel to Readeck & Hoarder",
"tags": [],
"nodes": [
{
"id": "6e50d52e-8b9e-4c92-82a1-af366c7a2ccf",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-440,
-700
],
"parameters": {
"rule": {
"interval": [
{
"field": "hours"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "bb7430a2-a7b7-47f2-9ba3-a3e43c8da004",
"name": "Split Out",
"type": "n8n-nodes-base.splitOut",
"position": [
-100,
-120
],
"parameters": {
"options": {},
"fieldToSplitOut": "bookmarks"
},
"typeVersion": 1
},
{
"id": "922aeb0b-29b1-46c6-9b18-76c02eca5a9e",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-460,
-480
],
"parameters": {
"width": 1120,
"height": 220,
"content": "## Readeck"
},
"typeVersion": 1
},
{
"id": "64d4ca0b-2c16-441e-9461-5707be877132",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-220,
-740
],
"parameters": {
"width": 480,
"height": 200,
"content": "## Telegram"
},
"typeVersion": 1
},
{
"id": "13ae24ec-ac11-470a-bad4-76403861f632",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-460,
-180
],
"parameters": {
"width": 1120,
"height": 220,
"content": "## Hoarder"
},
"typeVersion": 1
},
{
"id": "c606f434-d37b-4406-997a-1e7f17319281",
"name": "not_saved_links_hd",
"type": "n8n-nodes-base.code",
"position": [
260,
-120
],
"parameters": {
"jsCode": "const linksCanalItems = $('channel_links_tg').all();\nconst saved_links_items = $('saved_links_hd').all();\n\n// Extract links\nconst saved_links = new Set(\n saved_links_items.map(item => String(item.json.content.url))\n);\n\n// Filter\nconst filteredLinks = linksCanalItems.filter(item => {\n return !saved_links.has(String(item.json.url));\n});\n\nreturn filteredLinks;\n\n\n\n\n\n\n\n\n"
},
"typeVersion": 2
},
{
"id": "d0f61836-798c-4835-ae8f-8f184b6720ed",
"name": "not_saved_links_rd",
"type": "n8n-nodes-base.code",
"position": [
260,
-420
],
"parameters": {
"jsCode": "const linksCanalItems = $('channel_links_tg').all();\nconst saved_links_items = $('saved_links_rd').all();\n\n// Extract urls\nconst saved_urls = new Set(\n saved_links_items.map(item => String(item.json.url))\n);\n\n// Filter\nconst filteredLinks = linksCanalItems.filter(item => {\n return !saved_urls.has(String(item.json.url));\n});\n\nreturn filteredLinks;\n\n\n\n\n\n\n\n\n"
},
"typeVersion": 2
},
{
"id": "f33349a7-361a-4b0f-844b-1ca5ded2aeab",
"name": "saved_links_rd",
"type": "n8n-nodes-base.set",
"position": [
80,
-420
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "8c6f3806-0fb8-4c76-a0bc-19b588717430",
"name": "id",
"type": "string",
"value": "={{ $json.id }}"
},
{
"id": "ef41cba3-2844-479c-9467-6b94ae24c98b",
"name": "url",
"type": "string",
"value": "={{ $json.url }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "63d45b19-e878-418e-8eb5-c16b50af9669",
"name": "save_link_rd",
"type": "n8n-nodes-base.httpRequest",
"position": [
460,
-420
],
"parameters": {
"url": "={{$env.READECK_SERVER}}/api/bookmarks",
"method": "POST",
"options": {},
"sendBody": true,
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "url",
"value": "={{ $json.url }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "accept",
"value": "application/json"
},
{
"name": "authorization",
"value": "=Bearer {{$env.READECK_API_KEY}}"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "9416a858-1a25-4c3e-a49e-153118c268a7",
"name": "save_link_hd",
"type": "n8n-nodes-base.httpRequest",
"position": [
460,
-120
],
"parameters": {
"url": "={{$env.HOARDER_SERVER}}/api/v1/bookmarks",
"method": "POST",
"options": {},
"sendBody": true,
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "type",
"value": "link"
},
{
"name": "url",
"value": "={{ $json.url }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "=Bearer {{$env.HOARDER_API_KEY}}"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "13693467-cd75-4774-9072-832419606ab2",
"name": "get_links_rd",
"type": "n8n-nodes-base.httpRequest",
"position": [
-280,
-420
],
"parameters": {
"url": "={{$env.READECK_SERVER}}/api/bookmarks",
"options": {},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "accept",
"value": "application/json"
},
{
"name": "authorization",
"value": "=Bearer {{$env.READECK_API_KEY}}"
}
]
}
},
"typeVersion": 4.2,
"alwaysOutputData": true
},
{
"id": "e4ed315d-d065-425a-b30d-eca1509670cc",
"name": "get_links_hd",
"type": "n8n-nodes-base.httpRequest",
"position": [
-280,
-120
],
"parameters": {
"url": "={{$env.HOARDER_SERVER}}/api/v1/bookmarks",
"options": {},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "=Bearer {{$env.HOARDER_API_KEY}}"
}
]
}
},
"typeVersion": 4.2,
"alwaysOutputData": true
},
{
"id": "f54d9a4d-f00b-41bf-988a-8920d0046424",
"name": "saved_links_hd",
"type": "n8n-nodes-base.set",
"position": [
80,
-120
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "b07ce8e5-0b67-4c9c-831a-7a52f92f5744",
"name": "content.url",
"type": "string",
"value": "={{ $json.content.url }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "d4e83b9d-5988-46f4-b853-86daec274dba",
"name": "channel_links_tg",
"type": "n8n-nodes-base.code",
"position": [
120,
-700
],
"parameters": {
"jsCode": "// Define the chatId from the environment variable\nconst chatId = parseInt($env.TG_SHERLINK_ID, 10);\n// Access the \"result\" field from the previous node's output\nconst updates = $node[\"channel_items_tg\"].json[\"result\"];\n// Check if \"result\" is an array\nif (!Array.isArray(updates)) {\n return []; // Return empty if there are no messages\n}\n// Filter and process the messages\nconst filteredUpdates = updates\n .map(update => {\n // Ensure message from the specified channel\n if (update.channel_post && update.channel_post.chat && update.channel_post.chat.id === chatId) {\n return {\n id: update.channel_post.message_id,\n url: update.channel_post.text\n };\n }\n return null;\n })\n \n .filter(item => item !== null) // Filter nulls\n .filter(item => {\n // Filter only with hyperlink in text\n const text = item.url || \"\"; // Defined text\n return /https?:\\/\\/[^\\s]+/.test(text); // hyperlink\n });\n// Convert each array element into an individual item\nreturn filteredUpdates.map(update => ({ json: update }));\n"
},
"typeVersion": 2,
"alwaysOutputData": false
},
{
"id": "ca306aed-e682-4c35-a257-3b65bcfde895",
"name": "channel_items_tg",
"type": "n8n-nodes-base.httpRequest",
"position": [
-80,
-700
],
"parameters": {
"url": "=https://api.telegram.org/bot{{$env.TG_SHERLINK_BOT_TOKEN}}/getUpdates",
"options": {},
"sendQuery": true,
"queryParameters": {
"parameters": [
{}
]
}
},
"typeVersion": 4.2
}
],
"active": true,
"pinData": {},
"settings": {
"callerPolicy": "workflowsFromSameOwner",
"executionOrder": "v1"
},
"versionId": "85dd3731-0772-4b8b-b828-ae6a034d5419",
"connections": {
"Split Out": {
"main": [
[
{
"node": "saved_links_hd",
"type": "main",
"index": 0
}
]
]
},
"get_links_hd": {
"main": [
[
{
"node": "Split Out",
"type": "main",
"index": 0
}
]
]
},
"get_links_rd": {
"main": [
[
{
"node": "saved_links_rd",
"type": "main",
"index": 0
}
]
]
},
"save_link_hd": {
"main": [
[]
]
},
"save_link_rd": {
"main": [
[]
]
},
"saved_links_hd": {
"main": [
[
{
"node": "not_saved_links_hd",
"type": "main",
"index": 0
}
]
]
},
"saved_links_rd": {
"main": [
[
{
"node": "not_saved_links_rd",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "channel_items_tg",
"type": "main",
"index": 0
}
]
]
},
"channel_items_tg": {
"main": [
[
{
"node": "channel_links_tg",
"type": "main",
"index": 0
}
]
]
},
"channel_links_tg": {
"main": [
[
{
"node": "get_links_rd",
"type": "main",
"index": 0
},
{
"node": "get_links_hd",
"type": "main",
"index": 0
}
]
]
},
"not_saved_links_hd": {
"main": [
[
{
"node": "save_link_hd",
"type": "main",
"index": 0
}
]
]
},
"not_saved_links_rd": {
"main": [
[
{
"node": "save_link_rd",
"type": "main",
"index": 0
}
]
]
}
}
}Workflow n8n Telegram, gestion des liens, productivité : pour qui est ce workflow ?
Ce workflow s'adresse aux équipes marketing, aux gestionnaires de contenu et aux professionnels qui utilisent Telegram pour partager des informations. Il est idéal pour les entreprises de taille petite à moyenne qui cherchent à optimiser leur flux de travail sans nécessiter de compétences techniques avancées.
Workflow n8n Telegram, gestion des liens, productivité : problème résolu
Ce workflow résout le problème de la gestion manuelle des liens partagés dans Telegram, qui peut souvent entraîner des pertes d'informations et un désordre. En automatisant ce processus, les utilisateurs éliminent les frustrations liées à la recherche de liens importants et réduisent le risque de perdre des ressources précieuses. Après la mise en place de cette automatisation, les utilisateurs bénéficient d'une organisation claire et d'un accès rapide à tous les liens sauvegardés.
Workflow n8n Telegram, gestion des liens, productivité : étapes du workflow
Étape 1 : Le déclencheur programmé active le workflow à des intervalles définis.
- Étape 1 : Les données sont séparées pour un traitement distinct.
- Étape 2 : Les liens non sauvegardés sont temporairement stockés dans des notes autocollantes.
- Étape 3 : Des requêtes HTTP sont envoyées pour récupérer et sauvegarder les liens dans Readeck et Hoarder.
- Étape 4 : Les notes autocollantes sont mises à jour avec les liens sauvegardés pour garantir leur accessibilité.
Workflow n8n Telegram, gestion des liens, productivité : guide de personnalisation
Pour personnaliser ce workflow, vous pouvez ajuster les paramètres du déclencheur programmé pour définir la fréquence d'exécution. Modifiez les URL dans les nœuds de requête HTTP pour pointer vers vos propres instances de Readeck et Hoarder. Vous pouvez également adapter le contenu des notes autocollantes pour inclure des informations supplémentaires selon vos besoins. Enfin, assurez-vous de sécuriser les accès aux API utilisées pour protéger vos données.