axetflow-shori-nodes 1.3.0
Nodos Axetflow/Node-RED para integrar flujos visuales con el SDK Shori de NTT DATA
axetflow-shori-nodes
Nodos Axetflow/Node-RED para integrar flujos visuales con la plataforma Syntpony Process Management (Shori) de NTT DATA. Sin código. Arrastra, conecta y automatiza.
Instalación
Desde la UI de Axetflow/Node-RED
- Menú → Manage palette → Install
- Buscar:
axetflow-shori-nodes - Clic en Install — los nodos aparecen en la paleta bajo "Shori SDK"
Por línea de comandos
cd ~/.node-red
npm install axetflow-shori-nodes
# Reiniciar Node-RED / Axetflow
Nodos disponibles (v1.2.2 — 30 nodos)
🔑 Configuración
| Nodo | Descripción |
|---|---|
shori-config |
Configura credenciales e inyecta msg.shoriClient en el flujo |
📋 Gestión de Casos
| Nodo | Descripción |
|---|---|
shori-create-case |
Crea un nuevo caso con datos del formulario |
shori-get-case |
Obtiene un caso por su UUID |
shori-update-case |
Actualiza los datos del formulario de un caso |
shori-search-cases |
Busca casos con filtros avanzados (CaseFilter) |
shori-count-cases |
Cuenta casos según un filtro |
shori-change-priority |
Cambia la prioridad de un caso |
🔄 Estados
| Nodo | Descripción |
|---|---|
shori-next-state |
Cambia el estado de un caso |
shori-next-state-massive |
Cambia el estado de múltiples casos (filas dinámicas) |
shori-next-state-by-int |
Cambia el estado usando el número interno del caso |
shori-create-case-massive |
Crea múltiples casos en lote (filas dinámicas) |
shori-search-states |
Busca estados con StateFilter |
shori-search-working-substates |
Busca working substates con WorkingSubStateFilter |
💬 Comentarios
| Nodo | Descripción |
|---|---|
shori-add-comment |
Agrega un comentario a un caso |
shori-search-comments |
Busca comentarios de un caso con paginación |
👤 Usuarios
| Nodo | Descripción |
|---|---|
shori-assign-user |
Asigna un usuario (participante o responsable) a uno o varios casos |
shori-unassign-user |
Desasigna usuarios de casos (3 modos) |
🏷️ Tipo de Caso
| Nodo | Descripción |
|---|---|
shori-get-case-type |
Obtiene la definición completa de un tipo de caso |
shori-get-case-type-lite |
Obtiene la definición básica (sin estados, más rápido) |
🏢 Servicios (Primary Level)
| Nodo | Descripción |
|---|---|
shori-search-primary-levels |
Busca servicios con filtros y selectores de operador |
shori-get-primary-level |
Obtiene un servicio por UUID |
shori-create-primary-level |
Crea un nuevo servicio |
shori-toggle-primary-level |
Activa/desactiva servicio o working substates |
shori-get-working-substates |
Obtiene los working substates de un servicio |
⚙️ Procesos (Secondary Level)
| Nodo | Descripción |
|---|---|
shori-search-secondary-levels |
Busca procesos con filtros y selectores de operador |
shori-get-secondary-level |
Obtiene un proceso por UUID |
shori-create-secondary-level |
Crea un nuevo proceso |
shori-toggle-secondary-level |
Activa/desactiva un proceso |
📁 Archivos y Repositorio
| Nodo | Descripción |
|---|---|
shori-search-case-files |
Busca archivos adjuntos de un caso |
shori-upload-document |
Sube un documento al repositorio de Shori |
Flujo básico
Todo flujo Shori comienza con el nodo shori-config que autentica y pone el cliente en msg.shoriClient. Los nodos siguientes lo leen automáticamente.
[inject] → [shori-config] → [shori-create-case] → [shori-next-state] → [debug]
Paso de valores dinámicos
Todos los campos soportan 3 modos:
| Modo | Ejemplo | Descripción |
|---|---|---|
| Valor fijo | 550e8400-uuid |
UUID hardcodeado en el formulario |
| Referencia msg | msg.payload.casoId |
Lee del mensaje entrante |
| Fallback automático | (campo vacío) | Usa msg.payload.{campo} si el campo está vacío |
Ejemplo con nodo function
// Pasar datos dinámicamente antes de shori-create-case
msg.payload = {
casoTypeId: "tipo-uuid",
formId: "form-uuid",
priority: "prior-uuid",
submittedData: {
nombreCliente: msg.payload.nombre,
telefono: msg.payload.tel,
},
};
return msg;
Ejemplos de uso
Crear y procesar un caso
[inject] → [function: armar datos]
→ [shori-config]
→ [shori-create-case] → (casoId en msg.payload.casoId)
→ [shori-add-comment] → comentario registrado
→ [shori-next-state] → estado actualizado
→ [debug]
Búsqueda y asignación masiva
[cron] → [shori-config]
→ [shori-search-cases] → msg.payload.casoResponse (lista)
→ [function: mapear ids]
→ [shori-assign-user] → usuario asignado
Cambio masivo de estado
[webhook] → [function: construir lista]
→ [shori-config]
→ [shori-next-state-massive] → N casos actualizados
Manejo de errores
Todos los nodos tienen 2 salidas:
- Salida 1 ✅ — éxito:
msg.payloadcon el resultado - Salida 2 ❌ — error:
msg.error = { message, name, stack }
[shori-nodo] →|"✅"| [procesar resultado]
→|"❌"| [catch error node / debug]
Referencia de nodos
shori-config
Configura las credenciales de Shori una sola vez. Inyecta el cliente en msg.shoriClient.
| Campo | Descripción |
|---|---|
| Ambiente | DEV / UAT / PROD |
| Portal ID | UUID del portal |
| Tenant ID | UUID del tenant |
| API Key | Clave de autenticación (almacenada cifrada) |
shori-create-case
Crea un nuevo caso. Campos requeridos: casoTypeId, formId, priority.
msg.payload = {
casoTypeId: "tipo-uuid", // requerido
formId: "form-uuid", // requerido
priority: "prior-uuid", // requerido
isUrgent: false, // opcional
groupLevel: 1, // opcional
externalId: "EXT-001", // opcional
submittedData: { // opcional
campo1: "valor1",
},
};
Salida 1: { casoId: "uuid", casoNumber: "NUM-001" }
shori-update-case
Actualiza los datos del formulario de un caso.
msg.payload = {
casoId: "caso-uuid",
submittedData: { estado: "PROCESADO" },
};
shori-next-state
Cambia el estado de un único caso.
msg.payload = {
casoId: "caso-uuid",
workingSubStatePrimaryLevelId: "estado-uuid",
};
shori-next-state-massive
Cambia el estado de múltiples casos. Acepta 3 formas:
// Opción 1: array completo
msg.payload = { casos: [{ casoId, workingSubStatePrimaryLevelId }] };
// Opción 2: mismo estado para todos
msg.payload = { casoIds: ["uuid1", "uuid2"], workingSubStatePrimaryLevelId: "estado" };
// Opción 3: JSON en el formulario del nodo
Salida 1: { success: true, count: N, casos: [...] }
shori-search-cases
Busca casos con CaseFilter. Filtros opcionales en msg.payload:
msg.payload = {
casoTypeId: { op: "eq", value: "tipo-uuid" },
workingSubStateId: { op: "in", value: "uuid1,uuid2" },
createdAtFrom: "2025-01-01",
createdAtTo: "2025-01-31",
timeZone: "America/Lima",
pageSize: 20,
fetchAll: false,
};
shori-add-comment
Agrega un comentario a un caso.
msg.payload = {
casoId: "caso-uuid",
comment: "Comentario del agente",
origin: "CASO", // CASO | TAREA
};
shori-search-comments
Busca comentarios de un caso con paginación.
msg.payload = {
casoId: "caso-uuid",
createdAtFrom: "2025-01-01",
timeZone: "America/Lima",
pageSize: 20,
fetchAll: true, // trae todos
};
shori-assign-user
Asigna un usuario a uno o varios casos.
msg.payload = {
action: "assignResponsible", // assign | assignResponsible
userId: "user-uuid",
casoIds: ["caso-1", "caso-2"], // array o "uuid1,uuid2"
};
shori-unassign-user
Desasigna usuarios de casos.
// unassign / unassignResponsible:
msg.payload = { action: "unassignResponsible", casoIds: ["caso-1"] };
// unassignOfProduct:
msg.payload = { action: "unassignOfProduct", userId: "user-uuid", casoTypeId: "producto-uuid" };
shori-search-primary-levels
Busca servicios (Primary Level).
msg.payload = { name: "Soporte", isActive: "true", pageSize: 20 };
shori-search-secondary-levels
Busca procesos (Secondary Level).
msg.payload = { name: "Atención", primaryLevelName: "Soporte", pageSize: 20 };
shori-create-case-massive
Crea múltiples casos en lote. Los casos van en msg.payload.casos:
msg.payload = {
casoTypeId: "product-uuid",
updateDuplicates: false,
casos: [
{ casoTypeId, formId, priority, submittedData: { nombre: "Ana" } },
{ casoTypeId, formId, priority, submittedData: { nombre: "Luis" } },
],
};
Salida 1: { importId: "uuid" }
Prerrequisitos
- Node-RED 3.x o Axetflow (basado en Node-RED)
- Node.js 18+
- Credenciales de Shori:
portalId,tenantId,apiKey
Documentación completa
📖 Documentación Axetflow Nodes
Plataforma Shori
Syntpony Process Management (Shori) es la plataforma BPM de NTT DATA para la gestión de casos, flujos de trabajo y procesos empresariales.
Licencia
MIT — NTT DATA · Equipo AITO PERÚ