← Roadmap publique

CHANGELOG

CallTracker AWM V1.10.6Snapshot sécurisé de la version effectivement publiée. Les lignes potentiellement sensibles sont masquées automatiquement.
## 1.10.6 - Refonte UX Google Ads / CPL - 2026-09-21

- Refonte complete de la page **CallTracker AWM -> Google Ads** pour suivre le shell visuel AWM en Light et Dark.
- Ajoute un en-tete acquisition/CPL avec etats OAuth, MCC et synchronisation visibles immediatement.
- Remplace le rendu WordPress brut des champs par des cartes, champs, boutons, tableaux et etats coherents avec CallTracker.
- Ameliore fortement le responsive mobile/tablette, notamment la liste des MCC et les actions.
- Aucun changement OAuth, API Google Ads, calcul CPL, table SQL ou historique : correctif UX uniquement.

## 1.10.5 - Interface Google Ads restaurée dans CallTracker - 2026-09-21

- Ajoute une page **CallTracker AWM -> Google Ads** directement depuis le module, sans dépendre de Hub AWM -> Réglages.
- Corrige la régression où Hub AWM 4.5.57 masquait l ancien écran `callink-google-ads` alors que le moteur Google Ads 1.10.4 restait actif.
- Permet d enregistrer OAuth Client ID / Secret, les deux MCC ou davantage, puis de connecter Google Ads.
- Ajoute un test de MCC qui liste les comptes clients accessibles avant toute association de campagne.
- Conserve le moteur CPL multi-MCC 1.10.4, l historique, la formule CPL et les synchronisations automatiques.
- Le Developer Token historique reste compatible; depuis le 9 septembre 2026, Google rattache l accès API au projet Google Cloud des identifiants OAuth.

## 1.10.4 - Google Ads CPL multi-MCC automatise - 2026-09-21

- Utilise Google Ads API v25 pour recuperer `metrics.cost_micros` par MCC, compte et campagne.
- Le Developer Token devient facultatif dans le moteur: si un ancien token existe il reste envoye pour compatibilite, sinon l acces repose sur le projet Google Cloud lie aux identifiants OAuth.
- Conserve plusieurs MCC dans une seule integration CallTracker et utilise le bon `login-customer-id` par campagne.
- Ajoute la devise Google Ads, le `request-id`, la source et la fraicheur de synchronisation au CPL.
- Ajoute une synchronisation automatique par petits lots toutes les 15 minutes pour le mois courant et le mois precedent, sans longue requete bloquante.
- Une erreur Google Ads ne remplace jamais un investissement valide par zero; la campagne passe en etat `stale` avec la derniere erreur conservee.
- Etend la table CPL de facon additive avec source, devise, statut, date de synchro et metadonnees de source.
- Le mode manuel et l historique Laravel restent disponibles sans migration destructive.
- Les futurs profils OAuth multiples restent prevus seulement si les deux MCC exigent des identites Google differentes.

## 1.10.3 — Pulse v2 routage — 2026-09-12

- Le score Health CallTracker pénalise uniquement les erreurs de synchronisation/routage connues.
- Les campagnes et Twilio restent non modifiés automatiquement; le score sert au triage.

## 1.10.2 — Pulse opérationnel transversal — 2026-09-12

- Expose au Core un pulse campagnes actives / brouillons / erreurs de synchronisation routage.
- Le pulse reste strictement descriptif et ne déclenche aucune opération Twilio.

## 1.10.1 — 2026-09-11
- CallTracker respecte désormais le statut opérationnel canonique de CRM AWM.
- Un client inactif n'est plus éligible aux opérations CallTracker, tout en conservant campagnes, appels, enregistrements et historique.
- La réactivation CRM restaure l'éligibilité selon le réglage CallTracker déjà enregistré.

## 1.10.0 — 2026-09-02

