La réponse courte

L'intégration de Salesforce à un ERP échoue généralement, non pas en raison d'un problème technique lié à la connexion elle-même, mais parce qu'une question fondamentale n'a pas été posée en amont : quel système est la source de vérité pour chaque entité, et que se passe-t-il lorsque le message entre les systèmes est perdu, arrive en double ou dans le désordre ? Ce guide structure la décision autour de trois couches – source de vérité, modèle de synchronisation et gestion des défaillances – et illustre comment choisir parmi celles-unes en fonction de scénarios métier concrets, et non uniquement des capacités de l'API.

L'approche recommandée consiste à commencer par les entités (client, produit, commande, facture) plutôt que par l'outil. Pour chaque entité, un propriétaire est désigné, une fréquence de mise à jour pertinente est établie, et les autorisations de modification sont définies. Le modèle de synchronisation, la gestion des erreurs et le niveau de supervision requis en découlent naturellement.

Une discussion complémentaire sur l'intégration de Salesforce à un ERP est disponible dans notre guide sur l'architecture Salesforce.

Source de vérité par entité : la question qui précède toute API

Avant de choisir un protocole ou un outil d'intégration, il est impératif de répondre à une question pour chaque entité : quel est le système qui prévaut en cas de conflit ? Généralement, l'ERP est la source de vérité pour les stocks, les tarifs, les factures et les transactions financières, tandis que Salesforce est la source de vérité pour les relations clients, les opportunités et les activités de vente. Le problème survient lorsque l'on suppose implicitement que les deux systèmes "s'arrangeront d'eux-mêmes" – ce qui peut conduire à des situations où un commercial modifie une adresse de livraison dans Salesforce alors que l'ERP a déjà expédié la commande à l'ancienne adresse.

La solution pratique est un document de cartographie des entités : pour chaque entité (Compte, Produit, Commande, Facture), la source de vérité, la direction de la synchronisation (unidirectionnelle ou bidirectionnelle) et la fréquence de mise à jour requise sont spécifiées. Lorsqu'une synchronisation bidirectionnelle est réellement nécessaire – par exemple, la mise à jour du statut de paiement de l'ERP vers l'enregistrement de l'opportunité – une règle explicite de résolution des conflits est établie, telle que "la dernière mise à jour selon l'horodatage prévaut" ou "le champ financier est toujours basé sur l'ERP".

EntitéSource de véritéDirection de la synchronisationFréquence typique
Client (Compte)SalesforceBidirectionnelle avec règle de conflitQuasi-instantanée
Produit et TarifsERPUnidirectionnelle vers SalesforceQuotidienne ou sur changement
Commande (Commande)Créée dans Salesforce, gérée dans ERPBidirectionnelle, étapes distinctesImmédiate à l'étape de création
Facture et PaiementERPUnidirectionnelle vers SalesforceQuotidienne ou quasi-temps réel
Stock disponibleERPUnidirectionnelle vers SalesforceToutes les quelques minutes à l'heure

Modèles de synchronisation : Requête-Réponse, Traitement par lots et Événementiel

Trois modèles couvrent la plupart des scénarios pratiques. Le Requête-Réponse (synchrone) est adapté lorsque l'utilisateur de Salesforce attend une réponse immédiate – par exemple, la vérification de la disponibilité des stocks avant de confirmer une commande. L'avantage est la simplicité et la réponse immédiate ; l'inconvénient est une dépendance totale à la disponibilité de l'ERP à ce moment-là, et une dégradation de l'expérience utilisateur si la réponse est lente.

Le Traitement par lots (Batch) convient aux mises à jour volumineuses et non urgentes, comme la synchronisation nocturne des tarifs ou l'importation des factures de la veille. Ce modèle est plus résilient aux pannes temporaires, mais implique une latence de quelques heures à une journée entre les systèmes – un délai qui doit être acceptable pour l'entreprise, et pas seulement pour l'équipe technique.

L'approche Événementielle (via Platform Events, Change Data Capture ou une file d'attente de messages externe) est appropriée lorsque une réponse quasi-instantanée est nécessaire sans exiger de dépendance synchrone. Un changement de statut de commande dans l'ERP déclenche un événement, et Salesforce se met à jour lorsqu'il est prêt – y compris une nouvelle tentative automatique s'il était temporairement indisponible. C'est le modèle le plus flexible, mais aussi le plus complexe à mettre en œuvre et à superviser.

