Aller au contenu
All articles
Setup

ERP d'entreprise : SAP et NetSuite

Guide étape par étape pour connecter Sellio à votre SAP (OData) ou NetSuite (REST) de manière bidirectionnelle : envoyez des comptes, des commandes et des factures vers l'ERP et recevez des événements en retour (facture payée, commande/client mis à jour). Modèle BYO : l'ERP et les identifiants sont les vôtres.

Cette intégration connecte Sellio à votre ERP d'entreprise, que ce soit SAP (via OData) ou NetSuite (via REST Record Service), avec une synchronisation bidirectionnelle approfondie. Elle complète le connecteur générique « ERP / Facturation » (qui fait uniquement un simple POST vers un point de terminaison) : ici, nous parlons directement à l'API typée de chaque plateforme, avec l'authentification réelle de chacune. Modèle BYO : le compte et les identifiants sont les vôtres ; il n'y a aucun coût de notre côté. Tout démarre inerte : rien n'est envoyé ni reçu tant que vous n'avez pas configuré et activé. Les secrets sont stockés chiffrés et ne sont jamais réaffichés.

Ce qui se passe dans chaque sens : à l'ENVOI (Sellio → ERP), lorsque vous le déclenchez (ou qu'une automatisation le déclenche), le CRM construit l'enregistrement dans le langage de l'ERP (EntitySet OData dans SAP ; recordType dans NetSuite) et effectue le POST authentifié. À la RÉCEPTION (ERP → Sellio), votre ERP appelle l'URL du webhook Sellio à chaque événement (facture payée, commande mise à jour, client mis à jour) ; Sellio rapproche un paiement en attente par montant + devise (lorsqu'il s'agit d'une facture/commande payée) ou enregistre une activité sur le Contact correspondant. Les événements répétés sont dédupliqués par l'identifiant externe.

💡 Choisissez le chemin selon votre plateforme. Vous pouvez configurer SAP, NetSuite, ou les deux. Chacun a sa propre fiche dans Paramètres → Intégrations et sa propre URL de webhook.

1. Prérequis

SAP (S/4HANA Cloud, S/4HANA on-premise via SAP Gateway, ou SAP BTP) : vous avez besoin d'un service OData publié pour les entités que vous allez synchroniser (par exemple, le service standard API_BUSINESS_PARTNER pour les comptes/contacts, API_SALES_ORDER_SRV pour les commandes, API_BILLING_DOCUMENT_SRV pour les factures) et d'un identifiant pour l'appeler. Deux options d'identifiant : (a) un Communication User avec Basic Auth, ou (b) un client OAuth 2.0 (client credentials) sur SAP BTP. Permissions : l'utilisateur/client a besoin de l'autorisation de création (POST) sur les entités OData choisies.

NetSuite (SuiteTalk REST) : vous avez besoin des fonctionnalités « SuiteTalk (SOAP and REST Web Services) » et « Token-Based Authentication » activées sur votre compte, et d'un utilisateur avec un Rôle disposant des permissions Lists/Records pour les objets que vous allez synchroniser (Customers, Sales Orders, Invoices) et de la permission « REST Web Services » (sous Setup). Vous créerez un Integration Record (Consumer Key/Secret) et un Access Token (Token ID/Secret).

  • Vous devez être administrateur Sellio (permission de gérer les paramètres) pour enregistrer et activer le connecteur.
  • Ayez les URL/identifiants sous la main : dans SAP, l'URL de base du service OData ; dans NetSuite, votre Account ID (par exemple, 1234567, ou 1234567_SB1 pour le sandbox).