- Structure le parcours client **CallTracker → Nouveaux services → Nouveau funnel → Configuration du numéro → Formulaire/Webhook → Routage**.
- Sépare définitivement la commande commerciale de l exécution technique : CRM crée et possède le service Funnel à 10 $/mois; CallTracker prépare la campagne technique.
- Un nouveau funnel commence en état **configuration requise** et n active pas la facturation récurrente tant qu aucun numéro n a été acheté et attribué.
- L achat du numéro réutilise le service CRM et la campagne préparés, revalide la disponibilité Twilio juste avant la transaction puis active le service CRM après succès.
- Un échec Twilio laisse le funnel en configuration pour permettre une nouvelle tentative sans recréer un abonnement; un achat potentiellement accepté mais incomplet est conservé pour vérification afin d éviter un double achat.
- Étend le routage modifiable par Hub Client : destination principale, fuseau, horaires, fermetures, destination hors heures, débordement séquentiel, délai et Message 2.
- Conserve toutes les validations de propriété côté serveur et journalise séparément les modifications effectuées depuis Hub Client.

## 1.9.9 — 2026-09-02

- Ajoute un webhook HTTPS unique et secret pour chaque Funnel CallTracker.
- Active automatiquement la structure de formulaire du funnel après achat du numéro et génère son URL de webhook sans exposer de secret Twilio.
- Accepte les envois POST JSON ou formulaire de plateformes externes et reconnaît les champs courants nom, courriel, téléphone, message et URL de page.
- Ajoute une protection anti-rejeu courte et un identifiant idempotent lorsque la plateforme fournit `submission_id` ou un identifiant de requête.
- Les formulaires reçus sont enregistrés dans l historique CallTracker existant et alimentent immédiatement Leads et CPL du bon funnel.
- Ajoute un test client non destructif qui vérifie campagne, jeton et stockage sans créer de faux lead.
- Conserve le dernier instant de réception par funnel pour faciliter le diagnostic dans Hub Client.

## 1.9.8 — 2026-09-02

- Ajoute la recherche sécurisée de numéros Twilio pour Hub Client sans exposer les identifiants ni les URL d API.
- Permet au client CallTracker autorisé d acheter un numéro et de créer son Funnel directement depuis son Hub.
- Chaque achat crée une campagne CallTracker, attribue le numéro et lie un service CRM Funnel à 10 $/mois.
- Le service est préparé avant l appel Twilio et supprimé automatiquement si aucun achat externe n a eu lieu.
- Si Twilio accepte l achat mais qu une étape locale échoue, la campagne est conservée pour empêcher un double achat et Alliance reçoit un état à vérifier.
- L inventaire des numéros est invalidé après achat afin de refléter immédiatement le nouveau numéro.

## 1.9.7 — 2026-09-02

- Livre la phase 1 du **Lot C — Routage avancé**.
- Ajoute des horaires hebdomadaires par campagne dans le fuseau déjà géré par CallTracker.
- Ajoute les fermetures spéciales / jours fériés au format YYYY-MM-DD.
- Ajoute une destination hors heures facultative; si elle est vide, CallTracker ferme proprement l appel au lieu de transférer vers une mauvaise route.
- Ajoute une destination de débordement séquentielle après non-réponse, occupé ou échec de la première destination.
- Ajoute un délai de sonnerie configurable de 10 à 60 secondes.
- Ajoute un aperçu de la route effective dans Hub : état Ouvert/Fermé, heure locale, destination actuelle et débordement.
- Ajoute la route Core `callink/v1/routing-next` signée par Twilio pour enchaîner le secours sans sonner deux destinations en parallèle.
- Étend Validation et santé : empreinte, horaire, destination hors heures, débordement, délai et tests requis.
- Les équipes, priorités, stratégies multi-tentatives, modèles réutilisables et tests simulés restent dans le Lot C phase 2.

# Changelog — CallTracker AWM

