Surveillance automatisée des actualités avec analyse Claude 4 AI pour Discord et Google News

Avancé

Ceci est unMiscellaneous, AI Summarization, Multimodal AIworkflow d'automatisation du domainecontenant 30 nœuds.Utilise principalement des nœuds comme Code, Discord, Aggregate, SerpApi, GoogleSheets. Surveillance automatisée de l'actualité et analyse avec Claude 4 AI pour Discord et Google News

Prérequis
  • Token Bot Discord ou Webhook
  • Informations d'identification Google Sheets API
  • Clé API Anthropic
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
{
  "meta": {
    "instanceId": "393ca9e36a1f81b0f643c72792946a5fe5e49eb4864181ba4032e5a408278263",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "3b6eab19-a13e-4779-80bb-8df6e55b1a32",
      "name": "Anthropic Chat Model6",
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "position": [
        2240,
        1600
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "claude-sonnet-4-20250514",
          "cachedResultName": "Claude 4 Sonnet"
        },
        "options": {
          "maxTokensToSample": 20000
        }
      },
      "credentials": {
        "anthropicApi": {
          "id": "WXQf5QsxCs3AyxlW",
          "name": "Anthropic account"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "61a264f4-781e-45c7-8514-a7d5ae7d1c2f",
      "name": "Déclencheur programmé",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -336,
        1568
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 9 * * 1"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "84b638ee-ab02-433f-954e-94464d2eba0c",
      "name": "Note adhésive2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -528,
        1392
      ],
      "parameters": {
        "width": 464,
        "height": 320,
        "content": "# Phase 1: Weekly Schedule Activation"
      },
      "typeVersion": 1
    },
    {
      "id": "bbd0aa95-608f-45be-99f6-c5dc2257d3af",
      "name": "Note adhésive3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -528,
        1760
      ],
      "parameters": {
        "width": 464,
        "height": 528,
        "content": "### What you do:\nConfigure the schedule trigger to set your preferred monitoring frequency (default: Mondays at 9 AM)\nDefine monitoring topics by adding search queries to the Google Sheets \"Query\" sheet\nEnsure Discord bot permissions are properly configured for the target channel\n\n### What the system does:\nTriggers workflow execution based on scheduled intervals (configurable via cron expression)\nInitiates comprehensive news monitoring cycle for all configured topics\nPrepares system for multi-topic news analysis and content generation\nCoordinates sequential processing of search queries and content delivery\n\n### Result:\n✅ Automated news monitoring without manual intervention\n✅ Customizable scheduling for optimal team communication timing\n✅ Scalable monitoring for multiple industry topics and keywords\n✅ Consistent intelligence gathering for competitive awareness"
      },
      "typeVersion": 1
    },
    {
      "id": "9a22fc2f-05e1-489f-851d-dae76b15e047",
      "name": "Note adhésive4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -16,
        1392
      ],
      "parameters": {
        "color": 2,
        "width": 464,
        "height": 320,
        "content": "# Phase 2: Search Query Management and Topic Processing"
      },
      "typeVersion": 1
    },
    {
      "id": "a54bf68b-e599-4f1f-bf1c-04a2b0656ec1",
      "name": "Note adhésive5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -16,
        1760
      ],
      "parameters": {
        "color": 2,
        "width": 464,
        "height": 464,
        "content": "### What you do:\nMaintain and update search queries in the designated Google Sheets document\nAdd new monitoring topics, keywords, or industry-specific terms as needed\nReview and refine query effectiveness based on delivered content quality\n\n### What the system does:\nRetrieves monitoring topics from Google Sheets \"Query\" sheet\nProcesses each search query individually for comprehensive coverage\nInitiates sequential news searches to avoid API rate limiting\nPrepares topic-specific news collection for analysis and synthesis\n\n### Result:\n✅ Centralized management of monitoring topics and keywords\n✅ Easy addition and modification of search parameters\n✅ Systematic processing of all configured monitoring queries\n✅ Flexible topic management for evolving business needs\n"
      },
      "typeVersion": 1
    },
    {
      "id": "02d9b7dc-6364-427e-be7d-59c778b05175",
      "name": "Note adhésive6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        784,
        1392
      ],
      "parameters": {
        "color": 3,
        "width": 464,
        "height": 320,
        "content": "# Phase 3: Comprehensive News Discovery and Collection"
      },
      "typeVersion": 1
    },
    {
      "id": "a5b99be3-b041-460a-b42a-ea02f374f184",
      "name": "Note adhésive7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        784,
        1760
      ],
      "parameters": {
        "color": 3,
        "width": 464,
        "height": 512,
        "content": "### What the system does:\nExecutes Google News searches for each configured query using SerpAPI\nRetrieves top news results with comprehensive metadata (titles, sources, dates, snippets)\nProcesses and ranks news articles by relevance and publication date\nExtracts the top 3 most relevant articles per topic for detailed analysis\nHandles API rate limiting and retry logic for reliable data collection\n\n**News Collection Features:**\n- Real-time Google News integration via SerpAPI\n- Automatic relevance scoring and article ranking\n- Comprehensive metadata extraction (source, date, snippet)\n- Multi-topic parallel processing capability\n\n### Result:\n✅ Comprehensive news coverage across all monitored topics\n✅ Top-quality article selection based on relevance and recency\n✅ Complete source attribution and publication timing\n✅ Reliable news discovery with error handling and retry mechanisms\n"
      },
      "typeVersion": 1
    },
    {
      "id": "adb304ef-bd97-4715-bb06-2c1967849676",
      "name": "Note adhésive8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1280,
        1392
      ],
      "parameters": {
        "color": 4,
        "width": 752,
        "height": 320,
        "content": "# Phase 4: Deep Content Analysis and Article Scraping"
      },
      "typeVersion": 1
    },
    {
      "id": "7ec99a64-6825-4207-ae5b-36a0f8b67c72",
      "name": "Note adhésive9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1280,
        1760
      ],
      "parameters": {
        "color": 4,
        "width": 752,
        "height": 416,
        "content": "### What the system does:\nScrapes full content from the top 3 selected articles per topic using Firecrawl\nConverts article content to clean markdown format for AI processing\nImplements retry logic and error handling for reliable content extraction\nPreserves article structure, headings, and key formatting elements\nHandles various website formats and content management systems\n\n**Content Extraction Capabilities:**\n- Full-text article scraping with clean formatting\n- Multi-website compatibility and format handling\n- Automatic content structure preservation\n- Error handling for inaccessible or protected content\n\n### Result:\n✅ Complete article content captured for in-depth analysis\n✅ Clean, formatted content ready for AI processing\n✅ Comprehensive coverage of key industry developments\n✅ Reliable content extraction despite varied website formats"
      },
      "typeVersion": 1
    },
    {
      "id": "facae94e-45e9-4907-b686-fb89ef9623eb",
      "name": "Note adhésive10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2080,
        1392
      ],
      "parameters": {
        "color": 5,
        "width": 752,
        "height": 320,
        "content": "# Phase 5: AI-Powered Content Analysis and Synthesis"
      },
      "typeVersion": 1
    },
    {
      "id": "faebe895-b178-42d3-b434-ed3eaece7381",
      "name": "Note adhésive11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2080,
        1760
      ],
      "parameters": {
        "color": 5,
        "width": 752,
        "height": 416,
        "content": "### What the system does:\nProcesses scraped articles using Claude 4 Sonnet for intelligent analysis\nGenerates structured summaries following consistent formatting standards\nCreates topic-specific intelligence reports with key insights and implications\nMaintains professional tone and factual accuracy in all generated content\nFormats analysis results for optimal Discord presentation\n\n**AI Analysis Features:**\n- Advanced content comprehension and synthesis\n- Consistent formatting and structure across all topics\n- Key insight extraction and trend identification\n- Professional writing style suitable for business communication\n\n### Result:\n✅ High-quality intelligence reports generated automatically\n✅ Consistent professional formatting across all monitoring topics\n✅ Key insights and implications clearly highlighted\n✅ Actionable intelligence ready for team consumption"
      },
      "typeVersion": 1
    },
    {
      "id": "877bda6c-58da-4d0c-a46a-bce25c6cbaf7",
      "name": "Note adhésive12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2880,
        1392
      ],
      "parameters": {
        "color": 6,
        "width": 752,
        "height": 320,
        "content": "# Phase 6: Content Optimization for Discord Delivery"
      },
      "typeVersion": 1
    },
    {
      "id": "a90cfa84-e316-486f-82a1-b2ab16b18573",
      "name": "Note adhésive13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2880,
        1776
      ],
      "parameters": {
        "color": 6,
        "width": 752,
        "height": 480,
        "content": "### What the system does:\nAggregates all topic analyses into comprehensive monitoring report\nImplements intelligent text segmentation to comply with Discord's 2000-character limit\nMaintains content coherence while splitting longer analyses into multiple messages\nPreserves formatting and readability across message segments\nOptimizes message flow for sequential delivery\n\n**Discord Optimization Features:**\n- Automatic message length compliance (under 2000 characters)\n- Intelligent text segmentation maintaining content flow\n- Formatting preservation across multiple messages\n- Sequential message preparation for smooth delivery\n\n### Result:\n✅ Content perfectly formatted for Discord platform constraints\n✅ Coherent message flow maintained across multiple segments\n✅ Professional presentation optimized for team communication\n✅ Automated compliance with platform messaging limitations\n"
      },
      "typeVersion": 1
    },
    {
      "id": "312854b3-8fd4-4f23-8f5e-59975ada4600",
      "name": "Note adhésive14",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3664,
        1296
      ],
      "parameters": {
        "color": 7,
        "width": 928,
        "height": 592,
        "content": "# Phase 7: Automated Team Communication and Report Delivery"
      },
      "typeVersion": 1
    },
    {
      "id": "9ec29dfb-98be-4edd-8a6c-c7b6531602c6",
      "name": "Note adhésive15",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3664,
        1936
      ],
      "parameters": {
        "color": 7,
        "width": 928,
        "height": 448,
        "content": "### What the system does:\nDelivers engaging introduction message to Discord channel with branded personality\nPosts segmented intelligence reports in proper sequence to maintain readability\nSends conclusion message to complete the monitoring cycle\nImplements message timing to ensure proper delivery order\nUses branded \"Claptrap\" persona for consistent team engagement\n\n**Discord Delivery Features:**\n- Branded bot persona for engaging team communication\n- Sequential message delivery maintaining proper flow\n- Professional intelligence reporting with personality elements\n- Automated conclusion and cycle completion messaging\n\n### Result:\n✅ Professional intelligence reports delivered directly to team Discord channel\n✅ Engaging branded communication maintaining team interest\n✅ Complete monitoring cycle with clear beginning and conclusion\n✅ Consistent timing and delivery for reliable team updates"
      },
      "typeVersion": 1
    },
    {
      "id": "d5842671-b64e-423a-85c4-7d3256b1422c",
      "name": "Obtenir la requête",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        160,
        1568
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Query"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.com/spreadsheets/d/1k6v6DeL_3cZ0U9kANAlrIIUIIOil959MaykV7JNAXro/edit?gid=0#gid=0"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "wBRLUCktxqXE6DVJ",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "11b98779-6f2c-42ad-b051-41fa8aed3fc2",
      "name": "Boucle sur les éléments",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        528,
        1568
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "a9778ac0-c55e-46b9-9288-820cec4cabb0",
      "name": "Rechercher GNews",
      "type": "n8n-nodes-serpapi.serpApi",
      "position": [
        864,
        1568
      ],
      "parameters": {
        "q": "={{ $json.Query }}",
        "operation": "google_news",
        "requestOptions": {},
        "additionalFields": {}
      },
      "credentials": {
        "serpApi": {
          "id": "w1oDmQzMKE4Wcj2P",
          "name": "SerpAPI account"
        }
      },
      "retryOnFail": true,
      "typeVersion": 1
    },
    {
      "id": "d679b877-042f-4bf6-b5ee-9fae394a5da1",
      "name": "Retourner uniquement l'URL",
      "type": "n8n-nodes-base.code",
      "position": [
        1072,
        1568
      ],
      "parameters": {
        "jsCode": "// Récupérer les données d'entrée\nconst inputData = $input.all()[0].json;\n\n// Extraire les résultats de news\nconst newsResults = inputData.news_results || [];\n\n// Trier par position (ordre croissant)\nconst sortedResults = newsResults.sort((a, b) => a.position - b.position);\n\n// Prendre les 3 premiers résultats avec des propriétés nommées\nconst top3Results = sortedResults.slice(0, 3);\n\n// Créer un objet avec des propriétés distinctes pour chaque article\nconst result = {\n  article1: {\n    link: top3Results[0]?.link || null,\n    title: top3Results[0]?.title || null,\n    snippet: top3Results[0]?.snippet || null,\n    source: top3Results[0]?.source || null,\n    date: top3Results[0]?.date || null\n  },\n  article2: {\n    link: top3Results[1]?.link || null,\n    title: top3Results[1]?.title || null,\n    snippet: top3Results[1]?.snippet || null,\n    source: top3Results[1]?.source || null,\n    date: top3Results[1]?.date || null\n  },\n  article3: {\n    link: top3Results[2]?.link || null,\n    title: top3Results[2]?.title || null,\n    snippet: top3Results[2]?.snippet || null,\n    source: top3Results[2]?.source || null,\n    date: top3Results[2]?.date || null\n  },\n  // Pour compatibilité avec votre workflow existant\n  all_links: top3Results.map(result => result.link).filter(link => link !== null),\n  count: top3Results.length\n};\n\n// CORRECTION : Retourner un tableau avec un objet (format requis par n8n)\nreturn [{ json: result }];"
      },
      "typeVersion": 2
    },
    {
      "id": "a7a1521e-1183-4518-9320-3ebc88192b1d",
      "name": "Extraire l'article 1",
      "type": "@mendable/n8n-nodes-firecrawl.firecrawl",
      "onError": "continueRegularOutput",
      "maxTries": 5,
      "position": [
        1360,
        1568
      ],
      "parameters": {
        "url": "={{ $('Return URL only').item.json.article1.link }}",
        "operation": "scrape",
        "requestOptions": {}
      },
      "credentials": {
        "firecrawlApi": {
          "id": "E34WDB80ik5VHjiI",
          "name": "Firecrawl account"
        }
      },
      "retryOnFail": true,
      "typeVersion": 1,
      "alwaysOutputData": false
    },
    {
      "id": "42018b6f-ca36-42bc-aa9b-7880592d6f17",
      "name": "Extraire l'article 2",
      "type": "@mendable/n8n-nodes-firecrawl.firecrawl",
      "onError": "continueRegularOutput",
      "maxTries": 5,
      "position": [
        1600,
        1568
      ],
      "parameters": {
        "url": "={{ $('Return URL only').item.json.article2.link }}",
        "operation": "scrape",
        "requestOptions": {}
      },
      "credentials": {
        "firecrawlApi": {
          "id": "E34WDB80ik5VHjiI",
          "name": "Firecrawl account"
        }
      },
      "retryOnFail": true,
      "typeVersion": 1
    },
    {
      "id": "9f8552d4-131d-40e2-a1a7-6165310e5645",
      "name": "Extraire l'article 3",
      "type": "@mendable/n8n-nodes-firecrawl.firecrawl",
      "onError": "continueRegularOutput",
      "maxTries": 5,
      "position": [
        1872,
        1568
      ],
      "parameters": {
        "url": "={{ $('Return URL only').item.json.article3.link }}",
        "operation": "scrape",
        "requestOptions": {}
      },
      "credentials": {
        "firecrawlApi": {
          "id": "E34WDB80ik5VHjiI",
          "name": "Firecrawl account"
        }
      },
      "retryOnFail": true,
      "typeVersion": 1
    },
    {
      "id": "706d3a3b-057c-4def-8330-7c989968aa87",
      "name": "Rédaction veille",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "maxTries": 5,
      "position": [
        2416,
        1488
      ],
      "parameters": {
        "text": "=Source 1\n\nURL : {{ $('Return URL only').item.json.article1.link }}\nDate : {{ $('Return URL only').item.json.article1.date }}\nContenu de l'article : {{ $('Scrape article 1').item.json.data.markdown }}\n\n\nSource 2 \n\nURL : {{ $('Return URL only').item.json.article2.link }}\nDate : {{ $('Return URL only').item.json.article2.date }}\nContenu de l'article : {{ $('Scrape article 2').item.json.data.markdown }}\n\nSource 3\n\nURL : {{ $('Return URL only').item.json.article3.link }}\nDate : {{ $('Return URL only').item.json.article3.date }}\nContenu de l'article : {{ $('Scrape article 3').item.json.data.markdown }}\n",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "message": "=Voilà le contenu de 3 article sur le thème \"{{ $('Loop Over Items').item.json.Query }}\".\n\n\n# Mission\nAnalysez les articles fournis et produisez une synthèse structurée.\n\n# Format de sortie requis\n\nUne fois au début : Veille **{{ $('Loop Over Items').item.json.Query }}**\n\nPuis pour chaque article, suivez exactement cette structure :\n\n```\n# Article [Titre]\n\n**Média :** [Nom du média]\n**Date :** [Date de publication]  \n**Lien :** [URL]\n**Résumé :** [2-3 phrases sur le contenu principal]\n\n---\n```\n\n## Consignes\n- Respecter l'ordre : Média → Date → Lien → Résumé\n- Numéroter les articles dans l'ordre d'apparition\n- Résumé maximum 3 phrases\n- Si une info manque, indiquer \"Non disponible\"\n\nSi il manque les informations d'un article ignore le et fait un rendu conséquent au nombre d'article que tu a pu traiter).\n\nTraitez maintenant le document fourni et donnez un rendu en français."
            }
          ]
        },
        "promptType": "define"
      },
      "retryOnFail": true,
      "typeVersion": 1.7
    },
    {
      "id": "bd674533-295d-4223-93ac-971b5a1157d2",
      "name": "Compilation données veilles",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        3056,
        1552
      ],
      "parameters": {
        "include": "specifiedFields",
        "options": {},
        "aggregate": "aggregateAllItemData",
        "fieldsToInclude": "text"
      },
      "typeVersion": 1
    },
    {
      "id": "073edc5a-f56b-4b48-b7c1-3397c57eda5d",
      "name": "Découpage message discord",
      "type": "n8n-nodes-base.code",
      "position": [
        3392,
        1536
      ],
      "parameters": {
        "jsCode": "// Code pour node n8n - Division de texte pour Discord\n// Limite Discord : 2000 caractères par message\n\nconst DISCORD_CHAR_LIMIT = 2000;\nconst SAFETY_MARGIN = 50; // Marge de sécurité pour éviter les dépassements\nconst EFFECTIVE_LIMIT = DISCORD_CHAR_LIMIT - SAFETY_MARGIN;\n\nfunction splitTextForDiscord(text) {\n  // Si le texte est plus court que la limite, on le retourne tel quel\n  if (text.length <= EFFECTIVE_LIMIT) {\n    return [text];\n  }\n\n  const messages = [];\n  let currentMessage = '';\n  \n  // Diviser le texte en paragraphes d'abord (séparés par \\n\\n ou ----)\n  const sections = text.split(/(?:\\n\\n|----)/);\n  \n  for (let i = 0; i < sections.length; i++) {\n    let section = sections[i].trim();\n    \n    // Si une section complète dépasse la limite, la diviser par phrases\n    if (section.length > EFFECTIVE_LIMIT) {\n      const sentences = section.split(/(?<=[.!?:])\\s+/);\n      \n      for (const sentence of sentences) {\n        // Si une phrase seule dépasse la limite, la couper brutalement\n        if (sentence.length > EFFECTIVE_LIMIT) {\n          const chunks = splitByLength(sentence, EFFECTIVE_LIMIT);\n          for (const chunk of chunks) {\n            if (currentMessage.length + chunk.length + 1 > EFFECTIVE_LIMIT) {\n              if (currentMessage.trim()) {\n                messages.push(currentMessage.trim());\n              }\n              currentMessage = chunk;\n            } else {\n              currentMessage += (currentMessage ? ' ' : '') + chunk;\n            }\n          }\n        } else {\n          // Ajouter la phrase si elle rentre dans le message actuel\n          if (currentMessage.length + sentence.length + 1 <= EFFECTIVE_LIMIT) {\n            currentMessage += (currentMessage ? ' ' : '') + sentence;\n          } else {\n            // Sauvegarder le message actuel et commencer un nouveau\n            if (currentMessage.trim()) {\n              messages.push(currentMessage.trim());\n            }\n            currentMessage = sentence;\n          }\n        }\n      }\n    } else {\n      // La section rentre dans la limite, vérifier si elle rentre dans le message actuel\n      if (currentMessage.length + section.length + 2 <= EFFECTIVE_LIMIT) {\n        currentMessage += (currentMessage ? '\\n\\n' : '') + section;\n      } else {\n        // Sauvegarder le message actuel et commencer un nouveau\n        if (currentMessage.trim()) {\n          messages.push(currentMessage.trim());\n        }\n        currentMessage = section;\n      }\n    }\n  }\n  \n  // Ajouter le dernier message s'il existe\n  if (currentMessage.trim()) {\n    messages.push(currentMessage.trim());\n  }\n  \n  return messages.length > 0 ? messages : [text];\n}\n\nfunction splitByLength(text, maxLength) {\n  const chunks = [];\n  for (let i = 0; i < text.length; i += maxLength) {\n    chunks.push(text.slice(i, i + maxLength));\n  }\n  return chunks;\n}\n\n// Code principal pour n8n\nconst inputData = $input.all();\nconst outputItems = [];\n\nfor (let i = 0; i < inputData.length; i++) {\n  const item = inputData[i];\n  \n  // Extraire le texte à diviser (adaptez selon votre structure de données)\n  // Exemple : si votre texte est dans item.json.content\n  let textToSplit = '';\n  \n  // Si c'est un tableau comme dans votre exemple\n  if (item.json.data && Array.isArray(item.json.data)) {\n    textToSplit = item.json.data.map(dataItem => dataItem.text || '').join('\\n\\n---\\n\\n');\n  } \n  // Si c'est directement du texte\n  else if (item.json.text) {\n    textToSplit = item.json.text;\n  }\n  // Si c'est dans un autre champ\n  else if (item.json.content) {\n    textToSplit = item.json.content;\n  }\n  // Fallback : convertir tout l'objet en texte\n  else {\n    textToSplit = JSON.stringify(item.json, null, 2);\n  }\n  \n  // Diviser le texte\n  const messages = splitTextForDiscord(textToSplit);\n  \n  // Créer un item de sortie pour chaque message\n  messages.forEach((message, index) => {\n    outputItems.push({\n      json: {\n        message: message,\n        messageIndex: index + 1,\n        totalMessages: messages.length,\n        characterCount: message.length,\n        originalItemIndex: i\n      }\n    });\n  });\n}\n\nreturn outputItems;"
      },
      "typeVersion": 2
    },
    {
      "id": "3be2a835-9ef2-47d3-a70b-5e8093178519",
      "name": "Introduction",
      "type": "n8n-nodes-base.discord",
      "position": [
        3760,
        1472
      ],
      "webhookId": "47593169-e23c-4303-b8e2-7e93386c4c7a",
      "parameters": {
        "content": "SALUTATIONS MAGNIFIQUES RÉFÉRENCEURS ! Claptrap ici avec votre veille hebdomadaire ultra-FANTASTIQUE qui va faire exploser vos circuits organiques ! 🤖⚡",
        "guildId": {
          "__rl": true,
          "mode": "list",
          "value": "919951151888236595",
          "cachedResultUrl": "https://discord.com/channels/919951151888236595",
          "cachedResultName": "Institut du référencement"
        },
        "options": {},
        "resource": "message",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "1334455789284364309",
          "cachedResultUrl": "https://discord.com/channels/919951151888236595/1334455789284364309",
          "cachedResultName": "📝-veille-📝"
        }
      },
      "credentials": {
        "discordBotApi": {
          "id": "wEzWTKJiOc3ZcZew",
          "name": "ClapTrap IDR"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "f987c547-d915-420f-a03b-91d4b9bf7892",
      "name": "Veille",
      "type": "n8n-nodes-base.discord",
      "position": [
        4176,
        1648
      ],
      "webhookId": "f3ee61cf-fbfa-447c-9fa8-78b7e5e1c4f7",
      "parameters": {
        "content": "={{ $json.message }}",
        "guildId": {
          "__rl": true,
          "mode": "list",
          "value": "919951151888236595",
          "cachedResultUrl": "https://discord.com/channels/919951151888236595",
          "cachedResultName": "Institut du référencement"
        },
        "options": {
          "flags": [
            "SUPPRESS_EMBEDS"
          ]
        },
        "resource": "message",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "1334455789284364309",
          "cachedResultUrl": "https://discord.com/channels/919951151888236595/1334455789284364309",
          "cachedResultName": "📝-veille-📝"
        }
      },
      "credentials": {
        "discordBotApi": {
          "id": "wEzWTKJiOc3ZcZew",
          "name": "ClapTrap IDR"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "8b09ed9a-d5c1-4a7c-97a2-39219e888576",
      "name": "Conclusion",
      "type": "n8n-nodes-base.discord",
      "position": [
        4384,
        1504
      ],
      "webhookId": "47593169-e23c-4303-b8e2-7e93386c4c7a",
      "parameters": {
        "content": "ET VOILÀ MINIONS ORGANIQUES ! Claptrap a terminé sa mission ÉPIQUE - à la semaine prochaine pour encore plus d'excellence robotique ! Bip boop 🤖✨",
        "guildId": {
          "__rl": true,
          "mode": "list",
          "value": "919951151888236595",
          "cachedResultUrl": "https://discord.com/channels/919951151888236595",
          "cachedResultName": "Institut du référencement"
        },
        "options": {},
        "resource": "message",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "1334455789284364309",
          "cachedResultUrl": "https://discord.com/channels/919951151888236595/1334455789284364309",
          "cachedResultName": "📝-veille-📝"
        }
      },
      "credentials": {
        "discordBotApi": {
          "id": "wEzWTKJiOc3ZcZew",
          "name": "ClapTrap IDR"
        }
      },
      "executeOnce": true,
      "typeVersion": 2
    },
    {
      "id": "2396728d-d58e-459b-b657-f2a11192a837",
      "name": "Boucle sur les éléments 2",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        3952,
        1584
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    }
  ],
  "pinData": {},
  "connections": {
    "f987c547-d915-420f-a03b-91d4b9bf7892": {
      "main": [
        [
          {
            "node": "2396728d-d58e-459b-b657-f2a11192a837",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d5842671-b64e-423a-85c4-7d3256b1422c": {
      "main": [
        [
          {
            "node": "11b98779-6f2c-42ad-b051-41fa8aed3fc2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "a9778ac0-c55e-46b9-9288-820cec4cabb0": {
      "main": [
        [
          {
            "node": "d679b877-042f-4bf6-b5ee-9fae394a5da1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "11b98779-6f2c-42ad-b051-41fa8aed3fc2": {
      "main": [
        [
          {
            "node": "bd674533-295d-4223-93ac-971b5a1157d2",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "a9778ac0-c55e-46b9-9288-820cec4cabb0",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d679b877-042f-4bf6-b5ee-9fae394a5da1": {
      "main": [
        [
          {
            "node": "a7a1521e-1183-4518-9320-3ebc88192b1d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "61a264f4-781e-45c7-8514-a7d5ae7d1c2f": {
      "main": [
        [
          {
            "node": "d5842671-b64e-423a-85c4-7d3256b1422c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "a7a1521e-1183-4518-9320-3ebc88192b1d": {
      "main": [
        [
          {
            "node": "42018b6f-ca36-42bc-aa9b-7880592d6f17",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "42018b6f-ca36-42bc-aa9b-7880592d6f17": {
      "main": [
        [
          {
            "node": "9f8552d4-131d-40e2-a1a7-6165310e5645",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9f8552d4-131d-40e2-a1a7-6165310e5645": {
      "main": [
        [
          {
            "node": "706d3a3b-057c-4def-8330-7c989968aa87",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "2396728d-d58e-459b-b657-f2a11192a837": {
      "main": [
        [
          {
            "node": "8b09ed9a-d5c1-4a7c-97a2-39219e888576",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "f987c547-d915-420f-a03b-91d4b9bf7892",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "706d3a3b-057c-4def-8330-7c989968aa87": {
      "main": [
        [
          {
            "node": "11b98779-6f2c-42ad-b051-41fa8aed3fc2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "3b6eab19-a13e-4779-80bb-8df6e55b1a32": {
      "ai_languageModel": [
        [
          {
            "node": "706d3a3b-057c-4def-8330-7c989968aa87",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "073edc5a-f56b-4b48-b7c1-3397c57eda5d": {
      "main": [
        [
          {
            "node": "2396728d-d58e-459b-b657-f2a11192a837",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "bd674533-295d-4223-93ac-971b5a1157d2": {
      "main": [
        [
          {
            "node": "073edc5a-f56b-4b48-b7c1-3397c57eda5d",
            "type": "main",
            "index": 0
          },
          {
            "node": "3be2a835-9ef2-47d3-a70b-5e8093178519",
            "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é ?

Avancé - Divers, Résumé IA, IA Multimodale

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

Stratégie de contenu automatisée avec Google Trends, Actualités, Firecrawl et Claude AI
Automatisation de stratégie de contenu avec Google Trends, News, Firecrawl et Claude AI
Set
Code
Aggregate
+
Set
Code
Aggregate
22 NœudsGrowth AI
Étude de marché
Analyse intelligente quotidienne des groupes WhatsApp : Analyse GPT-4.1 et transcription des messages vocaux
Analyse intelligente des groupes WhatsApp quotidiens : analyse GPT-4.1 et transcription des messages vocaux
If
Set
Code
+
If
Set
Code
52 NœudsDaniel Lianes
Divers
Générateur de contenu SEO utilisant Claude AI et l'analyse de la concurrence
Utiliser Claude AI et l'analyse concurrentielle via Apify pour générer du contenu SEO
If
Code
Filter
+
If
Code
Filter
36 NœudsGrowth AI
Création de contenu
Générateur de contenu SEO utilisant Claude AI, l'analyse de la concurrence et Supabase RAG
Utiliser Claude AI, l'analyse concurrentielle et Supabase RAG pour générer du contenu SEO
If
Code
Filter
+
If
Code
Filter
40 NœudsGrowth AI
Création de contenu
Génération automatisée de rapports de campagnes Google Ads vers Google Sheets (avec la gestion des clients Airtable)
Génération automatisée des rapports de campagnes Google Ads vers Google Sheets (avec gestion des clients Airtable)
If
Code
Wait
+
If
Code
Wait
31 NœudsGrowth AI
Divers
Résumé quotidien de la boîte de réception Gmail vers Discord (GPT-4.1-mini + conversion PDF)
Résumé quotidien de la boîte de réception Gmail avec GPT-4.1-mini et conversion PDF envoyé vers Discord
Code
Gmail
Discord
+
Code
Gmail
Discord
18 Nœudsmoosa
Divers
Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds30
Catégorie3
Types de nœuds11
Description de la difficulté

Adapté aux utilisateurs avancés, avec des workflows complexes contenant 16+ nœuds

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34