⚙️
Home/⚙️Spécifications — Scripts d'automatisation CEBTG

Spécifications — Scripts d'automatisation CEBTG

Document de référence pour les scripts d'automatisation du projet tibetain.cebtg.ch.
Dernière mise à jour : 5 septembre 2026 — ajout du support des annexes de leçon (Script 1 + vues Notion).

🧭 Vue d'ensemble

Table de référence rapide. Pour le détail de chaque ligne, voir la section correspondante plus bas sur la page.
Script / intégration
Rôle
Déclenchement
Automatisé ?
Script 1 — sync_local_ftp_notion.py
PDFs kDrive → FTP + Ressources Pédagogiques
Manuel, après dépôt de PDF
❌ Mac local uniquement (accès disque)
Script 2 — sync_caldav_notion.py
Calendrier kCalendar → base Cours à venir
Hebdomadaire + manuel
✅ GitHub Actions, chaque lundi 6h
Script 3 — sync_youtube_notion.py
Playlists YouTube → base Replays YouTube
Manuel, après replay publié
❌ (candidat GitHub Actions)
Script 4 — sync_youtube_summaries.py
Sous-titres → résumé IA (Claude) dans Replays
Manuel, après Script 3
❌ (candidat GitHub Actions)
Script 5 — populate_sujet_relation.py
Relie Ressources ↔ Sujets (rollup Nombre de leçons)
Manuel, après nouveau sujet/leçons
Make.com — segments Bullet
Paiement Stripe → accès Bullet
Automatique (webhook)
✅ Actif en production depuis avril 2026
bullet-webhook.php
Nouveau membre Bullet → fiche Contacts JM
Automatique (webhook)

🏗️ Infrastructure & environnement d'exécution

Infrastructure générale

  • Notion — CMS et bases de données
  • kDrive Infomaniak — stockage des fichiers PDF
  • kCalendar Infomaniak — calendrier des cours (CalDAV)
  • Bullet.so — publication web (tibetain.cebtg.ch)
  • Tally Pro — formulaires d'inscription
  • YouTube — replays des cours (chaîne @falcolito)
  • Anthropic API — génération des résumés automatiques (Claude)
  • Webshare — proxy résidentiel rotatif (contournement blocage YouTube)

Environnement d'exécution

Tous les scripts tournent sur le Mac local de Jean-Marc, lancés manuellement selon les besoins.
Activation de l'environnement virtuel (obligatoire avant tout script) :
source ~/venv-cebtg/bin/activate
Dossier des scripts :
~/Documents/MesScripts/kDrive - Notion/
Dépendances Python (installées une seule fois) :
pip install yt-dlp requests anthropic youtube-transcript-api
Fichier de configuration : config.json dans le même dossier.
Structure du config.json :
{ "notion": { "token": "secret_...", "db_replays_youtube": "740058cf0fa1470cb93e4de1c43d0efb", "db_ressources": "90340df9fcbb480f80d86b7b7c473dc3" }, "anthropic": { "api_key": "sk-ant-..." }, "options": { "dry_run": true, "log_file": "sync_local_ftp_notion.log", "log_file_youtube": "sync_youtube_notion.log", "log_file_summaries": "sync_youtube_summaries.log", "miniature_largeur_px": 400, "caldav_horizon_jours": 90 } }

📚 Bases de données Notion

Base
ID
Usage
Contacts JM
afac5f30dd154106969fff73bc2feab5
Étudiants inscrits
Ressources Pédagogiques
90340df9fcbb480f80d86b7b7c473dc3
Supports PDF des cours
Cours à venir
84b33cbc7c7e49deb63967674c81eed4
Calendrier des séances
Replays YouTube
740058cf0fa1470cb93e4de1c43d0efb
Vidéos des cours
⚠️ Propriété Type de contenu (Ressources Pédagogiques) — options au 5 septembre 2026 : Grammaire, Vocabulaire, Texte philosophique, Exercices, Leçon, Replay, Annexe (nouveau). Voir Script 1 ci-dessous pour la logique de détection automatique.

📜 Scripts Python

Script 1 — sync_local_ftp_notion.py