## 1.9.6 — 2026-08-25
- Ajoute la bascule globale de l’ancienne plateforme dans **Validation et santé**.
- Resynchronise par lots tous les numéros des campagnes actives et les numéros encore actifs dans l’export legacy retrouvés localement vers le webhook entrant AWM.
- Reprend également les numéros dont les appels entrants sont désactivés et les numéros actifs legacy retrouvés sur une campagne locale maintenant inactive; AWM garde le webhook puis bloque leur transfert.
- Refuse la finalisation si un numéro actif de l’export legacy ne correspond à aucune campagne locale, afin de ne jamais laisser un numéro oublié sur l’ancienne plateforme.
- Résout les Phone Number SID manquants, retire `VoiceFallbackUrl` et `VoiceApplicationSid`, puis relit Twilio pour confirmer la reprise.
- Ajoute progression, aperçu, erreurs par campagne, reprise sans popup et journal Core.
- Ajoute le verrou **BASCULE AWM** qui transforme Laravel en référence historique et bloque les nouveaux imports migration/CPL.
- Ajoute une réouverture exceptionnelle explicite pour les imports historiques.
- Conserve Lot C Routage avancé comme prochaine implémentation et référence l’accès API Google approuvé pour le futur Lot E CPL/Google Ads.

---

## 1.9.5 — 2026-08-25
- Corrige les campagnes existantes dont le numéro de réception a été modifié : la sauvegarde déclenche maintenant une resynchronisation du webhook entrant Twilio vers AWM.
- Vérifie le Phone Number SID; s'il manque ou ne correspond plus au numéro de campagne, le SID est recherché dans le compte Twilio configuré puis rattaché à la campagne.
- Priorité de destination explicite : numéro de transfert de campagne, puis numéro du client en fallback.
- Une modification du numéro client resynchronise automatiquement les campagnes qui utilisent ce fallback et n'ont pas d'override propre.
- Ajoute un bloc « Routage entrant Twilio » dans l'éditeur avec destination effective, dernière destination synchronisée, date, erreur éventuelle et bouton de resynchronisation manuelle.
- Conserve une empreinte de configuration afin de ne contacter Twilio que lorsqu'un élément critique de routage change.
- Journalise les synchronisations et échecs dans Core AWM sans empêcher l'enregistrement local de la campagne.
- Exige Core AWM 4.5.43.
- Utilise Hub AWM 4.5.15 pour empêcher le Heartbeat WordPress de déclencher le loader plein écran toutes les ~30 secondes dans l’éditeur.

## 1.9.4 — 2026-08-25

- Retire l'autosave WordPress natif de l'éditeur interne `callink_campaign` afin d'éviter le dialogue bloquant « Connexion perdue » et la sauvegarde locale navigateur hors du contrat AWM.
- Conserve Heartbeat pour les verrous/session, mais affiche l'état de connexion directement dans la barre **Enregistrer la campagne**.
- Affiche **Connexion active**, **Hors ligne — reconnexion automatique** ou **Connexion WordPress instable — enregistrement manuel disponible** sans modal navigateur.
- Le bouton d'enregistrement n'est désactivé que lorsque le navigateur est réellement hors ligne; une alerte Heartbeat seule n'empêche pas une tentative manuelle.
- Supprime les notices natives `lost-connection` / stockage local lorsqu'elles sont injectées dans l'éditeur de campagne.
- Exige Core AWM 4.5.42 et Hub AWM 4.5.14 pour l'expérience complète.
- Référence le correctif dans la roadmap sans marquer les validations Twilio terrain comme terminées.

---

## 1.9.3 — 2026-08-25

- Ajoute un registre persistant d idempotence pour les callbacks Twilio de statut et d enregistrement.
- Détecte les rejeux et empêche les doubles écritures sans bloquer les retries légitimes des routes TwiML.
- Empêche les statuts hors ordre de faire régresser un appel grâce à `SequenceNumber` et aux états monotones.
- Ajoute une file de reprise locale courte pour erreurs transitoires, cinq tentatives et un état échec définitif visible dans Validation et santé.
- Évite de rejouer les erreurs 4xx déterministes.
- Normalise appels et formulaires vers un temps UTC canonique et calcule les périodes CPL dans le fuseau de chaque campagne.
- Retire l URL Twilio brute du contrat client et passe la lecture des enregistrements par un proxy sécurisé Core/Hub Client.
- Exige Core AWM 4.5.41; l expérience client complète utilise Hub Client AWM 1.8.7.
- Met à jour roadmap et documentation sans marquer les validations terrain comme terminées.

