Saltar al contenido principal

Shori SDK — Multi-plataforma

SDK multi-plataforma desarrollado por Jerson Omar Ramírez Ortiz de NTT DATA para integrar aplicaciones con la plataforma Syntpony Process Management (Shori). Compatible con Java, TypeScript, JavaScript, python, NestJS, Express, React, Next.js, Node-RED y Axetflow.


¿Qué es Shori?​

Shori es la plataforma Syntpony Process Management de NTT DATA — una solución empresarial completa para la gestión integral de procesos de negocio. Está diseñada para organizaciones BPO (Business Process Outsourcing) y para cualquier empresa que necesite orquestar, automatizar y dar trazabilidad a sus flujos operativos de extremo a extremo.

Con Shori puedes hacer prácticamente todo lo que ofrece una plataforma SPM completa:

  • 📋 Gestionar casos — Crear, actualizar y hacer seguimiento de tickets, solicitudes, incidencias o cualquier unidad de trabajo dentro de un proceso.
  • 🔄 Automatizar flujos — Definir estados, transiciones y reglas para guiar el ciclo de vida de cada caso según las reglas de negocio de tu organización.
  • 📁 Centralizar documentos — Adjuntar, versionar y recuperar archivos y contratos asociados a cada caso desde un repositorio centralizado.
  • 👥 Identificar usuarios — Consultar y validar los operadores, supervisores y agentes que participan en los procesos.
  • 📊 Trazabilidad end-to-end — Registrar comentarios, auditar cambios de estado y obtener el historial completo de cada caso.
  • 🔔 Orquestación de procesos — Conectar múltiples sistemas y equipos a través de un flujo de trabajo unificado.
  • 📈 Visibilidad operativa — Conocer en tiempo real el estado de todos los procesos activos de la organización.

Casos de uso típicos​

IndustriaCaso de uso
BPO / Contact CenterGestión de tickets de soporte, incidencias y reclamaciones
Banca y SegurosTramitación de solicitudes de crédito, siniestros y onboarding
TelecomunicacionesFlujos de activación, portabilidad y atención al cliente
Retail y LogísticaSeguimiento de pedidos, devoluciones y reclamaciones
Sector PúblicoGestión de expedientes, trámites y servicios ciudadanos

¿Qué es este SDK?​

El Shori SDK es un ecosistema de librerías desarrollado por Jerson Omar Ramírez Ortiz de NTT DATA para integrar cualquier plataforma con la API REST de Shori. Abstrae toda la complejidad del protocolo HTTP, la autenticación OAuth, la paginación automática y el manejo de errores.

SDKs disponibles​

PlataformaPaqueteVersiónDescripción
☕ Javashori-api-client1.0.6SDK Java para Spring Boot, standalone y batch jobs
🔷 TypeScript / JavaScriptshori-api-client-ts1.2.7SDK para NestJS, Express, React, Next.js y Node.js
🌊 Axetflow / Node-REDaxetflow-shori-nodes1.3.5Nodos visuales — sin código, arrastra y conecta
🌊 Pythonshori-api-client-py1.0.5SDK para puthon

Nota: Estos SDKs no son el cliente oficial de la plataforma Shori. Es una iniciativa creada para estandarizar y simplificar la integración con Shori en los proyectos de automatización.

Características principales​

  • ✅ API fluida — Builder pattern para configuración y llamadas encadenadas en todos los SDKs
  • ✅ Thread-safe (Java) / async-native (TS) — Instancia única compartible en Java; async/await nativo en TypeScript
  • ✅ Auto-renovación de tokens — El token Bearer se obtiene y renueva automáticamente en todos los SDKs
  • ✅ Auto-paginación — searchAll() pagina automáticamente hasta obtener todos los resultados
  • ✅ Tipado completo — Objetos y clases nativas en Java (Lombok); interfaces y DTOs en TypeScript; nodos configurables en Axetflow
  • ✅ Manejo de errores estructurado — Excepciones específicas por tipo de error en Java y TypeScript
  • ✅ Multi-ambiente — Soporte para DEV, UAT y PROD con URLs pre-configuradas en los tres SDKs
  • ✅ Compatible con cualquier stack — Spring Boot, NestJS, Express, React, Next.js, standalone scripts, Axetflow y Node-RED

Arquitectura del SDK​

