BlogENApúntate
← Todos los artículos

Brevo: contenido condicional en la plantilla con if, elif y else

Cómo enseñar un contenido distinto a cada contacto en una plantilla de Brevo con if, elif y else, qué operadores hay y cómo probar cada versión antes de enviar.

Por Mario Calvo · · 12 min de lectura

Respuesta rápida

En una plantilla de Brevo enseñas un contenido a unos contactos y no a otros con una condición: {% if contact.ATRIBUTO == "valor" %}...{% endif %}. Añade {% elif %} para más casos y {% else %} para el resto. El nombre del atributo va tal cual aparece en la página de atributos de contacto, casi siempre en mayúsculas. Antes de enviar, abre Preview & test, elige un contacto de cada caso y mira lo que ve.

Lo que vas a encontrar

¿Cómo se escribe una condición en Brevo?

Las plantillas de Brevo usan el Brevo Template Language. Las variables van entre dobles llaves, como {{ contact.NOMBRE }}. La lógica va entre llave y signo de porcentaje, como {% if ... %}.

Una condición tiene hasta cuatro partes:

  1. {% if condición %} abre el bloque. Es obligatoria.
  2. {% elif condición %} añade otro caso. Puedes poner varias o ninguna.
  3. {% else %} recoge a todos los que no han cumplido nada. Es opcional.
  4. {% endif %} cierra el bloque. Es obligatoria. Si la olvidas, la plantilla se rompe.

Este saludo cambia según el plan del contacto:

{% if contact.PLAN == "pro" %}
  Gracias por estar en Pro. Tus informes nuevos ya están listos.
{% elif contact.PLAN == "starter" %}
  Estás en Starter. Con Pro tienes informes y exportaciones.
{% else %}
  Esto es lo nuevo de este mes.
{% endif %}

Brevo mira las ramas de arriba abajo. Enseña la primera que se cumple y salta el resto. Un contacto sin valor en PLAN, o con un valor que no has escrito, ve el texto del else.

El atributo va detrás de contact. con el nombre exacto de Contactos → Ajustes → Atributos de contacto. Si el atributo se llama PLAN, contact.plan no lo encuentra. Copia el nombre de esa página en lugar de escribirlo de memoria.

Cuatro contactos con valores distintos en el atributo IDIOMA llegan a la misma plantilla con if, elif y else, y el texto que acaba viendo cada uno

Comprobado con la documentación de Brevo en octubre de 2026: Show or hide content using if statements.

¿Qué operadores puedes usar?

Brevo documenta una lista corta. Cubre casi todo lo que necesita un email de marketing.

Operador Qué comprueba Ejemplo
{% if x %} El valor es verdadero, o la lista tiene elementos {% if contact.ACTIVO %}
== El valor es igual a otro {% if contact.PLAN == "pro" %}
> y < Un número es mayor o menor {% if contact.PUNTOS > 100 %}
in Un texto contiene una palabra, o una lista contiene un elemento {% if "vip" in contact.ETIQUETAS %}
not El valor es falso o está vacío {% if not contact.SUSCRITO_SMS %}
and Se cumplen todas las condiciones {% if contact.IDIOMA == "es" and contact.PAIS == "México" %}
or Se cumple al menos una {% if contact.PAIS == "España" or contact.PAIS == "Portugal" %}

Algunos detalles marcan la diferencia:

  • El texto va entre comillas. contact.PLAN == "pro" compara el atributo con el texto «pro». En todos los ejemplos de Brevo los valores de texto van entre comillas dobles.
  • Los booleanos van sin comillas. El ejemplo de Brevo es {% if contact.donor == true %}.
  • Evita los decimales. Brevo avisa de que una condición sobre un número con decimales puede dar resultados incorrectos. Si te hace falta, pasa el valor como texto entre comillas, como "3.14".
  • in también lee texto. {% if "express" in params.shipping_method %} se cumple con «express» y también con «express-24h». Es útil, y es una trampa si un valor contiene a otro.

> y < salen en los propios ejemplos de Brevo, como temperature > 10 and temperature < 55. Para decir «distinto de», el camino documentado es not o una rama else.

¿Content visibility o if escrito a mano?

Brevo te da dos formas de hacer lo mismo. En la bandeja el resultado es igual. Lo que cambia es dónde trabajas.

Content visibility está en el editor de arrastrar y soltar. Seleccionas un bloque o una sección, bajas en el panel lateral hasta Content visibility, pulsas Add condition y eliges el atributo, la condición y el valor. Puedes combinar reglas con and y or. Un bloque con reglas se ve con borde azul claro y un ojo tachado. También puede enseñar un bloque solo en ordenador o solo en móvil.