---

## 1.9.2 — 2026-08-25

- Ajoute le centre **Validation et santé** accessible depuis Hub AWM.
- Compare les compteurs de migration attendus et importés pour clients, campagnes, numéros, appels, formulaires et périodes CPL, en tenant compte des exclusions persistantes.
- Analyse les doublons, orphelins et incohérences de propriétaire afin de faire ressortir les exceptions avant clôture.
- Ajoute un diagnostic par campagne : client, numéro, SID Twilio, affectation, webhook entrant, destination, fuseau horaire, Message 1, Message 2, Dialer, enregistrement et dernière activité.
- Ajoute un parcours de tests guidés pour la configuration, l’appel entrant, la destination, le CPL, le Dialer sortant, l’enregistrement et les messages audio selon les réglages actifs.
- Permet d’approuver une campagne seulement après validation explicite; l’approbation est liée à une empreinte SHA-256 des paramètres critiques et devient périmée si ceux-ci changent.
- Ferme l’exposition client du CPL par défaut : Core et Hub Client n’affichent que les campagnes approuvées, avec un état **CPL en validation** pour les autres.
- Ajoute une clôture de migration signée et réversible après approbation des campagnes actives; la clôture est refusée lorsque des exceptions bloquantes subsistent ou qu’une campagne active reste non approuvée; les campagnes inactives peuvent être revues séparément pour leur CPL historique.
- Remplace les confirmations navigateur natives des principaux flux CallTracker actifs par des confirmations AWM intégrées : inventaire de numéros, achats/réservations, campagnes, imports, CPL, Twilio, Google Ads, audio et historique.
- Journalise les validations, approbations, réouvertures et clôtures dans Core AWM.
- Exige Core AWM 4.5.39, Hub AWM 4.5.13 et Hub Client AWM 1.8.6 pour l’expérience complète.

---

## 1.9.1 — 2026-08-24

- Ajoute un marqueur de résultat explicite pour les opérations natives de campagne : corbeille, restauration, suppression définitive et enregistrement groupé.
- Ces résultats sont consommés par le loader AWM au lieu d’un bandeau WordPress.
- Le mécanisme reste compatible avec l’action native « Annuler » extraite par Hub lorsque WordPress la fournit.
- Aucun changement de tables, métas, routes métier, tombstones, historique ou formule CPL.

---

## 1.9.0 — 2026-08-24

- Corrige définitivement le lien WordPress `Toutes` noir sur noir : `.subsubsub` est stylé directement car WordPress le rend hors de `#posts-filter`.
- Ajoute les réglages par campagne **Enregistrer les appels**, **Dialer côté client** et **Fuseau horaire**.
- Le fuseau proposé provient uniquement de la fiche CRM/WHMCS; aucune recherche d’adresse externe n’est lancée.
- Les appels entrants peuvent demander un enregistrement Twilio conditionnel avec callback Core; les métadonnées d’enregistrement sont synchronisées dans l’historique canonique.
- Les appels sortants restent visibles mais strictement exclus des leads et du CPL.
- La migration réutilise le réglage historique `record_call` pour initialiser le nouveau réglage sans rupture.

## 1.8.1 — 2026-08-24

- Corrige le listing WordPress des campagnes pour qu’il hérite entièrement des couleurs du shell AWM en clair/sombre.
- Rétablit le contraste de « Toutes », filtres, pagination, champs de recherche, tableaux et actions lorsque le thème sombre est changé dynamiquement.
- Remplace les fonds noirs opaques du listing par les surfaces partagées Hub/Core sans modifier les campagnes ni leur historique.

## 1.8.0 — 2026-08-24

