Skip to Content
Guía de NxarAutomationsTriggers y nodos

Triggers y nodos

Triggers

Eventos de registro

TriggerCuándo correTenésTípico
Antes de crearEn el mismo guardado, con el registro todavía sin idrecord (los datos nuevos)Completar campos, normalizar, calcular, cancelar si algo no cierra
Antes de actualizarEn el mismo guardadorecord (nuevo) y old (anterior)Validar transiciones, guardar el valor anterior, recalcular
Después de crearEn segundo plano, con el registro guardadorecordEmail de bienvenida, crear registros relacionados, avisar a un sistema externo
Después de actualizarEn segundo planorecord y oldNotificar un cambio de estado, sincronizar
Después de eliminarEn segundo planorecord (el eliminado)Limpieza en otros sistemas

Una automation puede escuchar varias operaciones a la vez (crear y actualizar).

Las automations antes corren antes de la validación de campos, así que pueden completar un campo obligatorio; si una cancela (un nodo Detener, un nodo que falla o un componente que lo decide), el usuario ve el mensaje y no se guarda nada. Si una automation crea o actualiza otro registro, ese guardado dispara sus propias automations, hasta 5 niveles de encadenamiento.

Condiciones de entrada

En Configuración (el engranaje de la barra superior) una automation de evento de registro puede tener condiciones de entrada: filtros sobre el registro que se evalúan antes de arrancar. Se combinan con Y (tienen que cumplirse todas) y usan los mismos operadores que el nodo Condición; el valor acepta {{referencias}} ({{old.stage}}, {{now}}). Si alguna no se cumple, el flujo no corre ningún nodo y la ejecución queda en los logs como Saltado.

Ejemplo: “solo si stage cambió” es una condición record.stage · Cambió. En una automation de crear no hay valor anterior, así que Cambió siempre se cumple.

Endpoint de API (http.request)

Al crear la automation con el tipo Endpoint de API definís un esquema de entrada (los campos que va a recibir, con tipo: texto, número, booleano, JSON / objeto / lista) y uno de salida. Después la publicás como Custom Endpoint en Configuración → Integraciones y API → Endpoints → Endpoints y webhooks, que le da una URL /public/v1/custom/<slug> y su autenticación. Cada llamada corre el flujo con los campos recibidos como variables ({{inputs.monto}}) y devuelve lo que escribas en outputs.* (con Asignar valor sobre outputs.<nombre>). Cada llamada queda en los Logs de la automation, igual que una ejecución por evento de registro. También se puede agendar con un scheduled job. Detalle de la URL y la auth en Public API.

Lo lanza un usuario (Stepper)

Ver Steppers.

Nodos

NodoQué haceOpciones clave
Asignar valorEscribe una variable, un campo del registro del trigger (record.campo, solo en antes) o una entrada de una listaModo set / append / prepend / remove; valor literal, {{referencia}} o fórmula (Fórmulas)
Obtener registroBusca registros de una entidadModo Un registro (por ID o por el valor de un campo) o Lista de registros (filtro opcional de un campo = un valor, límite hasta 200) — la lista alimenta un Loop. Guarda en una variable
Crear registroInserta un registro en una entidad y guarda su idEntidad y valores campo a campo. Dispara las automations de esa entidad
Actualizar registroModifica el registro del trigger o uno guardado en una variableCampos a cambiar (el autocompletado ofrece los campos de la entidad del registro destino)
CondiciónBifurca evaluando ramas de arriba hacia abajoVer Conditions y loops
LoopRepite un subflujo por cada elemento de una listaLista, nombre del elemento y del índice
DetenerCorta el flujo con un mensaje. En una antes cancela el guardado y la persona ve ese mensajeMensaje (acepta {{referencias}}) y, opcional, campo al que apunta
Enviar emailManda un email desde un templateTemplate (carga sus variables como campos), Para / CC / BCC / nombre del remitente — todos aceptan {{referencias}}, con autocompletado por relaciones ({{record.account.owner.email}}) — y Adjuntos opcionales ({{pdf.fileId}})
Generar PDFGenera un PDF desde una plantilla PDF y, si querés, lo adjunta al registroPlantilla, Datos (por defecto {{record}}), Guardar en el registro, nombre del archivo, variable de resultado, continuar si falla
NotificaciónCrea una notificación en la campana de un usuarioUsuario destino (fijo o {{record.owner_id}}), mensaje
Obtener global / Definir globalLee o escribe una global structureEstructura; al escribir, combinar o reemplazar
Llamar IntegraciónInvoca una integration HTTP y guarda { status, ok, headers, body, durationMs } (el autocompletado ofrece status, ok y body.*)Integración, método, path y body (JSON) con {{…}}, variable de salida, continuar si falla
Componente CustomEjecuta un Logic Component con entradas y guarda sus salidas como variablesComponente, mapeo de inputs