El if escrito a mano va directo en el HTML o dentro de un bloque de texto. Es más rápido cuando tienes muchas ramas, cuando quieres elif o cuando la condición va en mitad de una frase.

Content visibility If escrito a mano
Dónde Panel lateral del editor de arrastrar y soltar Editor HTML o dentro de un bloque de texto
Qué condiciona Un bloque o una sección entera Cualquier trozo, hasta una palabra
Varios casos Un bloque por caso, con la condición contraria elif en la misma condición
Respaldo para el resto Otro bloque con la regla contraria {% else %}
Reglas por dispositivo Sí: todos, solo ordenador o solo móvil No
Para qué va bien Cambiar un banner o una sección Saludos, frases, idiomas, asuntos

Hay una regla de la documentación de Brevo que importa aquí. Con Content visibility, los contactos que no cumplen la condición, o a los que les falta el dato, no ven el bloque. No hay respaldo automático. Si ocultas el banner VIP, añade un segundo bloque con la condición contraria para que nadie vea un hueco.

Comprobado con la documentación de Brevo en octubre de 2026: Show or hide content in your emails (Content visibility).

¿Por qué una rama no sale nunca?

Casi todos los «mi condición no funciona» vienen de los datos, no de la sintaxis. La plantilla compara valores exactos. Si el valor guardado es un poco distinto, la rama no se cumple y el contacto cae en el else.

Lo que ves Causa probable Qué hacer
Todos ven el texto del else El nombre del atributo está mal, como contact.idioma en lugar de contact.IDIOMA Copia el nombre de Atributos de contacto
Un grupo no entra nunca El valor guardado no es el que escribiste, como «English» en lugar de «en» Mira un contacto real y usa ese valor exacto
Se mezcla el texto de varias ramas, o desaparece parte del email Falta un {% endif %} o una comilla sin cerrar Cuenta un endif por cada if
Dos ramas parecen bien, pero siempre gana la primera La primera condición también cumple el segundo caso Pon primero la condición más estrecha
Una comparación de números falla El valor tiene decimales Compara texto entre comillas, o redondea el dato
Los contactos sin valor ven un hueco Usaste Content visibility sin bloque contrario Añade un bloque de respaldo, o usa else

La segunda fila es la más habitual. Un formulario guarda «English», una importación guarda «EN» y la sincronización con la tienda guarda «en_GB». La plantilla solo conoce el valor que escribiste. Elige un formato para cada atributo y mantenlo. Un atributo de tipo categoría ayuda, porque solo acepta valores de una lista fija.

¿Cómo enseñas a cada contacto su idioma?

El idioma es el uso más común del contenido condicional. Tienes una plantilla y el texto cambia con un atributo como IDIOMA.

{% if contact.IDIOMA == "en" %}
  Your order is on its way.
{% elif contact.IDIOMA == "fr" %}
  Votre commande est en route.
{% else %}
  Tu pedido está en camino.
{% endif %}

Pon el idioma principal en el else. Así, quien tenga el atributo vacío recibe tu idioma principal y no un espacio en blanco.

Envuelve solo lo que cambia. Si metes el email entero dentro del if, el diseño se repite una vez por idioma. La plantilla crece rápido y cada cambio de diseño hay que hacerlo tres veces. Deja fuera el logo, las imágenes, la maqueta y el pie. Pon la condición alrededor del titular, los párrafos, el texto del botón y los textos alternativos.

Dos formas de montar una plantilla multidioma en Brevo: el email entero copiado en cada rama, o el diseño una vez con condiciones solo en el titular, el párrafo y el texto del botón

Brevo documenta variables de contacto también en el asunto, no solo en el cuerpo. Si cambias el asunto según el idioma, revísalo en la vista previa con un contacto de cada idioma. Un email en francés con el asunto en inglés es lo primero que se nota. Haz lo mismo con el preheader si tu plantilla lo tiene.

Brevo también tiene campañas multidioma, con vista previa por idioma. Si ya las usas, es otro camino válido.

Si quieres el mismo patrón en Klaviyo, Braze, Iterable y Salesforce, lo tienes en una plantilla de email para todos los idiomas.

¿Cómo pruebas cada versión?

No envíes una condición que no hayas visto con tus ojos. Brevo tiene una vista previa pensada para esto.

  1. Pulsa Preview & test desde la página de la campaña, el editor de arrastrar y soltar o la lista de campañas.
  2. Ve a la pestaña Preview.
  3. En Select a contact, escribe el email de un contacto y elígelo. El diseño se recarga con los datos de ese contacto.
  4. Repite con un contacto por rama: uno por idioma, uno por plan y uno con el atributo vacío.
  5. Envía una prueba desde Send test email para verla en una bandeja de verdad.

El contacto vacío es el que se olvida. Te dice si tu else funciona o si Content visibility deja un hueco.