- Ajoute le routage entrant par campagne avec **Message 1 — Avertissement** puis **Message 2 — Publicité** avant la redirection.
- Intègre le MP3 d’avertissement Alliance par défaut; Alliance peut le remplacer ou revenir au fichier par défaut.
- Permet au client de téléverser/remplacer/supprimer son Message 2 MP3, de l’activer/désactiver et de modifier son numéro de réception uniquement pour ses campagnes.
- Ajoute le contrôle administratif complet des deux messages et de la destination depuis la fiche client Hub AWM.
- Stocke les MP3 dans un répertoire privé Alliance, limite à 5 Mo, valide la signature MP3 et les sert par une URL Core signée.
- Écrit maintenant les nouveaux appels Twilio entrants et sortants dans `callink_calls` en plus du post type historique; les callbacks mettent à jour statut et durée de façon idempotente.
- Les appels sortants apparaissent dans l’historique comme **Sortant** mais restent strictement exclus des leads et du CPL.
- Conserve la migration Laravel, les identifiants historiques, les exclusions anti-réimportation et les routes existantes.

---

# Changelog — CallTracker AWM

## 1.7.0 — 2026-08-19

- Rafraîchit le lot de migration à partir de l’export Laravel du 19 août 2026.
- Intègre 69 306 appels et 44 712 formulaires attribuables; conserve 17 appels et 2 379 formulaires orphelins hors attribution.
- Utilise le propriétaire canonique de la campagne comme frontière client pour 25 351 appels dont le `client_id` Laravel historique diffère, tout en conservant cet identifiant pour audit.
- Étend l’outil Migration existant aux 3 602 lignes de coûts/CPL et protège les lignes WordPress manuelles.
- Signale les erreurs SQL CPL comme résultat partiel plutôt que comme réussite complète.
- Refuse l’import CPL vers une campagne non publiée, en corbeille, supprimée ou exclue.
- Ajoute le formulaire AWM intégrable par campagne avec défi HMAC, anti-robot, limitation et dédoublonnage.
- Ajoute la réception Connector pour Elementor et autres intégrations locales autorisées.
- Étend `callink_forms` de manière additive aux identifiants de soumission, sources, téléphone, page et empreintes techniques.
- Aligne le nombre de leads sur appels entrants plus formulaires dans l’administration et le portail client.
- Conserve le flux courriel historique comme repli et ne prend pas en charge les fichiers dans cette première version.
- Exige Core AWM 4.5.8; aucune table, route, option, méta ou identité historique n’est supprimée ou renommée.

---

## Historique des versions précédentes

# Changelog — CallTracker AWM

## 1.6.0 — 2026-08-19

### Ajouté
- Service `CallLink_Campaign_Bulk_Actions` pour les aperçus et exécutions groupées de campagnes et réservations locales.
- Actions campagne : archivage, corbeille, libération Twilio, suppression définitive et réattribution cliente.
- Actions inventaire : réservation locale, réattribution et retrait de réservation.
- Aperçu serveur détaillé, phrase de confirmation, jeton à usage unique revendiqué atomiquement, empreinte d’état, verrouillage concurrent, limites de lot et résultats par élément.
- API interne d’inventaire partagée par les parcours unitaires et groupés : normalisation, lecture, écriture et retrait de réservation.

### Sécurité et compatibilité
- Niveau Core `calltracker/approve`, nonce, validation stricte, confirmation sensible à la casse et journalisation pour chaque lot sensible.
- Le client cible d’une réservation est revalidé côté serveur avec la même éligibilité CallTracker que l’interface.
- Inventaire Twilio relu directement lors de l’exécution d’un lot de réservations.
- Exclusion legacy explicitement persistée pour les mises à la corbeille et suppressions personnalisées.
- Appels et formulaires conservés; aucune table, option, route, méta ou identifiant historique renommé ou supprimé.
- Le post type historique `callink_campaign` et le statut technique `publish` restent compatibles et non publics.

