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 utilizo fragmentos de código de Liquid en Braze?
En muchos casos, puedes incorporar fragmentos de código de Liquid accediendo 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 en busca de inspiración y 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 etiqueta de Liquid. También se usa para 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 obtener más información 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 consiste en extraer datos del perfil de un usuario e incorporarlos 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 fuentes de datos
¿Cómo puedo usar Liquid para enviar un saludo personalizado?
Para un saludo personalizado utilizando el nombre del usuario, extrae los atributos estándar del perfil de usuario como {{${first_name}}} y {{${last_name}}}.
También puedes usar una instrucción {% if X %} de Liquid para hacer representación condicional basada 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 pueden utilizarse en instrucciones condicionales, consulta Operadores.
¿Cómo puedo personalizar un mensaje en función de la ubicación de un usuario?
Hay 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 Segments que pueden usarse en un mensaje. Específicamente, puedes crear un Segment que coincida con múltiples criterios en un objeto.
Para más información, consulta Segmentación multicriterio.
¿Cómo uso atributos de eventos 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 array de arrays en Liquid?
Liquid no admite de forma nativa arrays de arrays. Almacena los valores como un array 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 puede referenciarse a lo largo de tu mensaje.
Puedes dividir un assign en varias líneas si envuelves todas las variables Liquid de Braze con llaves dobles ({{ }}). Sin esas llaves, las sentencias assign multilínea pueden causar un renderizado inesperado, incluyendo atributos personalizados que no se procesan como plantilla. Para ver ejemplos y reglas de sintaxis relacionadas, consulta Usar Liquid.
¿Cuándo debo usar assign en lugar de capture?
Tanto assign como capture crean variables Liquid, pero tienen propósitos diferentes:
assignes para variables simples que almacenan un solo valor, como un booleano, un número o una cadena simple. También puedes aplicar un solo 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 Liquid o atributos personalizados como parámetros. capture también es preferible al implementar variables Liquid en el cuerpo de las llamadas de contenido conectado.
Ejemplos
{% 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 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 Liquid o de 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:
{% 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 con Liquid. Usa otra lógica 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 todos los dígitos excepto los últimos cuatro
Para mostrar un número de teléfono de 10 dígitos como ******7890:
{% 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:
{% 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 activación
¿Por qué falla mi Liquid activado por API en Braze?
Una causa frecuente 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 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:
{{context.${property_name} | plus: 0}}
¿Por qué mi fragmento de código Liquid del catálogo devuelve un mensaje de cancelación?
Si un fragmento de código 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 extra en los mensajes que usan Content Blocks?
Si notas espaciado extra 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
{% if {{custom_attribute.${has_discount}}} == true %}Discounted Item{% elsif {{custom_attribute.${is_new_arrival}}} == true %}New Arrival{% else %}Regular Item{% endif %}
¿Por qué el código 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 sin perder la legibilidad del código:
{%- 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 código Liquid en una sola línea
Elimina todos los saltos de línea para que el código Liquid quede en una línea continua:
{% 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 el 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 la documentación de Shopify sobre Control de espacios en blanco y la sintaxis de Liquid de Braze.
¿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 agregas un Content Block con Liquid como plantilla, las media queries para dispositivos móviles del bloque pueden no aplicarse en la vista previa de la misma forma 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 Vista previa como usuario personalizado e introduce valores de muestra de propiedades de eventos personalizados para el usuario que deseas previsualizar. Esto también es útil para mensajes con lógica de cancelación cuando necesitas valores de vista previa que no activen una cancelación.
Liquid en notificaciones push
¿Por qué el título de mi notificación push en iOS aparece truncado cuando uso Liquid?
Los títulos de las notificaciones push en iOS se muestran en una sola línea en el dispositivo. Si la salida de tu Liquid incluye caracteres de salto de línea, los usuarios podrían ver solo el texto que aparece antes del primer salto de línea.
Aplica el filtro strip_newlines a la salida final de tu título. Para ver un ejemplo en el creador de push, consulta Crear una notificación push. Para conocer otros factores que afectan la cantidad de texto del título que se muestra, consulta Variables en el truncamiento de texto.
Para el cuerpo del mensaje push (no el título), Braze elimina automáticamente los saltos de línea adyacentes a las etiquetas de Liquid cuando se envía el mensaje. Este comportamiento no se aplica al campo del título. Para más detalles, consulta Saltos de línea en las notificaciones push.
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 Liquid en la dirección del campo 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 responder a dinámica?
Usa Liquid en el campo Responder a cuando tu espacio de trabajo admita la configuración dinámica de responder a. Combínalo con la configuración del nombre para mostrar del campo De según sea necesario. Consulta Configuración de correo electrónico para ver las opciones específicas del espacio de trabajo.
Solución de problemas con errores de Liquid
¿Por qué mi código Liquid no funciona cuando parece correcto?
Si tu código Liquid parece sintácticamente correcto pero no funciona, comprueba si hay comillas tipográficas (comillas curvadas 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 frecuentemente cuando la configuración del teclado de macOS Usar comillas y guiones tipográficos está habilitada, lo que convierte automáticamente los caracteres a medida que escribes en el panel de Braze.
Para desactivar esta configuración en macOS:
- Ve a Ajustes del Sistema > Teclado > Entrada de texto > Editar.
- Desmarca Usar comillas y guiones tipográficos.
| Ejemplo | Comillas curvadas (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 curvadas y las rectas pueden verse iguales en pantalla, así que compara tu código cuidadosamente o pégalo en un editor de texto sin formato.
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 suele indicar 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 mensaje, 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 reintentos.
¿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 vacío (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:
{% 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 contra 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:
{% 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 contra la hora actual o fechas futuras, usa el mismo enfoque:
{% 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 %}