## 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** : ```javascript // 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** : 1. GPS (latitude/longitude) → déterminer fuseau via base IANA Time Zone 2. Si GPS désactivé → paramètres device (timezone OS) 3. 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 ZONE` pour 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** : 1. Publicitaire upload audio pub (formats : MP3, AAC) 2. **Validation manuelle obligatoire** (modérateur RoadWave) - Délai : 24-48h ouvrées - Critères : respect réglementation, qualité audio, classification correcte 3. Si accepté → campagne démarre à la date choisie 4. 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 --- ## Récapitulatif Section 6