### Corrigé
- Les suppressions par changement direct de statut ne peuvent plus contourner la protection anti-réimportation.
- Les actions unitaires et groupées utilisent maintenant la même frontière de validation des réservations.
- Une erreur de nettoyage local après une libération Twilio irréversible est signalée et journalisée sans présenter la libération externe comme annulée.
- La libération Twilio retire désormais la réservation locale depuis une seule frontière partagée par les parcours unitaires et groupés.
- Les lots campagne qui libèrent ou réattribuent un numéro verrouillent aussi la ressource téléphonique afin d’éviter une collision avec un lot de réservations.
- Les corbeilles et suppressions destructives échouent de manière fermée si l’exclusion legacy d’une campagne historique ne peut pas être réellement persistée.
- Les options partagées de réservations, d’exclusions legacy et d’instantanés de suppression utilisent maintenant des écritures sérialisées avec relecture de persistance.
- Après une libération Twilio acceptée, l’état local, les appels entrants, le Dialer et le retrait de réservation sont contrôlés séparément; toute divergence est signalée dans le résultat et le journal Core.
- Une réattribution vérifie le propriétaire enregistré, restaure la réservation concurrente si l’écriture principale échoue et compare le nombre d’appels/formulaires réellement propagés.

---

## 1.5.1 — 2026-08-19
- L’éditeur natif `callink_campaign` n’utilise plus le workflow éditorial WordPress : libellés Campagne, boîte Publier retirée et colonne latérale de publication supprimée.
- Ajout d’une barre AWM « Enregistrer la campagne »; le statut WordPress `publish` reste uniquement un état technique interne de compatibilité.
- Les messages « Article mis à jour » deviennent « Campagne enregistrée » et sont consommés par le loader AWM au lieu d’un bandeau.
- La liste Campagnes masque les vues de statuts éditoriaux WordPress et remplace la colonne Publication par « Dernière modification ».
- La campagne reste explicitement non publique et non exposée au front-end.

## 1.5.0 — 2026-08-19
- Ajout de l’inventaire Twilio à quatre états : **Libre, Réservé, Attribué, À vérifier**.
- Comparaison serveur du compte Twilio Alliance avec toutes les campagnes CallTracker sans exposer les identifiants Twilio au navigateur.
- Détection des doublons de numéro, campagnes locales absentes du compte Twilio, réservations orphelines et numéros encore détenus après corbeille/libération déclarée.
- Affichage du dernier rattachement connu, de la campagne et du client lorsque disponibles.
- Réservation et retrait de réservation protégés par permission CallTracker Modifier, nonce, validation et journal de sécurité Core.
- Cache Twilio court et invalidation automatique après achat ou libération d’un numéro.

## 1.4.1 — 2026-08-18
- Le Dialer accepte maintenant une campagne liée à un alias historique sûr du client canonique, via le résolveur d’identité Core 4.5.4.
- Les contrôles restent stricts : campagne publiée, statut actif, Dialer activé, numéro Twilio présent et identité cliente reliée de façon sûre.
- Les nouveaux appels sortants lancés depuis le Hub Client sont attribués à la fiche canonique portée par la session lorsque la campagne conserve encore un ancien propriétaire technique.

## 1.4.0 — 2026-08-18

- CallTracker AWM 1.4.0 devient la référence officielle du shell visuel AWM partagé. Son ancien en-tête spécifique est remplacé par le shell Core afin d’éviter les doublons tout en conservant toutes les routes et fonctions existantes.


## Sécurité 1.3.7 — 2026-08-17

- CallTracker AWM 1.3.7 utilise le coffre Core 4.4.0 pour protéger au repos les secrets Twilio et Google Ads sans modifier les routes historiques.
# Changelog — CallTracker AWM

## 1.3.6 — 2026-08-17
- Les routes REST historiques Twilio `/callink/v1/token`, `/voice`, `/incoming` et `/status` sont désormais enregistrées exclusivement par Core AWM 4.3.9.
- CallTracker conserve le traitement métier Twilio mais n’est plus propriétaire de la surface API publique.
- Les URL historiques restent strictement inchangées.


## 1.3.5 — 2026-08-17
- Les campagnes historiques mises à la corbeille ou supprimées définitivement sont maintenant inscrites dans une liste d’exclusion persistante (`callink_legacy_campaign_tombstones`).
- Les synchronisations/migrations depuis l’ancienne plateforme ignorent systématiquement ces campagnes et ne peuvent plus les republier ni les recréer automatiquement.
- Une campagne déjà présente dans la corbeille au moment d’une synchronisation est automatiquement protégée contre la résurrection.
- Une restauration WordPress explicite retire l’exclusion et autorise de nouveau la synchronisation de cette campagne.
- Les exclusions et restaurations sont consignées dans le journal de sécurité Core lorsqu’il est disponible.