Propósito: Un ecosistema de librerías multi-plataforma que unifica y encapsula todos los endpoints de Shori en componentes reutilizables para Java, TypeScript/JavaScript y Axetflow. El objetivo es evitar que cada proyecto configure peticiones HTTP, autenticación y manejo de errores de forma manual, aislando los cambios de la API externa en un único lugar.

Beneficios del SDK (Por qué usamos esta solución)​

  • Cero código duplicado: Evita que cada microservicio o proyecto reescriba los mismos clientes HTTP, mapeos de JSON y configuraciones de red para Shori — independientemente del lenguaje o framework.
  • Mantenimiento en un solo punto: Si la API de Shori cambia un endpoint, una URL o un parámetro, solo se actualiza este SDK. Todos tus proyectos — Java, TypeScript o Axetflow — se benefician automáticamente sin cambios en su código.
  • Tipado estricto y autocompletado: Transforma respuestas JSON crudas en objetos y clases nativas: POJOs en Java, interfaces TypeScript en TS/JS, y nodos configurables en Axetflow — siempre con autocompletado del IDE.
  • Integración en minutos: Para usar Shori en un nuevo proyecto, basta con agregar la dependencia Maven, instalar el paquete npm, o instalar desde el Palette de Axetflow — y llamar a ShoriClient / ShoriClientBuilder.
  • Abstracción de errores: Centraliza el manejo de códigos de estado HTTP (400, 401, 403, 500), devolviendo excepciones tipadas en Java y TypeScript, y mensajes claros en los nodos de Axetflow.

Inicio rápido​

1. Agregar la dependencia Maven​

<!-- 1. Repositorio del SDK (GitLab Package Registry — público) -->
<repositories>
<repository>
<id>gitlab-maven</id>
<url>https://gitlab.com/api/v4/projects/84253138/packages/maven</url>
</repository>
</repositories>

<!-- 2. Dependencia -->
<dependency>
<groupId>com.nttdata.shori</groupId>
<artifactId>shori-api-client</artifactId>
<version>{SDK_VERSIONS.java}</version>
</dependency>

2. Inicializar el cliente​

ShoriClient client = ShoriClient.builder()
.environment(ShoriEnvironment.PROD)
.portalId("tu-portal-id")
.tenantId("tu-tenant-id")
.apiKey("tu-api-key")
.build();

3. Crear y buscar casos​

// Crear un caso
CasoCreateResponse nuevo = client.caso().create(
CasoCreateRequest.builder()
.casoTypeId("tipo-solicitud-uuid")
.formId("formulario-uuid")
.priority("prioridad-uuid")
.submittedData(Map.of(
"nombreCliente", "Ana García",
"tipoServicio", "PORTABILIDAD"
))
.build()
);
System.out.println("Caso creado: " + nuevo.getCaso());

// Buscar todos los casos abiertos de un tipo
ProductResponse tipo = client.caso().casoType().findById("tipo-solicitud-uuid");
List<String> estadosAbiertos = ShoriUtils.openStatesIds(tipo);

List<CasoSearchResponse> casos = client.caso().searchAll(
CaseFilter.builder()
.casoTypeId(FilterOperator.EQ, "tipo-solicitud-uuid")
.workingSubStateId(FilterOperator.IN, estadosAbiertos.toArray(new String[0]))
.build()
);
System.out.println("Casos abiertos: " + casos.size());

// Cerrar el cliente al finalizar
// - Script/test: usar try-with-resources → close() automático
// - Spring Boot: @Bean(destroyMethod = "close") → Spring lo gestiona
// - Manual: client.close()
client.close();

📖 Guía completa de instalación y configuración Java →


Compatibilidad​

PlataformaRequisito mínimo
☕ JavaJava 17+, Maven 3.6+
🔷 TypeScript / JavaScriptNode.js 18+, npm 9+
🌊 Axetflow / Node-REDNode.js 18+, Node-RED / Axetflow ≥ 3.0.0

Reportar un Bug​

¿Encontraste un error o tienes una sugerencia de mejora? Contacta directamente al equipo:

📧 Jerson Ramírez Ortiz — jersonomar.ramirezortiz@emeal.nttdata.com

Al reportar un bug, incluye:

  • Descripción del problema
  • Versión del SDK (shori-sdk-ts, axetflow-shori-nodes o shori-api-client)
  • Pasos para reproducir el error
  • Stack trace o mensaje de error completo
  • Ambiente (DEV, UAT, PROD)