Rôle : Synchronise les PDFs depuis kDrive local vers le serveur FTP Infomaniak et crée les entrées dans Ressources Pédagogiques avec miniatures. Détecte automatiquement s'il s'agit d'une leçon ou d'une annexe de leçon.
Quand le lancer : Après chaque dépôt de nouveau PDF dans kDrive.
⚠️ Toujours enchaîner avec Script 5 (populate_sujet_relation.py) juste après — Script 1 crée la fiche dans Ressources Pédagogiques mais ne remplit jamais la relation Sujet lui-même. Sans Script 5, la fiche reste orpheline. Voir la section Script 5 plus bas, ou directement le workflow Après chaque PDF en fin de page.
Commandes :
cd ~/Documents/MesScripts/kDrive\ -\ Notion source ~/venv-cebtg/bin/activate # ✅ CAS HABITUEL — ajout de nouveaux PDFs (ignore ceux déjà dans Notion) python3 sync_local_ftp_notion.py --sync --new-only # ✅ CAS HABITUEL — un seul PDF précis python3 sync_local_ftp_notion.py --sync --file Tib1/2025-2026/sujet/lecon-06.pdf # Simulation préalable (sans --sync) — voir ce qui serait traité python3 sync_local_ftp_notion.py --new-only # Sync complète (tous les PDFs — MET À JOUR les existants aussi — lent, ~20-30 min) python3 sync_local_ftp_notion.py --sync # Test de connexion FTP uniquement python3 sync_local_ftp_notion.py --ftp-test
⚠️ Fonctionnement du mode simulation et règle des deux options :
  • dry_run: true dans config.json → le script simule sans rien modifier (recommandé par défaut)
  • L'option --sync est toujours nécessaire pour une exécution réelle
  • L'option --new-only est indépendante : elle filtre les PDFs déjà présents dans Notion, quelle que soit la présence de --sync
  • ⚠️ Erreur fréquente : --new-only seul (sans --sync) = simulation uniquement des nouveaux. Il faut toujours combiner --sync --new-only pour le workflow quotidien.
Commande
Effet
(aucun argument)
Simulation complète (tous les PDFs)
--new-only
Simulation, nouveaux uniquement
--sync
Exécution réelle, tous les PDFs (met à jour les existants)
--sync --new-only
Exécution réelle, nouveaux uniquement — commande du quotidien
--sync --file Tib1/…/lecon.pdf
Exécution réelle, un seul fichier précis
Ce que fait le script :
  • Lit les PDFs dans /Users/jm/kDrive/Cours de tibétain/Tibétain/
  • Détecte le type de contenu depuis le nom du fichier (Leçon ou Annexe — voir ci-dessous)
  • Les uploade sur le FTP Infomaniak (579j3l.ftp.infomaniak.com, user 579j3l_cebtg_jm) vers sites/cebtg.ch/cours/
  • Génère une miniature PNG de la première page via PyMuPDF
  • Crée ou met à jour la fiche dans Ressources Pédagogiques (pivot : kDrive Path)
  • URL publique des PDFs : https://cebtg.ch/cours/TibX/AAAA-AAAA/sujet/lecon-NN.pdf
Arborescence de référence (kDrive local) — mise à jour au 5 septembre 2026 d'après capture d'écran du Finder :
Tibétain/ Bonus/ (hors périmètre Script 1) Grammaire/ (hors périmètre Script 1) Miniatures/ (généré par Script 1, pas une source) Tib1/ 2021-2022/ tchenrezi-1/ 2022-2023/ tchenrezi-2/ 2024-2025/ dorje-tchang-thungma/ 2025-2026/ bodhicaryavatara/ dakayeshe/ 2026-2027/ bodhicaryavatara-2/ Tib2/ 2022-2023/ sutra-du-coeur/ 2023-2024/ sutra-pousse-de-riz-1/ 2024-2025/ sutra-pousse-de-riz-2/ 2025-2026/ sutra-pousse-de-riz-3/ 2026-2027/ sutra-pousse-de-riz-4/ Tib3/ 2023-2024/ 37-pratiques-des-bodhisattvas-1/ 2024-2025/ 37-pratiques-des-bodhisattvas-2/ sangtcheu-meunlam-1/ 2025-2026/ sangtcheu-meunlam-2/ 2026-2027/ sangtcheu-meunlam-3/
✅ Arborescence entièrement vérifiée d'après capture d'écran du Finder (5 septembre 2026).
⚠️ Convention de nommage des dossiers : minuscules, tirets à la place des espaces (ex. nouveau-sujet). Le script convertit automatiquement en texte lisible (Nouveau sujet) pour le champ Chapitre/Section dans Notion.