## 1.3.4 — 2026-08-17
- Correctif global des associations historiques Clients ↔ Campagnes : les campagnes liées à une ancienne adresse du même client sont maintenant visibles dans la fiche CallTracker canonique lorsqu’une correspondance sûre peut être établie.
- Exemple couvert : une campagne liée à `info@domaine.tld` et une fiche WHMCS liée à `proprietaire@domaine.tld`, avec identité cohérente.
- Aucun rattachement n’est réécrit silencieusement; les consolidations permanentes restent soumises au rapprochement global contrôlé.


## 1.3.3 — 2026-08-17
- Rapprochement global de l’ensemble des anciennes fiches CallTracker vers les fiches WHMCS canoniques, avec fusion en lot limitée aux correspondances sûres et uniques.
- Les campagnes, appels et formulaires suivent la fiche canonique après rapprochement; les cas ambigus restent visibles pour validation manuelle.
- Correction du rendu réel des écrans WordPress de campagnes : retrait du logo historique dupliqué et conservation d’un seul en-tête CallTracker en haut.
- Harmonisation complète du listing et de l’éditeur Campagnes en clair/sombre, incluant champs, metaboxes, publication, tableaux et actions.
- Compatibilité des associations clients historiques : les campagnes liées par ID WHMCS ou courriel sûr apparaissent dans la fiche CRM/WHMCS canonique.
- Agrégation des compteurs de campagnes, appels et formulaires sur les références sûres du même client.

## 1.3.2 — 2026-08-17
- Amélioration du parcours Campagnes : visualisation consolidée des appels et formulaires par campagne.
- Campagnes associées visibles depuis la fiche client avec compteurs et accès direct à l’activité.
- Harmonisation visuelle de l’administration Campagnes et en-tête CallTracker avec le thème AWM.


## 1.3.1 — 2026-08-17

- Activation ou désactivation d’un client pour CallTracker sans modifier son statut WHMCS/CRM.
- Les clients CallTracker actifs sont les seuls proposés lors de la création d’une campagne avec achat Twilio.
- Rattachement direct d’une campagne existante non assignée depuis l’écran Clients.
- Préselection du client lors de l’ouverture de « Nouvelle campagne ».
- Refus serveur d’un achat ou d’un jeton Dialer client lorsque CallTracker est désactivé pour ce client.
- Compatibilité préservée pour les clients ayant déjà des campagnes historiques.


## 1.3.0 — 2026-08-17

- Ajout d’un accès Clients directement dans CallTracker AWM.
- Recherche des clients par nom, entreprise, courriel, téléphone, campagne ou numéro Twilio.
- Filtres Actifs, Inactifs et Tous disponibles depuis CallTracker; les clients inactifs restent masqués par défaut.
- La référence WHMCS demeure la source du statut actif, avec respect des exceptions manuelles et de la fiche interne Alliance Web Marketing.
- Réutilisation de la route historique `callink-clients` et des métadonnées existantes, sans nouvelle table ni duplication de clients.

# Historique — CallTracker AWM

## 1.2.0 — 2026-08-17

- Contrat de permissions Core AWM 1.0 appliqué aux campagnes, numéros, historique et CPL.
- Niveaux distincts pour consultation, opérations quotidiennes, approbation et réglages.
- Signatures Twilio refusées consignées dans le journal central avec limitation anti-bruit.
- Diagnostic Core des webhooks Twilio et du Dialer.
- Activation arrêtée proprement avec Core antérieur à 4.3.0, sans modification des campagnes ni de l’historique.

## 1.1.2 — 2026-08-15

- Libération explicite d’un numéro Twilio sans recopie manuelle.
- Comparaison serveur du numéro enregistré avant l’appel irréversible à Twilio.