Modificar el registro que se está guardando

En triggers antes, usá Asignar valor sobre record.campo: los cambios se acumulan y se guardan con el registro; no hace falta un Actualizar registro.

Asignar valor: record.description = "Cuenta Premium" Asignar valor: record.score = {{record.amount}} * 0.1 (fórmula)

Modificar otro registro

  1. Variable de tipo Registro (cuenta, entidad Cuentas).
  2. Asignar valor cuenta.id = {{record.account}} y, si necesitás sus datos, Obtener registro sobre cuenta.
  3. Asignar valor a sus campos y Actualizar registro con destino variable cuenta.

Enviar email

  1. Elegí el template con el buscador: sus variables aparecen como campos individuales.
  2. Completá cada variable con un literal o una referencia; Para, CC, BCC y Nombre del remitente aceptan {{record.contact.email}}. En CC y BCC van varias direcciones separadas por coma (o una variable de tipo lista).
  3. El email sale por el SMTP de la plataforma (el remitente es la dirección del sistema; el nombre del remitente solo cambia el nombre que se ve). No sale por la inbox del workspace ni queda registrado en la entidad Emails.

Generar PDF

Genera un documento desde una plantilla PDF sin escribir código — una cotización, un recibo, un certificado.

  • Plantilla: elegís una de las plantillas PDF activas del workspace. Es obligatoria: el builder no guarda el flujo sin ella.
  • Datos: lo que recibe la plantilla. Por defecto {{record}}, el registro entero (en la plantilla sus campos se leen como {{data.nombre_del_campo}}). Podés pasar otra variable con el autocompletado.
  • Guardar en el registro (prendido por defecto cuando el flujo tiene registro): el PDF queda en los Adjuntos del registro que disparó el flujo. En Adjuntar a otro registro podés indicar otro ({{record.account}} o una variable de tipo registro). En una automation antes de crear el registro todavía no existe, así que no hay a qué adjuntarlo: usá una después.
  • Nombre del archivo: acepta referencias ({{record.name}}.pdf). Se quitan los caracteres que no pueden ir en un nombre de archivo y siempre termina en .pdf; vacío, se usa el nombre de la plantilla.
  • Guardar resultado como (por defecto pdf): los nodos que siguen ven {{pdf.fileId}}, {{pdf.name}}, {{pdf.sizeBytes}} y {{pdf.__status}}.
  • Continuar si falla: si la plantilla no existe o el archivo no se puede guardar, el flujo sigue y {{pdf.__status}} vale error. También podés usar Fallback si esto falla para reaccionar. Lo que nunca se saltea es la falta de permiso: la identidad con la que corre el flujo necesita el permiso render_pdf o manage_pdf_templates (o que la automation corra como sistema).

Generar la cotización y mandarla por mail:

Generar PDF: plantilla "Cotización" · Guardar en el registro · resultado: pdf Enviar email: template "Envío de cotización" · Para {{record.contact.email}} · Adjuntos: {{pdf.fileId}}

En Adjuntos de Enviar email van referencias separadas por coma: el resultado de un Generar PDF ({{pdf}} o {{pdf.fileId}}) o el id de un archivo. Si una no es un archivo, el nodo falla y el email no sale.

Detener — rechazar con un motivo

El nodo Detener corta el flujo con un mensaje escrito por vos. No tiene salida: lo que viene después no corre.

  • En una automation antes, el registro no se guarda y la persona ve exactamente ese mensaje: en el formulario de edición, en el kanban al arrastrar una tarjeta y en la barra de etapas (Path), que vuelven a su valor anterior y muestran el aviso.
  • Campo al que apunta (opcional): el formulario de edición muestra el mensaje debajo de ese campo (en un formulario público, si el campo está en el formulario).
  • En una automation después, el registro ya se guardó: solo corta el flujo y el mensaje queda en los logs.
  • No ofrece Fallback si esto falla: un rechazo deliberado nunca se captura.
Condición: record.close_date · Menor que · {{now}} └─ Detener: "La fecha de cierre ({{record.close_date}}) no puede ser pasada" → campo: close_date

Asignar el dueño

En una antes, Asignar valor sobre record.owner_id cambia el dueño del registro que se está guardando (tiene que ser un usuario interno activo; si no, el guardado falla con un error en el campo Owner). {{record.owner_id}} lee el dueño actual en cualquier trigger.

Llamar Integración — Output sample y Test

Para que el autocompletado conozca la forma de la respuesta, el nodo admite un sample de salida: Usar sample de la integración (el que guardaste al probarla en Settings), pegar un JSON, o la pestaña Test del inspector: ejecutás la llamada con valores reales (las {{variables}} no se resuelven ahí) y Guardar como output sample. Los samples se compactan (un elemento por lista, textos recortados) para no inflar la definición. Sin sample el nodo funciona igual; solo perdés las sugerencias.

Last updated on