Variables y Placeholders
Las variables permiten insertar datos dinamicos en tus automatizaciones y mensajes.
Sintaxis Basica
Placeholders
Los placeholders usan doble llave:
| Sintaxis | Descripcion |
|---|---|
{{variable}} | Valor simple |
{{objeto.propiedad}} | Propiedad de objeto |
{{array[0]}} | Elemento de array |
{{objeto.sub.prop}} | Propiedad anidada |
Ejemplos:
"Hola {{postulant.name}}" se convierte en "Hola Juan Perez"
"Tu score es {{matchScore}}%" se convierte en "Tu score es 85%"
Acceso a Propiedades
Punto (.) para acceder a propiedades:
{{postulant.name}}- Nombre del candidato{{postulant.contact.email}}- Email anidado{{job.requirements[0]}}- Primer requisito
Corchetes para arrays:
{{skills[0]}}- Primera skill{{interviews[1].date}}- Fecha de segunda entrevista
Variables Disponibles
Datos del Candidato (postulant)
| Variable | Descripcion |
|---|---|
{{postulant.id}} | ID del candidato |
{{postulant.name}} | Nombre completo |
{{postulant.firstName}} | Solo nombre |
{{postulant.lastName}} | Solo apellido |
{{postulant.email}} | |
{{postulant.phone}} | Telefono |
{{postulant.location}} | Ubicacion |
{{postulant.cvUrl}} | URL del CV |
{{postulant.profileUrl}} | URL del perfil |
{{postulant.createdAt}} | Fecha de registro |
{{postulant.tags}} | Array de tags |
{{postulant.customFields.*}} | Campos personalizados |
Datos de la Vacante (job)
| Variable | Descripcion |
|---|---|
{{job.id}} | ID de la vacante |
{{job.title}} | Titulo |
{{job.department}} | Departamento |
{{job.location}} | Ubicacion |
{{job.type}} | Tipo (full-time, etc.) |
{{job.salary.min}} | Salario minimo |
{{job.salary.max}} | Salario maximo |
{{job.requirements}} | Array de requisitos |
{{job.benefits}} | Array de beneficios |
{{job.hiringManager}} | ID del hiring manager |
{{job.description}} | Descripcion completa |
{{job.slug}} | URL slug |
Datos de la Aplicacion (application)
| Variable | Descripcion |
|---|---|
{{application.id}} | ID de aplicacion |
{{application.status}} | Estado actual |
{{application.source}} | Origen (linkedin, etc.) |
{{application.createdAt}} | Fecha de aplicacion |
{{application.rating}} | Puntuacion (1-5) |
{{application.notes}} | Notas |
{{application.customFields.*}} | Campos personalizados |
Datos del Proceso (process)
| Variable | Descripcion |
|---|---|
{{process.id}} | ID del proceso |
{{process.name}} | Nombre |
{{task.id}} | ID de la tarea |
{{task.currentStep}} | Etapa actual (objeto) |
{{task.currentStep.name}} | Nombre de etapa |
{{task.notes}} | Notas de la tarea |
{{task.assignedTo}} | Usuario asignado |
{{task.createdAt}} | Fecha de creacion |
Datos de la Empresa (company)
| Variable | Descripcion |
|---|---|
{{company.id}} | ID de la empresa |
{{company.name}} | Nombre |
{{company.logo}} | URL del logo |
{{company.website}} | Sitio web |
{{company.industry}} | Industria |
{{company.size}} | Tamaño |
{{company.description}} | Descripcion |
Datos de Eventos (event)
| Variable | Descripcion |
|---|---|
{{event.id}} | ID del evento |
{{event.title}} | Titulo |
{{event.date}} | Fecha |
{{event.time}} | Hora |
{{event.location}} | Ubicacion |
{{event.meetingUrl}} | Link de reunion |
{{event.duration}} | Duracion (minutos) |
{{event.attendees}} | Array de asistentes |
Datos del Trigger
| Variable | Descripcion |
|---|---|
{{trigger.type}} | Tipo de trigger |
{{trigger.timestamp}} | Fecha/hora del evento |
{{trigger.data.*}} | Datos del evento |
{{trigger.previousStep}} | Etapa anterior (si aplica) |
{{trigger.newStep}} | Nueva etapa (si aplica) |
Datos de Ejecucion
| Variable | Descripcion |
|---|---|
{{execution.id}} | ID de ejecucion |
{{execution.startedAt}} | Inicio |
{{execution.status}} | Estado |
{{previousAction.result}} | Resultado de accion anterior |
{{context.*}} | Contexto acumulado |
Datos de Tiempo
| Variable | Descripcion |
|---|---|
{{now}} | Fecha/hora actual |
{{today}} | Fecha de hoy |
{{tomorrow}} | Fecha de mañana |
{{now + 7 days}} | En 7 dias |
{{now - 1 hour}} | Hace 1 hora |
Filtros y Formateo
Filtros de Texto
| Filtro | Resultado |
|---|---|
{{name | uppercase}} | "JUAN PEREZ" |
{{name | lowercase}} | "juan perez" |
{{name | capitalize}} | "Juan Perez" |
{{name | trim}} | Sin espacios extras |
{{text | truncate:50}} | Cortar a 50 caracteres |
{{text | default:"N/A"}} | Valor si es nulo |
Filtros de Numeros
| Filtro | Resultado |
|---|---|
{{salary | currency}} | "$45,000.00" |
{{salary | currency:"MXN"}} | "MXN $45,000.00" |
{{score | percent}} | "85%" |
{{count | number}} | "1,234" |
{{price | round:2}} | "123.46" |
Filtros de Fechas
| Filtro | Resultado |
|---|---|
{{date | format:"DD/MM/YYYY"}} | "15/01/2024" |
{{date | format:"MMMM D, YYYY"}} | "Enero 15, 2024" |
{{date | format:"HH:mm"}} | "14:30" |
{{date | relative}} | "hace 2 dias" |
{{date | fromNow}} | "en 3 dias" |
{{date | dayOfWeek}} | "Lunes" |
Filtros de Arrays
| Filtro | Resultado |
|---|---|
{{items | length}} | Numero de elementos |
{{items | first}} | Primer elemento |
{{items | last}} | Ultimo elemento |
{{items | join:", "}} | "a, b, c" |
{{items | slice:0:3}} | Primeros 3 elementos |
{{items | sort}} | Ordenado |
{{items | reverse}} | Invertido |
Filtros Condicionales
default: Usa valor alternativo si es nulo
{{value | default:"Sin valor"}}
ifEmpty: Usa texto si esta vacio
{{value | ifEmpty:"No especificado"}}
ternary: Valor condicional
{{condition | ternary:"Si":"No"}}- "Si" si es true, "No" si es false
Expresiones
Operadores
Aritmeticos:
{{a + b}}- Suma{{a - b}}- Resta{{a * b}}- Multiplicacion{{a / b}}- Division{{a % b}}- Modulo
Comparacion:
{{a == b}}- Igualdad{{a != b}}- Diferente{{a > b}}- Mayor que{{a >= b}}- Mayor o igual{{a < b}}- Menor que{{a <= b}}- Menor o igual
Logicos:
{{a AND b}}- Y logico{{a OR b}}- O logico{{NOT a}}- Negacion
Ejemplos de Expresiones
Calculo de salario:
{{salary * 12}}= Salario anual
Porcentaje:
{{(completed / total) * 100}}%= "75%"
Condicion:
{{score >= 80 ? "Aprobado" : "No aprobado"}}= "Aprobado"
Concatenacion:
{{firstName + " " + lastName}}= "Juan Perez"
Contexto de Variables
En Triggers
Cuando se dispara un trigger, las variables disponibles dependen del tipo de evento:
APPLICATION_CREATED:
{{postulant.*}}{{job.*}}{{application.*}}{{trigger.data.*}}
TASK_MOVED:
{{postulant.*}}{{process.*}}{{task.*}}{{trigger.previousStep}}{{trigger.newStep}}
MESSAGE_RECEIVED:
{{postulant.*}}{{message.content}}{{message.channel}}{{thread.*}}
En Acciones
Las acciones pueden usar:
- Variables del trigger
- Variables de acciones anteriores
- Variables del contexto
- Variables estaticas
Ejemplo de flujo:
-
Trigger APPLICATION_CREATED
{{application.id}}disponible
-
Accion ANALYZE_CV
- Resultado:
{{previousAction.result.skills}}
- Resultado:
-
Accion SEND_EMAIL
- Puede usar ambos:
{{application.id}}y{{skills}}
- Puede usar ambos:
Guardar en Contexto
// Accion SET_VARIABLE guarda en contexto
{
"actionType": "SET_VARIABLE",
"configuration": {
"name": "isQualified",
"value": "{{matchScore >= 70}}"
}
}
// Despues disponible como:
// {{isQualified}} → true/false
Variables en Mensajes
Asunto:
"Bienvenido a {{company.name}}, {{postulant.firstName}}!"
Cuerpo:
"Hola {{postulant.name}},
Gracias por aplicar a {{job.title}}.
Tu aplicacion fue recibida el {{application.createdAt | format:'DD/MM/YYYY'}}.
Te mantendremos informado sobre el proceso.
Saludos, {{company.name}}"
"¡Hola {{postulant.firstName}}!
Tu entrevista esta confirmada para:
- {{event.date | format:'dddd D MMMM'}}
- {{event.time}}
- {{event.location | default:'Via Zoom'}}
{{#if event.meetingUrl}} Link: {{event.meetingUrl}} {{/if}}
¿Te funciona este horario?"
Notificacion
Titulo: "Nueva aplicacion: {{postulant.name}}"
Mensaje: "Aplico a {{job.title}} desde {{application.source}}"
Bloques Condicionales
If/Else en Templates
{{#if condition}}
Contenido si verdadero
{{else}}
Contenido si falso
{{/if}}
Ejemplo:
{{#if event.meetingUrl}}
Link de reunion: {{event.meetingUrl}}
{{else}}
La reunion sera presencial en: {{event.location}}
{{/if}}
Unless
{{#unless condition}}
Contenido si falso
{{/unless}}
Ejemplo:
{{#unless hasCv}}
Recuerda subir tu CV para continuar.
{{/unless}}
Each (Loops)
{{#each items}}
- {{this.name}}: {{this.value}}
{{/each}}
Ejemplo:
Documentos pendientes:
{{#each pendingDocuments}}
- {{this.name}} (vence: {{this.dueDate | format:'DD/MM'}})
{{/each}}
Depuracion
Ver Variables Disponibles
En modo debug, puedes ver todas las variables:
| Categoria | Variables |
|---|---|
| postulant | id: 123, name: "Juan Perez", email: "juan@email.com", ... |
| job | id: 456, title: "Desarrollador", ... |
| context | matchScore: 85, isQualified: true |
Probar Expresiones
En el editor, preview de expresiones:
| Input | Output |
|---|---|
{{postulant.name | uppercase}} | "JUAN PEREZ" |
{{salary | currency:"MXN"}} | "MXN $45,000.00" |
{{score >= 80 ? "✓" : "✗"}} | "✓" |
Buenas Practicas
Nombrado
DO:
- Nombres descriptivos
- camelCase para variables
- Documentar variables custom
- Usar defaults para opcionales
DON'T:
- Variables con nombres genericos (x, temp)
- Asumir que existen
- Hardcodear valores
- Expresiones muy complejas
Seguridad
Cuidado con:
- Datos sensibles en logs
- Inyeccion de codigo
- Variables de usuarios externos
- Exponer datos internos
Siempre:
- Validar entrada
- Usar filtros apropiados
- Escapar HTML si necesario
- Limitar acceso a datos
Proximos Pasos
- Ejecucion y Monitoreo - Ver logs
- Ejemplos Practicos - Casos de uso
- Flow Builder - Editor visual