Estos bloques deciden adónde va un mensaje y cuándo. Los bloques que esperan o retienen mensajes los conservan de forma duradera: un reinicio de la plataforma no los elimina. A menos que se defina una clave, los bloques que recuerdan por clave guardan una memoria por dispositivo (el originador del mensaje). Cada bloque mantiene como máximo 10.000 claves y retiene como máximo 16 MiB de mensajes.
Switch
Enruta un mensaje según el valor de una propiedad. Cada regla tiene su propia salida.
| Ajuste | Significado | Por defecto | Valores |
|---|---|---|---|
| property | El valor que comprueban las reglas | msg.payload | una ruta |
| rules | Una fila y una salida por regla: op, value (y value2 para between), Name opcional | ninguna | hasta 16 reglas |
| stop_first | Enviar solo a la primera regla que coincida | on | on, off |
Salidas: o0 … o15 (una por regla, con el Name de la regla si se define), else (mostrada como «otherwise»), error. Los operadores son los de Compare, más between (desde value hasta value2, ambos incluidos) y expr (la expresión propia de la regla es verdadera). Con stop_first desactivado, cada regla que coincida recibe el mensaje.
Gate
Deja pasar los mensajes mientras está abierta; los retiene o los descarta mientras está cerrada.
| Ajuste | Significado | Por defecto | Valores |
|---|---|---|---|
| initial | Estado al iniciar el flujo | open | open, closed |
| control_topic | Topic de los mensajes de control; vacío = ninguno | gate | hasta 64 caracteres |
| condition | Expresión opcional: abierta solo mientras sea verdadera | vacío | una expresión |
| closed | Un mensaje mientras está cerrada | drop | drop, queue |
| max_queue | Mensajes conservados al encolar | 32 | hasta 1.000 |
Los mensajes de control tienen msg.topic igual al topic de control y msg.payload open (o true, 1, on), close (o false, 0, off), toggle o status; no se reenvían. Salidas: out, dropped (descartados con la puerta cerrada, o expulsados de una cola llena), error. Ejemplo de condición para el horario laboral: number(fmt_time(now(), "%H")) >= 8 && number(fmt_time(now(), "%H")) < 18.
All of
Espera a que lleguen dentro de una ventana mensajes con claves distintas (por defecto, topics distintos) y envía después un único mensaje con todos sus payloads.
| Ajuste | Significado | Por defecto | Valores |
|---|---|---|---|
| window_ms | Todos los mensajes deben ser más recientes que esto; 0 = sin límite | 10 s | 0 a 24 h |
| key | De dónde se lee la clave | msg.topic | una ruta |
| min_inputs | Cuántas claves distintas se necesitan | 2 | 2 a 16 |
Salida out: el mensaje que completa el grupo, con msg.payload = { key: payload, … }. Solo sale el mensaje que completa. Lo que reúne se guarda por dispositivo por defecto (group_by: originador, o flujo).
Any of
Deja pasar todos los mensajes; opcionalmente descarta las repeticiones de una clave.
| Ajuste | Significado | Por defecto | Valores |
|---|---|---|---|
| dedup_ms | Descarta un mensaje cuya clave pasó hace menos de este tiempo; 0 = dejar pasar todos | 0 | 0 a 24 h |
| key | La clave para la comprobación de repetidos | msg.topic | una ruta |
Not
Sustituye msg.payload por su opuesto lógico, true o false. false, null, 0, "" y not-a-number pasan a true; todo lo demás (incluidos "0", "false", [], {}) pasa a false. Sin ajustes.
Split
Un mensaje por cada parte de msg.payload: por elemento de array, por clave de objeto, por línea de texto o por fragmento de tamaño fijo.
| Ajuste | Significado | Por defecto | Valores |
|---|---|---|---|
| mode | auto (elemento, clave o delimitador) o length (fragmentos) | auto | auto, length |
| delimiter | Dónde se corta el texto; \n nueva línea, \t tabulador | \n | hasta 16 caracteres |
| length | Tamaño del fragmento en elementos o caracteres | 1 | 1 a 65.536 |
Cada parte lleva msg.parts (id, index, count, type, key …) para Join. Error queue_full por encima de 10.000 partes.
Join
Reúne mensajes en uno.
| Ajuste | Significado | Por defecto | Valores |
|---|---|---|---|
| mode | auto reconstruye lo que Split cortó; manual construye a partir de cualquier mensaje | auto | auto, manual |
| build | Qué construir (manual) | array | array, object, string |
| joiner | Entre los fragmentos de texto | \n | hasta 16 caracteres |
| key | Clave de objeto de cada mensaje | msg.topic | una ruta |
| count | Enviar tras este número de mensajes; 0 = sin recuento | 0 | 0 a 10.000 |
| timeout_ms | Enviar lo recibido este tiempo después del primer mensaje; 0 = esperar | 0 | 0 a 24 h |
msg.complete (cualquier valor) envía de inmediato un grupo manual. Defina count, timeout_ms o msg.complete en modo manual, o el grupo solo saldrá al llegar al límite de 10.000 mensajes.
Sort
Ordena una lista (modo array: property, campo opcional) o los mensajes de un grupo creado por Split o Batch (modo messages: key, timeout_ms). Ajustes: orden asc/desc, numérico on/off (sin él, "10" va antes que "9"). Error queue_full por encima de 10.000 elementos.
Batch
Envía los mensajes en grupos.
| Ajuste | Significado | Por defecto | Valores |
|---|---|---|---|
| mode | Por número o por tiempo | count | count, interval |
| count | Mensajes en un grupo | 10 | 1 a 10.000 |
| overlap | Mensajes del último grupo que se vuelven a enviar con el siguiente | 0 | 0 a count − 1 |
| interval_ms | Tiempo desde el primer mensaje en espera hasta que sale el grupo | 1 s | 1 ms a 24 h |
Cada mensaje de un grupo recibe msg.parts; un Join en modo auto entonces crea una lista.
Delay
Retiene cada mensaje y lo envía después sin cambios.
| Ajuste | Significado | Por defecto | Valores |
|---|---|---|---|
| ms | Espera | 1 s | 0 a 7 días |
| ms2 | Límite superior de una espera aleatoria | vacío | 0 a 7 días |
| from_msg | Tomar la espera de msg.delay | off | on, off |
| max_pending | Mensajes en espera a la vez | 1,000 | 1 a 100.000 |
| on_new | queue: cada uno espera su propio tiempo; restart: un mensaje nuevo descarta los que esperan de su clave | queue | queue, restart |
| key | Clave para restart | msg.originator | una ruta |
msg.reset = true descarta todos los mensajes en espera. Error queue_full cuando se alcanza max_pending.
Debounce
Un mensaje por ráfaga.
| Ajuste | Significado | Por defecto | Valores |
|---|---|---|---|
| ms | Tiempo de silencio que termina una ráfaga | 500 ms | 0 a 24 h |
| edge | trailing: el último mensaje tras el silencio; leading: el primero de inmediato | trailing | trailing, leading |
| key | Cada clave se filtra por separado | msg.originator | una ruta |
Deduplicate
Un mensaje por periodo y clave, sin importar cuántos lleguen.
| Ajuste | Significado | Por defecto | Valores |
|---|---|---|---|
| strategy | first, last, o all (un mensaje cuyo payload enumera cada { payload, metadata }) | first | first, last, all |
| window_ms (Period) | Comienza con el primer mensaje de una clave | 60 s | 1 s a 24 h |
| key | Un paquete por valor | msg.originator | una ruta |
| time | message (la hora propia de la lectura, desde ts_path o la hora del registro) o arrival | message | message, arrival |
| ts_path | Dónde está la hora de la lectura (time = message) | la hora del registro | una ruta |
| max_pending | Mensajes conservados por clave para all | 100 | 1 a 1.000 |
| msg_type | Tipo de mensaje del resultado all | el tipo del primer mensaje | hasta 64 caracteres |
El resultado lleva msg.metadata.dedup con count, start y end. Con Time message, un retraso acumulado da un resultado por periodo de tiempo del dispositivo.
Rate limit
Como máximo n mensajes por periodo y clave.
| Ajuste | Significado | Por defecto | Valores |
|---|---|---|---|
| n | Mensajes por periodo | 1 | 1 a 10.000 |
| per_ms | El periodo deslizante | 1 s | 1 ms a 24 h |
| mode | Por encima del límite: drop, latest (conservar solo el más reciente), queue | drop | drop, latest, queue |
| max_queue | Mensajes en espera por clave | 32 | 1 a 1.000 |
| key | Cada clave tiene su propio límite | msg.originator | una ruta |
Salidas: out, dropped. Úsese delante de una llamada de SMS, correo o externa.
Only changes
Deja pasar un mensaje solo cuando su valor ha cambiado desde el último que pasó.
| Ajuste | Significado | Por defecto | Valores |
|---|---|---|---|
| property | El valor | msg.payload | una ruta |
| mode | change, deadband (por al menos value), deadband_pct (por al menos value % del último value) | change | |
| value | La banda muerta | 0 | 0 o más |
| key | Cada key tiene su propio último value | msg.originator | una ruta |
| first | Deja pasar el primer value de una key | on | on, off |
El nuevo value se compara con el último value que pasó, así que la deriva lenta se notifica una vez que se acumula.
Trigger
Envía un primer mensaje, espera y luego envía un segundo.
| Ajuste | Significado | Por defecto | Valores |
|---|---|---|---|
| first | Enviado de inmediato: el propio mensaje, nada, o un value para msg.payload | el mensaje | |
| then | Enviado tras la espera: nada, el mensaje o un value | nothing | |
| ms | Wait | 1 s | 0 a 7 días |
| extend | Un nuevo mensaje durante la espera reinicia la espera | off | on, off |
| key | Cada key tiene su propia espera | msg.originator | una ruta |
msg.reset = true cancela la espera de esa key.
Detach
El resto de la rama se ejecuta por separado, así que el siguiente mensaje del dispositivo no espera a que termine. Úselo antes de una rama lenta. Después, el orden de los mensajes no está garantizado. Sin ajustes.
Link call
Envía el mensaje a un Link in (o con flow:<slug>, a la Flow input de otro flujo) y espera la respuesta de un Link out en modo return.
| Ajuste | Significado | Por defecto | Valores |
|---|---|---|---|
| target | El nombre del Link in | obligatorio | |
| timeout_ms | Espera la respuesta | 30 s | 1 ms a 1 h |
| returns | Retornos con nombre del target; cada uno se convierte en una salida | ninguno |
Salidas: out (la respuesta), una por cada retorno con nombre, timeout (sin respuesta a tiempo; el mensaje original) y error (invalid_value si el link no existe, queue_full, unknown_return, loop). Las llamadas se anidan como máximo 16 niveles; una llamada a su propia pila de llamadas falla con loop.