Tableau de sélection de modèles par scénario

ScénarioModèle recommandéLatence typiqueRisque principal
Vérification des stocks avant confirmation de commandeRequête-RéponseQuelques secondesDépendance totale à la disponibilité de l'ERP ; le dépassement de délai affecte l'expérience utilisateur
Synchronisation des tarifs et produitsTraitement par lots nocturneQuelques heures à 24 heuresDonnées non à jour entre les exécutions ; nécessite une coordination avec les campagnes et promotions
Mise à jour du statut de paiementÉvénementielQuelques secondes à quelques minutesComplexité opérationnelle ; nécessite la supervision de la file d'attente de messages et de la file d'attente de lettres mortes
Création d'une nouvelle commande dans l'ERPRequête-Réponse avec nouvelle tentativeQuelques secondes à une minuteÉchec partiel - Commande créée dans l'ERP mais la réponse est perdue, risque de duplications
Mise à jour du stock disponible à la venteTraitement par lots fréquent (toutes les 15-60 minutes)Quelques minutesVente basée sur des stocks déjà épuisés entre les exécutions
Alerte de dépassement de limite de créditÉvénementielQuasi-instantanéeUn événement manqué conduit à l'approbation d'une transaction qui n'aurait pas dû avoir lieu

Dans ce contexte, la décision concernant le type de synchronisation est également liée au modèle d'autorisations et de propriété des données – un développement plus approfondi est disponible dans Salesforce Sharing and Visibility.

Middleware vs. Point-à-point

Lorsqu'il n'y a qu'une seule connexion entre Salesforce et l'ERP, une connexion directe (Point-à-point) à l'aide de l'API REST ou des Named Credentials peut être la solution la plus rapide et la moins coûteuse. Le problème survient lorsqu'un troisième système est ajouté – un entrepôt de données, un système de livraison ou une plateforme de paiement – car chaque nouveau système nécessite la construction de sa propre logique de transformation et de gestion des erreurs, une duplication de ce qui existe déjà dans la connexion précédente.

Une couche de Middleware (comme MuleSoft, Boomi ou Workato) résout ce problème en centralisant la logique : chaque système se connecte une seule fois au Middleware, et le Middleware est responsable de la transformation, des nouvelles tentatives, de la file d'attente de messages et de la supervision centralisée. Le coût est un composant d'infrastructure supplémentaire qui nécessite une licence, une maintenance et une expertise dédiée.

Règle pratique : jusqu'à deux ou trois connexions stables et sans logique complexe, le Point-à-point est raisonnable. À partir de trois systèmes ou plus, ou lorsqu'il existe une exigence de gouvernance centralisée (comme une surveillance uniforme de toutes les intégrations dans l'organisation), le coût du Middleware est presque toujours justifié en un ou deux ans.

Gestion des erreurs et Idempotence

Le scénario le plus risqué en intégration n'est pas un échec total, mais un échec partiel : le message a été envoyé, l'ERP a créé une commande, mais la réponse à Salesforce a été perdue en raison d'un délai d'attente. Si le système émetteur tente à nouveau naïvement, une commande en double est créée.

La solution est la clé d'idempotence – un identifiant unique créé par l'expéditeur et joint à chaque requête. Le destinataire tient un registre des identifiants déjà traités et refuse (ou renvoie le résultat existant) si l'identifiant existe déjà. Principes pratiques supplémentaires :

  • Chaque intégration critique reçoit un mécanisme de nouvelle tentative avec un backoff progressif, et non une tentative immédiate et répétée
  • Les messages qui ont échoué à plusieurs reprises sont transférés vers une file d'attente de lettres mortes pour une inspection manuelle, et ne disparaissent pas silencieusement
  • Le journal des erreurs inclut la charge utile complète du message qui a échoué, afin de permettre une récupération manuelle
  • Un processus de réconciliation quotidien ou hebdomadaire compare les systèmes et détecte les écarts que la synchronisation "a manqués"

Sans clé d'idempotence et processus de réconciliation ordonné, tout problème réseau transitoire se transforme en un problème de données persistant, difficile à localiser des semaines plus tard.

Limitations de l'API, Sécurité et Supervision

Salesforce impose des limites quotidiennes au nombre d'appels API (selon la licence et l'édition), ainsi que des limites sur la taille de la réponse et le temps d'exécution. Une organisation qui synchronise des dizaines de milliers d'enregistrements par jour via une API REST classique, appel par appel, atteindra rapidement ces limites. La solution est l'API Bulk 2.0 pour les mises à jour volumineuses et l'API Composite pour réduire le nombre d'appels dans les processus synchrones à plusieurs étapes.

