Créer un résumé des actualités technologiques sélectionnées en IA en utilisant GPT-4.1 Mini et une base de données Notion

Avancé

Ceci est unContent Creation, AI Summarizationworkflow d'automatisation du domainecontenant 20 nœuds.Utilise principalement des nœuds comme Code, Notion, HttpRequest, ManualTrigger, Agent. Créer des résumés de nouvelles technologiques sélectionnées par l'IA avec GPT-4.1 Mini et une base de données Notion

Prérequis
  • Clé API Notion
  • Peut nécessiter les informations d'identification d'authentification de l'API cible
  • Clé API OpenAI
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": "5f3c5e6f777b2c7f976eff784f15d2e2501680193b55be3d2ceef10db21e51fb",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "c6bfc0f0-ba09-47f7-9224-56581124b177",
      "name": "Lors du clic sur 'Exécuter le workflow'",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        432,
        64
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "b53c4d1d-ea67-4ef8-a637-3ed694d78845",
      "name": "HTTP Request",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3136,
        368
      ],
      "parameters": {
        "url": "https://api.notion.com/v1/pages",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ $item(\"0\").$node[\"Code in JavaScript2\"].json.pagePayload }}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer NOTION_API_KEY_WITH_ACCESS_TO_PAGE"
            },
            {
              "name": "Notion-Version",
              "value": "2022-06-28"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "046cff62-c51c-4568-91e3-b387641a6800",
      "name": "Obtenir plusieurs pages de la base de données",
      "type": "n8n-nodes-base.notion",
      "position": [
        720,
        240
      ],
      "parameters": {
        "filters": {
          "conditions": [
            {
              "key": "Date|date",
              "date": "={{$now.minus({days: 1}).toISO()}}",
              "condition": "after"
            }
          ]
        },
        "options": {},
        "resource": "databasePage",
        "matchType": "allFilters",
        "operation": "getAll",
        "returnAll": true,
        "databaseId": {
          "__rl": true,
          "mode": "list",
          "value": "26f79f2b-1851-8054-a6af-e7106fc0ce40",
          "cachedResultUrl": "https://www.notion.so/26f79f2b18518054a6afe7106fc0ce40",
          "cachedResultName": "Tech & Startups rss feed"
        },
        "filterType": "manual"
      },
      "credentials": {
        "notionApi": {
          "id": "sRT9MWg4gspaOMaP",
          "name": "Notion account"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "6a1e2866-d724-4ddf-92e6-124540e376b6",
      "name": "Code en JavaScript",
      "type": "n8n-nodes-base.code",
      "position": [
        960,
        272
      ],
      "parameters": {
        "jsCode": "const techKeywords = [\n  \"tech\", \"startup\", \"ai\", \"openai\", \"google\", \"microsoft\", \"apple\",\n  \"iphone\", \"app\", \"software\", \"vc\", \"funding\", \"ipo\", \"venture\",\n  \"silicon valley\", \"cloud\", \"semiconductor\", \"data\", \"innovation\",\n  \"tiktok\", \"meta\", \"facebook\", \"amazon\", \"netflix\", \"snap\"\n];\n\nreturn items.filter(item => {\n  const text = (\n    (item.json.property_title || \"\") + \" \" +\n    (item.json.property_summary || \"\") + \" \" +\n    (item.json.property_full_article || \"\")\n  ).toLowerCase();\n\n  return techKeywords.some(k => text.includes(k));\n});\n"
      },
      "typeVersion": 2
    },
    {
      "id": "c61e26d7-22bc-4135-9d9f-49219dbdd36f",
      "name": "Classificateur de texte",
      "type": "@n8n/n8n-nodes-langchain.textClassifier",
      "position": [
        1312,
        240
      ],
      "parameters": {
        "options": {},
        "inputText": "=Classify the article into one of these categories: \"Tech/Startup\" or \"Other\".\nReturn only one word: Tech/Startup or Other.\n\nTitle: {{$json.property_title}}\nSummary: {{$json.property_summary}}\nFull article: {{$json.property_full_article}}\n",
        "categories": {
          "categories": [
            {
              "category": "Other",
              "description": "not Tech/Startup"
            },
            {
              "category": "Tech/Startup",
              "description": "Tech/Startup"
            }
          ]
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "64df328e-4a0d-428c-9e6f-26cd378a3371",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1360,
        448
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "j4OqIQtI7Um6LEX2",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "54ceedf7-a9bf-4a50-a3a8-8cdc37c0b9f8",
      "name": "Code en JavaScript1",
      "type": "n8n-nodes-base.code",
      "position": [
        1744,
        480
      ],
      "parameters": {
        "jsCode": "\nconst articles = items.map(item => item.json);\n\n// Return one array in one item\nreturn [{ json: { articles } }];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "13728a28-ba6e-465d-9257-2ec7cbc3a9a7",
      "name": "Agent IA",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        2128,
        384
      ],
      "parameters": {
        "text": "={{ $json.articles }}",
        "options": {
          "systemMessage": "=\nYou are an expert technology editor creating a **daily curated digest** of technology and startup news.\nYou receive a list of articles as input (with titles, summaries, and links).\n\n### Your Goals:\n\n1. **Create a single daily digest page** that feels like a professional publication.\n2. **Write a short intro paragraph** summarizing the day’s main themes.\n3. **Group articles by categories** (e.g., *AI & Developer Tools, Startups & Funding, Consumer Tech, Regulation, Hardware & Gadgets, Web & Internet Services*).\n\n   * Only include categories that are relevant for today’s articles.\n4. **For each article**:\n\n   * Use a **bullet point format**.\n   * Write in **concise editorial style** (2–3 sentences max per article).\n   * Always include the **title as a link** to the article.\n5. **End with a closing note** like “That’s it for today’s digest.”\n\n### Formatting Rules:\n\n* Use **Markdown headings** (`#`, `##`) for sections.\n* Ensure **links are clickable Markdown links**.\n* Do **not** include raw JSON, system notes, or AI meta-commentary.\n* Output should be **clean and publish-ready** for Notion.\n"
        },
        "promptType": "define"
      },
      "typeVersion": 2.2
    },
    {
      "id": "d93debb8-7e57-4117-92fe-64b43501b326",
      "name": "OpenAI Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        2176,
        608
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "j4OqIQtI7Um6LEX2",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "d5cd2cc9-5f16-40c7-97c4-68edbee168a3",
      "name": "Code en JavaScript2",
      "type": "n8n-nodes-base.code",
      "position": [
        2656,
        400
      ],
      "parameters": {
        "jsCode": "// Get markdown digest from AI output\nconst digest = $json[\"output\"];\nconst today = new Date().toISOString().split(\"T\")[0]; // YYYY-MM-DD\n\n// Helper: convert a markdown line into a Notion block\nfunction mdToBlock(line) {\n  line = line.trim();\n\n  // Headings\n  if (line.startsWith(\"### \")) {\n    return {\n      object: \"block\",\n      type: \"heading_3\",\n      heading_3: {\n        rich_text: [{ type: \"text\", text: { content: line.replace(/^### /, \"\") } }]\n      }\n    };\n  }\n  if (line.startsWith(\"## \")) {\n    return {\n      object: \"block\",\n      type: \"heading_2\",\n      heading_2: {\n        rich_text: [{ type: \"text\", text: { content: line.replace(/^## /, \"\") } }]\n      }\n    };\n  }\n  if (line.startsWith(\"# \")) {\n    return {\n      object: \"block\",\n      type: \"heading_1\",\n      heading_1: {\n        rich_text: [{ type: \"text\", text: { content: line.replace(/^# /, \"\") } }]\n      }\n    };\n  }\n\n  // Bulleted list\n  if (line.startsWith(\"- \")) {\n    const linkMatch = line.match(/\\[(.*?)\\]\\((.*?)\\)/);\n    let textContent = line.replace(/^- /, \"\");\n    let richText = [];\n\n    if (linkMatch) {\n      richText.push({\n        type: \"text\",\n        text: { content: linkMatch[1], link: { url: linkMatch[2] } }\n      });\n      const after = textContent.replace(linkMatch[0], \"\").trim();\n      if (after) {\n        richText.push({ type: \"text\", text: { content: \" \" + after } });\n      }\n    } else {\n      richText.push({ type: \"text\", text: { content: textContent } });\n    }\n\n    return {\n      object: \"block\",\n      type: \"bulleted_list_item\",\n      bulleted_list_item: { rich_text: richText }\n    };\n  }\n\n  // Horizontal rule\n  if (line.startsWith(\"---\")) {\n    return { object: \"block\", type: \"divider\", divider: {} };\n  }\n\n  // Regular paragraph\n  if (line.length > 0) {\n    return {\n      object: \"block\",\n      type: \"paragraph\",\n      paragraph: { rich_text: [{ type: \"text\", text: { content: line } }] }\n    };\n  }\n\n  // Empty line → blank paragraph\n  return {\n    object: \"block\",\n    type: \"paragraph\",\n    paragraph: { rich_text: [] }\n  };\n}\n\n// Convert markdown into array of Notion blocks\nconst blocks = digest.split(\"\\n\").map(mdToBlock).filter(Boolean);\n\n// Split blocks into chunks of 100\nconst chunkSize = 100;\nconst chunks = [];\nfor (let i = 0; i < blocks.length; i += chunkSize) {\n  chunks.push(blocks.slice(i, i + chunkSize));\n}\n\nreturn {\n  pagePayload: {\n    parent: { page_id: \"26f79f2b185180ffa6aded90ddd9ba4c\" }, // your parent page\n    icon: { emoji: \"📰\" },\n    cover: {\n      external: { url: \"https://upload.wikimedia.org/wikipedia/commons/6/62/Tuscankale.jpg\" }\n    },\n    properties: {\n      title: [\n        {\n          text: { content: `Tech & Startup Daily Digest – ${today}` }\n        }\n      ]\n    },\n    children: chunks[0] // first 100 blocks only\n  },\n  extraChunks: chunks.slice(1) // save rest for appending\n};\n\n"
      },
      "typeVersion": 2
    },
    {
      "id": "6caf59be-ed6b-4ac7-8699-28fd3cc0c799",
      "name": "Déclencheur programmé",
      "type": "n8n-nodes-base.scheduleTrigger",
      "disabled": true,
      "position": [
        448,
        384
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 20
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "7a2e7407-a775-466b-8022-37836b1927f6",
      "name": "Note adhésive1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        384,
        -48
      ],
      "parameters": {
        "height": 576,
        "content": "## manual activation is for testing\n"
      },
      "typeVersion": 1
    },
    {
      "id": "ba4b3f32-885b-4155-ab8e-a30530dc1f07",
      "name": "Note adhésive2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        400,
        240
      ],
      "parameters": {
        "width": 208,
        "height": 128,
        "content": "## we can schedule it for daily"
      },
      "typeVersion": 1
    },
    {
      "id": "8e8e21ca-190f-491e-be20-f14861347e2e",
      "name": "Note adhésive3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        624,
        16
      ],
      "parameters": {
        "height": 416,
        "content": "## date filter can be modified for desired days or may be hours to fetch articles from notion database\n"
      },
      "typeVersion": 1
    },
    {
      "id": "3c1c0e30-ebe5-4b1b-b431-916716b822f1",
      "name": "Note adhésive4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        896,
        48
      ],
      "parameters": {
        "height": 400,
        "content": "## this code does initial filtering for required articles for our these **Tech and startup** "
      },
      "typeVersion": 1
    },
    {
      "id": "adff5b0a-8745-4a2e-9325-3a165055ac91",
      "name": "Note adhésive5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1216,
        32
      ],
      "parameters": {
        "width": 368,
        "height": 560,
        "content": "## more filtering for articles with text classifier model used is (gpt-4.1-mini)"
      },
      "typeVersion": 1
    },
    {
      "id": "1d4c0870-766f-453a-a2cc-dc4f38f433f1",
      "name": "Note adhésive6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1696,
        352
      ],
      "parameters": {
        "height": 320,
        "content": "## combile articles in one object to pass into ai agent\n"
      },
      "typeVersion": 1
    },
    {
      "id": "0709856a-1b2e-4c31-97c8-b4546169cf60",
      "name": "Note adhésive7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2096,
        192
      ],
      "parameters": {
        "width": 304,
        "height": 544,
        "content": "## generate summaries of all articles into single article with raw notion page format"
      },
      "typeVersion": 1
    },
    {
      "id": "c36eeaae-77ee-4d73-9e2f-6879c9c1801d",
      "name": "Note adhésive8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2528,
        272
      ],
      "parameters": {
        "width": 384,
        "height": 288,
        "content": "## format into correct notion page json object to pass into http node"
      },
      "typeVersion": 1
    },
    {
      "id": "5dfb71e3-db06-49a2-b3ce-ff953a00ac50",
      "name": "Note adhésive9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3040,
        272
      ],
      "parameters": {
        "width": 320,
        "height": 304,
        "content": "## create notion page\n### here created for specific day"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "13728a28-ba6e-465d-9257-2ec7cbc3a9a7": {
      "main": [
        [
          {
            "node": "d5cd2cc9-5f16-40c7-97c4-68edbee168a3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c61e26d7-22bc-4135-9d9f-49219dbdd36f": {
      "main": [
        [],
        [
          {
            "node": "54ceedf7-a9bf-4a50-a3a8-8cdc37c0b9f8",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "6caf59be-ed6b-4ac7-8699-28fd3cc0c799": {
      "main": [
        [
          {
            "node": "046cff62-c51c-4568-91e3-b387641a6800",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "64df328e-4a0d-428c-9e6f-26cd378a3371": {
      "ai_languageModel": [
        [
          {
            "node": "c61e26d7-22bc-4135-9d9f-49219dbdd36f",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "6a1e2866-d724-4ddf-92e6-124540e376b6": {
      "main": [
        [
          {
            "node": "c61e26d7-22bc-4135-9d9f-49219dbdd36f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d93debb8-7e57-4117-92fe-64b43501b326": {
      "ai_languageModel": [
        [
          {
            "node": "13728a28-ba6e-465d-9257-2ec7cbc3a9a7",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "54ceedf7-a9bf-4a50-a3a8-8cdc37c0b9f8": {
      "main": [
        [
          {
            "node": "13728a28-ba6e-465d-9257-2ec7cbc3a9a7",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d5cd2cc9-5f16-40c7-97c4-68edbee168a3": {
      "main": [
        [
          {
            "node": "b53c4d1d-ea67-4ef8-a637-3ed694d78845",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "046cff62-c51c-4568-91e3-b387641a6800": {
      "main": [
        [
          {
            "node": "6a1e2866-d724-4ddf-92e6-124540e376b6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c6bfc0f0-ba09-47f7-9224-56581124b177": {
      "main": [
        [
          {
            "node": "046cff62-c51c-4568-91e3-b387641a6800",
            "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é - Création de contenu, Résumé IA

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.

Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds20
Catégorie2
Types de nœuds9
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