Aller au contenu
Achraf Abderrazik
Tous les projets
Projet réel · StageÉtude de cas 01 / 05

Safe Invest AI Lead Automation

Pipeline LLM multilingue de leads

Les messages que les prospects envoient sur WhatsApp, Instagram ou Messenger, en français, en anglais ou en darija, deviennent automatiquement des leads CRM structurés.

Organisation
Safe Invest Property · Marrakech
Rôle
Stagiaire ingénierie IA · Seul développeur
Période
Juillet – août 2026 · 9 semaines
Langues
Français · anglais · darija

Réalisé pendant un stage. Le code, les données et les conversations de l’agence sont confidentiels et ne sont pas présentés ici.

Exactitude d’extraction
98 %
Taux de concordance entre les données de lead extraites et la référence annotée, mesuré sur 96 messages en français, en anglais et en darija.
Moins d’appels LLM
≈4×
La baisse du volume d’appels LLM une fois les messages envoyés en rafale regroupés avant l’extraction.
Scénarios de bout en bout
13/14
Parcours complets, du message entrant au lead CRM, validés après l’ajout de la transcription vocale et du matching prospect↔bien.
Champs CRM par lead
9
Les champs de chaque fiche CRM créée à partir d’une conversation. 3 d’entre eux sont calculés en code plutôt que par le modèle.

01 Contexte

Safe Invest Property est une agence immobilière de Marrakech dont les prospects écrivent via WhatsApp, Instagram et Messenger, en français, en anglais et en darija marocain. Pendant un stage de 9 semaines, j’ai été le seul développeur du système qui transforme ces conversations en leads CRM.

02 Problème

Les demandes arrivent sous forme de conversations libres : plusieurs messages courts d’affilée, des notes vocales, trois langues. Chacune doit devenir une fiche de lead complète et cohérente, sans créer de doublon lorsqu’une plateforme livre deux fois le même webhook.

03 Architecture

  1. 01Canaux

    WhatsApp · Instagram · Messenger

    Webhooks entrants

  2. 02Réception

    Ingestion idempotente

    Doublons de webhooks absorbés par les contraintes de la base

    02Tampon

    Temporisation des rafales

    Un appel LLM par rafale

  3. 03Voix

    Transcription des notes vocales

    De l’audio au texte

  4. 04LLM

    Extraction structurée

    API Claude · tool use forcé

    98 % d’exactitude

    04Code

    Champs déterministes

    Calculés, non générés

  5. 05Données

    PostgreSQL

    Schéma à 5 tables

  6. 06Matching

    Matching prospect ↔ bien

    06Sortie

    Lead CRM structuré

De trois canaux de messagerie à un lead CRM structuré et associé à un bien.

04 Ma contribution

Seul développeur, de bout en bout : architecture du pipeline, modèle de données PostgreSQL, extraction LLM et son évaluation, transcription des notes vocales, moteur de matching prospect↔bien et mise en production.

05 Choix techniques

  • 01

    Une sortie structurée, pas du texte libre

    Le LLM renvoie chaque lead via un appel d’outil forcé au schéma fixe : chaque réponse correspond directement aux champs du CRM, au lieu d’être extraite d’un texte en prose.

  • 02

    La logique déterministe reste dans le code

    Les champs qui suivent des règles fixes sont calculés en code plutôt que générés par le modèle, ce qui supprime une classe d’erreurs par conception.

  • 03

    L’idempotence dans la base de données

    Les contraintes du schéma PostgreSQL à 5 tables absorbent les livraisons de webhooks en double : une livraison répétée ne crée pas de second lead.

  • 04

    Temporiser les rafales de messages

    Les prospects envoient souvent plusieurs messages courts d’affilée. Ils sont regroupés avant l’extraction : une rafale coûte un seul appel LLM, au lieu d’un par message.

06 Résultats

  • Déployé en production : les conversations de trois canaux de messagerie deviennent automatiquement des leads CRM
  • Un seul pipeline pour le français, l’anglais et le darija marocain
  • Notes vocales transcrites et leads associés aux biens de l’agence
  • Livraisons de webhooks en double absorbées en production par des contraintes d’idempotence

07 Stack

  • Claude API
  • Sorties structurées
  • PostgreSQL
  • Webhooks
  • WhatsApp · Instagram · Messenger

Le code source n’est pas public : il a été écrit pendant un stage et reste privé. D’autres projets sont sur GitHub.