Ir al contenido

List to Text

El nodo List to Text convierte una lista (por ejemplo, los pedidos de una tienda o las filas de una hoja) en un texto listo para un mensaje de Slack o Telegram, un correo o un informe. Sustituye al clásico script que recorría la lista y montaba el texto a mano.

Tiene tres formatos:

  • Texto: una línea por elemento, con una plantilla que tú escribes.
  • Lista HTML: la misma plantilla, dentro de <ul><li>…</li></ul>.
  • Tabla HTML: una tabla con las columnas que indiques.

Si no indicas source, el nodo usa la lista que llega del nodo anterior. Si lo que llega es un objeto con una propiedad items o data que es una lista, la usa automáticamente.

En la plantilla, los datos de cada elemento se escriben como {{item.campo}} (admite rutas como {{item.cliente.nombre}}). {{item._n}} es el número de fila, empezando en 1.

Puedes poner alternativas con ||: se usa la primera que tenga valor, por ejemplo {{item.cliente.nombre || item.cliente.email}}. Los filtros van al final y valen para la alternativa elegida.

Puedes aplicar filtros con |, encadenables:

FiltroEfectoEjemplo
trimQuita espacios al principio y al final{{item.nombre|trim}}
upper / lowerMayúsculas / minúsculas{{item.pais|upper}}
fixed:NNúmero con N decimales{{item.total|fixed:2}} → 12.50
dateFecha AAAA-MM-DD{{item.creado|date}}
truncate:NRecorta a N caracteres{{item.titulo|truncate:40}}
default:textoTexto si el valor está vacío{{item.cliente|default:sin nombre}}

En los formatos HTML, los valores se escapan automáticamente (un nombre como Ana <b> no rompe el HTML); la plantilla se respeta tal cual.

ParámetroTipoRequeridoDescripción
sourcetextNoRuta a la lista (por ejemplo orders o data.items). Vacío = usa data
modeselectSítext (una línea por elemento), htmlList (lista HTML) o htmlTable (tabla HTML)
rowTemplatetextareaSegún formatoPlantilla de cada fila (Texto y Lista HTML). Ejemplo: - {{item.nombre}}: {{item.total|fixed:2}}
escapeHtmlbooleanNoEn formato Texto, escapa <, > y & de los valores. Actívalo si la plantilla de fila lleva HTML propio (<tr><td>…). En Lista y Tabla HTML siempre se escapa
columnstextSegún formatoColumnas de la tabla (solo Tabla HTML): campo o campo:Título, separadas por comas
separatortextNoSeparador entre filas (solo Texto). Vacío = salto de línea. \n = salto de línea
headertextareaNoTexto antes de la lista; solo se añade si hay elementos
footertextareaNoTexto después de la lista; solo se añade si hay elementos
emptyTexttextNoResultado cuando la lista está vacía
maxItemsnumberNoMáximo de elementos a mostrar. Vacío o 0 = todos
moreTexttextNoTexto al final si se recortó la lista; {{remaining}} = los que faltan. Ejemplo: … y {{remaining}} más
outputKeytextNoNombre del campo del resultado (por defecto text)

El nodo conserva los datos que ya había (si el nodo anterior devolvía un objeto) y añade:

{
"text": "Pedidos de hoy:\n- A-1: 12.50 (Ana)\n- A-2: 7.00 (sin nombre)\n… y 1 más",
"count": 3,
"shown": 2,
"empty": false
}

count es el total de elementos, shown los que aparecen en el texto y empty indica si la lista estaba vacía (útil para un nodo de decisión posterior).

Si la entrada no es una lista, si falta la plantilla, si se usa un filtro desconocido o si una tabla no tiene columnas, el nodo devuelve un error que lo explica.

{
"label": "Texto del aviso",
"source": "orders",
"mode": "text",
"rowTemplate": "- {{item.reference}}: {{item.total|fixed:2}} ({{item.cliente|default:sin nombre}})",
"header": "Pedidos de importe alto:",
"emptyText": "No hay pedidos de importe alto",
"maxItems": 10,
"moreText": "… y {{remaining}} más",
"outputKey": "mensaje"
}

Después, un nodo de Slack o Telegram puede enviar {{mensaje}}.

{
"label": "Tabla de ventas",
"source": "ventas",
"mode": "htmlTable",
"columns": "producto:Producto, unidades:Uds., total:Importe",
"outputKey": "tabla"
}

El campo tabla contiene el <table>…</table> listo para el cuerpo HTML de un correo.