Comment créer un brief IA quotidien avec n8n ?

Comment créer une veille quotidienne automatisée avec n8n ?

Dans ce tutoriel, je construis pas à pas un workflow n8n qui lit toute l’actualité de la veille sur vos sujets, élimine le bruit, puis publie dans Slack un brief court et sourcé, uniquement quand il y a quelque chose d’important à dire.

Vous repartez avec le JSON complet du workflow (à importer en un copier-coller), le détail de chaque nœud, les questions envoyées au modèle de tri, deux scripts utiles pour régler le filtre et une grille de dépannage. Comptez environ 45 minutes de mise en place et quelques centimes de dollar par matin.

Que fait ce workflow, concrètement ?

Du lundi au vendredi à 8 h, le workflow enchaîne sept opérations :

  1. Il lit votre configuration : les sujets à suivre, la description de votre équipe et ce qui compte pour elle.
  2. Il cherche l’actualité des dernières 24 heures sur chaque sujet avec l’API de recherche de You.com (15 articles maximum par sujet).
  3. Il écarte les articles déjà traités lors des exécutions précédentes, pour que le brief de mardi ne répète pas celui de lundi.
  4. Il fait juger chaque article par Jev, un modèle de classification très bon marché : est-ce une vraie nouveauté ? est-ce bien le sujet ? est-ce important pour l’équipe ?
  5. Il ne garde que les articles qui passent les trois seuils, puis les regroupe par sujet.
  6. Il fait rédiger une synthèse par sujet avec You.com Research, en 1 à 4 puces, avec les sources en lien.
  7. Il publie le brief dans un canal Slack. Un sujet sans actualité importante ne génère aucun message.
Comment créer une veille quotidienne automatisée avec n8n ?

Le principe à retenir : on cherche large, on filtre fort, et on ne rédige que sur ce qui reste. La rédaction est l’étape la plus chère ; le tri coûte presque rien. En plaçant le tri avant la rédaction, vous payez la rédaction uniquement pour les sujets qui ont réellement bougé.

Voici à quoi ressemble un message publié (exemple illustratif) :

*AI agent tooling : brief du matin*
_3 nouveaux articles depuis hier_

• Le framework X sort en version 2.0 et ajoute l’orchestration multi-agents : vos agents existants doivent migrer vers la nouvelle API d’ici la fin de l’année. [1][2]
• L’éditeur Y publie un SDK officiel pour connecter ses outils à des agents. [3]

Chaque [1], [2]… est un lien cliquable vers l’article source dans Slack.

You.com, Jev, TypeSafe : qui fait quoi ?

Le workflow combine quatre outils. Si vous connaissez n8n et Slack, les deux autres méritent une présentation.

Agents IA n8n : une formation pratique pour accélerer votre productivité avec le No Code !

Les formations n8n vous ouvrent les portes d’une automatisation intelligente, fluide et évolutive. Vous y apprendrez à construire des workflows sur mesure, à interconnecter vos outils métiers, à transformer vos données, et même à intégrer des agents IA ou des systèmes RAG dans vos scénarios.

You.com : la recherche web et la rédaction sourcée

You.com est un moteur de recherche conçu pour l’IA. Il vend un accès par API à son index web, et propose un nœud n8n vérifié (paquet @youdotcom-oss/n8n-nodes-youdotcom). Ce nœud offre six opérations ; le workflow en utilise deux :

  • Search : renvoie une liste d’articles (titre, URL, description, date) pour une requête. Le paramètre freshness limite les résultats à la dernière journée, semaine, mois ou année. C’est notre collecte.
  • Research : lit des sources sur le web et rédige une réponse en Markdown avec des citations numérotées. L’effort de recherche va de lite (rapide, le moins cher) à frontier (le plus poussé, en tâche de fond). C’est notre rédacteur.

Les autres opérations (Get Contents, Answer, Finance Research, Get Research Task) ne servent pas ici.

Jev, de TypeSafe AI : le trieur

TypeSafe AI est l’éditeur de Jev, un modèle de type « System One ». Contrairement à un LLM classique (ChatGPT, Claude…), Jev n’écrit aucun texte. Vous lui donnez des données et des questions fermées ; il renvoie, pour chaque question, une valeur typée avec une probabilité. Trois types de questions existent :

TypeCe qu’il répondExemple de sortie
noul (oui/non)La probabilité que la réponse soit « oui », entre 0 et 1"noul": 0.95
scoreUne note sur une échelle que vous définissez (ici de 0 à 2), avec une confiance"score": 1.4
choiceUne option parmi une liste fermée, avec une confiance"choice": "billing"

Pensez à Jev comme à un nœud « If » intelligent : il prend des décisions trop floues pour une règle fixe (« cet article annonce-t-il vraiment quelque chose ? »), en moins d’une seconde et pour environ 0,00004 $ par article. C’est ce prix qui permet de faire lire tous les résultats de recherche au lieu d’en échantillonner quelques-uns. TypeSafe publie un nœud n8n officiel : @typesafe-ai/n8n-nodes-typesafe-ai.

n8n et Slack : l’orchestration et la diffusion

n8n enchaîne les étapes, mémorise les articles déjà vus et applique les seuils. Slack reçoit le message final. Vous pouvez remplacer Slack par un e-mail, Teams ou une page Notion : seul le dernier nœud change.

OutilRôle dans le workflowPourquoi lui
You.com SearchTrouver les articles de la veilleIndex web à jour, filtre de fraîcheur, listes de domaines
Jev (TypeSafe)Juger chaque articleDécisions typées, calibrées, très peu chères
You.com ResearchRédiger la synthèseTexte sourcé, citations exploitables
n8nOrchestrer, dédoublonner, filtrerNœuds natifs, sans agent ni code obligatoire
SlackDiffuserLà où l’équipe lit déjà ses messages

De quoi avez-vous besoin avant de commencer ?

ÉlémentOù l’obtenirRemarque
Une instance n8nn8n Cloud ou auto-hébergéeVersion récente : les nœuds vérifiés doivent être disponibles
Le nœud You.comPanneau des nœuds (Cloud) ou Settings → Community Nodes : @youdotcom-oss/n8n-nodes-youdotcomNœud vérifié
Le nœud TypeSafe AIMême procédure : @typesafe-ai/n8n-nodes-typesafe-aiNœud officiel de TypeSafe
Une clé API You.comyou.com/platformUtilisée par les deux nœuds You.com
Une clé API TypeSafeconsole.typesafe.aiSur n8n Cloud, vous pouvez aussi payer Jev en crédits Gateway, sans compte TypeSafe
Une app Slackapi.slack.com/appsAvec le droit chat:write et invitée dans le canal

