List to Text
Descripción
Sección titulada «Descripción»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.
Plantilla de cada fila
Sección titulada «Plantilla de cada fila»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:
| Filtro | Efecto | Ejemplo |
|---|---|---|
trim | Quita espacios al principio y al final | {{item.nombre|trim}} |
upper / lower | Mayúsculas / minúsculas | {{item.pais|upper}} |
fixed:N | Número con N decimales | {{item.total|fixed:2}} → 12.50 |
date | Fecha AAAA-MM-DD | {{item.creado|date}} |
truncate:N | Recorta a N caracteres | {{item.titulo|truncate:40}} |
default:texto | Texto 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.
Configuración
Sección titulada «Configuración»Parámetros
Sección titulada «Parámetros»| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| source | text | No | Ruta a la lista (por ejemplo orders o data.items). Vacío = usa data |
| mode | select | Sí | text (una línea por elemento), htmlList (lista HTML) o htmlTable (tabla HTML) |
| rowTemplate | textarea | Según formato | Plantilla de cada fila (Texto y Lista HTML). Ejemplo: - {{item.nombre}}: {{item.total|fixed:2}} |
| escapeHtml | boolean | No | En 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 |
| columns | text | Según formato | Columnas de la tabla (solo Tabla HTML): campo o campo:Título, separadas por comas |
| separator | text | No | Separador entre filas (solo Texto). Vacío = salto de línea. \n = salto de línea |
| header | textarea | No | Texto antes de la lista; solo se añade si hay elementos |
| footer | textarea | No | Texto después de la lista; solo se añade si hay elementos |
| emptyText | text | No | Resultado cuando la lista está vacía |
| maxItems | number | No | Máximo de elementos a mostrar. Vacío o 0 = todos |
| moreText | text | No | Texto al final si se recortó la lista; {{remaining}} = los que faltan. Ejemplo: … y {{remaining}} más |
| outputKey | text | No | Nombre 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.
Ejemplos de Uso
Sección titulada «Ejemplos de Uso»Aviso de pedidos con límite
Sección titulada «Aviso de pedidos con límite»{ "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}}.
Tabla para un correo
Sección titulada «Tabla para un correo»{ "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.