Aller au contenu principal

Schéma Lead JSON

Chaque lead est un fichier JSON stocké dans :

bdd/leads/{safeemail}/{timestamp}_{safeemail}.json

Exemple : bdd/leads/john.doe@example.com/20260601T120000_john.doe@example.com.json

Champs

{
"id": "john.doe@example.com/20260601T120000_john.doe@example.com.json",
"entryId": "000000001234ABCD...",
"email": "john.doe@example.com",
"prenom": "John",
"nom": "Doe",
"subject": "Demande de devis CANoe",
"date": "2026-06-01T12:00:00",
"body": "Bonjour, nous sommes intéressés par...",
"status": "devis non demande",
"products": ["CANoe", "CANdb++"],
"options": ["Maintenance"],
"replyDraft": "Bonjour John,\n\nMerci de votre intérêt...",
"quoteDraft": "Bonjour,\nNous avons besoin de 2x CANoe...",
"hasQuote": true,
"quoteName": "QUOTE_539302_john.doe@example.com.pdf",
"quoteId": "539302",
"createdAt": "2026-06-01T12:00:00",
"updatedAt": "2026-06-01T14:30:00"
}

Description des champs

ChampTypeDescription
idstringChemin relatif depuis bdd/leads/ — sert d'identifiant dans l'API
entryIdstringMAPI Entry ID Outlook — permet de retrouver le mail original
emailstringAdresse email de l'expéditeur
prenomstringPrénom extrait du nom d'affichage Outlook
nomstringNom de famille
subjectstringObjet du mail
dateISO 8601Date de réception
bodystringCorps du mail (HTML nettoyé ou texte brut)
statusstringStatut courant (voir machine à états)
productsstring[]Produits Vector détectés
optionsstring[]Options détectées (globales + par produit)
replyDraftstringBrouillon de réponse client (auto-sauvegardé)
quoteDraftstringBrouillon de demande de devis interne
hasQuoteboolUn PDF devis est associé
quoteNamestringNom du fichier PDF (QUOTE_*.pdf)
quoteIdstringIdentifiant extrait du nom du PDF
createdAtISO 8601Date de création du lead
updatedAtISO 8601Dernière modification

Ce que retourne l'API

GET /api/leads (liste)

Retourne un subset — les champs body, replyDraft, quoteDraft, entryId, createdAt sont exclus pour alléger le payload.

GET /api/lead?id=... (détail)

Retourne le lead complet plus les champs calculés : hasQuote, quoteName, quoteId.

Machine à états

Voir la page dédiée.

ignore → devis non demande → devis demande → devis recu → traite

Stockage physique

bdd/
└── leads/
└── john.doe@example.com/ ← ConvertTo-SafeName(email)
├── 20260601T120000_john.doe@example.com.json ← le lead
└── QUOTE_539302_john.doe@example.com.pdf ← copié depuis bdd/quotes/

Le dossier est créé par Invoke-Scan à la première détection du contact. Plusieurs leads peuvent coexister dans le même dossier (plusieurs mails du même expéditeur).