Créer l’app Slack en 5 minutes

  1. Sur api.slack.com/apps, cliquez sur Create New App → From scratch, nommez-la (par exemple « Brief IA ») et choisissez votre espace de travail.
  2. Dans OAuth & Permissions, ajoutez le scope chat:write dans Bot Token Scopes.
  3. Cliquez sur Install to Workspace, puis copiez le Bot User OAuth Token (il commence par xoxb-).
  4. Dans n8n, créez un identifiant Slack API et collez ce jeton dans Access Token.
  5. Créez le canal #veille-ia dans Slack, puis tapez /invite @Brief IA pour y inviter l’app. Sans cette invitation, Slack refuse la publication.

Étape 1 : importer le workflow dans n8n

Le plus rapide est d’importer le workflow complet, puis de comprendre chaque nœud. Le JSON se trouve en annexe, en fin d’article. Deux méthodes :

  • Copier-coller : copiez tout le JSON, ouvrez un workflow vide dans n8n, cliquez sur le canevas et faites Ctrl+V (Cmd+V sur Mac).
  • Fichier : enregistrez le JSON dans un fichier .json, puis dans n8n ouvrez le menu … en haut à droite → Import from File.

Vous obtenez 14 nœuds alignés de gauche à droite :

#NœudType n8nRôle
1Chaque jour ouvré à 8 hSchedule TriggerDéclenche le workflow du lundi au vendredi
2ConfigEdit Fields (Set)Centralise sujets, équipe, priorités et seuil
3Un item par sujetSplit OutCrée un item par sujet
4You.com : chercher les actus du jourYou.com (Search)15 articles max de la dernière journée
5Un item par articleSplit OutCrée un item par article
6Préparer articleEdit Fields (Set)Normalise titre, URL, date
7Écarter les articles déjà vusRemove DuplicatesMémoire entre les exécutions
8Jev : évaluer chaque articleTypeSafe AI3 questions par article
9Garder les actus importantesFilterApplique les 3 seuils
10Détails des articles retenusEdit Fields (Set)Garde sujet, titre, URL
11Regrouper par sujetSummarizeUne ligne par sujet avec la liste des articles
12You.com Research : rédiger le briefYou.com (Research)Synthèse sourcée en français
13Formater pour SlackEdit Fields (Set)Convertit le Markdown pour Slack
14Publier dans SlackSlackPoste dans #veille-ia

Ouvrez ensuite les nœuds 4, 8, 12 et 14 pour y sélectionner vos identifiants (You.com, TypeSafe AI, Slack). Enfin, vérifiez le fuseau horaire : j’ai réglé le workflow sur Europe/Paris dans ses paramètres (… → Settings → Timezone). Sans ce réglage, n8n utilise le fuseau de l’instance, souvent UTC sur un serveur.

Étape 2 : le déclencheur et le nœud Config

Le déclencheur est un Schedule Trigger en mode hebdomadaire. Les jours vont de 1 (lundi) à 5 (vendredi) :

{
  "rule": {
    "interval": [
      {
        "field": "weeks",
        "triggerAtDay": [
          1,
          2,
          3,
          4,
          5
        ],
        "triggerAtHour": 8
      }
    ]
  }
}

Le nœud Config est le seul que vous aurez à modifier au quotidien. Il contient quatre champs :

{
  "mode": "manual",
  "assignments": {
    "assignments": [
      {
        "id": "110421af-af49-42f6-ac63-5ec4c04f4514",
        "name": "topics",
        "type": "array",
        "value": "["AI model releases", "AI agent tooling", "AI regulation"]"
      },
      {
        "id": "dcf77306-e88c-40c8-b512-a8b0074cbc75",
        "name": "team",
        "type": "string",
        "value": "A team of developers building AI agents and AI-powered products"
      },
      {
        "id": "3d7aa478-b42a-46c5-b90c-3c0fe0057454",
        "name": "caresAbout",
        "type": "array",
        "value": "["New AI models they could build with", "New or significantly updated agent frameworks, SDKs, and developer tools", "Laws, rules, or rulings that change what they can ship"]"
      },
      {
        "id": "1d6375a4-852c-4c62-82b2-337cf80de027",
        "name": "materialityThreshold",
        "type": "number",
        "value": 1.3
      }
    ]
  },
  "options": {}
}
ChampTypeÀ quoi il sert
topicstableauLes sujets suivis. Chaque sujet donne une recherche « <sujet> news ». Restez à trois : au-delà, le brief devient trop long pour être lu.
teamtexteUne ou deux phrases sur votre équipe. Jev s’en sert pour juger l’importance d’un article : c’est le réglage qui pèse le plus.
caresAbouttableauCe qui peut changer une décision pour l’équipe : nouveaux outils, lois, ruptures de service…
materialityThresholdnombreLe seuil d’importance, sur une échelle de 0 à 2. Baissez-le pour plus d’articles, montez-le pour moins.

Pourquoi les valeurs restent en anglais ? La recherche You.com fonctionne par défaut en anglais, où l’actualité IA est la plus abondante, et les seuils de Jev ont été réglés sur des articles en anglais. Je garde donc la configuration en anglais et je demande seulement à You.com Research de rédiger le brief en français. Si vous suivez une actualité française, ajoutez les options Country et Language au nœud de recherche, puis vérifiez les seuils pendant une semaine.

Voici par exemple une configuration adaptée à une équipe web analytics. Remplacez seulement les valeurs dans le nœud Config :

{
  "topics": [
    "Google Analytics 4",
    "Google consent mode and privacy rules",
    "AI search engines and SEO"
  ],
  "team": "A web analytics consultancy in France that implements GA4, Google Tag Manager and consent management for clients",
  "caresAbout": [
    "New GA4 features, reports or data changes that affect tracking",
    "Changes to consent mode, cookies or privacy laws in the EU",
    "Changes in how AI search engines send traffic to websites"
  ],
  "materialityThreshold": 1.3
}

Étape 3 : chercher l’actualité avec You.com

Le nœud Un item par sujet (Split Out) transforme le tableau topics en trois items distincts, chacun avec un champ topic. Tous les nœuds suivants s’exécutent donc une fois par sujet.

