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 synchronisation | Fréquence typique |
|---|---|---|---|
| Client (Compte) | Salesforce | Bidirectionnelle avec règle de conflit | Quasi-instantanée |
| Produit et Tarifs | ERP | Unidirectionnelle vers Salesforce | Quotidienne ou sur changement |
| Commande (Commande) | Créée dans Salesforce, gérée dans ERP | Bidirectionnelle, étapes distinctes | Immédiate à l'étape de création |
| Facture et Paiement | ERP | Unidirectionnelle vers Salesforce | Quotidienne ou quasi-temps réel |
| Stock disponible | ERP | Unidirectionnelle vers Salesforce | Toutes 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énario | Modèle recommandé | Latence typique | Risque principal |
|---|---|---|---|
| Vérification des stocks avant confirmation de commande | Requête-Réponse | Quelques secondes | Dépendance totale à la disponibilité de l'ERP ; le dépassement de délai affecte l'expérience utilisateur |
| Synchronisation des tarifs et produits | Traitement par lots nocturne | Quelques heures à 24 heures | Données non à jour entre les exécutions ; nécessite une coordination avec les campagnes et promotions |
| Mise à jour du statut de paiement | Événementiel | Quelques secondes à quelques minutes | Complexité 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'ERP | Requête-Réponse avec nouvelle tentative | Quelques 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 vente | Traitement par lots fréquent (toutes les 15-60 minutes) | Quelques minutes | Vente basée sur des stocks déjà épuisés entre les exécutions |
| Alerte de dépassement de limite de crédit | Événementiel | Quasi-instantanée | Un é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 :
- 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
- 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
- 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
| Risque | Manifestation concrète | Action préventive |
|---|---|---|
| Pas de source de vérité définie | Deux sources "correctes" simultanément, personne ne sait laquelle croire | Document de cartographie des entités avec propriétaire défini pour chaque champ critique |
| Manque d'idempotence | Commandes en double après chaque problème réseau transitoire | Clé d'idempotence et vérification des duplications côté récepteur |
| Point-à-point sans gouvernance | Toute modification dans un système casse silencieusement d'autres connexions | Couche de Middleware, contrats documentés et propriété claire |
| Ignorance des limites de l'API | Appels échouant en cas de forte charge, sans alerte anticipée | Passage à l'API Bulk, surveillance de la consommation quotidienne du quota |
| Autorisations étendues pour l'utilisateur technique | Exposition d'informations sensibles au-delà des besoins d'intégration | Profil 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
| Domaine | Ce qui est mesuré | Fréquence de vérification |
|---|---|---|
| Fiabilité | Taux de messages complets vs. échoués | Continue, avec alerte en cas de dépassement de seuil |
| Latence | Temps de bout en bout pour chaque scénario séparément | Continue |
| Cohérence des données | Nombre d'écarts lors du contrôle de réconciliation | Quotidienne ou hebdomadaire |
| Coût opérationnel | Heures de support dédiées aux problèmes d'intégration | Mensuelle |
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
- Salesforce Integration Patterns — https://architect.salesforce.com/docs/architect/fundamentals/guide/integration-patterns.html
- Salesforce Data Integration Decision Guide — https://architect.salesforce.com/docs/architect/decision-guides/guide/data-integration.html
- HPI Pro – Architecture CRM — https://hpi.pro/crm-architecture
- HPI Pro – Intégrations et Données — https://hpi.pro/integrations-data
