HubSpot
MQL avec pays, segment, score
REST APIComposants, flux, stack.
MQL avec pays, segment, score
REST APIFiltre + équilibre + score qualité
Node.js · SupabaseOwner mis à jour, Sales notifié
WebhooksFiltre, choix du Sales, gestion des refus. Extraits réels du moteur qui tourne ci-dessous.
// Un Sales peut-il recevoir ce lead ?
function isEligible(sales, contact) {
if (!sales.active) return reject("sales_inactive");
if (sales.market !== contact.market) return reject("wrong_country");
// Allemagne : la région est imposée
if (contact.market === "DE" &&
sales.region && contact.region !== sales.region)
return reject("wrong_region");
// SDR ou AE selon le rôle attendu
if (contact.roleTarget !== sales.role) return reject("wrong_role");
// On ne dépasse jamais le quota
if (sales.stock >= sales.target) return reject("quota_full");
return { pass: true };
}
// Choisir le meilleur Sales parmi les éligibles
function pickBest(eligible, contact) {
// 1. Priorité : ceux qui sont le plus loin de leur quota
const maxDrift = Math.max(...eligible.map(drift));
const top = eligible.filter(s => drift(s) >= maxDrift - 5);
// 2. À égalité : meilleur score qualité
top.sort((a, b) =>
qualityScore(b, contact) - qualityScore(a, contact)
);
return top[0];
}
function drift(sales) {
return sales.target - sales.stock; // marge avant quota
}
// Cas limites au moment de la distribution
function processOneContact(sales, contact) {
// Pré-filtre amont : on ne distribue que des leads "frais"
// (déjà attribués / deal en cours = exclus avant la file)
const eligible = sales.filter(s => isEligible(s, contact).pass);
if (!eligible.length)
return skip("no_eligible_sales"); // ex: DE-S sans AE actif
const winner = pickBest(eligible, contact);
winner.stock += 1;
return { kind: "assign", sales: winner, contact };
}
4 KPIs, pas plus. Trop d'indicateurs tuent l'action : je préfère 4 chiffres qui déclenchent chacun une décision claire.
La donnée est déjà nettoyée en amont (dédup, qualité, deals en cours). Le moteur applique un dernier filtre : pays, région, rôle, quota. Si rien ne matche, le lead part en « Refusés » pour traitement humain.
| Société | Pays | SDR/AE | Score | État |
|---|
| Société | Raison |
|---|---|
| n/a | |
Quand on est notifié, sur quoi, et quelle est la réponse attendue.
Slack + PagerDuty
Vérifier le cron Zorro, le webhook HubSpot.
Slack Sales Ops
Réactiver un Sales ou réattribuer la région.
Slack Growth
Revoir quotas ou volume de sourcing.
Slack Growth
Réviser les règles ou le scoring.
Dashboard
Suspendre temporairement les attributions.
Dashboard
Vérifier qualité data en amont.