- Ajouter ADR-018 (librairies Go) dans TECHNICAL.md - Transformer Shared en menu dépliable dans mkdocs (cohérence avec autres domaines) - Corriger listes markdown (ajout lignes vides avant listes) - Corriger line breaks dans génération BDD (étapes "Et" sur nouvelles lignes) - Ajouter script fix-markdown-lists.sh pour corrections futures Impacte 86 fichiers de documentation et 164 fichiers BDD générés.
10 KiB
6. Publicités
6.1 Système de campagnes publicitaires
Décision : Interface self-service avec maîtrise budget et métriques détaillées
Fonctionnalités publicitaire :
Création de campagne
Paramètres configurables :
| Paramètre | Options | Justification |
|---|---|---|
| Budget total | Montant libre (min 50€) | Maîtrise coût total |
| Durée campagne | Date début/fin + étalement | Ex: 300€ sur 2 semaines |
| Ciblage géographique | Point GPS / Ville / Département / Région / National | Précision selon besoin |
| Ciblage horaire | Plages horaires (ex: 7h-9h, 17h-19h) - Heure locale utilisateur | Optimisation trajet domicile-travail |
| Centres d'intérêt | Tags (ex: Automobile, Voyage) | Ciblage thématique |
| Tranche d'âge | Tout public / 13+ / 16+ / 18+ | Respect classifications |
Précision ciblage horaire :
Règle 1 : Ciblage horaire = Heure locale utilisateur
Une campagne "7h-9h" diffuse entre 7h-9h heure locale de chaque utilisateur, quel que soit son fuseau horaire.
Exemples :
Campagne : 7h-9h (rush matin)
User Marseille (UTC+1) à 8h locale → ✅ Diffusion
User Guadeloupe (UTC-4) à 8h locale → ✅ Diffusion
User Réunion (UTC+4) à 8h locale → ✅ Diffusion
User Métropole à 13h locale → ❌ Pas de diffusion (hors plage)
Implémentation technique :
// Backend détecte fuseau horaire user (GPS ou device settings)
const userTimezone = getUserTimezone(); // "Europe/Paris", "America/Guadeloupe", etc.
const userLocalTime = DateTime.now().setZone(userTimezone);
const userHour = userLocalTime.hour; // 0-23
// Campagne pub
const campaign = {
hours: [7, 8, 9], // 7h-9h inclut 7h, 8h (se termine à 9h)
// ...
};
// Vérification diffusion
if (campaign.hours.includes(userHour)) {
// ✅ Diffuser pub
}
Détection fuseau horaire :
- GPS (latitude/longitude) → déterminer fuseau via base IANA Time Zone
- Si GPS désactivé → paramètres device (timezone OS)
- Fallback : IP geolocation → fuseau approximatif
Règle 2 : Ciblage "France" = Métropole + DOM
France entière inclut :
- France métropolitaine (96 départements)
- Guadeloupe (971)
- Martinique (972)
- Guyane (973)
- Réunion (974)
- Mayotte (976)
Publicitaire peut affiner :
- "Région Provence-Alpes-Côte d'Azur" → Métropole uniquement
- "Département 971" → Guadeloupe uniquement
- "Ville Pointe-à-Pitre" → Guadeloupe uniquement
Interface publicitaire :
┌────────────────────────────────────────┐
│ Ciblage géographique │
├────────────────────────────────────────┤
│ ○ National (France entière) │
│ ● Région │
│ [Provence-Alpes-Côte d'Azur ▼] │
│ │
│ ○ Département │
│ [13 - Bouches-du-Rhône ▼] │
│ │
│ ○ Ville │
│ ○ Point GPS + rayon │
└────────────────────────────────────────┘
ℹ️ Note : "National (France entière)" inclut les DOM
(Guadeloupe, Martinique, Réunion, Guyane, Mayotte)
Cas d'usage et cohérence :
Cas 1 : Publicitaire local Guadeloupe
Restaurant à Pointe-à-Pitre
Campagne :
- Zone : Guadeloupe (département 971)
- Horaires : 12h-14h (rush déjeuner)
User Guadeloupe à 12h30 locale → ✅ Diffusion (dans zone + horaire)
User Métropole à 12h30 locale → ❌ Pas diffusion (hors zone géo)
User Martinique à 12h30 locale → ❌ Pas diffusion (hors zone géo)
Cas 2 : Campagne nationale rush matin
Assureur national
Campagne :
- Zone : France (nationale)
- Horaires : 7h-9h + 17h-19h
User Marseille 8h locale → ✅ Diffusion (rush matin métropole)
User Réunion 8h locale → ✅ Diffusion (rush matin Réunion, UTC+4)
→ En métropole il est 5h (nuit), mais user Réunion est bien en rush matin
Cas 3 : User en déplacement change de fuseau
User en métropole
→ Télécharge 50 contenus + pubs
→ Part en vacances Réunion (UTC+4)
→ Device détecte nouveau fuseau (GPS)
→ Écoute à 8h locale Réunion
Filtrage pubs :
→ Heure locale = 8h Réunion
→ Campagne 7h-9h → ✅ Diffusion
Justification :
- ✅ UX intuitive pour publicitaires : "7h-9h" = matin partout (pas besoin comprendre UTC)
- ✅ Équité géographique : pas de discrimination DOM-TOM, publicitaires locaux peuvent cibler local, campagnes nationales touchent tous Français
- ✅ Simplicité technique : détection fuseau automatique (GPS ou device), PostgreSQL
AT TIME ZONEpour calculs backend - ✅ Standard industrie : Google Ads, Facebook Ads = heure locale par défaut
Étalement budget :
Exemple campagne :
- Budget : 300€
- Durée : 14 jours
- Zone : Département du Var
- Horaires : 7h-9h + 17h-19h (rush)
Calcul automatique :
→ Budget/jour = 300€ / 14 = 21.43€/jour
→ Diffusions/jour estimées : ~430 (0.05€/écoute)
→ Alerte si budget épuisé avant fin (réajustement possible)
Mode de paiement :
- ✅ Prépaiement obligatoire (évite impayés)
- ✅ Carte bancaire uniquement (Mangopay)
- ✅ Recharge automatique optionnelle (si budget <10%)
Validation et modération
Processus :
- Publicitaire upload audio pub (formats : MP3, AAC)
- Validation manuelle obligatoire (modérateur RoadWave)
- Délai : 24-48h ouvrées
- Critères : respect réglementation, qualité audio, classification correcte
- Si accepté → campagne démarre à la date choisie
- Si refusé → email avec raison + remboursement automatique
Contenus interdits en pub :
- ❌ Alcool, tabac (réglementation française)
- ❌ Jeux d'argent
- ❌ Contenu politique (pendant campagnes électorales)
- ❌ Contenu sexuel ou violence
- ✅ Tous commerces/services légaux
Dashboard métriques engagement
Indicateurs temps réel :
| Métrique | Description | Utilité |
|---|---|---|
| Impressions | Nombre de diffusions | Volume exposition |
| Écoutes complètes | Pub écoutée >80% | Engagement réel |
| Taux de skip | % skip après délai min | Qualité contenu |
| Durée moyenne écoute | Secondes écoutées | Rétention attention |
| Likes | Nombre de likes | Appréciation contenu |
| Abonnements | Abonnements au créateur pub | Conversion forte |
| Coût par écoute | Budget / écoutes complètes | ROI campagne |
| Répartition géographique | Heatmap diffusions | Validation ciblage |
| Répartition horaire | Graphique par heure | Optimisation horaires |
Métriques engagement avancées :
- Taux complétion par tranche d'âge : identifier audience réceptive
- Carte de chaleur GPS : visualiser zones forte écoute
- Comparatif campagnes : A/B testing créatifs publicitaires
Export données :
- ✅ CSV/Excel pour analyse externe
- ✅ Graphiques interactifs (Chart.js)
- ✅ Rapport PDF automatique fin de campagne
Gestion budget et alertes
Suivi temps réel :
- Dashboard : Budget restant, % consommé, jours restants
- Projection : "À ce rythme, budget épuisé dans X jours"
- Alerte email/push si :
- Budget consommé à 80%
- Budget consommé à 90%
- Budget épuisé
- Campagne terminée (rapport final)
Ajustements en cours :
- ✅ Pause campagne (budget conservé)
- ✅ Prolonger campagne (recharge budget)
- ✅ Modifier ciblage horaire/géo (si <50% budget consommé)
- ❌ Modifier audio (nécessite nouvelle validation)
Système d'enchères (post-MVP)
Optionnel future :
- Enchère au CPM (coût pour 1000 impressions)
- Priorité selon prix : pub prix élevé → diffusion privilégiée
- Floor price : 2€ CPM minimum
- Évite surcharge pub : max 1 pub / 5 contenus stricte
Justification décision MVP :
- Tarif fixe simple : 0.05€/écoute complète
- Pas de complexité enchères immédiatement
- Scalable : passage enchères ultérieur si demande forte
6.2 Insertion et fréquence
Décision : Paramétrable admin + respect expérience utilisateur
Fréquence d'insertion :
- Défaut : 1 pub / 5 contenus (utilisateurs gratuits)
- Paramétrable admin : curseur 1/3 à 1/10
- Utilisateurs Premium : 0 pub (modèle sans publicité)
Règles strictes :
- ⚠️ Jamais d'interruption contenu en cours
- Pub s'insère uniquement entre deux contenus (pendant délai 2s)
- Rotation : même pub max 3 fois/jour par utilisateur (évite saturation)
- Limite : max 6 pubs/heure par utilisateur (évite spam)
Ciblage intelligent :
- Géolocalisation prioritaire (point GPS > ville > département > région > national)
- Centres d'intérêt secondaires (tags utilisateur)
- Horaire (campagne 7h-9h → diffusion uniquement pendant plage heure locale utilisateur, voir section 6.1 pour détails fuseaux horaires et DOM-TOM)
Volume audio normalisé :
- Pub normalisée à -14 LUFS (standard broadcast)
- Évite effet "pub trop forte" (frustration utilisateur)
- Validation automatique via FFmpeg lors encodage
6.3 Caractéristiques publicités
Durée :
- Minimum : 10 secondes
- Maximum : 60 secondes
- Recommandé : 15-30 secondes (sweet spot engagement)
Skippable :
- Délai minimum obligatoire : 5 secondes (paramétrable admin : 3-10s)
- Bouton "Passer la publicité" apparaît après délai
- Durée minimale comptabilisée pour facturation
Facturation :
- Écoute complète (>80%) : 0.05€ facturé publicitaire
- Skip après délai min : 0.02€ (exposition partielle)
- Skip immédiat (<5s) : 0€ (pas d'engagement)
Justification modèle tarif :
- Incitatif qualité : pub engageante = coût réduit
- Équitable : publicitaire paie pour attention réelle
- Transparent : dashboard montre écoutes complètes vs skips