ERP enterprise: SAP y NetSuite
Guía paso a paso para conectar Sellio a tu SAP (OData) o NetSuite (REST) de forma bidireccional: enviar cuentas, pedidos y facturas al ERP y recibir de vuelta los eventos (factura pagada, pedido/cliente actualizado). Modelo BYO: el ERP y las credenciales son tuyos.
Esta integración conecta Sellio a tu ERP corporativo, ya sea SAP (mediante OData) o NetSuite (mediante REST Record Service), de forma bidireccional y profunda. Es complementaria al conector "ERP / Facturación" genérico (que solo hace un POST simple a un endpoint): aquí hablamos directamente con la API tipada de cada plataforma, con la autenticación real de cada una. Modelo BYO: la cuenta y las credenciales son tuyas; no hay costo de nuestra parte. Todo nace inerte: no se envía ni recibe nada hasta que configures y actives. Los secretos se guardan cifrados y nunca se muestran de vuelta.
Qué ocurre en cada dirección: en el ENVÍO (Sellio → ERP), cuando disparas (o una automatización dispara) el CRM arma el registro en el lenguaje del ERP (EntitySet de OData en SAP; recordType en NetSuite) y hace el POST autenticado. En la RECEPCIÓN (ERP → Sellio), tu ERP llama a la URL de webhook de Sellio en cada evento (factura pagada, pedido actualizado, cliente actualizado); Sellio concilia un pago pendiente por valor + moneda (cuando es una factura/pedido pagado) o registra una actividad en el Contacto correspondiente. Los eventos repetidos se deduplican por el id externo.
1. Requisitos previos
SAP (S/4HANA Cloud, S/4HANA on-premise mediante SAP Gateway, o SAP BTP): necesitas un servicio OData publicado para las entidades que vas a sincronizar (por ejemplo, el servicio estándar API_BUSINESS_PARTNER para cuentas/contactos, API_SALES_ORDER_SRV para pedidos, API_BILLING_DOCUMENT_SRV para facturas) y una credencial para llamarlo. Dos opciones de credencial: (a) un Communication User con Basic Auth, o (b) un cliente OAuth 2.0 (client credentials) en SAP BTP. Permisos: el usuario/cliente necesita autorización de creación (POST) en las entidades OData elegidas.
NetSuite (SuiteTalk REST): necesitas el recurso "SuiteTalk (SOAP and REST Web Services)" y el "Token-Based Authentication" habilitados en tu cuenta, y un usuario con un Role que tenga los permisos de Lists/Records de los objetos que vas a sincronizar (Customers, Sales Orders, Invoices) y el permiso "REST Web Services" (en Setup). Vas a crear un Integration Record (Consumer Key/Secret) y un Access Token (Token ID/Secret).
- Debes ser administrador de Sellio (permiso para gestionar la configuración) para guardar y activar el conector.
- Ten a mano las URLs/IDs: en SAP, la URL base del servicio OData; en NetSuite, tu Account ID (ej.: 1234567, o 1234567_SB1 para sandbox).
2. En el proveedor: SAP (exponer el OData y crear la credencial)
- Publica/activa el servicio OData de la entidad deseada. En S/4HANA on-premise, usa la transacción /IWFND/MAINT_SERVICE para agregar y activar el servicio (ej.: API_BUSINESS_PARTNER); anota la URL base resultante (algo como https://tuhost:44300/sap/opu/odata/sap/API_BUSINESS_PARTNER). En S/4HANA Cloud, el servicio ya está publicado: copia la Service URL del Communication Arrangement correspondiente.
- Crea la credencial de comunicación. Para Basic Auth: en Communication Management → Maintain Communication Users, crea un Communication User con usuario y contraseña; luego, en Communication Arrangements, asocia ese usuario al Communication Scenario que expone el servicio OData. Para OAuth 2.0 (BTP): crea una instancia del servicio y anota el Client ID, el Client Secret y la Token URL (endpoint /oauth/token).
- Asegúrate de que el usuario/cliente tenga permiso de POST (creación) en las entidades. Prueba rápidamente el GET de la colección en el navegador/Postman con la misma credencial para confirmar el acceso.
2. En el proveedor: NetSuite (Integration Record + Access Token TBA)
- Habilita los recursos: Setup → Company → Enable Features → pestaña SuiteCloud → marca "SOAP Web Services" y/o "REST Web Services" y "Token-Based Authentication". Guarda.
- Crea el Integration Record: Setup → Integration → Manage Integrations → New. Dale un nombre (ej.: "Sellio CRM"), deja "Token-Based Authentication" marcado, desmarca "TBA: Authorization Flow" y "OAuth 2.0" si vas a usar solo TBA, y guarda. NetSuite muestra UNA SOLA VEZ el Consumer Key y el Consumer Secret; cópialos ambos ahora (no se muestran de nuevo).
- Crea el Access Token: Setup → Users/Roles → Access Tokens → New. Selecciona el Application Name (el Integration Record que creaste), el User y el Role (un rol con los permisos de Records + "REST Web Services"). Guarda. NetSuite muestra UNA SOLA VEZ el Token ID y el Token Secret; cópialos ambos ahora.
- Anota tu Account ID: Setup → Company → Company Information (campo "Account ID"), ej.: 1234567 (producción) o 1234567_SB1 (sandbox).
3. En Sellio: pegar las credenciales y activar
- Abre Configuración → Integraciones y localiza la tarjeta "SAP (ERP enterprise)" o "NetSuite (ERP enterprise)".
- SAP: en "URL del servicio OData", pega la URL base del servicio (sin la barra final y sin el nombre del EntitySet, ya que Sellio anexa el correcto). En "Tipo de autenticación", elige Basic (y pega Usuario + Contraseña) u OAuth 2.0 (y pega la URL del token + Client ID + Client Secret).
- NetSuite: en "Account ID", pega tu ID (ej.: 1234567 o 1234567_SB1). En "Tipo de autenticación", elige Token-Based Authentication (TBA) y pega Consumer Key, Consumer Secret, Token ID y Token Secret. (Si prefieres OAuth 2.0, elige esa opción y pega el Access Token.)
- Completa el "Secreto del webhook" si vas a enviar eventos del ERP de vuelta a Sellio. Es OBLIGATORIO para la recepción: por seguridad (los eventos pueden liquidar un pago), Sellio solo acepta webhooks que lleven este secreto/firma; sin él, la recepción se rechaza (ver el paso 4). Se guarda cifrado.
- Haz clic en "Guardar conector". Las credenciales se guardan cifradas. Luego haz clic en "Activar": el envío y la recepción solo funcionan con el conector ACTIVADO.
Para recibir eventos del ERP: después de guardar, usa "Generar URL del webhook" y copia la URL (formato https://app.../api/inbound/erp/TU_TOKEN). Pega esa URL en el destino de webhook de tu ERP: en SAP, en una automatización/middleware (Event Mesh, SAP BTP, o un job que haga POST); en NetSuite, en un User Event Script/RESTlet o en una herramienta de automatización (SuiteFlow + script) que haga POST del evento. El proveedor (SAP o NetSuite) se identifica por el propio token; no hay nada que elegir en la URL.
4. Cómo probar
- Con el conector activado, haz clic en "Enviar registro de prueba" en la tarjeta. Sellio arma una cuenta ficticia llamada "Sellio CRM" (con la referencia "Connection Test") y la envía a tu ERP.
- Verifica en el ERP: en SAP, busca el Business Partner recién creado en la entidad correspondiente; en NetSuite, busca el Customer nuevo en Lists → Relationships → Customers.
- Si aparece "Registro de prueba enviado al ERP", la autenticación y el endpoint son correctos. Luego, para el envío de un registro REAL, dispara el envío desde el registro del CRM (cuenta, contacto, pedido, oportunidad o factura); Sellio usa el mismo camino.
- Para probar la RECEPCIÓN: genera en el ERP (o simula) un evento (por ejemplo, marca una factura como pagada) y verifica en Sellio si se concilió un pago pendiente del mismo valor, o si surgió una actividad en el Contacto correspondiente.
5. Solución de problemas
- 401 (no autorizado): credenciales incorrectas o vencidas. SAP Basic → verifica usuario/contraseña del Communication User; SAP OAuth → verifica Client ID/Secret y la URL del token; NetSuite TBA → verifica Consumer Key/Secret y Token ID/Secret (un carácter de más/menos invalida la firma). Vuelve a pegar los secretos (no vuelven del servidor por seguridad).
- Firma TBA inválida (NetSuite): la Token-Based Authentication usa OAuth 1.0a con HMAC-SHA256; la firma depende del método, de la URL exacta (incluidos los parámetros de query) y del Account ID (realm). Confirma que el Account ID sea correcto (con el sufijo _SB1 en sandbox) y que los cuatro valores (Consumer Key/Secret, Token ID/Secret) se hayan pegado sin espacios. Si regeneraste el token en NetSuite, actualízalo en Sellio.
- 403 (prohibido): la credencial autentica, pero el rol/usuario no tiene permiso para crear ese registro. En NetSuite, revisa los permisos del Role (Lists/Records + "REST Web Services"); en SAP, revisa la autorización de POST en la entidad OData / el Communication Scenario.
- Entidad/recordType no encontrado (404): en SAP, la URL del servicio OData es incorrecta o el servicio no está activado: confirma la URL base (sin el EntitySet) y activa el servicio en /IWFND/MAINT_SERVICE. En NetSuite, el recordType predeterminado puede no corresponder al tuyo, ya que cuentas, pedidos o facturas personalizados pueden requerir un recordType diferente (contacta al soporte para ajustar el mapeo).
- Campos rechazados: SAP y NetSuite son estrictos con los nombres de las propiedades. Sellio envía un conjunto conservador de campos comunes (nombre, correo, teléfono, empresa, valor, moneda, referencia). Si tu ERP exige campos obligatorios adicionales (ej.: BP Category en SAP, subsidiary en NetSuite), deben mapearse; ajusta el mapeo en la configuración o contacta al soporte.
- El webhook no llega (recepción): confirma que el conector esté ACTIVADO (el webhook de un conector desactivado responde 404), que la URL pegada en el ERP esté completa (con el token) y, si definiste un "Secreto del webhook", que el ERP envíe el secreto en el header X-Sellio-Secret o el HMAC-SHA256 del cuerpo en el header de firma; de lo contrario, la respuesta es 401.