Equipo​

Este SDK es desarrollado y mantenido por Jerson Omar Ramírez Ortiz de NTT DATA, como parte de las iniciativas de automatización e integración de la plataforma Syntpony Process Management (Shori).

Cargando equipo...

Changelog​

v1.2.2 — Axetflow Nodes — Cobertura completa de módulos​

Lanzamiento del paquete axetflow-shori-nodes v1.2.2 — Jerson Omar Ramírez Ortiz, NTT DATA.

+33 nodos disponibles — cobertura total de todos los módulos del SDK:

GrupoNodos nuevos
Casos CRUDshori-create-case ✦, shori-update-case ✦, shori-count-cases ✦, shori-change-priority ✦
Estadosshori-next-state-massive ✦ (filas dinámicas), shori-next-state-by-int ✦, shori-search-states ✦, shori-search-working-substates ✦
Operaciones masivasshori-create-case-massive ✦ (filas dinámicas)
Comentariosshori-search-comments ✦
Usuariosshori-assign-user ✦, shori-unassign-user ✦
Tipo de casoshori-get-case-type-lite ✦
Primary Levelshori-search-primary-levels ✦ (operadores), shori-get-primary-level ✦, shori-create-primary-level ✦, shori-toggle-primary-level ✦, shori-get-working-substates ✦
Secondary Levelshori-search-secondary-levels ✦ (operadores), shori-get-secondary-level ✦, shori-create-secondary-level ✦, shori-toggle-secondary-level ✦
Archivos y Reposhori-search-case-files ✦, shori-upload-document ✦

Mejoras UX:

  • Todos los campos soportan modo formulario (estático) + fallback dinámico desde msg.payload
  • Esquema de colores por módulo para identificación visual rápida en la paleta
  • Nodos de búsqueda con selectores de operador (EQ, IN, LIKE, LIKE_AFTER, NOT IN, etc.)
  • Nodos masivos con tablas de filas dinámicas (agregar/eliminar filas en el formulario)

v1.0.0 — Primera versión estable​

Lanzamiento inicial del SDK para Java — Jerson Omar Ramírez Ortiz, NTT DATA.

Módulo de Casos (client.caso())

  • CRUD: findById, create, update
  • Búsqueda: search(CaseFilter), searchAll(CaseFilter) con auto-paginación
  • Búsqueda con adjuntos: searchWithAttachments, searchAllWithAttachments
  • Sub-módulos:
    • files() — search, getAttachments, update, delete
    • state() — next, nextMassive, nextByCasoIdInt, nextMassiveByCasoIdInt, search (con StateFilter), searchWorkingSubState (con WorkingSubStateFilter)
    • comment() — add, search, searchAll (con CommentFilter)
    • casoType() — findById, findByIdLite
    • primaryLevel() — findById, search, create, update, getWorkingSubstates, updateWorkingSubstates, updateCasoDataField, activate, deactivate, activateWorkingSubstates, deactivateWorkingSubstates
    • secondaryLevel() — findById, search, create, update, activate, deactivate
    • fileTypology() — getByCasoType, getCategoriesByTypology, getCategoryById, addCategory
    • user() — assign, assignResponsible, unassign, unassignResponsible, unassignOfProduct
  • Operaciones adicionales en CaseModule: count, createMassive, changePriority, deleteFiles

Módulo de Repositorio (client.repo())

  • Sub-módulos:
    • document() — upload, delete
    • download() — byDocument, byDocumentAndVersion, exportDocument

Módulo de Identificación (client.identify())

  • Búsqueda de usuario por ID interno: getUserById

Módulo de Formulario (client.form())

  • Creación de formularios

  • Actualización de formularios

  • Búsqueda de formularios por ID : formId

  • Búsqueda de usuario por request: FormFilter

Sistema base

  • Builder fluido con validación: ShoriClient.builder()
  • Soporte multi-ambiente: DEV, UAT, PROD
  • Autenticación Bearer con lazy-loading y renovación automática
  • Filtros avanzados: CaseFilter con operadores EQ, IN, LIKE, GE, LE, NE, BETWEEN, IS_NULL
  • Jerarquía de excepciones: ShoriException, ApiException, AuthenticationException, ResourceNotFoundException, ValidationException
  • Pool de conexiones HTTP con configuración SSL y timeouts configurables