Rama Contacto de prueba Lo que deberías ver
if contact.IDIOMA == "en" Contacto con IDIOMA = en Texto en inglés
elif contact.IDIOMA == "fr" Contacto con IDIOMA = fr Texto en francés
else Contacto con IDIOMA vacío Texto en el idioma principal
else Contacto con un valor que no has puesto Texto en el idioma principal

Si te faltan contactos para algún caso, créalos con tus propias direcciones. La guía de Brevo sobre cómo previsualizar y probar el email explica las dos pestañas. Un aviso que sale ahí: en el plan gratuito, los enlaces de un email de prueba caducan unos 30 minutos después de recibirlo.

Cómo se hace con Remite

Remite escribe las condiciones de idioma por ti cuando exportas a Brevo. Este es el flujo real.

  1. Marca. Remite lee tu web y guarda el logo, los colores, las fuentes y el estilo. Eliges Brevo como plataforma. Remite usa NOMBRE para el nombre e IDIOMA para el idioma, salvo que los cambies por los de tu cuenta, como FIRSTNAME o LANGUAGE.
  2. El brief. Cuentas el email: para qué es, a quién va y en qué idiomas lo necesitas.
  3. Antes de generar. Remite revisa el brief y puede hacerte una o dos preguntas rápidas antes de escribir.
  4. Editar. Cambias cosas en el chat, tocando el texto directamente o seleccionando un trozo y usando Comentar. Todos los idiomas mantienen el mismo diseño. Un cambio de tamaño o de alineación vale para todos.
  5. Exportar. Eliges Uno con todos los idiomas. Remite junta las versiones en un solo HTML. La cabecera y el diseño van una vez. Solo los trozos de texto que cambian llevan {% if contact.IDIOMA == "en" %}, {% elif %} y {% else %}, con el idioma principal en el else. El asunto y el preheader llevan la misma condición. El enlace de baja sale como {{ unsubscribe }}.
  6. Revisión antes de subir. Remite revisa el HTML final: el peso y el recorte de Gmail, la baja en la sintaxis de Brevo, los campos, las imágenes públicas y los enlaces.
  7. Enviar a Brevo. Pones tu clave, eliges el remitente y Remite crea la plantilla en tu cuenta, o la actualiza si ya existe.

Un límite, para que sepas qué esperar. Remite solo escribe condiciones de idioma. Si además quieres un bloque para contactos VIP o para un plan, añádelo en Brevo con Content visibility o con un if escrito a mano, como has visto arriba. El respaldo del nombre con default también lo escribe Remite, como en la chuleta de variables de nombre y baja.

El diagnóstico automático de lifecycle, que señala los flujos que le faltan a una tienda, llega próximamente. Lo tienes explicado en la página de lifecycle.

Preguntas frecuentes

¿Cuál es la sintaxis de una condición en Brevo?

{% if contact.ATRIBUTO == "valor" %}...{% endif %}. Añade {% elif ... %} para más casos y {% else %} para el resto. Cada if necesita su endif.

¿Brevo acepta elif?

Sí. Puedes encadenar varias ramas {% elif condición %} entre el if y el else. Brevo enseña la primera rama que se cumple.

¿Por qué todos mis contactos ven el texto del else?

El nombre del atributo está mal, o los valores guardados no coinciden con los que escribiste. Copia el nombre de Atributos de contacto y mira cómo guarda el valor un contacto real.

¿Puedo personalizar también el asunto?

Sí. Brevo acepta variables de contacto en el asunto. Si además pones una condición ahí, revísala en Preview & test con un contacto de cada caso antes de enviar.

¿Cómo compruebo si un atributo está vacío en Brevo?

Usa {% if contact.ATRIBUTO %} para «tiene valor» y {% if not contact.ATRIBUTO %} para «está vacío o es falso». Para poner una palabra en lugar del hueco, el filtro default es más corto: {{ contact.NOMBRE|default:"hola" }}.

¿Content visibility es lo mismo que una condición escrita?

Da el mismo resultado desde el editor de arrastrar y soltar. Trabaja con bloques enteros, añade reglas por dispositivo y oculta el bloque a quien le falte el dato, salvo que pongas un bloque contrario.

¿Puedo comparar números en una condición de Brevo?

Sí, con > y <, por ejemplo {% if contact.PUNTOS > 100 %}. Brevo desaconseja los decimales; si te hacen falta, pásalos como texto entre comillas.

¿Remite escribe las condiciones de Brevo?

Escribe las condiciones de idioma cuando exportas todos los idiomas en una plantilla, y envía el resultado a tu cuenta de Brevo. Las demás condiciones las añades en Brevo.

Si prefieres no escribir estas etiquetas a mano en cada plataforma, puedes apuntarte a la lista de espera de Remite.