{
  "fieldToSplitOut": "topics",
  "include": "noOtherFields",
  "options": {
    "destinationFieldName": "topic"
  }
}

Le nœud You.com : chercher les actus du jour lance la recherche. La requête ajoute « news » au sujet, et deux options cadrent les résultats : 15 articles maximum (count, de 1 à 100), publiés dans la dernière journée (freshness: day).

{
  "operation": "search",
  "query": "={{ $json.topic + ' news' }}",
  "searchOptions": {
    "count": 15,
    "freshness": "day"
  }
}

Trois options supplémentaires permettent de maîtriser les sources, avec jusqu’à 500 domaines chacune :

  • include_domains : ne chercher que dans ces domaines ;
  • exclude_domains : ignorer ces domaines (agrégateurs, sites de communiqués…) ;
  • boost_domains : favoriser vos sources de confiance sans exclure les autres.

Attention : include_domains ne se combine ni avec exclude_domains ni avec boost_domains. Ce mélange provoque une erreur 422 à l’exécution. En revanche, exclure et favoriser ensemble fonctionne.

La réponse de You.com contient la liste des articles dans results.web. Le nœud Un item par article la découpe en un item par article, puis Préparer article ne garde que les champs utiles :

{
  "mode": "manual",
  "assignments": {
    "assignments": [
      {
        "id": "8f390467-44bb-471e-a7d6-4c76842bd52b",
        "name": "topic",
        "type": "string",
        "value": "={{ $('Un item par sujet').item.json.topic }}"
      },
      {
        "id": "5f8ee638-b3a6-4c4f-9562-53e3afbf745b",
        "name": "title",
        "type": "string",
        "value": "={{ $json.article.title }}"
      },
      {
        "id": "cb480b37-ab3e-4c06-b799-f6eb08433fe9",
        "name": "description",
        "type": "string",
        "value": "={{ $json.article.description ?? '' }}"
      },
      {
        "id": "1fd63598-a0ef-4f9e-9768-4bcff91e52bd",
        "name": "url",
        "type": "string",
        "value": "={{ $json.article.url }}"
      },
      {
        "id": "2ca20fbc-1a41-4c26-a6b0-a6b33d4a492e",
        "name": "urlKey",
        "type": "string",
        "value": "={{ $json.article.url.split('?')[0].split('#')[0] }}"
      },
      {
        "id": "65b5acfd-deed-4fb8-a69f-a911020e420e",
        "name": "publishedAt",
        "type": "string",
        "value": "={{ $json.article.page_age ?? '' }}"
      }
    ]
  },
  "options": {}
}

Le champ urlKey est la clé de dédoublonnage. L’expression url.split('?')[0].split('#')[0] retire les paramètres et l’ancre de l’URL : un même article partagé avec des paramètres de suivi différents (utm_source, etc.) aura ainsi la même clé.

Comment créer une veille quotidienne automatisée avec n8n ?

Étape 4 : écarter les articles déjà traités

La fenêtre de 24 heures ne suffit pas à éviter les répétitions : un article peut rester dans les résultats plusieurs jours. Le nœud natif Remove Duplicates, en mode Remove Items Processed in Previous Executions, sert de mémoire : n8n enregistre chaque urlKey vu et laisse passer seulement les nouveaux.

{
  "operation": "removeItemsSeenInPreviousExecutions",
  "dedupeValue": "={{ $json.urlKey }}",
  "options": {}
}

Aucune base de données n’est nécessaire : n8n stocke cet historique lui-même, workflow par workflow.

Piège classique : vos exécutions de test marquent aussi les articles comme vus. Avant la mise en production, passez ce nœud en mode Clear Deduplication History, exécutez-le une fois, puis remettez-le en mode Remove Items Processed in Previous Executions. Sinon, votre premier vrai brief sera vide.

Ce nœud élimine les URL identiques. Une même annonce reprise par cinq médias garde cinq URL différentes : c’est le regroupement de l’étape 6 qui les fusionnera.

Étape 5 : faire juger chaque article par Jev

C’est le cœur du workflow. Le nœud Jev : évaluer chaque article (opération Evaluate, modèle jev-latest) reçoit deux éléments : un état (les données à juger) et des questions.

L’état envoyé à Jev

L’état regroupe le contexte de veille (sujet, équipe, priorités issues de Config) et l’article. Les noms de clés comptent : les questions y font référence avec des accents graves, comme `article` ou `watch.topic`.

={{ { watch: { topic: $json.topic, team: $("Config").first().json.team, cares_about: $("Config").first().json.caresAbout }, article: { title: $json.title, description: $json.description, url: $json.url, published_at: $json.publishedAt } } }}

Les trois questions

Les trois questions partent dans un seul appel et sont évaluées en parallèle. Voici le JSON du champ Questions, mis en forme :

{
  "reports_new_development": {
    "type": "noul",
    "instructions": {
      "question": "Does `article` report a specific development that happened around `article.published_at`?",
      "focus": "The page itself must report one thing that just happened. Trackers, roundups of many items, explainers, guides, rankings, reference pages, and opinion do not count."
    },
    "criteria": {
      "true": {
        "what": "A news report or official announcement of one recent release, launch, law, or ruling",
        "examples": [
          "Lab X releases a new open-weights model",
          "Framework X ships version 2 with a new agent runtime",
          "Governor signs AI hiring bill into law"
        ]
      },
      "false": {
        "what": "Evergreen or aggregate content: release trackers, 'AI updates today' or 'this week in AI' roundups, explainers, guides, rankings and listicles, reference pages, or opinion",
        "examples": [
          "New AI models: live release tracker",
          "AI updates today (October)",
          "Top 7 AI agent frameworks in 2026",
          "What is an AI agent?"
        ]
      }
    }
  },
  "about_topic": {
    "type": "noul",
    "instructions": {
      "question": "Is `article` mainly about `watch.topic`?",
      "focus": "The topic must be the subject, not a passing mention."
    }
  },
  "materiality": {
    "type": "score",
    "instructions": {
      "question": "How much should `watch.team` care about `article`, given `watch.cares_about`?",
      "focus": "Judge whether it changes what the team can build or must do, not how interesting it is."
    },
    "criteria": [
      {
        "what": "Noise: commentary, predictions, minor patches, or news with no practical effect",
        "examples": [
          "Experts debate whether AI agents are overhyped",
          "Tool X fixes a typo in its docs"
        ]
      },
      {
        "what": "Minor: small feature updates, proposals, early-stage bills, or niche releases",
        "examples": [
          "Tool X adds a dark mode",
          "Senator introduces an AI bill"
        ]
      },
      {
        "what": "Material: a notable model release, a significant new or updated agent framework or tool, a law passed or taking effect, final guidance, or a ruling",
        "examples": [
          "Lab X releases a frontier model",
          "Framework X 2.0 adds multi-agent orchestration",
          "AI disclosure law takes effect January 1"
        ]
      }
    ]
  }
}