Convention de nommage des fichiers PDF — Leçon vs Annexe (mise à jour 5 septembre 2026 — plusieurs annexes par leçon)

Nom de fichier
Type de contenu
Titre généré
lecon-80.pdf
Leçon
Leçon 80 — Sutra pousse de riz 3
annexe-1-lecon-80.pdf
Annexe
Annexe 1 — Leçon 80 — Sutra pousse de riz 3
annexe-2-lecon-80.pdf
Annexe
Annexe 2 — Leçon 80 — Sutra pousse de riz 3
annexe-lecon-01.pdf (ancien format)
Annexe
Annexe — Leçon 1 — …
  • Tout fichier dont le nom commence par annexe- (insensible à la casse) est reconnu comme une annexe.
  • Format actuel — plusieurs annexes par leçon : annexe-N-lecon-NN.pdf, où N est le numéro de l'annexe (1, 2, 3…) et NN le numéro de la leçon à laquelle elle se rattache. Chaque annexe reçoit un titre distinct (Annexe 1 — …, Annexe 2 — …) tout en partageant le même Ordre que la leçon, pour rester groupées dans les tris Notion.
  • Ancien format, toujours reconnu : annexe-lecon-NN.pdf (une seule annexe pour la leçon, sans numéro d'annexe).
  • À défaut de correspondance avec l'un de ces deux motifs, le script retombe sur le premier nombre trouvé dans le nom de fichier.
  • Aucune autre modification n'est nécessaire pour ajouter des annexes à un sujet existant : il suffit de déposer les fichiers annexe-N-lecon-NN.pdf dans le même dossier que les leçons, puis de lancer la synchro habituelle.
Affichage séparé sur les pages Espace : pour qu'un niveau/année distingue visuellement les annexes des leçons, créer une seconde vue Galerie sur la base Ressources Pédagogiques intégrée à la page Espace concernée, avec le même filtre Niveau + Année scolaire active que la vue existante, plus Type de contenu = Annexe ; et ajouter Type de contenu ≠ Annexe à la vue des leçons pour éviter les doublons. Déjà en place sur Espace Tib 2 — 2026-2027 (onglets « Leçons 2026-2027 » et « Annexes 2026-2027 »). À répliquer manuellement sur les autres pages Espace si des annexes y sont ajoutées.
Ajouter un nouveau sujet de cours :
Aucune modification du script n'est nécessaire. Il suffit de :
  1. Créer le dossier sur le Mac : Tibétain/TibX/AAAA-AAAA/nom-du-sujet/
  2. Attendre la synchronisation kDrive
  3. Déposer les PDFs dans ce dossier (lecon-NN.pdf et, le cas échéant, annexe-lecon-NN.pdf)
  4. Lancer python3 sync_local_ftp_notion.py --sync --new-only
Le script créera automatiquement les fiches Notion, uploadera les PDFs sur le FTP et générera les miniatures, sans retraiter les leçons déjà synchronisées. Le champ Chapitre/Section sera déduit du nom du dossier.

Script 2 — sync_caldav_notion.py

Rôle : Synchronise le calendrier kCalendar Infomaniak vers la base "Cours à venir" dans Notion.
⚡ Automatisé via GitHub Actions depuis le 11 mai 2026.
Dépôt GitHub : falco36/cebtg-scripts (privé)
Déclenchement automatique : chaque lundi à 6h00 heure de Zurich — aucune action requise.
Déclenchement manuel (depuis iPhone ou navigateur) :
  1. Aller sur github.com/falco36/cebtg-scripts
  2. Onglet ActionsSync CalDAV Notion
  3. Bouton Run workflowRun workflow (vert)
Commandes manuelles Mac (backup) :
cd ~/Documents/MesScripts/kDrive\ -\ Notion source ~/venv-cebtg/bin/activate python3 sync_caldav_notion.py --dry-run # simulation python3 sync_caldav_notion.py # sync réelle
Secrets GitHub configurés (Settings → Secrets → Actions) :
  • ICS_URL — URL export ICS kCalendar Infomaniak
  • NOTION_TOKEN — token API Notion
  • NOTION_DB_COURS_A_VENIR — ID base Cours à venir
  • FTP_HOST / FTP_USER / FTP_PASS / FTP_REMOTE_BASE — accès FTP Infomaniak
Ce que fait le script :
  • Télécharge le calendrier ICS depuis Infomaniak
  • Détecte les cours dans les 90 prochains jours
  • Crée ou met à jour les fiches dans "Cours à venir" (pivot : CalDAV UID)
  • Archive les fiches des cours disparus du calendrier
  • Génère et uploade agenda.html sur le FTP Infomaniak

Script 3 — sync_youtube_notion.py

Rôle : Synchronise les playlists YouTube vers la base "Replays YouTube" et insère la vidéo embarquée dans chaque fiche.
Quand le lancer : Après chaque nouveau replay publié sur YouTube.
Commandes :
cd ~/Documents/MesScripts/kDrive\ -\ Notion source ~/venv-cebtg/bin/activate # ✅ CAS HABITUEL — une seule nouvelle vidéo (quelques secondes) python3 sync_youtube_notion.py --video VIDEO_ID # Nouvelles vidéos uniquement — ignore les existantes (rapide) python3 sync_youtube_notion.py --new-only # Simulation sans écriture python3 sync_youtube_notion.py --dry-run # Sync complète de toutes les playlists (rare — ~15-20 min) python3 sync_youtube_notion.py
Durée approximative : ~15-20 minutes pour une sync complète. Pour le workflow habituel, utiliser --video VIDEO_ID.
Intelligence intégrée :
  • Si une fiche a déjà un bloc vidéo embarquée → le corps n'est pas réécrit
  • Utilise Video ID comme pivot (pas de doublons)
  • Parse la date depuis le titre YouTube ("le 08.04.26")
  • Déduit l'année scolaire depuis la date
Playlists synchronisées (9) :
Playlist ID
Niveau
Sujet
PLuXH8SCX5XpSC1fxvAmr5h8QE6X27LLmK
Tib 1
Bodhicaryāvatāra ch.3
PLuXH8SCX5XpQNZduN8rJymkyo2bku0CEy
Tib 1
Dakayéshé
PLuXH8SCX5XpR4V36sWdPjnvH1dkb6oWib
Tib 3
Prière de la conduite excellente
PLuXH8SCX5XpR6OAwEqUXQZvQOv-DGvB65
Tib 1
Dorjé Tchang Thungma
PLuXH8SCX5XpRhFVtVvmWpO2lbqDSCNYo-
Tib 2
Śālistamba Sūtra
PLuXH8SCX5XpSWMsUVsoIh2WRi1cbvqyEs
Tib 3
37 pratiques
PLuXH8SCX5XpTvL0gFePNqDUBE5wew0Use
Tib 1
Groupe lecture
PLuXH8SCX5XpTaynaLPw13B7MOAQjB4MqC
Tib 2
Groupe Tchenrezi
PLV2WaEBEzFWc
Tib 1
Bodhicaryavatara 2
Pour ajouter une nouvelle playlist (procédure complète) :
  1. Dans YouTube Studio, copier l'ID de la playlist (ce qui suit list= dans l'URL)
  2. Ouvrir sync_youtube_notion.py, dans la liste PLAYLISTS (ligne ~37), ajouter une ligne : ("ID_PLAYLIST", "Tib X", "Nom du Sujet", "AAAA-AAAA")
  3. ⚠️ "Nom du Sujet" doit être identique, caractère pour caractère, au titre du Sujet dans la base Sujets — sinon Script 5 ne pourra pas faire la relation
  4. Tester : python3 sync_youtube_notion.py --dry-run — vérifier que la nouvelle playlist apparaît avec le bon nombre de vidéos
  5. Exécuter réellement : python3 sync_youtube_notion.py
  6. Committer sur GitHub (via GitHub Desktop) pour que la prochaine sync via GitHub Actions connaisse aussi cette playlist
  7. ⚠️ Piège fréquent : le dossier de travail quotidien (~/Documents/MesScripts/kDrive - Notion/) et le dépôt surveillé par GitHub Desktop (~/Documents/GitHub/cebtg-scripts/) sont deux copies distinctes sur le disque. Avant de committer, copier le fichier modifié :
    cp ~/Documents/MesScripts/kDrive\ -\ Notion/sync_youtube_notion.py \ ~/Documents/GitHub/cebtg-scripts/sync_youtube_notion.py
    Sinon GitHub Desktop affiche "0 changed files" — rien à committer.
    Marche à suivre dans GitHub Desktop :
    1. Ouvrir l'app GitHub Desktop — le dépôt courant doit être cebtg-scripts, branche main
    2. Une fois le fichier copié (étape ci-dessus), l'onglet Changes affiche sync_youtube_notion.py avec 1 fichier modifié — cliquer dessus pour voir le diff (les lignes ajoutées apparaissent en vert)
    3. En bas à gauche, remplir le champ Summary (required), ex. : Ajout playlist NOM_DU_SUJET (AAAA-AAAA)
    4. Cliquer sur Commit to main
    5. Une fois le commit fait, un bouton Push origin apparaît en haut — cliquer dessus pour envoyer la modification sur GitHub
    ✅ Une fois poussé, un lancement futur du Script 3 depuis GitHub Actions (iPhone ou navigateur) connaîtra cette nouvelle playlist.
  8. Si les vidéos doivent aussi compter comme leçons d'un Sujet (compteur "Nombre de leçons") : vérifier que le PDF correspondant existe dans Ressources Pédagogiques avec le bon Chapitre/Section, puis relancer Script 5 (voir plus bas)