En matière de sécurité, trois principes reviennent dans tout projet réussi :

  1. Utilisation de Named Credentials et de Connected Apps avec OAuth, et non de noms d'utilisateur et de mots de passe codés en dur
  2. Les autorisations de l'"utilisateur technique" de l'intégration sont limitées précisément aux objets et aux champs dont elle a besoin – pas un profil d'administrateur système
  3. Le trafic sensible (numéros de carte de crédit, informations de compte bancaire) passe par une couche de Middleware ou de Tokenisation, il n'est pas stocké en texte clair dans Salesforce

Pour la supervision, un tableau de bord doit être mis en place pour afficher au moins trois données : le taux de messages réussis par rapport aux échecs, le temps de réponse moyen et médian, et le nombre d'enregistrements dans la file d'attente de lettres mortes. Une alerte automatique lorsque le taux d'échec dépasse un seuil défini (par exemple, plus de 2 % des messages par jour) évite qu'un problème accumulé ne soit découvert qu'après une plainte d'un client.

Ces décisions s'appuient généralement sur un travail préparatoire fondamental dans le domaine de l'information et des autorisations, décrit dans la dette technique Salesforce.

Processus de travail recommandé

1. Cartographier les entités et définir la source de vérité.

Pour chaque entité (client, produit, commande, facture), déterminer quel système fait autorité en cas de conflit. Sans cette décision, toute discussion sur la « bonne façon de synchroniser » reste dans le flou.

2. Choisir un modèle de synchronisation en fonction de la latence réellement requise.

Tous les processus n'ont pas besoin d'une réponse immédiate. La vérification des stocks avant une vente, oui ; la mise à jour nocturne des tarifs, non. Adapter le modèle aux besoins réels permet d'économiser des coûts d'infrastructure inutiles.

3. Arbitrer entre Middleware et Point-à-point.

La décision dépend du nombre de systèmes connectés et du besoin de gouvernance centralisée, et non d’une simple préférence technologique.

4. Planifier l'Idempotence, les Retries et la Réconciliation dès le début.

Ce ne sont pas des « améliorations futures » mais une partie de la définition de la complétude (Definition of Done) pour toute intégration qui touche à l'argent, aux stocks ou aux commandes.

5. Configurer des autorisations minimales pour l'utilisateur technique.

Un profil dédié, et non une autorisation d'administrateur système générale. Toute modification d'autorisation passe par une approbation distincte de la modification fonctionnelle.

6. Tester les scénarios d'échec, pas seulement le chemin nominal.

Exécuter un test où l'ERP "tombe en panne" au milieu d'un processus, et mesurer le temps de récupération et si des duplications sont créées, révèle des problèmes invisibles dans un environnement de développement calme.

7. Mettre en place un tableau de bord et un processus de réconciliation régulier.

La surveillance technique (le serveur est en ligne) n'est pas suffisante ; il faut une surveillance métier (le nombre de commandes est le même dans les deux systèmes).

Exemple de scénario organisationnel

Une entreprise commerciale traitant environ 40 000 commandes par mois a connecté Salesforce à son ERP via des appels REST synchrones directs, sans Middleware. Pendant une période de forte activité, le taux d'échec des appels API a fortement augmenté en raison de la limite quotidienne d'appels, et les commandes qui n'avaient pas pu être enregistrées dans l'ERP ont tout simplement "disparu" – car il n'y avait pas de file d'attente de lettres mortes ni d'alerte.

Après examen, il est apparu que trois éléments manquaient : aucune clé d'idempotence n'avait été définie, de sorte que les tentatives répétées créaient parfois des commandes en double ; il n'y avait pas de basculement vers l'API Bulk pour les mises à jour volumineuses ; et il n'y avait pas de processus de réconciliation pour comparer le nombre de commandes dans les deux systèmes. La solution a consisté à passer à une couche de Middleware avec une file d'attente de messages, à remplacer une partie des appels synchrones par un traitement par lots fréquent, et à ajouter un tableau de bord quotidien affichant les écarts.

