--- title: Content Pipeline url: https://blog.guigpap.com/fr/workflows/content-pipeline/ url_md: https://blog.guigpap.com/fr/workflows/content-pipeline.md category: automation date: '2026-03-28' maturite: production techno: - n8n - telegram - claude - github application: - automation - content - knowledge --- # Content Pipeline > Pipeline Telegram vers Obsidian pour capturer notes, articles de blog et recherches via IA ## 1. Quoi ? — Definition et contexte Une idee vous vient sous la douche, vous la dictez en vocal sur Telegram. Un article interessant passe dans votre feed, vous envoyez l'URL au bot. Vous prenez une photo d'un tableau blanc apres une reunion. Chaque fois, le **Content Pipeline** structure le contenu avec Claude et le stocke comme note Obsidian dans un vault GitHub — pret a etre retrouve, enrichi, ou publie. > **Note - Obsidian** > > **Obsidian** est un editeur de notes en Markdown qui stocke tout en fichiers locaux. En utilisant un depot GitHub comme vault, les notes sont versionnees, accessibles partout, et synchronisables entre appareils. ### Six types de contenu supportes | Commande | Type | Entree | Sortie | |----------|------|--------|--------| | `/note` | Note | Texte libre | Note structuree avec wikilinks | | `/blog` | Blog | Texte libre | Article avec intro, corps, conclusion | | `/research` | Recherche | Sujet | Analyse approfondie avec sources | | (URL) | URL | Lien web | Resume + points cles + citations | | (vocal) | Voice | Audio | Transcription nettoyee et structuree | | (photo) | Photo | Image | Texte OCR corrige et structure | ### Architecture ```mermaid flowchart TD TG["Telegram · /note /blog /research, URL, vocal, photo"] subgraph Pipeline["Content Pipeline · ~12 nodes"] direction TB Consolidate["Consolidate input · normalize text/URL/audio/photo"] Claude["Claude Sonnet via cli-ollama · prompt par type"] Gen["Generate Markdown + frontmatter YAML"] Pending["Insert pending · n8n_pending_actions TTL 24h"] end Preview["Telegram preview · Sauvegarder / Annuler"] GH["GitHub API · obsidian-vault"] TG --> Consolidate --> Claude --> Gen --> Pending --> Preview Preview -->|Sauvegarder| GH ``` --- ## 2. Pourquoi ? — Enjeux et motivations ### Problemes resolus | Probleme | Sans pipeline | Avec pipeline | |----------|---------------|---------------| | **Idees perdues** | Note dans un coin, jamais retrouvee | Vault Obsidian indexe et versionne | | **Mise en forme** | Texte brut sans structure | Claude structure avec frontmatter | | **Contenu eparpille** | Notes ici, bookmarks la | Un seul vault, un seul workflow | | **Publication laborieuse** | Copier-coller entre apps | `/blog` → article pret a publier | ### Pourquoi un workflow de review ? Le contenu genere par Claude n'est pas stocke directement. L'utilisateur recoit d'abord un apercu sur Telegram avec le titre, les tags, le chemin cible et les 500 premiers caracteres. Deux boutons permettent de valider ou annuler. C'est un filet de securite contre les erreurs de classification ou les notes mal formees. > **Tip - Expiration automatique** > > Les contenus en attente de validation expirent apres 24 heures. Un workflow de nettoyage supprime les pendants non valides pour eviter l'accumulation. --- ## 3. Comment ? — Mise en oeuvre technique ### Le parcours d'un contenu **1. Reception** — L'Orchestrateur Telegram detecte une commande `/note`, `/blog`, `/research`, une URL, un vocal, ou une photo et route vers le Content Pipeline. **2. Consolidation** — Un node Code normalise l'entree : le texte est extrait, les URLs sont fetchees (tronquees a 8000 caracteres), les vocaux arrivent deja transcrits, les photos deja OCRisees. **3. Generation Claude** — Le LLM (Claude Sonnet via CLI Ollama, timeout 120s) recoit un prompt specifique au type de contenu. Chaque prompt definit la structure attendue, le frontmatter YAML, et les conventions de formatage (wikilinks pour les notes, sections pour les blogs, sources pour les recherches). **4. Stockage temporaire** — Le Markdown genere est stocke dans la Data Table `n8n_pending_actions` avec un identifiant court (8 caracteres hex) et une expiration 24h. **5. Preview** — L'utilisateur recoit un message Telegram avec l'apercu du contenu et deux boutons : ```text 📝 Nouvelle note Titre : Docker Networking Guide Tags : docker, networking, guide Chemin : notes/tech/2026-02-19-docker-networking-guide.md Docker networking in practice involves understanding bridge networks, overlay networks, and host mode... [... tronque] [Sauvegarder] [Annuler] ``` **6. Sauvegarde** — Au clic sur [Sauvegarder], l'Orchestrateur cree le fichier dans le depot GitHub `guigpap/obsidian-vault` via l'API et envoie une confirmation. ### Classification automatique Le chemin de stockage est determine par le type et les tags : | Condition | Chemin | |-----------|--------| | Type = research | `knowledge/` | | Type = blog | `notes/projects/` | | Tag contient "project" | `notes/projects/` | | Tag contient "reference" | `notes/reference/` | | Defaut | `notes/tech/` | Le fichier est nomme `{date}-{slug}.md` (ex: `2026-02-19-docker-networking-guide.md`). ### Format de sortie Chaque note est un fichier Markdown avec frontmatter YAML : ```yaml --- title: "Docker Networking Guide" tags: [docker, networking, guide] date: 2026-02-19 source: "telegram" status: "draft" type: "note" slug: "docker-networking-guide" --- ``` Pour les articles de blog, deux champs supplementaires sont generes : `description` (meta description) et une structure avec Introduction, Corps, Conclusion. Pour les recherches, le contenu inclut : Vue d'ensemble, Points cles, Details techniques, Sources, Sujets connexes. --- ## 4. Et si ? — Perspectives et limites ### Limites actuelles | Limite | Impact | Mitigation | |--------|--------|------------| | **Pas de deduplication** | Envoyer 2x la meme URL = 2 notes | L'utilisateur peut annuler | | **OCR imparfait** | Photos de mauvaise qualite = texte brouillon | Claude corrige les erreurs evidentes | | **Pas de recherche dans le vault** | Retrouver une note = parcourir les fichiers | Tags + Obsidian search + Qdrant (prevu) | ### Scenarios d'evolution **Si besoin de publication automatique** : - Le workflow [Obsidian Blog Publisher](/fr/workflows/obsidian-publish/) peut prendre le relais - Les notes de type `blog` avec `status: ready` sont candidates a la publication **Si besoin de recherche semantique** : - Generer des embeddings pour chaque note - Stocker dans Qdrant pour une recherche vectorielle - Commande `/search` dans Telegram pour interroger le vault **Si volume de notes augmente** : - Ajouter des sous-dossiers par mois ou par projet - Creer un index automatique dans Obsidian - Digest hebdomadaire des notes recentes --- ## Pages liees ### Workflows - [Telegram Orchestrator](/fr/workflows/telegram-orchestrator/) — Routage des commandes contenu - [Voice Transcription](/fr/workflows/voice-transcription/) — Transcription des messages vocaux - [YouTube Digest](/fr/workflows/youtube-digest/) — Pipeline similaire pour les videos ### Infrastructure - [AI Stack](/fr/infrastructure/ai-stack/) — CLI Ollama pour Claude ## Metadonnees agent - Cet article est issu du blog GuiGPaP Lab. - Contexte global du blog: https://blog.guigpap.com/llms.txt - Contact auteur: https://odoo.guigpap.com/mon-cv - Licence: CC-BY-SA 4.0