Générateur de Séquences de Prospection
Prend un signal d'achat. Génère une séquence de prospection multi-canal personnalisée. Produit des messages prêts à être envoyés par email, LinkedIn et téléphone.
Règle cruciale : Chaque message doit être entièrement rempli à partir du contexte chargé. Seul {{first_name}} est autorisé comme variable. Pas de crochets [Nom de l'entreprise], pas de placeholders [INSÉRER UN PROBLÈME]. Si vous ne disposez pas des informations nécessaires, demandez avant d'écrire. N'envoyez jamais un message avec un placeholder non rempli.
Étape 1 : Vérification de la Configuration
Confirmer les variables d'environnement requises :
echo "GEMINI_API_KEY : ${GEMINI_API_KEY:+défini}"
echo "COMPOSIO_API_KEY : ${COMPOSIO_API_KEY:-non défini, la rédaction Gmail sera ignorée}"
Si GEMINI_API_KEY est manquant : Arrêtez-vous. Dites à l'utilisateur : "GEMINI_API_KEY est requis. Obtenez-le sur aistudio.google.com. Ajoutez-le à votre fichier .env."
Si COMPOSIO_API_KEY est manquant : Continuez. Les séquences seront produites sous forme de texte formaté pour copier-coller. La création de brouillons Gmail est ignorée.
Étape 2 : Chargement du Contexte
Vérifier l'existence d'un fichier ICP et des fichiers de comptes :
ls docs/icp.md 2>/dev/null && echo "icp trouvé" || echo "icp manquant"
ls docs/accounts/ 2>/dev/null && echo "comptes trouvés" || echo "comptes manquants"
Si docs/icp.md existe : Lire. Extraire :
- Personas cibles (intitulés de poste, niveau hiérarchique, service)
- Profil de l'entreprise (taille, secteur, stade de financement)
- Points de douleur principaux (utiliser le langage exact de l'acheteur)
- Différenciateurs clés (pourquoi votre produit plutôt que les alternatives)
Si docs/accounts/{entreprise}.md existe : Lire le fichier pertinent. Extraire :
- Nom de l'entreprise, taille, contexte récent
- Stack technique ou points de douleur connus
- Relation existante ou contact antérieur
Si aucun des deux n'existe : Poser ces 4 questions à l'utilisateur. Ne pas continuer tant que les 4 n'ont pas été répondues :
- Que fait votre produit ? (une ou deux phrases)
- Qui ciblez-vous ? (intitulé de poste, taille de l'entreprise, secteur)
- Quel est le principal problème que vous résolvez ? (du point de vue de l'acheteur, pas du vôtre)
- Quel est votre principal différenciateur ? (pourquoi vous plutôt que l'alternative qu'ils utilisent actuellement)
Étape 3 : Identifier le Signal
Déterminer lequel des 7 types de signaux s'applique. Lire references/signal-playbook.md pour le Insight, le Bridge, l'Opener et l'Ask complets pour chaque type de signal.
7 types de signaux :
| Signal | Définition |
|---|---|
| Post-Fundraising | L'entreprise a levé un tour de financement au cours des 30 derniers jours |
| Signal de Recrutement | L'entreprise a publié 5 postes ou plus dans une fonction que vous servez |
| Remplacement de Concurrent | Le contact utilise un concurrent et montre des signes de frustration |
| Lancement Produit | L'entreprise a lancé un nouveau produit ou une fonctionnalité majeure |
| Engagement de Contenu | Le contact a aimé, commenté ou partagé votre contenu |
| Suivi d'Événement | Vous vous êtes rencontrés ou vous étiez dans la même session lors d'une conférence ou d'un webinaire |
| Changement de Poste | Le contact a changé d'entreprise au cours des 60 derniers jours |
Si l'utilisateur a fourni un signal dans sa demande : Confirmer le type et extraire les détails spécifiques (montant du tour, intitulés des postes, nom du produit, nom de l'événement, etc.).
Si aucun signal n'est clair : Demander : "Qu'est-ce qui a déclenché cette prospection ? (ex. ils ont levé des fonds, ils recrutent des ingénieurs, vous vous êtes rencontrés lors d'un événement)"
Indiquer le type de signal détecté et le détail spécifique avant de continuer.
Étape 4 : Développer l'Angle
En utilisant le type de signal et le contexte chargé aux étapes 2-3, définir les quatre éléments de l'angle. Lire references/signal-playbook.md pour la formule de ce type de signal.
Écrire explicitement avant de générer tout message :
Signal : [signal spécifique + détail concret]
Insight : [ce que ce signal révèle sur leur situation]
Bridge : [comment votre produit se connecte à ce que le signal révèle]
Opener : [une phrase mentionnant le détail spécifique du signal]
Ask : [CTA minimum viable, moins de 10 mots]
L'opener doit nommer le déclencheur spécifique. Les openers vagues sont rejetés.
Bon : "Félicitations pour la Série B de 18 M$ — faire évoluer rapidement l'équipe commerciale crée généralement un écart dans l'onboarding." Mauvais : "J'ai vu que votre entreprise a récemment levé des fonds."
Étape 5 : Planifier la Séquence de Canaux
Concevoir 4 à 6 points de contact par email, LinkedIn et téléphone. Règles :
- Durée totale : 10-14 jours
- Écart minimum : 2 jours entre deux touches
- Ne jamais utiliser le même canal deux fois de suite
- Chaque suivi doit apporter une nouvelle valeur (nouvelle ressource, nouvel angle, nouveau point de preuve). Jamais "juste un suivi".
- Le dernier point de contact est un message de rupture court
Cadence par défaut pour la plupart des signaux :
Jour 1 : Email (premier contact, opener basé sur le signal)
Jour 3 : LinkedIn (note de connexion ou DM court)
Jour 7 : Email (nouvel angle ou étude de cas)
Jour 9 : Téléphone (talk track + script de messagerie vocale)
Jour 12 : Email (cadrage différent ou objection traitée)
Jour 14 : Email (message de rupture court)
Ajuster selon le type de signal :
- Post-Fundraising : aller plus vite (Jour 1, 2, 4, 7, 10). Agir dans les 48 heures suivant l'annonce.
- Suivi d'Événement : commencer par LinkedIn, pas par email (canal plus chaud en premier)
- Engagement de Contenu : commencer par une réponse ou un commentaire LinkedIn avant l'email
Indiquer le jour et le canal prévus pour chaque point de contact avant d'écrire les messages.
Étape 6 : Générer la Séquence
Lire references/sequence-format.md en entier. Lire references/output-template.md et sélectionner le modèle pour ce type de signal.
Écrire la demande Gemini dans un fichier temporaire :
cat > /tmp/outreach-sequence-request.json << 'ENDJSON'
{
"system_instruction": {
"parts": [{
"text": "Vous êtes un rédacteur commercial B2B qui écrit des messages de prospection qui obtiennent des réponses. Règles : La première phrase de chaque message parle d'EUX, pas de votre entreprise. Mentionnez le signal d'achat spécifique par son nom et ses détails dans le message d'ouverture. Utilisez les contractions naturellement. Phrases courtes. Pas de jargon d'entreprise. Mots interdits : synergie, levier, prise de contact, faire le point, faire un ping, boucler la boucle, alignement, innovant, de pointe, meilleur de sa catégorie, de classe mondiale, révolutionnaire, disruptif, bande passante, plongée profonde, fruit à portée de main, faire bouger les choses. Pas de formules de politesse : pas de 'J'espère que cet email vous trouve bien', pas de 'Bon lundi', pas de 'Je voulais juste'. Chaque suivi apporte une nouvelle valeur — jamais 'juste un suivi'. Limites strictes : corps de l'email sous 100 mots, note LinkedIn sous 300 caractères, opener téléphone sous 20 mots. Seul {{first_name}} est autorisé comme variable — remplissez tous les autres détails à partir du contexte fourni. Le message de rupture est court (3-4 phrases), amical, et laisse la porte ouverte."
}]
},
"contents": [{
"parts": [{
"text": "CONTEXTE_ET_INSTRUCTIONS_ICI"
}]
}],
"generationConfig": {
"temperature": 0.7,
"maxOutputTokens": 4096
}
}
ENDJSON
curl -s -X POST \
"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d @/tmp/outreach-sequence-request.json \
| python3 -c "import sys,json; d=json.load(sys.stdin); print(d['candidates'][0]['content']['parts'][0]['text'])"
Remplacer CONTEXTE_ET_INSTRUCTIONS_ICI par :
- La description du produit, la persona cible, les points de douleur et les différenciateurs de l'étape 2
- Le type de signal, le détail spécifique et les quatre éléments de l'angle de l'étape 4
- Le plan de canaux de l'étape 5
- Instructions pour écrire chaque point de contact avec son objet (email), son nombre de caractères (LinkedIn) et son talk track (téléphone)
Pour chaque point de contact email, exiger deux variantes d'objet (test A/B).
Étape 7 : Cartographier les Objections
Après avoir généré la séquence, identifier les 2 à 4 objections les plus probables pour ce type de signal. Les prévenir naturellement dans un point de contact existant. Ne pas ajouter de messages séparés de traitement des objections. Intégrer la prévention dans la séquence.
Lire le guide des objections dans references/sequence-format.md. Cartographier quel point de contact traite chaque objection.
4 objections standard à prévenir :
| Objection | Approche de prévention |
|---|---|
| "Nous avons déjà une solution" | Reconnaître leur outil actuel, positionner le vôtre comme complémentaire ou prochaine étape |
| "Ce n'est pas le bon moment" | Lier le signal directement à pourquoi maintenant est le bon moment |
| "Trop cher" | Cadrer le ROI, ancrer sur un nombre qui compte pour eux |
| "Il faut impliquer plus de personnes" | Proposer une ressource partageable (fiche synthétique, démo enregistrée) |
Indiquer quel point de contact traite chaque objection avant de présenter la séquence finale.
Étape 8 : Auto-Qualité
Exécuter chaque vérification et corriger les violations avant de présenter :
- Chaque message commence par une phrase sur EUX
- Le détail spécifique du signal est nommé dans au moins le premier point de contact
- Aucun placeholder non rempli sauf
{{first_name}} - Corps des emails sous 100 mots (compter et indiquer le nombre de mots pour chacun)
- Notes LinkedIn sous 300 caractères (compter et indiquer pour chacune)
- Opener téléphone sous 20 mots
- Aucun mot interdit dans aucun message
- Pas de "juste un suivi" dans aucun suivi
- Chaque suivi apporte un nouvel angle ou une nouvelle valeur
- Pas de même canal utilisé deux fois de suite
- Au moins 2 objections prévenues dans la séquence
- Message de rupture de 3-4 phrases, amical, sans culpabilisation
Corriger toute violation avant de présenter.
Étape 9 : Production et Sauvegarde
Présenter la séquence complète dans un bloc de code.
Sauvegarder dans un fichier :
mkdir -p docs/sequences
cat > docs/sequences/TYPE-DE-SIGNAL.md << 'EOF'
CONTENU_DE_LA_SEQUENCE_ICI
EOF
echo "Séquence sauvegardée dans docs/sequences/TYPE-DE-SIGNAL.md"
Si COMPOSIO_API_KEY est défini : Demander : "Rédiger les points de contact email dans Gmail via Composio ?"
Sur confirmation, pour chaque point de contact email :
# L'agent appelle l'action GMAIL_CREATE_EMAIL_DRAFT de Composio
# avec sujet = [objet], corps = [corps de l'email], destinataire = [email du contact si connu]
Après la rédaction : "Brouillons d'email créés dans Gmail. Consultez votre dossier Brouillons."
Notes LinkedIn : Présenter comme des blocs de copier-coller séparés avec une étiquette claire pour chaque point de contact. LinkedIn ne prend pas en charge la messagerie programmatique.
Scripts téléphoniques : Présenter comme un talk track formaté avec des puces, pas un script rigide.