Youhou, on a enfin construit un workflow fonctionnel qui transforme n’importe quel article en une note Notion structurée — voici ce qui a vraiment fait la différence :
On lit beaucoup - et on garde presque rien.
Pas parce qu’on ne veut pas — parce que l’écart entre « c’est intéressant » et « c’est organisé et retrouvable plus tard » a toujours été juste assez grand pour qu’on l’ignore. Les signets du navigateur sont devenus un cimetière. Les applications de lecture ultérieure sont devenues un cimetière plus grand.
Donc on a construit quelque chose pour combler cet écart.
L’idée est simple
Envoyer une URL. Obtenir une note Notion structurée. Ne plus y penser.
En pratique : un webhook reçoit l’URL, le workflow récupère la page, un nœud Code la réduit au contenu lisible, OpenAI la résume en JSON structuré, et Notion l’enregistre avec titre, résumé, points clés, tags, URL source et date — tout mappé automatiquement aux bonnes propriétés.
Webhook → HTTP Request → Code Node → OpenAI → Notion
Ce qui fait vraiment marcher le truc
La version initiale allait directement de HTTP Request à OpenAI. Les résumés étaient médiocres et le coût était élevé. Ça a pris du temps de comprendre pourquoi.
Une page web typique n’est pas un article. C’est un article enfoui dans 30 000 à 80 000 tokens de HTML de navigation, de paquets de scripts, de banneau de cookies, de pixels de suivi et de noms de classes CSS. Le modèle dépensait la plupart de sa fenêtre contextuelle sur du bruit.
La solution est trois remplacements regex et une substring dans un nœud Code :
const input = $input.first().json;
const html = input.data || input.body || input.html || input;
const text = String(html)
.replace(/<script[\s\S]*?<\/script>/gi, ' ')
.replace(/<style[\s\S]*?<\/style>/gi, ' ')
.replace(/<[^>]+>/g, ' ')
.replace(/\s+/g, ' ')
.trim()
.substring(0, 8000);
return [{ json: { text, url: $('Webhook').item.json.body.url } }];
Supprime d’abord les scripts, puis les styles, puis toutes les balises restantes, réduit l’espace blanc, tronque à 8 000 caractères. Fait passer la charge utile d’environ 60K tokens à moins de 4K. Le modèle ne voit que ce qui importe. Les résumés se sont améliorés. Le coût a baissé significativement.
Le prompt
Summarize this article as a research note. Return JSON:
{"title":"","summary":"","key_insights":[],"tags":[]}
Text: {{ $json.text }}
Le mode de sortie JSON est activé dans les paramètres du nœud. Le nœud Notion mappe directement aux champs sans étape d’analyse nécessaire.
Ce qui se retrouve dans Notion
Six propriétés par note — Titre, Résumé, Points clés (format à puces), Tags (sélection multiple), URL, Date d’enregistrement. Assez propre pour être réellement utilisable plus tard.
Deux choses à savoir avant de le lancer
Certains sites bloquent les requêtes automatisées. Ajouter User-Agent: Mozilla/5.0 en en-tête sur le nœud HTTP Request et la plupart de ces 403 disparaissent.
Les SPA lourds en JavaScript renvoient du HTML vide sans contenu — la page se rend côté client après le chargement. Pour ceux-là, je passe d’abord l’URL par un service de lecture ultérieure pour obtenir le texte rendu, puis j’envoie ça au webhook à la place.
Le JSON sera partagé, n’hésitez pas à répondre. La seule chose à mettre à jour est l’ID de la base de données Notion dans le nœud Notion — prenez-le de votre URL de base de données. Partagez la base de données avec votre intégration n8n avant de tester ou l’écriture échouera silencieusement.
Content de répondre aux questions sur n’importe quelle partie de la construction.
Tags: show-and-tell knowledge-management notion openai webhook code-node productivity