Concevoir un CRM sur mesure avec Laravel : pipelines, étapes et contrôles qualité

09 Nov 2026 | Développement Web et Mobile

Concevoir un CRM sur mesure avec Laravel : pipelines, étapes et contrôles qualité

Les CRM du marché conviennent à beaucoup de besoins, mais certaines organisations ont des processus très spécifiques : plusieurs pipelines, des règles de clôture strictes, un suivi précis des appels et des relances. Dans ce cas, un CRM sur mesure avec Laravel peut être pertinent. Voici l'architecture que je recommande, sans entrer dans les détails d'un projet particulier.

1. Définir le périmètre avant le code

Un CRM échoue rarement pour des raisons techniques ; il échoue parce qu'on a modélisé un processus qui n'existe pas. Avant de créer des tables, cartographiez avec les équipes terrain :

  • les étapes réelles du parcours (nouveau, contacté, rendez-vous, inscrit, perdu…) ;
  • les règles de passage d'une étape à l'autre, et celles qui ferment un dossier ;
  • les informations obligatoires à chaque étape ;
  • les indicateurs attendus (délai de prise en charge, taux de conversion par étape, raisons de perte).

2. Un modèle de données simple et explicite

Les entités de base d'un CRM de leads :

  • leads : la personne ou l'opportunité, avec sa source, son pipeline et son étape actuelle ;
  • pipelines et steps : les parcours et leurs étapes ordonnées, avec un indicateur « étape de clôture » ;
  • lead_step_histories : chaque changement d'étape, avec l'auteur, la date et la raison ;
  • calls et notes : les interactions (appels, résultat, commentaire) ;
  • reasons : les motifs de clôture autorisés pour chaque étape.

Le point clé est l'historique des étapes : ne vous contentez pas d'écraser la valeur courante. Un historique complet permet de calculer les délais, de détecter les anomalies et de répondre à la question « qui a fait quoi, quand ». Les clés étrangères, les index sur les colonnes filtrées (étape, date, responsable) et les relations Eloquent chargées à l'avance évitent les lenteurs, comme expliqué dans notre guide sur les requêtes lentes sous Laravel.

3. Centraliser les transitions dans une action

Ne modifiez jamais l'étape d'un lead directement depuis un contrôleur ou un formulaire. Regroupez la logique dans une classe unique :

class MoveLeadToStep
{
    public function handle(Lead $lead, Step $step, ?Reason $reason, User $by): void
    {
        $this->validate($lead, $step, $reason);

        DB::transaction(function () use ($lead, $step, $reason, $by) {
            $lead->history()->create([
                'from_step_id' => $lead->step_id,
                'to_step_id'   => $step->id,
                'reason_id'    => $reason?->id,
                'user_id'      => $by->id,
            ]);

            $lead->update(['step_id' => $step->id]);
        });
    }
}

Toute modification passe par ce point d'entrée : interface web, API, import. Les règles métier s'appliquent donc partout de la même façon, et vous pouvez les tester isolément.

4. Encoder les règles de qualité

Les règles que les équipes appliquent « à la main » finissent oubliées. Transformez-les en contrôles automatiques dans la méthode validate :

  • motif obligatoire pour toute clôture négative, choisi dans une liste liée à l'étape ;
  • nombre minimal de tentatives d'appel, espacées d'un délai minimum, avant de classer un contact injoignable ;
  • interdiction de clôturer un dossier récemment actif sans commentaire ;
  • cohérence entre l'étape et le motif (un motif de relance sans réponse n'a pas de sens si les appels n'ont pas été passés).

Retournez des messages d'erreur explicites : l'utilisateur doit comprendre ce qu'il lui manque, pas seulement qu'on lui refuse l'action.

5. Détecter les anomalies a posteriori

Même avec des règles à la saisie, des écarts apparaissent (anciennes données, imports, contournements). Une commande planifiée qui parcourt les leads et signale les situations suspectes — dossier non pris en charge depuis plus de 24 heures ouvrées, silence prolongé après un contact, clôture prématurée — fournit un rapport régulier au responsable. Exécutez-la avec le scheduler de Laravel et envoyez le résultat par e-mail ou dans un tableau de bord.

6. Construire l'interface rapidement

Pour l'équipe interne, un panneau d'administration comme Filament couvre l'essentiel : listes filtrables par étape et responsable, fiche lead avec historique, actions rapides (changer d'étape, enregistrer un appel) et widgets d'indicateurs. Nous détaillons la méthode dans notre guide Filament 4 : un back-office complet en une journée. Si des applications mobiles ou des partenaires doivent aussi accéder aux données, exposez une API versionnée et authentifiée, comme dans notre article API REST Laravel.

7. Droits d'accès et traçabilité

  • Limitez chaque utilisateur aux leads de son périmètre (équipe, établissement, pipeline) avec des policies et des scopes globaux.
  • Journalisez les actions sensibles : export, suppression, changement de responsable.
  • Respectez la réglementation sur les données personnelles : finalités, durée de conservation, droits d'accès et d'effacement.

8. Mesurer la qualité des leads

Un CRM prend toute sa valeur lorsqu'il alimente la décision. Les statistiques par source, par étape et par motif de perte montrent quelles campagnes produisent des inscriptions et lesquelles produisent des curieux. Les données peuvent aussi retourner vers les plateformes publicitaires pour optimiser les campagnes : c'est le sujet de notre prochain article.

Conclusion

Un CRM sur mesure réussit quand il traduit fidèlement un processus réel : un modèle simple, un historique complet, des transitions centralisées, des règles de qualité codées et des contrôles réguliers. Commencez petit — un pipeline, quelques étapes, les règles les plus importantes — puis enrichissez-le avec les retours de ceux qui l'utilisent chaque jour.

Commentaires (0)

Aucun commentaire pour le moment.

Laissez un commentaire