Plateforme de prospection automatisée
Outil interne qui orchestre la prospection sortante (séquences multi-canaux, scoring de leads, réponses contextualisées) à partir des données du CRM et des outils de scraping.
En bref
Contexte
Le besoin est venu de notre propre opération commerciale. La qualité de la prospection était diluée par le manque d'industrialisation, et les outils du marché étaient soit trop génériques (templates plats), soit trop coûteux à intégrer pour un usage interne.
Le besoin
Industrialiser la prospection sans dégrader la qualité du contact. Les SaaS du marché (Lemlist, Apollo, Instantly) font les séquences mais ne relient pas vraiment scoring, contexte client et historique CRM. Il fallait un système qui consomme nos propres signaux.
La réponse construite
Plateforme qui orchestre les séquences depuis le CRM, génère des messages adaptés au contexte du lead via LLM, déclenche des actions automatiques selon les réponses, et propose des RDV directement depuis la conversation.
Ce que ce projet montre concrètement
Prouve que les briques internes (CRM, scraping, agent IA) peuvent former un système cohérent qui réduit le temps humain à la qualification finale, pas sur toute la chaîne.
Fonctions clés
Interconnexions
Ce que cela change
Ce qui était dur, ce qu'on a tranché
Enjeux techniques
- Générer des réponses qui ne sentent pas le bot — contextualisation profonde, ton aligné, fluidité conversationnelle
- Orchestrer plusieurs canaux sans envoyer 3 messages identiques au même lead à 5 minutes d'intervalle
- Scorer en temps quasi-réel sans flooder le CRM avec des updates
- Compliance stricte : CAN-SPAM, RGPD, gestion des opt-out, blocklist consolidée
- Détecter quand l'agent doit passer la main à un humain (signal d'achat, objection complexe, frustration)
Choix de stack
- Next.js + TypeScript (full-stack)
Cohérent avec le CRM et le scraping, déploiement unifié, partage des types entre client et serveur.
- Postgres + Redis
Postgres pour les conversations, leads et logs (relations propres). Redis pour les locks et caches courts (anti-double-envoi).
- BullMQ pour les séquences
Queues retardées, retry exponentiel, gestion des fenêtres d'envoi par fuseau horaire. Indispensable pour orchestrer du multi-canal en différé.
- LLM API (avec prompts spécifiques)
Génération des réponses. On garde la logique business (qui contacter, quand, sur quel canal) en code déterministe, le LLM ne fait que la partie langage.
- Webhooks vers le CRM
Toute action de l'agent (réponse envoyée, RDV pris, prospect blocklisté) remonte dans le CRM en temps réel. Pas d'écran à part, pas de double saisie.
Difficultés rencontrées
L'équilibre auto / humain
Trop d'auto et le prospect le sent. Trop d'humain et l'industrialisation s'effondre. On a défini des critères clairs (mots-clés, sentiment, étape) qui déclenchent un handover automatique vers le commercial.
Conserver le ton de la marque
Les LLM standard ont une voix générique. On combine prompts détaillés, exemples few-shot tirés de vraies conversations passées, et possibilité d'override manuel par template.
Détection des bounces et blocks
SMTP, LinkedIn API, providers email — chacun a ses signaux d'échec différents. On normalise tout dans un statut unifié et on adapte la séquence en conséquence (pause, retry, kill).
Scoring instable au démarrage
Au début, le modèle de scoring n'a pas de données. On a commencé avec des règles métier simples, puis recalibré progressivement avec un modèle qui apprend des conversions réelles.
Ce qu'on a appris
- L'IA aide mais ne remplace pas la qualité de la donnée d'entrée. Mauvais lead, mauvais contexte = mauvais message, peu importe le modèle.
- Logging et traçabilité dès le jour 1. Sans ça, impossible de débugger les comportements ou d'expliquer une dérive à un commercial.
- Limites strictes (volumes, fréquences, mots-clés interdits) > confiance dans l'agent. Mieux vaut un système prudent qu'un dégât réputationnel.
- Tester d'abord sur ses propres prospects avant de proposer comme produit. On dogfood en interne, on apprend, on industrialise ensuite.