axetflow-shori-nodes
v1.3.1
Published
Nodos Axetflow/Node-RED para integrar flujos visuales con el SDK Shori de NTT DATA
Maintainers
Readme
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 / AxetflowNodos disponibles (v1.3.1 — 33 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 asignadoCambio masivo de estado
[webhook] → [function: construir lista]
→ [shori-config]
→ [shori-next-state-massive] → N casos actualizadosManejo 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 nodoSalida 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
Soporte
Para reportar errores comunicarse con Jerson Ramírez Ortiz
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Ú