Le résultat n'a pas été "zéro défaut" – c'est un objectif irréaliste – mais un temps de détection des pannes réduit de semaines à quelques heures, et un processus permettant de corriger un écart le jour même plutôt qu'après la plainte d'un client.

Risques courants et actions préventives

RisqueManifestation concrèteAction préventive
Pas de source de vérité définieDeux sources "correctes" simultanément, personne ne sait laquelle croireDocument de cartographie des entités avec propriétaire défini pour chaque champ critique
Manque d'idempotenceCommandes en double après chaque problème réseau transitoireClé d'idempotence et vérification des duplications côté récepteur
Point-à-point sans gouvernanceToute modification dans un système casse silencieusement d'autres connexionsCouche de Middleware, contrats documentés et propriété claire
Ignorance des limites de l'APIAppels échouant en cas de forte charge, sans alerte anticipéePassage à l'API Bulk, surveillance de la consommation quotidienne du quota
Autorisations étendues pour l'utilisateur techniqueExposition d'informations sensibles au-delà des besoins d'intégrationProfil limité et audit périodique des autorisations

Ceux qui sont à un stade plus précoce que la planification de la connexion peuvent trouver des informations complémentaires dans Salesforce Flow ou Apex, notamment pour la décision concernant l'emplacement exact de la logique de transformation.

Comment mesurer le succès

DomaineCe qui est mesuréFréquence de vérification
FiabilitéTaux de messages complets vs. échouésContinue, avec alerte en cas de dépassement de seuil
LatenceTemps de bout en bout pour chaque scénario séparémentContinue
Cohérence des donnéesNombre d'écarts lors du contrôle de réconciliationQuotidienne ou hebdomadaire
Coût opérationnelHeures de support dédiées aux problèmes d'intégrationMensuelle

Il est conseillé de ne choisir que trois ou quatre indicateurs pour la première version, et de les mesurer également avant la mise en production afin de disposer d'une base de référence réelle pour la comparaison, et non d'une estimation de mémoire.

Liste de contrôle avant la mise en production

  • ☐ Pour chaque entité, une source de vérité unique et une règle de résolution des conflits sont définies.
  • ☐ Un modèle de synchronisation (Requête-Réponse, Batch ou Événementiel) a été choisi pour chaque processus individuel.
  • ☐ La décision a été prise de savoir si un Middleware est nécessaire ou si une connexion directe suffit.
  • ☐ Une clé d’idempotence existe pour toute opération générant un enregistrement financier.
  • ☐ Un mécanisme de nouvelle tentative avec backoff et une file d'attente de lettres mortes sont définis pour les messages ayant échoué.
  • ☐ La consommation quotidienne du quota d'API a été vérifiée par rapport au volume attendu.
  • ☐ L'autorisation de l'utilisateur technique est limitée aux objets et champs requis uniquement.
  • ☐ Des tests de défaillance partielle ont été effectués, et pas seulement le chemin nominal.
  • ☐ Un tableau de bord est en place pour la surveillance métier, et pas seulement technique.
  • ☐ Un processus de réconciliation régulier a été défini et un responsable a été désigné.

Notes approfondies pour l'implémentation et la maintenance

Note d'architecte : Quand changer un modèle existant

Si un modèle de traitement par lots nocturne a été choisi initialement pour des raisons de simplicité, mais que l'entreprise commence à exiger une mise à jour des stocks quasi-instantanée, il n'est pas nécessaire de "détruire" toute l'architecture – on peut augmenter la fréquence à 15 minutes comme étape intermédiaire, et passer au modèle événementiel uniquement lorsqu'il est avéré que cela ne suffit plus. Un changement progressif, accompagné de la mesure de la latence réelle, est préférable à une décision globale trop précoce.

D'un point de vue managérial, le véritable test d'une connexion Salesforce-ERP n'est pas seulement qu'elle "fonctionne aujourd'hui", mais qu'il est possible d'expliquer en cinq minutes pourquoi chaque modèle a été choisi, et qui est responsable de sa réparation lorsque quelque chose tourne mal. Une solution qui nécessite une longue investigation à chaque incident génère un coût opérationnel caché qui augmente avec le temps.

Lorsque les capacités internes de planification ou de mise en œuvre d'une telle connexion sont insuffisantes, le service d'architecture CRM est la voie pratique à suivre.

Sources professionnelles