Score des contacts
Le score te dit qui est chaud : un nombre par adresse e-mail qui monte quand le contact ouvre, clique, achète ou convertit, et qui redescend tout seul quand il se tait. Tu t'en sers pour cibler (segments, conditions de parcours), repérer les inactifs avant un nettoyage, et savoir qui appeler en premier.
Concept
Une adresse, un score. Le score appartient à l'adresse (casse ignorée), pas à une ligne d'abonné : si la même personne est sur trois listes, elle a un seul score, nourri par ses trois inscriptions. C'est la même règle que les segments.
Une fenêtre glissante, pas une mémoire éternelle. Le score est la somme des points des actions des 90 derniers jours (réglable de 30 à 365). Une action sortie de la fenêtre ne compte plus : quelqu'un qui a acheté il y a quatre mois et ne fait plus rien redevient froid, sans que tu aies rien à faire.
Calculé par le serveur, jamais par l'écran. Trackily calcule les scores en arrière-plan, par lots, et les range en base : l'écran, les segments et l'agent lisent tous la même valeur.
Ce qui rapporte des points
| Action | Points par défaut | Plafond |
|---|---|---|
| Ouverture d'un e-mail (réelle — les scanners et pré-chargements sont déjà écartés) | +1 | 1 par e-mail envoyé |
| Clic dans un e-mail (réel) | +3 | 1 par e-mail envoyé |
| Achat payé, ni annulé ni remboursé (commande à la même adresse) | +20 | 1 par jour |
| Conversion d'affiliation approuvée (reliée au lead de l'abonné) | +10 | — |
| Rebond temporaire | −2 | — |
| Désinscription d'une liste (par le lien de désinscription) | −10 | 1 par geste (« Ne plus rien recevoir de ces listes » sur la page de préférences = une seule désinscription) |
Quelques précisions :
- Le plafond par e-mail : ouvrir dix fois la même newsletter rapporte 1 point, pas 10.
- Un achat annulé ou remboursé (totalement ou en partie) ne compte pas, une conversion en attente non plus.
- Un achat par jour au plus : une commande et ses upsells du même tunnel valent +20, pas +60.
- Un achat de ta boutique ne compte pas deux fois : la conversion que Trackily enregistre lui-même pour une commande payée n'ajoute pas +10 en plus des +20.
- Un rebond temporaire dû à ton serveur d'envoi (et non à l'adresse) ne compte pas : ce n'est pas la faute du contact.
- Une désinscription que tu fais toi-même (depuis l'admin ou l'agent) ne retire pas de points : seul le geste du contact compte.
- Une plainte ou un rebond définitif ne se notent pas : l'adresse est de toute façon supprimée.
La chaleur
Le score se lit aussi en chaleur :
| Chaleur | Règle par défaut |
|---|---|
| Froid | score < 5 |
| Tiède | de 5 à 19 |
| Chaud | score ≥ 20 |
Une adresse que Trackily n'a pas encore notée vaut 0 / Froid, partout (segments, parcours, répartition).
Une adresse muette vaut 0 / Froid, même si elle était chaude : adresse dans la suppression, plainte ou rebond définitif sur toutes ses inscriptions, ou plus aucune inscription sur une liste non supprimée (les inscriptions des listes supprimées ne comptent plus). Elle n'apparaît jamais parmi les plus chauds.
Exemple
Une adresse a, ces 90 derniers jours : ouvert 4 e-mails (dont un ouvert trois fois), cliqué dans 2, acheté une fois, eu un rebond temporaire. Score : 4 × 1 + 2 × 3 + 20 − 2 = 28 → Chaud. Le détail du score le dit action par action, avec le libellé du serveur : [{ "cle": "ouvertures", "libelle": "Ouverture d’un e-mail (1 par envoi)", "points": 4 }, { "cle": "clics", "libelle": "Clic dans un e-mail (1 par envoi)", "points": 6 }, { "cle": "achats", "libelle": "Achat payé (1 par jour)", "points": 20 }, …].
Dans quatre mois, sans nouvelle action, toutes ces lignes seront sorties de la fenêtre : score 0, Froid.
Cibler par score
Deux conditions entrent dans la langue des segments, donc aussi dans les conditions d'étape et les objectifs des parcours :
| Champ | Opérateurs | Valeur |
|---|---|---|
score |
superieur_ou_egal, inferieur_a |
un entier (négatif permis) |
chaleur |
est |
froid, tiede ou chaud |
Tes contacts chauds, pour une offre :
{ "conditions": [{ "champ": "chaleur", "op": "est", "valeur": "chaud" }] }
Les inactifs, avant un nettoyage :
{ "conditions": [{ "champ": "score", "op": "inferieur_a", "valeur": 1 }] }
Une étape de séquence qui ne part qu'aux contacts engagés (« seulement si son score est d'au moins 10 ») :
{ "conditions": [{ "champ": "score", "op": "superieur_ou_egal", "valeur": 10 }] }
Une séquence de réveil qui s'arrête dès que le contact redevient chaud (« s'arrête dès qu'il est chaud ») : objectif { "champ": "chaleur", "op": "est", "valeur": "chaud" }.
Régler le score
Tu peux changer la fenêtre, les points de chaque action et les deux seuils :
- points : entiers de −100 à 100 (un nombre entier, ou une chaîne de chiffres —
"0x1e"ou"1e1"sont refusés) ; - fenêtre : de 30 à 365 jours ;
- seuils : entiers, au moins 1, et tiède strictement inférieur à chaud (tiède à 0 est refusé : une adresse jamais notée vaut 0 et doit rester froide).
Une règle hors de ces bornes, ou une clé inconnue, est refusée (400 regles_invalides) avec une phrase qui dit laquelle. Tu peux n'envoyer que ce qui change (par exemple seulement { "points": { "clic": 5 } }).
Changer les règles ne recalcule rien sur le moment : tous les scores sont marqués « à recalculer » et le moteur les reprend par lots dans les minutes qui suivent (la répartition affiche combien restent a_recalculer). Si un lot est en train de s'écrire, ton changement attend qu'il finisse (quelques millisecondes) : aucun score ne garde les anciennes règles sans être marqué. Renvoyer exactement les mêmes règles ne marque rien.
Quand les scores sont-ils recalculés ?
À chaque passage du moteur e-mail (toutes les minutes) :
- Les nouveautés : les adresses qui ont eu une action depuis leur dernier calcul (ouverture, clic, rebond, désinscription, achat payé — même une commande à la livraison payée des jours après sa création —, annulé ou remboursé ces dernières heures) — 500 au plus par passage.
- La passe de fond — 1 000 au plus par passage : d'abord les scores marqués après un changement de règles, puis les adresses jamais notées (une nouvelle base se note entièrement en quelques dizaines de minutes), puis les scores calculés il y a plus de 6 heures, pour que la fenêtre glissante fasse redescendre ceux qui se taisent. Les conversions affiliées sont prises par cette passe.
Chaque lot de 500 adresses se calcule en une seule requête : sur une base de 100 000 adresses, un lot prend quelques dizaines de millisecondes et chaque score est revu plusieurs fois par jour. Une adresse qui n'est plus sur aucune liste perd son score. Un calcul lent ne remplace jamais un score plus récent.
Dans l'admin
- Lists, liste des abonnés : la colonne Score (nombre + pastille Froid / Tiède / Chaud), le détail des points en infobulle ; le tri par score porte sur toute la liste.
- Chronologie d'un abonné : le score de son adresse et son détail.
- Segments : les champs Score et Chaleur dans le constructeur, et le panneau Score des contacts — la répartition, les 20 plus chauds, et Régler le score.
Via MCP
| Outil | Tier | Rôle |
|---|---|---|
get_email_score_rules |
lecture | les règles en vigueur et les défauts |
get_email_score_distribution |
lecture | la répartition froid / tiède / chaud, les à-recalculer, les 20 plus chauds |
get_email_contact_score |
lecture | le score d'une adresse et son détail |
update_email_score_rules |
T1 | régler (marque tout à recalculer) |
list_email_subscribers et get_email_subscriber_timeline rendent aussi le score.
API (admin)
Sous /admin/api, lecture landings:read, écriture landings:write :
GET /email/scores/regles→{ regles: { fenetre_jours, points: { ouverture, clic, achat, conversion, rebond_temporaire, desinscription }, seuils: { tiede, chaud } }, defauts, libelles: { ouverture: "Ouverture d’un e-mail (1 par envoi)", … } }PUT /email/scores/regles→{ regles, defauts, libelles, a_recalculer, inchangees }GET /email/scores/repartition→{ total, notees, non_calcules, froid, tiede, chaud, a_recalculer, chaleurs: [{ chaleur, libelle }], plus_chauds: [{ email, score, chaleur, chaleur_libelle }] }—total= les adresses inscrites sur au moins une liste non suppriméeGET /email/scores/:email→{ email, score, chaleur, chaleur_libelle, detail: [{ cle, libelle, points }], calcule_at, a_recalculer }(0 / froid,calcule_at: nullsi l'adresse n'est pas encore notée ; 0 / froid si elle est muette)GET /email/lists/:id/subscribers: chaque abonné portescore,chaleur,chaleur_libelle,score_detail([{ cle, libelle, points }]) ;?tri=score(du plus chaud) ou?tri=score_asc.GET /email/subscribers/:id/timeline:subscriber.score,chaleur,chaleur_libelle,score_detail, et l'objetscore(la lecture ci-dessus).
Voir aussi
- Segments — cibler par score et par chaleur
- Sequences — conditions d'étape et objectifs de sortie
- Nettoyer une liste — retirer ce qui ne sera jamais livré
- Lists — les abonnés et leurs statuts