Saltar al contenido principal
Twenty aún no admite campos de fórmula de forma nativa (llegarán en 2026), pero puedes lograr el mismo resultado usando flujos de trabajo. Esta solución alternativa te permite calcular y rellenar automáticamente valores de campos—desde concatenaciones simples hasta lógica empresarial compleja.

Casos de Uso Comunes

Caso de usoEjemplo de fórmula
Nombre completoNombre + ” ” + Apellido
Importe esperadoImporte × Probabilidad
Días hasta el vencimientoFecha de vencimiento - Hoy
Días en la etapaHoy - Fecha de entrada a la etapa
Puntuación del leadPuntos basados en varios criterios
Para ver un ejemplo completo de seguimiento del tiempo en etapas del pipeline, consulta Cuánto tiempo permanecen las oportunidades en cada etapa.

Fórmula básica: concatenación

Ejemplo: rellenar automáticamente el nombre completo

Objetivo: Combinar automáticamente nombre y apellido en un campo de nombre completo.

Configuración

  1. Desencadenante: Se actualiza o se crea el registro (Personas)
  2. Filtro: Comprueba que el nombre o el apellido hayan cambiado
  3. Acción de código:
export const main = async (params) => {
  const { firstName, lastName } = params;

  const fullName = [firstName, lastName]
    .filter(Boolean)
    .join(' ');

  return { fullName };
};
  1. Actualizar registro: Establecer Nombre completo en {{code.fullName}}

Fórmula numérica: importe esperado

Ejemplo: calcular ingresos esperados

Objetivo: Multiplicar el importe de la oportunidad por la probabilidad para obtener el importe esperado. Consulta Cómo mostrar el importe esperado en el pipeline para ver el flujo de trabajo completo.

Configuración rápida

  1. Desencadenante: Se actualiza el registro (Oportunidades, campo Importe o Probabilidad)
  2. Acción de código:
export const main = async (params) => {
  const { amount, probability } = params;

  const expectedAmount = (amount || 0) * (probability || 0) / 100;

  return { expectedAmount };
};
  1. Actualizar registro: Establecer Importe esperado en {{code.expectedAmount}}

Fórmula de fechas: cálculo de días

Ejemplo: días hasta el vencimiento de la tarea

Objetivo: Calcular cuántos días faltan hasta la fecha de vencimiento de una tarea.

Configuración

  1. Desencadenante: Se actualiza o se crea el registro (Tareas, campo Fecha de vencimiento)
  2. Acción de código:
export const main = async (params) => {
  const { dueDate } = params;

  if (!dueDate) {
    return { daysUntilDue: null };
  }

  const due = new Date(dueDate);
  const today = new Date();
  const diffTime = due - today;
  const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));

  return { daysUntilDue: diffDays };
};
  1. Actualizar registro: Establecer Días hasta el vencimiento en {{code.daysUntilDue}}
Los valores negativos indican tareas vencidas. Puedes usar este campo para filtrar o ordenar tareas por urgencia.

Fórmula condicional: puntuación del lead

Ejemplo: calcular la puntuación del lead según criterios

Objetivo: Puntuar leads en función del tamaño de la empresa, el sector y la interacción.

Configuración

  1. Desencadenante: Se actualiza el registro (Personas o Empresas)
  2. Acción de código:
export const main = async (params) => {
  const { companySize, industry, hasEmail, hasPhone, source } = params;

  let score = 0;

  // Company size scoring
  if (companySize === 'Enterprise') score += 30;
  else if (companySize === 'Mid-Market') score += 20;
  else if (companySize === 'SMB') score += 10;

  // Industry scoring
  const targetIndustries = ['Technology', 'Finance', 'Healthcare'];
  if (targetIndustries.includes(industry)) score += 25;

  // Contact info scoring
  if (hasEmail) score += 10;
  if (hasPhone) score += 15;

  // Source scoring
  if (source === 'Referral') score += 20;
  else if (source === 'Website') score += 10;

  return { leadScore: score };
};
  1. Actualizar registro: Establecer Puntuación del lead en {{code.leadScore}}

Fórmula de texto: extracción de dominio

Ejemplo: extraer el dominio del correo electrónico

Objetivo: Extraer y almacenar automáticamente el dominio del correo electrónico.

Configuración

  1. Desencadenante: Se actualiza el registro (Personas, campo Correo electrónico)
  2. Acción de código:
export const main = async (params) => {
  const { email } = params;

  if (!email) return { domain: null };

  const domain = email.split('@')[1]?.toLowerCase();

  return { domain };
};
  1. Actualizar registro: Establecer el campo Dominio en {{code.domain}}

Mejores prácticas

Rendimiento

  • Activa solo ante cambios en campos relevantes
  • Usa filtros para omitir registros que no necesiten cálculo
  • Evita cálculos complejos en flujos de trabajo de alto volumen

Manejo de errores

  • Comprueba valores null/undefined antes de los cálculos
  • Usa valores predeterminados cuando falten datos
  • Devuelve mensajes de error claros cuando fallen los cálculos

Pruebas

  • Prueba con casos límite (campos vacíos, valores cero)
  • Verifica los cálculos manualmente antes de activar
  • Supervisa las ejecuciones de flujos de trabajo para detectar resultados inesperados

Relacionado