Preguntas frecuentes
En esta página encontrarás respuestas a preguntas frecuentes sobre Liquid.

Actualmente, Braze no es compatible con el 100 % de Liquid de Shopify, solo con ciertas partes que hemos intentado describir en nuestra documentación. Prueba todos los mensajes que usen Liquid antes de enviarlos para reducir el riesgo de errores o de usar Liquid no compatible.
Acerca de Liquid en Braze
¿Cómo uso fragmentos de código de Liquid en Braze?
En muchos casos, puedes incorporar fragmentos de código de Liquid yendo a tus Campaigns o Canvas e insertando Liquid en el modal de personalización en áreas como el cuerpo del mensaje de correo electrónico o en tus Segments.
¿Dónde puedo aprender más?
Para más información sobre Liquid, consulta nuestra ruta guiada de Braze Learning Personalización dinámica con Liquid. También puedes consultar la biblioteca de casos de uso de Liquid para inspirarte y ver una variedad de ejemplos de personalización con Liquid.
¿Cuál es la diferencia entre usar Liquid y contenido conectado para la personalización?
El contenido conectado de Braze es un ejemplo de una etiqueta de Liquid. También se usa para la personalización, pero estos datos provienen de un endpoint externo en lugar de datos almacenados dentro de Braze. Consulta nuestra sección dedicada de contenido conectado para aprender más sobre cómo ampliar la personalización de tus mensajes.
¿Qué es la plantilla de Liquid?
Esta es la forma más común de usar Liquid en Braze. La plantilla de Liquid implica extraer datos del perfil de un usuario e insertarlos en un mensaje. Estos datos pueden ir desde el nombre de un usuario hasta eventos personalizados de un mensaje desencadenado por un evento.
Consulta Etiquetas de personalización compatibles para obtener una lista completa de las etiquetas de Liquid compatibles.
¿El uso de Liquid registra puntos de datos?
No.
Etiquetas de personalización y orígenes de datos
¿Cómo puedo usar Liquid para enviar un saludo personalizado?
Para un saludo personalizado usando el nombre de un usuario, utiliza los atributos estándar del perfil de usuario como {{${first_name}}} y {{${last_name}}}.
También puedes usar una sentencia {% if X %} de Liquid para hacer renderizado condicional basado en cualquier cosa, como el día de la semana o atributos personalizados. Para más información sobre los operadores de Liquid compatibles que se pueden usar en sentencias condicionales, consulta Operadores.
¿Cómo puedo personalizar un mensaje basándome en la ubicación de un usuario?
Existe un atributo predeterminado para la ubicación del usuario: {{${most_recent_location}}}.
¿Cuál es la diferencia entre {{campaign.${name}}} y {{campaign.${message_name}}}?
Tanto {{campaign.${name}}} como {{campaign.${message_name}}} son etiquetas de personalización de Liquid compatibles. Ambas etiquetas hacen referencia a atributos de Campaign. {{campaign.${name}}} indica el nombre de tu Campaign, y {{campaign.${message_name}}} es el nombre de tu variante de mensaje.
Para el uso en URL y cadenas de consulta (por ejemplo, cuando un nombre contiene % o espacios), consulta Nombres de Campaign en URL.
¿Cómo uso Liquid con objetos anidados?
Braze tiene una característica integrada que genera código Liquid para segmentos que se pueden usar en un mensaje. Específicamente, puedes crear un segmento que coincida con múltiples criterios en un objeto.
Para más información, consulta Segmentación multicriterio.
¿Cómo uso atributos de evento para personalizar un mensaje que un evento está desencadenando?
Puedes acceder a las propiedades de eventos desencadenados por API con la etiqueta api_triggered_property: {{api_trigger_properties.${attribute_key}}}.
¿Braze admite un arreglo de arreglos en Liquid?
Liquid no admite de forma nativa arreglos de arreglos. Almacena los valores como un arreglo de cadenas separadas por comas y usa el filtro split para analizarlos cuando sea necesario.
Variables y sintaxis
¿Cómo asigno variables con Liquid?
Puedes crear y asignar variables usando la etiqueta assign. Esto crea una variable en el creador de mensajes que también se puede referenciar a lo largo de tu mensaje.
¿Cuándo debo usar assign en lugar de capture?
Tanto assign como capture crean variables de Liquid, pero tienen propósitos diferentes:
assignes para variables simples que almacenan un único valor, como un booleano, un número o una cadena simple. También puedes aplicar un único filtro en la misma línea.capturees para almacenar un bloque de texto que puede incluir múltiples variables, cadenas o expresiones complejas.
Usa capture cuando el valor sea demasiado complejo para una sola sentencia assign, como URLs que usan otras variables de Liquid o atributos personalizados como parámetros. capture también es preferible al implementar variables de Liquid en el cuerpo de llamadas de contenido conectado.
Ejemplos
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{% comment %}Use assign for custom attributes{% endcomment %}
{% assign name = {{custom_attribute.${first_name}}} %}
{% assign price = {{custom_attribute.${price}}} | plus: 0 %}
{% comment %}Use assign for a simple variable{% endcomment %}
{% assign discount_label = "20% off" %}
Hello {{ customer.first_name | default: "there" }}, enjoy {{ discount_label }} on your next order!
{% comment %}Use capture for complex strings{% endcomment %}
{% capture greeting %}Hello, {{custom_attribute.${first_name}}}! Your order #{{custom_attribute.${order_id}}} is ready.{% endcapture %}
{{ greeting }}
{% comment %}Use capture to create conditional content{% endcomment %}
{% capture promo_block %}
{% if customer.vip == true %}
As a VIP member, you get free shipping.
{% else %}
Join our VIP program to unlock free shipping.
{% endif %}
{% endcapture %}
¿Las variables de Liquid se transfieren entre la línea del asunto y el cuerpo?
No. Braze renderiza cada componente del mensaje por separado (como la línea del asunto, el cuerpo HTML, el preencabezado y el título push). Las asignaciones o capturas que hagas en un campo no están disponibles en otro. Repite la llamada de Liquid o contenido conectado en cada campo que necesite el valor.
¿Qué es la lógica de bucle for y cómo puedo usarla?
Los bucles for también se conocen como etiquetas de iteración. Usar la lógica de bucle for en tus fragmentos de Liquid te permite recorrer bloques de Liquid hasta que se cumpla una condición.
En Braze, esto podría usarse para verificar elementos en un atributo personalizado de tipo array, o una lista de valores y objetos devueltos por un catálogo, una selección o una respuesta de llamada de contenido conectado. Específicamente, puedes usar la lógica de bucle for como parte de tu mensajería para verificar si un producto está en stock o si un producto tiene una calificación mínima.
Por ejemplo, supongamos que tienes un catálogo llamado “Games” que tiene una selección llamada “cheap_games”. Para obtener los títulos de los juegos en “cheap_games”, podrías usar este fragmento de Liquid:
1
2
3
4
{% catalog_selection_items Games cheap_games %}
{% for item in items %}
Get this game: {{ item.title }}
{% endfor %}
Una vez que se cumplan las condiciones establecidas, tu mensaje puede continuar. Usar esta lógica es una forma útil de ahorrar tiempo, en lugar de repetir bloques de Liquid para diferentes condiciones.
¿Qué es la lógica de cancelación y cómo puedo usarla?
La lógica de cancelación te permite detener el envío de un mensaje si se cumplen las condiciones. Esto es especialmente útil para evitar que se envíen mensajes incompletos a tus usuarios. Para ver ejemplos de lógica de cancelación en tus Campaigns de marketing, consulta Cancelar mensajes.
¿Puedo usar Liquid dentro de la etiqueta abort_message?
No. La etiqueta {% abort_message %} acepta una cadena estática entre comillas, no personalización de Liquid. Usa otra lógica de Liquid antes de la etiqueta si necesitas un comportamiento de cancelación condicional.
¿Cómo enmascaro números de teléfono con Liquid?
Puedes enmascarar números de teléfono usando el filtro slice para extraer dígitos específicos y el filtro append para combinarlos con caracteres de enmascaramiento.
Enmascarar todo excepto los últimos cuatro dígitos
Para mostrar un número de teléfono de 10 dígitos como ******7890:
1
2
3
4
5
6
7
8
9
{% assign phone = {{${phone_number}}} | split: '' %}
{% assign masked_phone = '' %}
{% for i in (0..5) %}
{% assign masked_phone = masked_phone | append: '*' %}
{% endfor %}
{% for i in (6..9) %}
{% assign masked_phone = masked_phone | append: phone[i] %}
{% endfor %}
{{ masked_phone }}
Mostrar los primeros tres y los últimos cuatro dígitos
Para mostrar un número de teléfono de 10 dígitos como 123***7890:
1
2
3
4
{% assign first_part = {{${phone_number}}} | slice: 0, 3 %}
{% assign last_part = {{${phone_number}}} | slice: -4, 4 %}
{% assign masked_phone_number = first_part | append: "***" | append: last_part %}
{{ masked_phone_number }}
Canvas, catálogos y propiedades de desencadenamiento
¿Por qué mi Liquid desencadenado por API falla en Braze?
Una causa común es un par extra de llaves. Por ejemplo, {{{api_trigger_properties.${attribute_key}}}} no es una sintaxis de personalización válida en Braze. Usa exactamente dos llaves de apertura y dos llaves de cierre: {{api_trigger_properties.${attribute_key}}}.
¿Existen límites de tamaño para las propiedades de contexto de Canvas?
Braze no impone un límite estricto en las propiedades de contexto de Canvas, pero mantén las cargas útiles por debajo de aproximadamente 1 KB (~1000 caracteres). Los objetos más grandes pueden aumentar el uso de memoria y retrasar la representación de mensajes durante envíos de alto volumen.
¿Por qué obtengo un error de Liquid al previsualizar ciertos tipos de datos en el panel?
Algunos tipos de propiedades de contexto de Canvas requieren conversión en Liquid antes de usarlos en comparaciones u operaciones matemáticas. Por ejemplo, cuando necesitas un comportamiento numérico:
1
{{context.${property_name} | plus: 0}}
¿Por qué mi fragmento de código de Liquid del catálogo devuelve un mensaje de cancelación?
Si un fragmento de código de Liquid del catálogo se cancela durante el envío, recrea el fragmento desde el menú de personalización seleccionando elementos individuales del catálogo en lugar de usar una selección masiva o completamente dinámica. Consulta Catálogos y Selecciones.
Content Blocks y el creador de mensajes
¿Por qué hay espaciado adicional en los mensajes que usan Content Blocks?
Si notas un espaciado adicional en los mensajes enviados que usan Content Blocks con Liquid, es posible que tengas saltos de párrafo o de línea innecesarios dentro de tus sentencias condicionales. Escribe tus sentencias condicionales en una sola línea en lugar de distribuirlas en varias líneas.
Ejemplo
1
{% if {{custom_attribute.${has_discount}}} == true %}Discounted Item{% elsif {{custom_attribute.${is_new_arrival}}} == true %}New Arrival{% else %}Regular Item{% endif %}
¿Por qué el Liquid multilínea crea espacios en blanco inesperados en los editores de arrastrar y soltar?
Cuando el código Liquid se distribuye en varias líneas en el editor de arrastrar y soltar de mensajes dentro de la aplicación o en el editor de arrastrar y soltar de correo electrónico, cada bloque {% %} se renderiza como texto no visible. Los saltos de línea se conservan como líneas vacías antes de la salida visible, lo que provoca espacios en blanco inesperados.
Solución 1: Usa etiquetas de control de espacios en blanco (recomendado)
Agrega guiones dentro de los delimitadores de etiqueta para eliminar los espacios en blanco circundantes y mantener el código legible:
1
2
3
4
5
{%- assign event_date = {{custom_attribute.${PreferredPickupDate}}} | date: "%s" -%}
{%- assign today = 'now' | date: "%s" -%}
{%- assign difference = event_date | minus: today -%}
{%- assign difference_days = difference | divided_by: 86400 -%}
Only {{ difference_days }} days until your move!
Solución 2: Consolida el Liquid en una sola línea
Elimina todos los saltos de línea para que el Liquid quede en una sola línea continua:
1
{% assign event_date = {{custom_attribute.${PreferredPickupDate}}} | date: "%s" %}{% assign today = 'now' | date: "%s" %}{% assign difference = event_date | minus: today %}{% assign difference_days = difference | divided_by: 86400 %}Only {{ difference_days }} days until your move!
Ambos enfoques evitan líneas vacías no deseadas en tu mensaje renderizado. Esto aplica al editor de arrastrar y soltar de mensajes dentro de la aplicación, al editor de arrastrar y soltar de correo electrónico y a los Content Blocks con Liquid. Para más información, consulta Control de espacios en blanco.
¿Por qué mi Content Block no aparece en Row en la herramienta de búsqueda de arrastrar y soltar?
Algunos Content Blocks no aparecen en Row en la búsqueda del editor de arrastrar y soltar. Agrega un bloque HTML desde la pestaña Content (Advanced) y luego inserta la etiqueta de Liquid del Content Block en ese bloque HTML para renderizar el contenido del bloque.
¿Por qué la vista previa de mi Content Block de arrastrar y soltar difiere de la vista de composición?
Cuando creas una plantilla de un Content Block con Liquid, las media queries para dispositivos móviles en el bloque pueden no aplicarse en la vista previa de la misma manera que cuando arrastras el bloque directamente a un mensaje. Arrastrar el bloque conserva el diseño, pero lo desvincula del bloque de origen, por lo que las ediciones futuras al bloque ya no actualizan el mensaje automáticamente.
¿Cómo puedo previsualizar los valores de propiedades de eventos en el creador de mensajes?
Usa Preview as Custom User e introduce valores de ejemplo de propiedades de eventos personalizados para el usuario que previsualices. Esto también es útil para mensajes con lógica de cancelación cuando necesitas valores de vista previa que no desencadenen una cancelación.
Liquid en mensajes de correo electrónico
¿Por qué mi mensaje se cancela con “Invalid from email address for recipient:”?
Esta cancelación ocurre cuando el Liquid en la dirección De produce una sintaxis no válida, como una variable faltante, espacios adicionales o caracteres no permitidos. Previsualiza con un usuario de prueba y verifica que la dirección De renderizada coincida con tu dominio de envío configurado.
¿Cómo creo una dirección de respuesta dinámica?
Usa Liquid en el campo Responder a cuando tu espacio de trabajo admita la configuración dinámica de respuesta. Combínalo con la configuración de tu nombre para mostrar en De según sea necesario. Consulta Configuración de correo electrónico para conocer las opciones específicas del espacio de trabajo.
Solución de problemas de errores de Liquid
¿Por qué mi código Liquid no funciona si parece correcto?
Si tu código Liquid parece sintácticamente correcto pero no funciona, comprueba si hay comillas tipográficas (comillas curvas como ' ' o " ") y guiones tipográficos (guiones largos como —) en lugar de comillas rectas (' ' o " ") y guiones cortos (-). Liquid solo reconoce caracteres ASCII rectos, por lo que las comillas y guiones tipográficos provocarán errores de análisis.
Esto ocurre comúnmente cuando la configuración del teclado de macOS Usar comillas y guiones tipográficos está habilitada, lo que convierte automáticamente los caracteres mientras escribes en el panel de Braze.
Para desactivar esta configuración en macOS:
- Ve a Configuración del sistema > Teclado > Entrada de texto > Editar.
- Desmarca Usar comillas y guiones tipográficos.
| Ejemplo | Comillas curvas (no funciona) | Comillas rectas (funciona) |
|---|---|---|
| Valor predeterminado | {{${first_name} | default: 'Torchie'}} |
{{${first_name} | default: 'Torchie'}} |
| Condicional | {% if ${country} contains 'US' %} |
{% if ${country} contains 'US' %} |
Esto se aplica a valores predeterminados, condicionales y cualquier otro código Liquid que use comillas. Las comillas curvas y rectas pueden verse iguales en pantalla, así que compara tu código con cuidado o pégalo en un editor de texto plano.
Para más información sobre el uso de comillas en Liquid, consulta Sintaxis de Liquid.
¿Por qué veo un error de Liquid “Unexpected end token”?
Este error generalmente indica llaves adicionales o faltantes. No anides {{ }} dentro de otra expresión de etiqueta Liquid. Por ejemplo, usa {{custom_attribute.${date_of_birth} | date: '%s'}} en lugar de envolver la referencia del atributo en un par adicional de llaves.
¿Por qué el reintento de contenido conectado no está disponible para mi mensaje dentro de la aplicación?
La etiqueta {% connected_content %} con reintento no es compatible con todos los tipos de mensajes, incluidos algunos formatos de mensajes dentro de la aplicación. Elimina los parámetros de reintento o usa un canal compatible para las llamadas de contenido conectado con reintento.
¿Por qué veo “Liquid Error: Comparison of Time with String Failed”?
Este error ocurre al comparar un atributo personalizado de tipo tiempo o una propiedad de evento directamente con un valor en blanco (una cadena vacía). Liquid no admite comparaciones directas entre tipos de datos diferentes, como un objeto de tiempo y una cadena.
El siguiente es un ejemplo común que causa este error:
1
2
3
{% if {{custom_attribute.${expiration_date}}} == blank %}
<a>Some words</a>
{% endif %}
Esto falla porque no puedes comparar un atributo personalizado con un tipo de datos de tiempo con una cadena (blank).
Para resolverlo, convierte el atributo de tiempo a una cadena asignándolo a una variable y usando el filtro default cuando el atributo se evalúa como vacío en el momento del renderizado:
1
2
3
4
5
{% assign expiration_date = {{custom_attribute.${expiration_date}}} | default: "" %}
{% if expiration_date == blank %}
<a>Example Words</a>
{% endif %}
Al comparar un atributo personalizado de tipo tiempo con la hora actual o fechas futuras, usa el mismo enfoque:
1
2
3
4
5
6
7
8
9
{% assign today = 'now' | date: '%s' %}
{% assign month = 'now' | date: '%s' | plus: 2592000 %}
{% assign expiration_date = {{custom_attribute.${expiration_date}}} | default: "" %}
{% if expiration_date == blank %}
<a>Example Words</a>
{% elsif expiration_date >= today and expiration_date >= month %}
<a>More Words</a>
{% endif %}