Script 4 — sync_youtube_summaries.py

Rôle : Extrait les sous-titres YouTube, génère un résumé pédagogique via Claude AI (Anthropic) et l'insère dans le corps de chaque fiche replay.
Quand le lancer : Après le Script 3, pour les nouvelles fiches. Ne pas relancer plus d'une fois par jour.
Commandes :
cd ~/Documents/MesScripts/kDrive\ -\ Notion source ~/venv-cebtg/bin/activate python3 sync_youtube_summaries.py # toutes les vidéos récentes (6 mois) python3 sync_youtube_summaries.py --dry-run # simulation sans écriture python3 sync_youtube_summaries.py --force # réécrire les résumés existants python3 sync_youtube_summaries.py --video VIDEO_ID # une seule vidéo
Ce que fait le script :
  • Filtre les fiches Notion des 6 derniers mois sans résumé
  • Extrait les sous-titres automatiques YouTube via youtube-transcript-api
  • Utilise le proxy Webshare résidentiel rotatif pour contourner les blocages YouTube
  • Envoie le transcript (~7000 mots) à l'API Claude Anthropic avec un prompt pédagogique
  • Insère le résumé dans la fiche Notion sous forme de callout (brun)
Format du résumé généré :
Bonjour,
Dans cette leçon… (10-15 lignes pédagogiques)
Bon replay et bonne étude !
Si vous souhaitez recevoir les supports PDF de cette leçon, merci de vous inscrire. [lien vers /inscription/]
Proxy Webshare (anti-blocage YouTube) :
  • Host : p.webshare.io, Port : 80
  • Rotation automatique parmi 10 proxies résidentiels
  • Compte : lxgnpjsa / voir config.json
  • En cas de blocage persistant : attendre quelques heures et relancer