Chaque question vise une seule propriété :

CléTypeQuestionCe qu’elle élimine
reports_new_developmentnoulL’article annonce-t-il un fait précis et récent ?Les récapitulatifs « cette semaine dans l’IA », les guides, classements, définitions et tribunes
about_topicnoulLe sujet est-il le thème principal ?Les articles qui ne font que mentionner le sujet, et les dérives de la recherche
materialityscore 0 à 2À quel point l’équipe doit-elle s’en soucier ?Les annonces mineures ou sans effet pratique (0 = bruit, 1 = mineur, 2 = important)

Notez la structure de chaque question : une question courte, un focus qui précise le piège à éviter, et des criteria avec des exemples de ce qui compte et de ce qui ne compte pas. C’est la méthode recommandée par TypeSafe : des questions étroites, une seule propriété par question, et le contexte placé dans des champs nommés plutôt que dans la question.

Pourquoi une question dédiée à la nouveauté ? D’après le dépôt du template, la première version ne demandait que le sujet et l’importance : sur ses premiers résultats réels, les 4 articles retenus étaient des pages d’encyclopédie, des fiches de bases de données et un article explicatif. Ils décrivent des faits réels, mais ce ne sont pas des nouvelles. La question reports_new_development a corrigé l’essentiel.

Ce que Jev renvoie

Pour chaque article, la sortie contient un objet answers avec une clé par question. Sous forme simplifiée (valeurs fictives) :

{
  "answers": {
    "reports_new_development": {
      "noul": 0.93
    },
    "about_topic": {
      "noul": 0.97
    },
    "materiality": {
      "score": 1.6,
      "confidence": 0.71
    }
  }
}

Le nœud a deux réglages de robustesse : un délai maximal de 30 secondes et l’option On Error → Continue. Si Jev échoue sur un article, le workflow continue ; l’article n’a pas de réponses et le filtre suivant l’écarte.

Le filtre : trois seuils obligatoires

Le nœud Garder les actus importantes (Filter) ne laisse passer un article que si les trois conditions sont réunies (combinaison AND) :

{
  "conditions": {
    "options": {
      "caseSensitive": true,
      "leftValue": "",
      "typeValidation": "strict",
      "version": 2
    },
    "conditions": [
      {
        "id": "f30491d6-5d0e-4e09-9c1d-9b91ecb1c3f3",
        "leftValue": "={{ $json.answers?.reports_new_development?.noul ?? 0 }}",
        "rightValue": 0.8,
        "operator": {
          "type": "number",
          "operation": "gte"
        }
      },
      {
        "id": "d6c12adb-15ec-493f-affc-cdd4ac13363c",
        "leftValue": "={{ $json.answers?.about_topic?.noul ?? 0 }}",
        "rightValue": 0.8,
        "operator": {
          "type": "number",
          "operation": "gte"
        }
      },
      {
        "id": "549a2838-3fe9-4e79-9978-568964683d91",
        "leftValue": "={{ $json.answers?.materiality?.score ?? 0 }}",
        "rightValue": "={{ $('Config').first().json.materialityThreshold }}",
        "operator": {
          "type": "number",
          "operation": "gte"
        }
      }
    ],
    "combinator": "and"
  },
  "options": {}
}

Le ?? 0 remplace une réponse absente par 0 : un article non évalué est donc toujours rejeté. Les seuils 0,8 / 0,8 / 1,3 ne sont pas arbitraires : l’auteur du template les a réglés sur 674 articles collectés pendant 8 semaines, dont 160 étiquetés à la main. Sur les semaines de contrôle, la part de vraies nouvelles parmi les articles publiés passe de 74 % avec les premiers seuils à 89 % avec les seuils retenus, pour 18 histoires importantes repérées sur 23.

Étape 6 : regrouper par sujet et rédiger avec You.com Research

Le nœud Détails des articles retenus récupère le sujet, le titre et l’URL depuis Préparer article. Puis Regrouper par sujet (Summarize) produit un item par sujet, avec deux listes : appended_title et appended_url.

{
  "fieldsToSummarize": {
    "values": [
      {
        "aggregation": "append",
        "field": "title"
      },
      {
        "aggregation": "append",
        "field": "url"
      }
    ]
  },
  "fieldsToSplitBy": "topic",
  "options": {}
}

Exemple de sortie pour un sujet :

{
  "topic": "AI agent tooling",
  "appended_title": [
    "Framework X 2.0 adds multi-agent orchestration",
    "Framework X ships v2 with new runtime"
  ],
  "appended_url": [
    "https://exemple-media-a.com/framework-x-2",
    "https://exemple-media-b.com/x-v2"
  ]
}

Le nœud You.com Research : rédiger le brief reçoit ces listes dans sa consigne. Elle demande 1 à 4 puces, une par développement distinct, avec ce qui s’est passé et pourquoi c’est important, en fusionnant les articles qui parlent de la même chose. J’ai ajouté la phrase « Write the brief in French » pour obtenir un brief en français :

{
  "operation": "research",
  "researchEffort": "lite",
  "input": "={{ 'Write a short morning brief on ' + $json.topic + ' for ' + $('Config').first().json.team + '. Write the brief in French. In 1 to 4 bullet points, one per distinct development, say what happened and why it matters. Merge articles that cover the same development, and use product and model names exactly as the articles give them. Today's articles: ' + $json.appended_title.map((t, i) => t + ' (' + $json.appended_url[i] + ')').join('; ') }}"
}

L’effort lite suffit pour résumer des articles déjà sélectionnés et coûte environ 0,012 $ par sujet. Les niveaux standard, deep et exhaustive creusent davantage. Le niveau frontier impose le mode tâche de fond : le nœud renvoie un task_id qu’il faut interroger avec l’opération Get Research Task jusqu’au statut completed. Pour un brief quotidien, restez en lite.

