Salesforce Connector for jCustomer
Synchronisation bidirectionnelle entre Salesforce et les profils Apache Unomi (jCustomer), configurée entièrement depuis un panneau d'administration jContent - sans code.
Gardez votre CDP et votre CRM alignés. Ce module relie Salesforce et les profils jCustomer (Unomi) de jExperience dans les deux sens, avec une interface visuelle de mapping des champs, une planification flexible et une sécurité de niveau entreprise. L'authentification utilise le flux JWT Bearer OAuth 2.0 de Salesforce (RS256) : pas de secret client, et la clé privée ne quitte jamais votre serveur.
Entrant - Salesforce vers jCustomer
- Importez les données Contact, Account et Lead dans les propriétés de profil jCustomer.
- Déclencheurs : traitement planifié (delta par date de dernière modification), à la connexion de l'utilisateur, ou synchronisation manuelle « Synchroniser maintenant ».
- Les enregistrements sont rapprochés des profils par un identifiant Salesforce stocké, sinon par email.
Sortant - jCustomer vers Salesforce
- Poussez les profils jCustomer vers un Lead ou un Contact Salesforce (cible au choix).
- Fonctionnement par interrogation (polling), suivant l'approche du connecteur officiel Workato Unomi de Jahia : aucun plugin déployé dans jCustomer, rien à installer côté conteneur.
- Se déclenche sur les mises à jour de profil (email requis) et les **soumissions de formulaire) ; les enregistrements rapprochés sont mis à jour, les profils non rapprochés créent un nouvel enregistrement, et le nouvel identifiant est réécrit dans le profil pour des synchronisations futures idempotentes.
- Constructeur de planification convivial (toutes les N minutes, horaire, quotidien, hebdomadaire, mensuel) ou à la demande.
Administration et exploitation
- Interface de configuration sous jContent, Administration : connexion, mapping des champs par objet, déclencheurs et état de synchronisation.
- Exportez le mapping des champs de chaque objet en CSV ou JSON, dans les deux sens, pour la documentation ou la migration.
- La configuration est stockée dans le JCR sous des types de nœuds typés, entièrement consultables dans le navigateur de définitions / JCR.
Sécurité intégrée
- Actions d'administration réservées aux administrateurs de serveur ou de site.
- Défense same-origin (CSRF) sur chaque action.
- Liste blanche anti-SSRF sur l'URL d'instance Salesforce ; échappement SOQL sur les valeurs issues de l'utilisateur.
- Aucun secret dans le code source ; la clé privée RSA est stockée dans le JCR et n'est jamais renvoyée au navigateur.
Prérequis : Jahia 8.2, jExperience, et un service jCustomer / Unomi accessible ; une application connectée (Connected App) Salesforce configurée pour le flux JWT Bearer.
Captures d'écran
Comment installer
1. Installer le module
- Depuis le Jahia Store : cliquez sur Installer sur cette fiche, ou
- Manuellement : téléchargez jcustomer-sfdc-connector-2.2.0.jar et déployez-le via le Module Manager de jContent, l'API de Provisioning, ou le dossier de déploiement à chaud de votre instance (/var/jahia/modules/).
2. Activez-le sur votre site (Administration, Modules), et assurez-vous que jExperience et un service jCustomer / Unomi sont disponibles.
3. Créez une application connectée (Connected App) Salesforce pour le flux JWT Bearer :
- Activez « Use digital signatures » et téléversez votre certificat public.
- Scopes OAuth incluant api ; pré-autorisez l'utilisateur d'exécution.
4. Configurez les paramètres d'exécution (config OSGi org.jahia.community.jcustomer.sfdc.cfg) : définissez jcustomer.site.key avec la clé de votre site jExperience, ainsi que l'URL et les identifiants jCustomer de votre environnement (utilisez le nom d'hôte du conteneur, par exemple http://jcustomer:8181, et non localhost).
5. Ouvrez le panneau d'administration - jContent, Administration, Sync Salesforce ⇄ jCustomer :
- Connexion : saisissez les identifiants de l'application connectée et la clé privée PEM, puis Tester la connexion.
- Mapping des champs : mappez les champs par objet pour chaque direction.
- Déclencheurs : activez l'entrant (planification / à la connexion) et le sortant (objet cible, mise à jour de profil / soumission de formulaire, planification), ou lancez Synchroniser maintenant.
Mise à niveau depuis une version antérieure : déployez le jar 2.2.0, puis exécutez une seule fois le patch de migration migration/2100-migrate-config-to-typed.groovy (placez-le dans <jahia>/patches/groovy/) pour convertir la configuration existante vers le stockage JCR typé. Les nouvelles installations ne nécessitent aucune migration.
FAQ
Dois-je installer quoi que ce soit dans le conteneur jCustomer / Unomi ?
Non. La synchronisation sortante fonctionne par interrogation (polling) et s'exécute entièrement depuis le module Jahia : aucun plugin Unomi, aucun webhook, rien à déployer côté conteneur.
Quels objets Salesforce sont pris en charge ?
Entrant : Contact, Account et Lead. Sortant : une seule cible au choix - Lead ou Contact.
Comment fonctionne l'authentification ? Dois-je stocker un secret client ?
Elle utilise le flux JWT Bearer OAuth 2.0 de Salesforce (RS256). Il n'y a pas de secret client ; vous téléversez un certificat dans l'application connectée et stockez la clé privée RSA correspondante dans Jahia, où elle reste côté serveur.
Comment les profils et les enregistrements Salesforce sont-ils rapprochés ?
D'abord par un identifiant Salesforce stocké (par exemple SFDC_ContactId / SFDC_LeadId), puis par email. En sortant, les profils non rapprochés créent un nouvel enregistrement et l'identifiant est réécrit dans le profil pour les mises à jour futures.
J'ai modifié un profil mais rien n'est arrivé dans Salesforce immédiatement - est-ce normal ?
La synchronisation sortante s'exécute selon sa planification. Utilisez Synchroniser maintenant pour un lancement immédiat. Les modifications de profil effectuées directement en console/REST sont détectées à la prochaine interrogation des profils.
Pourquoi ne parvient-il pas à créer un Lead/Contact ?
Salesforce exige LastName (et Company pour un Lead) pour créer un enregistrement. Mappez ces champs, sinon les enregistrements existants seront quand même mis à jour.
Puis-je exporter mes mappings de champs ?
Oui - chaque onglet de mapping des champs propose Exporter CSV et Exporter JSON pour l'objet sélectionné, dans les deux directions.
Où la configuration est-elle stockée ?
Dans le JCR sous /settings/jcustomer-sfdc-connector, avec des types de nœuds typés (jcsfdcnt:*) pour être consultable dans le navigateur de définitions / JCR.
Quelle version de Jahia est requise ?
Jahia 8.2, avec jExperience et un service jCustomer / Unomi accessible.
MIT License
Copyright (c) 2026 Stephane Monier
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.