Prérequis :
  • Clé API Anthropic dans config.json → champ anthropic.api_key
  • Crédit API Anthropic approvisionné (console.anthropic.com)

Script 5 — populate_sujet_relation.py

Rôle : Peuple la propriété relation Sujet dans la base Ressources Pédagogiques en faisant correspondre le champ Chapitre/Section (Ressources) avec le champ Clé Chapitre/Section (Sujets). Une fois la relation remplie, le rollup Nombre de leçons dans la base Sujets se calcule automatiquement.
Quand le lancer :
  • Après la création d'un nouveau sujet dans la base Sujets (renseigner sa Clé Chapitre/Section d'abord)
  • Après l'ajout de nouvelles leçons via Script 1 pour un sujet existant
  • Après correction d'un champ Chapitre/Section (utiliser --force)
Commandes :
cd ~/Documents/MesScripts/kDrive\ -\ Notion source ~/venv-cebtg/bin/activate python populate_sujet_relation.py --dry-run # simulation — affiche ce qui sera fait python populate_sujet_relation.py # exécution réelle python populate_sujet_relation.py --force # écrase les relations déjà renseignées
Ce que fait le script :
  • Compare Chapitre/Section (Ressources) avec Clé Chapitre/Section (Sujets)
  • Remplit la relation Sujet dans chaque fiche Ressource correspondante
  • Le rollup Nombre de leçons se met à jour automatiquement dans Notion
  • Ne touche pas aux fiches déjà reliées sauf si --force