La réponse arrive dans output.content (texte Markdown avec des citations du type [[1, 2]]) et output.sources (la liste des URL citées).

Étape 7 : formater et publier dans Slack

Comment créer une veille quotidienne automatisée avec n8n ?

Slack n’utilise pas le Markdown standard mais son propre format, appelé mrkdwn : le gras s’écrit *texte* et un lien <url|libellé>. Le nœud Formater pour Slack fait la conversion en une seule expression. Voici la même logique, plus lisible, sous forme de nœud Code que vous pouvez utiliser à la place :

// Nœud Code – Mode : Run Once for Each Item
// Remplace le nœud « Formater pour Slack »
const sources = $json.output?.sources ?? [];
let body = $json.output?.content ?? '';

// 1. Markdown → mrkdwn Slack
body = body
  .replace(/**(.+?)**/g, '*$1*')   // **gras** → *gras*
  .replace(/^#+s*(.+)$/gm, '*$1*');   // # Titre → *Titre*

// 2. Citations [[1, 3]] → liens cliquables <url|[1]><url|[3]>
body = body.replace(/[[([d,s]+)]]/g, (m, nums) =>
  nums.split(',')
    .map(n => n.trim())
    .filter(n => sources[n - 1])
    .map(n => `<${sources[n - 1].url}|[${n}]>`)
    .join('')
);

// 3. En-tête du message
const g = $('Regrouper par sujet').item.json;
const nb = g.appended_url.length;
const meta = nb + (nb === 1 ? ' nouvel article' : ' nouveaux articles') + ' depuis hier';

return {
  json: {
    text: ['*' + g.topic + ' : brief du matin*', '_' + meta + '_', '', body.trim()].join('n')
  }
};

Ce script fait trois choses : il convertit le gras et les titres, il transforme chaque citation [[1, 3]] en liens cliquables vers les sources, et il ajoute un en-tête avec le sujet et le nombre d’articles. Le nœud Publier dans Slack envoie ensuite le texte dans le canal, avec l’aperçu automatique des liens désactivé pour garder un message compact :

{
  "select": "channel",
  "channelId": {
    "__rl": true,
    "mode": "name",
    "value": "veille-ia"
  },
  "text": "={{ $json.text }}",
  "otherOptions": {
    "includeLinkToWorkflow": false,
    "unfurl_links": false,
    "unfurl_media": false
  }
}

Les jours calmes, le filtre de l’étape 5 ne laisse rien passer. Les nœuds suivants ne reçoivent aucun item et ne s’exécutent pas : aucun message n’est publié, et vous ne payez aucune rédaction. Un sujet sans actualité importante ne génère pas de message, même si les autres en ont un.

Étape 8 : tester, vider l’historique, activer

  1. Testez la collecte : cliquez sur Execute workflow et ouvrez chaque nœud. Vous devez voir environ 45 items après Un item par article (3 sujets × 15 articles).
  2. Contrôlez le jugement de Jev : dans la sortie du nœud Jev, comparez les scores avec les titres. Un récapitulatif hebdomadaire doit avoir un reports_new_development faible.
  3. Vérifiez Slack : si aucun article ne passe, baissez temporairement materialityThreshold à 0,5 pour voir un message arriver, puis remettez 1,3.
  4. Videz l’historique de déduplication : mode Clear Deduplication History sur le nœud 7, une exécution, retour au mode normal.
  5. Activez le workflow (bouton Active ou Publish selon votre version de n8n). Il tournera du lundi au vendredi à 8 h.

Laissez tourner une semaine avant de toucher aux seuils. Si les matins calmes vous paraissent vides, baissez légèrement materialityThreshold. Si le brief se remplit d’annonces secondaires, montez-le.

Deux scripts utiles pour aller plus loin

Script 1 : un journal pour régler les seuils

Pour ajuster les seuils sur vos propres données, il faut voir aussi les articles rejetés. Ajoutez un nœud Code en mode Run Once for Each Item branché en sortie du nœud Jev, en parallèle du filtre, puis envoyez son résultat vers une Data Table n8n ou une Google Sheet (opération Append Row) :

// Nœud Code – Mode : Run Once for Each Item
// À brancher en sortie du nœud Jev, en parallèle du filtre
const a = $('Préparer article').item.json;
const r = $json.answers ?? {};
const seuil = $('Config').first().json.materialityThreshold;

const nouveaute = r.reports_new_development?.noul ?? 0;
const dansLeSujet = r.about_topic?.noul ?? 0;
const materialite = r.materiality?.score ?? 0;

return {
  json: {
    date: $now.toISODate(),
    sujet: a.topic,
    titre: a.title,
    url: a.url,
    nouveaute,
    dans_le_sujet: dansLeSujet,
    materialite,
    retenu: nouveaute >= 0.8 && dansLeSujet >= 0.8 && materialite >= seuil,
    erreur_jev: !$json.answers
  }
};

Au bout d’une semaine, triez le tableau par materialite : vous verrez exactement quels articles auraient été retenus avec un seuil à 1,0 ou à 1,5, et vous pourrez choisir en connaissance de cause.

Script 2 : la mise en forme Slack lisible

C’est le nœud Code présenté à l’étape 7. Il produit le même résultat que l’expression du template, mais il est plus facile à modifier : ajouter un émoji par sujet, changer l’en-tête, ou produire du HTML pour un e-mail à la place du format Slack.

Variante : une file « à vérifier »

Jev renvoie une confiance avec chaque score. Vous pouvez transformer le Filter en Switch à deux sorties : les articles au-dessus du seuil partent dans le brief, ceux entre 1,0 et 1,3 partent dans un canal #veille-a-verifier pour une relecture humaine. Vous ne perdez rien, et le brief principal reste court.

Combien coûte un brief par matin ?

PosteVolume type (3 sujets)Coût indicatif
You.com Search3 recherchesSelon votre offre You.com
JevJusqu’à 45 articlesEnviron 0,00004 $ par article, soit moins de 0,2 centime
You.com Research (lite)0 à 3 synthèsesEnviron 0,012 $ par sujet qui a de l’actualité
TotalEnviron 0,01 à 0,04 $ par matin

Jev est facturé 0,042 $ par million de jetons en entrée ; les sorties sont gratuites. Sur n8n Cloud, Jev peut aussi être payé en crédits Gateway : ils étaient gratuits jusqu’au 10 octobre 2026, le tarif standard s’applique depuis. Les jours calmes coûtent moins cher, puisque la rédaction ne tourne pas.

Que faire si le brief n’arrive pas ?

SymptômeCause probableSolution
Le nœud You.com ou TypeSafe AI est introuvableLe paquet n’est pas installéSettings → Community Nodes, installez le paquet indiqué dans les prérequis
Erreur 422 sur la rechercheinclude_domains combiné à exclude_domains ou boost_domainsGardez soit l’inclusion seule, soit exclusion et favoris
Premier brief vide après les testsHistorique de déduplication rempli par les testsMode Clear Deduplication History, une exécution, retour au mode normal
Tous les articles sont rejetésSeuil trop haut, ou team trop vagueDécrivez précisément l’équipe ; testez avec un seuil à 0,5 puis remontez
Les réponses de Jev sont videsIdentifiant TypeSafe absent ou invalide (l’erreur est masquée par Continue)Vérifiez l’identifiant sur le nœud Jev et regardez sa sortie
Erreur Slack not_in_channelL’app n’est pas invitée dans le canal/invite @Brief IA dans le canal
Le brief arrive à 10 h ou 6 hFuseau horaire en UTCParamètres du workflow → Timezone : Europe/Paris
Le brief est en anglaisLa consigne de rédaction ne précise pas la langueVérifiez la phrase « Write the brief in French » dans le nœud Research

Les synthèses sont sourcées, mais un résumé automatique peut se tromper sur un détail. Les liens sont là pour vérifier avant de relayer une information.

Quel premier sujet allez-vous confier à votre brief ?

Un bon brief quotidien ne résume pas tout ce qui paraît : il dit ce qui a changé et pourquoi c’est important pour vous. Ce workflow y parvient en séparant les rôles : You.com cherche et rédige, Jev trie pour presque rien, n8n orchestre et mémorise. Commencez avec un seul sujet que vous suivez déjà à la main, décrivez précisément votre équipe dans Config, et laissez tourner une semaine avant de régler le seuil.

Ce workflow est une adaptation en français du template officiel de Tyler Eastman (You.com), publié sous licence MIT et présenté sur le blog de n8n. Le template original est aussi disponible dans la bibliothèque de n8n.

Annexe : le JSON complet du workflow

Copiez ce JSON et collez-le sur un canevas n8n vide (Ctrl+V), ou enregistrez-le dans un fichier .json puis utilisez Import from File. Pensez ensuite à sélectionner vos identifiants sur les nœuds You.com, Jev et Slack.

Afficher le JSON complet (15 nœuds, dont une note d’emploi)
{
  "name": "Brief IA quotidien : You.com + Jev vers Slack (version FR)",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "weeks",
              "triggerAtDay": [
                1,
                2,
                3,
                4,
                5
              ],
              "triggerAtHour": 8
            }
          ]
        }
      },
      "id": "54bef4ee-debd-4d98-bb1f-28714dc0e862",
      "name": "Chaque jour ouvré à 8 h",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.3,
      "position": [
        620,
        300
      ]
    },
    {
      "parameters": {
        "mode": "manual",
        "assignments": {
          "assignments": [
            {
              "id": "110421af-af49-42f6-ac63-5ec4c04f4514",
              "name": "topics",
              "type": "array",
              "value": "["AI model releases", "AI agent tooling", "AI regulation"]"
            },
            {
              "id": "dcf77306-e88c-40c8-b512-a8b0074cbc75",
              "name": "team",
              "type": "string",
              "value": "A team of developers building AI agents and AI-powered products"
            },
            {
              "id": "3d7aa478-b42a-46c5-b90c-3c0fe0057454",
              "name": "caresAbout",
              "type": "array",
              "value": "["New AI models they could build with", "New or significantly updated agent frameworks, SDKs, and developer tools", "Laws, rules, or rulings that change what they can ship"]"
            },
            {
              "id": "1d6375a4-852c-4c62-82b2-337cf80de027",
              "name": "materialityThreshold",
              "type": "number",
              "value": 1.3
            }
          ]
        },
        "options": {}
      },
      "id": "937f0262-c5d4-4f00-b296-2df29e9c66e3",
      "name": "Config",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.5,
      "position": [
        840,
        300
      ]
    },
    {
      "parameters": {
        "fieldToSplitOut": "topics",
        "include": "noOtherFields",
        "options": {
          "destinationFieldName": "topic"
        }
      },
      "id": "51ee7c4d-4009-4f5a-8b79-0c81d9e8507c",
      "name": "Un item par sujet",
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [
        1060,
        300
      ]
    },
    {
      "parameters": {
        "operation": "search",
        "query": "={{ $json.topic + ' news' }}",
        "searchOptions": {
          "count": 15,
          "freshness": "day"
        }
      },
      "id": "46dcacb9-032d-45fc-89dd-d99a3ec807df",
      "name": "You.com : chercher les actus du jour",
      "type": "@youdotcom-oss/n8n-nodes-youdotcom.youDotCom",
      "typeVersion": 1,
      "position": [
        1280,
        300
      ]
    },
    {
      "parameters": {
        "fieldToSplitOut": "results.web",
        "include": "noOtherFields",
        "options": {
          "destinationFieldName": "article"
        }
      },
      "id": "26c2efa7-b93d-48f2-a1c0-34579d493f0c",
      "name": "Un item par article",
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [
        1500,
        300
      ]
    },
    {
      "parameters": {
        "mode": "manual",
        "assignments": {
          "assignments": [
            {
              "id": "8f390467-44bb-471e-a7d6-4c76842bd52b",
              "name": "topic",
              "type": "string",
              "value": "={{ $('Un item par sujet').item.json.topic }}"
            },
            {
              "id": "5f8ee638-b3a6-4c4f-9562-53e3afbf745b",
              "name": "title",
              "type": "string",
              "value": "={{ $json.article.title }}"
            },
            {
              "id": "cb480b37-ab3e-4c06-b799-f6eb08433fe9",
              "name": "description",
              "type": "string",
              "value": "={{ $json.article.description ?? '' }}"
            },
            {
              "id": "1fd63598-a0ef-4f9e-9768-4bcff91e52bd",
              "name": "url",
              "type": "string",
              "value": "={{ $json.article.url }}"
            },
            {
              "id": "2ca20fbc-1a41-4c26-a6b0-a6b33d4a492e",
              "name": "urlKey",
              "type": "string",
              "value": "={{ $json.article.url.split('?')[0].split('#')[0] }}"
            },
            {
              "id": "65b5acfd-deed-4fb8-a69f-a911020e420e",
              "name": "publishedAt",
              "type": "string",
              "value": "={{ $json.article.page_age ?? '' }}"
            }
          ]
        },
        "options": {}
      },
      "id": "d468f4ab-8410-4b08-89f9-9de294bacf87",
      "name": "Préparer article",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.5,
      "position": [
        1720,
        300
      ]
    },
    {
      "parameters": {
        "operation": "removeItemsSeenInPreviousExecutions",
        "dedupeValue": "={{ $json.urlKey }}",
        "options": {}
      },
      "id": "d3067054-8112-4718-95fb-a5562cda571b",
      "name": "Écarter les articles déjà vus",
      "type": "n8n-nodes-base.removeDuplicates",
      "typeVersion": 2,
      "position": [
        1940,
        300
      ]
    },
    {
      "parameters": {
        "operation": "evaluate",
        "model": {
          "mode": "list",
          "value": "jev-latest",
          "cachedResultName": "jev-latest"
        },
        "stateFormat": "json",
        "stateJson": "={{ { watch: { topic: $json.topic, team: $("Config").first().json.team, cares_about: $("Config").first().json.caresAbout }, article: { title: $json.title, description: $json.description, url: $json.url, published_at: $json.publishedAt } } }}",
        "questionsFormat": "json",
        "questionsJson": "{"reports_new_development":{"type":"noul","instructions":{"question":"Does `article` report a specific development that happened around `article.published_at`?","focus":"The page itself must report one thing that just happened. Trackers, roundups of many items, explainers, guides, rankings, reference pages, and opinion do not count."},"criteria":{"true":{"what":"A news report or official announcement of one recent release, launch, law, or ruling","examples":["Lab X releases a new open-weights model","Framework X ships version 2 with a new agent runtime","Governor signs AI hiring bill into law"]},"false":{"what":"Evergreen or aggregate content: release trackers, 'AI updates today' or 'this week in AI' roundups, explainers, guides, rankings and listicles, reference pages, or opinion","examples":["New AI models: live release tracker","AI updates today (October)","Top 7 AI agent frameworks in 2026","What is an AI agent?"]}}},"about_topic":{"type":"noul","instructions":{"question":"Is `article` mainly about `watch.topic`?","focus":"The topic must be the subject, not a passing mention."}},"materiality":{"type":"score","instructions":{"question":"How much should `watch.team` care about `article`, given `watch.cares_about`?","focus":"Judge whether it changes what the team can build or must do, not how interesting it is."},"criteria":[{"what":"Noise: commentary, predictions, minor patches, or news with no practical effect","examples":["Experts debate whether AI agents are overhyped","Tool X fixes a typo in its docs"]},{"what":"Minor: small feature updates, proposals, early-stage bills, or niche releases","examples":["Tool X adds a dark mode","Senator introduces an AI bill"]},{"what":"Material: a notable model release, a significant new or updated agent framework or tool, a law passed or taking effect, final guidance, or a ruling","examples":["Lab X releases a frontier model","Framework X 2.0 adds multi-agent orchestration","AI disclosure law takes effect January 1"]}]}}",
        "options": {
          "timeout": 30000
        }
      },
      "id": "352631c3-6695-44bf-8c66-65eb48577a1e",
      "name": "Jev : évaluer chaque article",
      "type": "@typesafe-ai/n8n-nodes-typesafe-ai.typeSafeAi",
      "typeVersion": 1,
      "position": [
        2240,
        300
      ],
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "f30491d6-5d0e-4e09-9c1d-9b91ecb1c3f3",
              "leftValue": "={{ $json.answers?.reports_new_development?.noul ?? 0 }}",
              "rightValue": 0.8,
              "operator": {
                "type": "number",
                "operation": "gte"
              }
            },
            {
              "id": "d6c12adb-15ec-493f-affc-cdd4ac13363c",
              "leftValue": "={{ $json.answers?.about_topic?.noul ?? 0 }}",
              "rightValue": 0.8,
              "operator": {
                "type": "number",
                "operation": "gte"
              }
            },
            {
              "id": "549a2838-3fe9-4e79-9978-568964683d91",
              "leftValue": "={{ $json.answers?.materiality?.score ?? 0 }}",
              "rightValue": "={{ $('Config').first().json.materialityThreshold }}",
              "operator": {
                "type": "number",
                "operation": "gte"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "93c8f517-f15e-48b2-8b8b-f5b4276f0bba",
      "name": "Garder les actus importantes",
      "type": "n8n-nodes-base.filter",
      "typeVersion": 2.3,
      "position": [
        2460,
        300
      ]
    },
    {
      "parameters": {
        "mode": "manual",
        "assignments": {
          "assignments": [
            {
              "id": "af988600-9d0c-45b0-b68d-36b65850958d",
              "name": "topic",
              "type": "string",
              "value": "={{ $('Préparer article').item.json.topic }}"
            },
            {
              "id": "c39ddd1e-15d6-4e86-991b-b0765a23261d",
              "name": "title",
              "type": "string",
              "value": "={{ $('Préparer article').item.json.title }}"
            },
            {
              "id": "e4091127-ed45-4851-b3c7-eeb326679520",
              "name": "url",
              "type": "string",
              "value": "={{ $('Préparer article').item.json.url }}"
            }
          ]
        },
        "options": {}
      },
      "id": "2edfaacf-0d4b-46b1-ba9c-3efc8ffea88f",
      "name": "Détails des articles retenus",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.5,
      "position": [
        2680,
        300
      ]
    },
    {
      "parameters": {
        "fieldsToSummarize": {
          "values": [
            {
              "aggregation": "append",
              "field": "title"
            },
            {
              "aggregation": "append",
              "field": "url"
            }
          ]
        },
        "fieldsToSplitBy": "topic",
        "options": {}
      },
      "id": "4a76224b-de51-4122-8df2-91401d9a48a9",
      "name": "Regrouper par sujet",
      "type": "n8n-nodes-base.summarize",
      "typeVersion": 1.1,
      "position": [
        2980,
        300
      ]
    },
    {
      "parameters": {
        "operation": "research",
        "researchEffort": "lite",
        "input": "={{ 'Write a short morning brief on ' + $json.topic + ' for ' + $('Config').first().json.team + '. Write the brief in French. In 1 to 4 bullet points, one per distinct development, say what happened and why it matters. Merge articles that cover the same development, and use product and model names exactly as the articles give them. Today's articles: ' + $json.appended_title.map((t, i) => t + ' (' + $json.appended_url[i] + ')').join('; ') }}"
      },
      "id": "2b7d02ec-0b03-4022-870e-ea59183052f0",
      "name": "You.com Research : rédiger le brief",
      "type": "@youdotcom-oss/n8n-nodes-youdotcom.youDotCom",
      "typeVersion": 1,
      "position": [
        3200,
        300
      ]
    },
    {
      "parameters": {
        "mode": "manual",
        "assignments": {
          "assignments": [
            {
              "id": "dd517439-38d7-44d6-8956-ffa76a13036c",
              "name": "text",
              "type": "string",
              "value": "={{ (() => { const sources = $json.output?.sources ?? []; const body = ($json.output?.content ?? '').replace(/**(.+?)**/g, '*$1*').replace(/^#+s*(.+)$/gm, '*$1*').replace(/[[([d,s]+)]]/g, (m, n) => n.split(',').map(i => i.trim()).filter(i => sources[i - 1]).map(i => `<${sources[i - 1].url}|[${i}]>`).join('')); const g = $('Regrouper par sujet').item.json; const meta = g.appended_url.length + (g.appended_url.length === 1 ? ' nouvel article' : ' nouveaux articles') + ' depuis hier'; return ['*' + g.topic + ' : brief du matin*', '_' + meta + '_', '', body.trim()].join('n'); })() }}"
            }
          ]
        },
        "options": {}
      },
      "id": "bad003cc-e78e-4624-9359-5b176cd0437b",
      "name": "Formater pour Slack",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.5,
      "position": [
        3420,
        300
      ]
    },
    {
      "parameters": {
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "name",
          "value": "veille-ia"
        },
        "text": "={{ $json.text }}",
        "otherOptions": {
          "includeLinkToWorkflow": false,
          "unfurl_links": false,
          "unfurl_media": false
        }
      },
      "id": "63a4fe46-5637-48e9-8e3e-934c5afe3004",
      "name": "Publier dans Slack",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2.7,
      "position": [
        3640,
        300
      ]
    },
    {
      "parameters": {
        "content": "## Brief IA quotidien (version FR)nnAdapté du template officiel de Tyler Eastman (You.com), licence MIT :nhttps://github.com/youdotcom-oss/n8n-ai-brief-workflownn1. Ajoutez vos identifiants **You.com API** sur les 2 nœuds You.com.n2. Ajoutez **TypeSafe AI API** sur le nœud Jev (clé sur console.typesafe.ai).n3. Ajoutez **Slack** et vérifiez le canal (#veille-ia).n4. Modifiez **Config** : sujets, équipe, centres d'intérêt.nn⚠️ Les tests marquent les articles comme « déjà vus » : videz l'historique de déduplication avant l'activation.",
        "height": 420,
        "width": 520,
        "color": 1
      },
      "id": "5b0f6a8e-2d4c-4b7e-9f1a-0c3d2e1f4a5b",
      "name": "Mode d'emploi",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        160,
        -200
      ]
    }
  ],
  "connections": {
    "Chaque jour ouvré à 8 h": {
      "main": [
        [
          {
            "node": "Config",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Config": {
      "main": [
        [
          {
            "node": "Un item par sujet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Un item par sujet": {
      "main": [
        [
          {
            "node": "You.com : chercher les actus du jour",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "You.com : chercher les actus du jour": {
      "main": [
        [
          {
            "node": "Un item par article",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Un item par article": {
      "main": [
        [
          {
            "node": "Préparer article",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Préparer article": {
      "main": [
        [
          {
            "node": "Écarter les articles déjà vus",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Écarter les articles déjà vus": {
      "main": [
        [
          {
            "node": "Jev : évaluer chaque article",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Jev : évaluer chaque article": {
      "main": [
        [
          {
            "node": "Garder les actus importantes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Garder les actus importantes": {
      "main": [
        [
          {
            "node": "Détails des articles retenus",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Détails des articles retenus": {
      "main": [
        [
          {
            "node": "Regrouper par sujet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Regrouper par sujet": {
      "main": [
        [
          {
            "node": "You.com Research : rédiger le brief",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "You.com Research : rédiger le brief": {
      "main": [
        [
          {
            "node": "Formater pour Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Formater pour Slack": {
      "main": [
        [
          {
            "node": "Publier dans Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1",
    "timezone": "Europe/Paris"
  },
  "pinData": {}
}

FAQ

Quels outils faut-il pour créer ce brief IA avec n8n ?

Une instance n8n (Cloud ou auto-hébergée), les nœuds You.com et TypeSafe AI, une clé API You.com, une clé API TypeSafe (ou des crédits Gateway sur n8n Cloud) et une app Slack autorisée à publier dans un canal.

C’est quoi, You.com et Jev ?

You.com est un moteur de recherche pour l’IA : son API cherche l’actualité (Search) et rédige des synthèses sourcées (Research). Jev est un modèle de TypeSafe AI qui n’écrit pas de texte : il répond à des questions fermées (oui/non, score, choix) avec une probabilité. Il sert ici de trieur, pour environ 0,00004 $ par article.

Faut-il savoir coder ?

Non. Le workflow n’utilise que des nœuds natifs et des expressions. Les deux scripts proposés sont optionnels et se collent tels quels dans un nœud Code.

Peut-on recevoir le brief par e-mail plutôt que dans Slack ?

Oui. Remplacez le dernier nœud par Gmail, Outlook ou Send Email, et adaptez le nœud de mise en forme : le script de l’étape 7 se modifie facilement pour produire du HTML.

Pourquoi certains matins je ne reçois rien ?

C’est voulu : si aucun article ne passe les trois seuils, rien n’est publié. Si cela arrive trop souvent, baissez materialityThreshold ou précisez team et caresAbout.

Peut-on suivre l’actualité française ?

Oui, en ajoutant les options Country et Language au nœud de recherche et en écrivant les sujets en français. Les seuils ont été réglés sur des articles en anglais : contrôlez les résultats avec le journal de calibration pendant une semaine.

Défiler vers le haut
Formations Analytics