2. Chez le fournisseur (SAP) : exposer l'OData et créer l'identifiant

  1. Publiez/activez le service OData de l'entité souhaitée. Dans S/4HANA on-premise, utilisez la transaction /IWFND/MAINT_SERVICE pour ajouter et activer le service (par exemple, API_BUSINESS_PARTNER) ; notez l'URL de base résultante (quelque chose comme https://votrehote:44300/sap/opu/odata/sap/API_BUSINESS_PARTNER). Dans S/4HANA Cloud, le service est déjà publié, copiez donc l'URL de service depuis le Communication Arrangement correspondant.
  2. Créez l'identifiant de communication. Pour Basic Auth : dans Communication Management → Maintain Communication Users, créez un Communication User avec nom d'utilisateur et mot de passe ; puis, dans Communication Arrangements, associez cet utilisateur au Communication Scenario qui expose le service OData. Pour OAuth 2.0 (BTP) : créez une instance de service et notez le Client ID, le Client Secret et l'URL du jeton (point de terminaison /oauth/token).
  3. Assurez-vous que l'utilisateur/client dispose de la permission POST (création) sur les entités. Testez rapidement le GET de la collection dans le navigateur/Postman avec le même identifiant pour confirmer l'accès.

2. Chez le fournisseur, NetSuite (Integration Record + Access Token TBA)

  1. Activez les fonctionnalités : Setup → Company → Enable Features → onglet SuiteCloud → cochez « SOAP Web Services » et/ou « REST Web Services » et « Token-Based Authentication ». Enregistrez.
  2. Créez l'Integration Record : Setup → Integration → Manage Integrations → New. Donnez-lui un nom (par exemple, « Sellio CRM »), laissez « Token-Based Authentication » coché, décochez « TBA: Authorization Flow » et « OAuth 2.0 » si vous utilisez uniquement TBA, et enregistrez. NetSuite affiche le Consumer Key et le Consumer Secret UNE SEULE FOIS, copiez donc les deux maintenant (ils ne seront plus jamais affichés).
  3. Créez l'Access Token : Setup → Users/Roles → Access Tokens → New. Sélectionnez l'Application Name (l'Integration Record que vous avez créé), l'User et le Role (un rôle avec les permissions Records + « REST Web Services »). Enregistrez. NetSuite affiche le Token ID et le Token Secret UNE SEULE FOIS, copiez donc les deux maintenant.
  4. Notez votre Account ID : Setup → Company → Company Information (champ « Account ID »), par exemple 1234567 (production) ou 1234567_SB1 (sandbox).
💡 Conservez le Consumer Key/Secret et le Token ID/Secret en lieu sûr : NetSuite ne les réaffiche pas une seconde fois. Si vous les perdez, vous devrez les générer à nouveau.

3. Dans Sellio : collez les identifiants et activez

  1. Ouvrez Paramètres → Intégrations et repérez la fiche « SAP (ERP entreprise) » ou « NetSuite (ERP entreprise) ».
  2. SAP : dans « URL du service OData », collez l'URL de base du service (sans la barre oblique finale et sans le nom de l'EntitySet, car Sellio ajoute l'EntitySet correct). Dans « Type d'authentification », choisissez Basic (et collez Nom d'utilisateur + Mot de passe) ou OAuth 2.0 (et collez l'URL du jeton + Client ID + Client Secret).
  3. NetSuite : dans « Account ID », collez votre identifiant (par exemple, 1234567 ou 1234567_SB1). Dans « Type d'authentification », choisissez Token-Based Authentication (TBA) et collez Consumer Key, Consumer Secret, Token ID et Token Secret. (Si vous préférez OAuth 2.0, choisissez cette option et collez l'Access Token.)
  4. Renseignez le « Secret du webhook » si vous allez renvoyer des événements ERP vers Sellio. C'est OBLIGATOIRE pour la réception : pour des raisons de sécurité (les événements peuvent solder un paiement), Sellio n'accepte que les webhooks portant ce secret/cette signature. Sans cela, la réception est rejetée (voir l'étape 4). Stocké chiffré.
  5. Cliquez sur « Enregistrer le connecteur ». Les identifiants sont stockés chiffrés. Cliquez ensuite sur « Activer ». L'envoi et la réception ne fonctionnent qu'une fois le connecteur ACTIVÉ.

Pour recevoir les événements ERP : après l'enregistrement, utilisez « Générer l'URL du webhook » et copiez l'URL (format https://app.../api/inbound/erp/VOTRE_JETON). Collez cette URL dans la destination webhook de votre ERP : dans SAP, dans une automatisation/middleware (Event Mesh, SAP BTP, ou une tâche qui fait un POST) ; dans NetSuite, dans un User Event Script/RESTlet ou un outil d'automatisation (SuiteFlow + script) qui envoie l'événement en POST. Le fournisseur (SAP ou NetSuite) est identifié par le jeton lui-même, il n'y a donc rien à choisir dans l'URL.

4. Comment tester

  1. Le connecteur étant activé, cliquez sur « Envoyer une fiche test » sur la fiche. Sellio construit un compte fictif (un test de connexion « Sellio CRM ») et l'envoie à votre ERP.
  2. Vérifiez dans l'ERP : dans SAP, recherchez le Business Partner nouvellement créé dans l'entité correspondante ; dans NetSuite, recherchez le nouveau Customer sous Lists → Relationships → Customers.
  3. Si « Enregistrement test envoyé à l'ERP » apparaît, l'authentification et le point de terminaison sont corrects. Ensuite, pour envoyer un VRAI enregistrement, déclenchez l'envoi depuis l'enregistrement CRM (compte, contact, commande, opportunité ou facture), et Sellio utilise le même chemin.
  4. Pour tester la RÉCEPTION : générez (ou simulez) un événement dans l'ERP (par exemple, marquez une facture comme payée) et vérifiez dans Sellio si un paiement en attente du même montant a été rapproché, ou si une activité est apparue sur le Contact correspondant.
💡 L'envoi test n'écrit RIEN dans votre CRM. Ce n'est qu'un appel à l'ERP pour valider la connexion. L'envoi d'enregistrements réels récupère l'enregistrement par id, en respectant vos permissions.

5. Dépannage

  • 401 (non autorisé) : identifiants incorrects ou expirés. SAP Basic → vérifiez le nom d'utilisateur/mot de passe du Communication User ; SAP OAuth → vérifiez le Client ID/Secret et l'URL du jeton ; NetSuite TBA → vérifiez le Consumer Key/Secret et le Token ID/Secret (un caractère en trop/manquant invalide la signature). Recollez les secrets (ils ne reviennent pas depuis le serveur pour des raisons de sécurité).
  • Signature TBA invalide (NetSuite) : Token-Based Authentication utilise OAuth 1.0a avec HMAC-SHA256 ; la signature dépend de la méthode, de l'URL exacte (y compris les paramètres de requête) et de l'Account ID (realm). Confirmez que l'Account ID est correct (avec le suffixe _SB1 en sandbox) et que les quatre valeurs (Consumer Key/Secret, Token ID/Secret) ont été collées sans espaces. Si vous avez régénéré le jeton dans NetSuite, mettez-le à jour dans Sellio.
  • 403 (interdit) : l'identifiant s'authentifie, mais le rôle/utilisateur n'a pas la permission de créer cet enregistrement. Dans NetSuite, vérifiez les permissions du Rôle (Lists/Records + « REST Web Services ») ; dans SAP, vérifiez l'autorisation POST sur l'entité OData / le Communication Scenario.
  • Entité/recordType introuvable (404) : dans SAP, l'URL du service OData est incorrecte ou le service n'est pas activé. Confirmez l'URL de base (sans l'EntitySet) et activez le service dans /IWFND/MAINT_SERVICE. Dans NetSuite, le recordType par défaut peut ne pas correspondre au vôtre, et les comptes/commandes/factures personnalisés peuvent nécessiter un recordType différent (contactez le support pour ajuster le mappage).
  • Champs rejetés : SAP et NetSuite sont stricts avec les noms de propriétés. Sellio envoie un ensemble prudent de champs communs (nom, e-mail, téléphone, entreprise, montant, devise, référence). Si votre ERP exige des champs obligatoires supplémentaires (par exemple, BP Category dans SAP, subsidiary dans NetSuite), ils doivent être mappés, ajustez donc le mappage dans la configuration ou contactez le support.
  • Le webhook n'arrive pas (réception) : confirmez que le connecteur est ACTIVÉ (un webhook de connecteur désactivé répond 404), que l'URL collée dans l'ERP est complète (avec le jeton) et, si vous avez défini un « Secret du webhook », que l'ERP envoie le secret dans l'en-tête X-Sellio-Secret ou le HMAC-SHA256 du corps dans l'en-tête de signature. Sinon, la réponse est 401.

Open this article inside the system

Read it and want to see it working?

The account is free and the whole manual is available inside the system, with an assistant that answers from this very content.

Créer un compte gratuit
ERP d'entreprise : SAP et NetSuite · Sellio