🔗 Intégrations & webhooks

Make.com — Automatisation segments Bullet

Rôle : Attribue automatiquement les accès Bullet dès qu'un paiement Stripe est confirmé. Aucune action manuelle.
Flux : Stripe checkout.session.completed → webhook Make → filtre metadata.segment → API Bullet (création membre + ajout segment)
Statut : Actif en production depuis avril 2026 — 12 branches (un segment par sujet payant)
Documentation complète : voir la page ⚙️ Make.com — Automatisation segments Bullet dans Simplicity
Webhook Make : https://hook.eu2.make.com/9g5lhui4lebgncwy9wjh4rm2k11ic66k
Métadonnée Stripe requise sur chaque Payment Link : clé segment, valeur = nom exact du segment Bullet
Test sans paiement réel (Terminal, pas besoin du venv) :
curl -X POST https://hook.eu2.make.com/9g5lhui4lebgncwy9wjh4rm2k11ic66k \ -H "Content-Type: application/json" \ -d '{"type":"checkout.session.completed","data":{"object":{"metadata":{"segment":"NOM_DU_SEGMENT"},"customer_details":{"email":"EMAIL_DE_TEST"}}}}'

Webhook — bullet-webhook.php

Rôle : Reçoit les événements "User Created" de Bullet Membership et crée/met à jour la fiche dans Contacts JM.
URL déployée : https://cebtg.ch/webhooks/bullet-webhook.php
Configuration dans Bullet : Site Settings → Membership → Webhooks → Add endpoint → cocher "User Created".
Ce que fait le script :
  • Détecte les payloads de vérification Bullet (name = "testURL") → répond 200 OK sans toucher Notion
  • Pour un vrai événement : cherche le contact par email dans Contacts JM
  • Si trouvé : met à jour Tib niveau, Cours/Stages, Soutien, Dernière interaction
  • Si nouveau contact : crée la fiche complète
Correspondance segments Bullet → Notion :
Segment Bullet
Tib niveau Notion
Tib1
Tib 1
Tib2
Tib 2
Tib3
Tib 3

🚀 GitHub Actions — Pistes pour la suite

Dépôt : falco36/cebtg-scripts (privé) — base déjà en place.
Script 2 (CalDAV → Notion) ✅ automatisé — chaque lundi à 6h.
Candidats pour une automatisation future :
  • Script 3 sync_youtube_notion.py — que des appels API YouTube + Notion → parfait pour GitHub Actions. Déclenchement hebdomadaire ou manuel après chaque replay publié.
  • Script 4 sync_youtube_summaries.py — idem, API Anthropic + Notion → adaptable. Penser à surveiller la consommation API Anthropic.
  • Script 1 sync_local_ftp_notion.py — lit les fichiers locaux kDrive → restera sur Mac (GitHub Actions n'a pas accès au disque local).
Pour ajouter un script : copier le fichier dans le dépôt, créer un fichier .yml dans .github/workflows/, ajouter les secrets nécessaires dans Settings → Secrets → Actions.

✅ Workflows courants

Après chaque séance

  1. YouTube publie la vidéo
  2. python3 sync_youtube_notion.py → sync la nouvelle fiche (30 sec)
  3. python3 sync_youtube_summaries.py → génère le résumé automatique (30 sec)
  4. Publish dans Bullet → la fiche apparaît sur le site avec vidéo + résumé

Après chaque PDF (leçon ou annexe)

  1. Déposer le PDF dans kDrive (/Tibétain/TibX/AAAA-AAAA/sujet/lecon-NN.pdf ou annexe-lecon-NN.pdf)
  2. python3 sync_local_ftp_notion.py --sync --new-only → upload FTP + création fiche Notion (ignore les PDFs déjà synchronisés)
  3. python populate_sujet_relation.py → relie la nouvelle fiche à son Sujet (champ Sujet) et met à jour le rollup Nombre de leçons
  4. ⚠️ Étape à ne jamais sauter : sans elle, la ressource existe dans Notion mais reste orpheline (aucun Sujet lié), et n'apparaîtra pas correctement sur le site même si elle est publiée.
  5. Publish dans Bullet