# Plantillas Liquid

<YouTube id="A7l1_gK5yOA" playlabel="Video de Youtube: Aprenda a usar plantillas de contenido en Customer Journeys"/>

Las plantillas Liquid amplían significativamente las capacidades de personalización de Pushwoosh al implementar una lógica sofisticada además del uso regular del [Contenido Dinámico](/es/product/personalization/dynamic-content/).

La personalización de mensajes en Pushwoosh se basa en [Etiquetas (datos de usuario)](/es/product/audience-data-and-segmentation/user-data-tags/tags). Pushwoosh ofrece una variedad de [Etiquetas predeterminadas](/es/product/audience-data-and-segmentation/user-data-tags/tags#default-tags) y [Etiquetas personalizadas](/es/product/audience-data-and-segmentation/user-data-tags/tags#custom-tags). Usándolas, puede especificar el nombre de un usuario, su ciudad, historial de compras, etc. para enviar un mensaje más personalizado. Por ejemplo: `Hola {{First_name}}, gracias por ordenar {{item}}`.

Las plantillas Liquid añaden más lógica al contenido dinámico. Por ejemplo, si la etiqueta de suscripción de un usuario contiene "gratis", puede enviarle un mensaje: "Aprovecha tu 10% de descuento".

Modificar el contenido del mensaje según los ID, comportamientos y preferencias de los usuarios es la forma más eficiente de aumentar la relevancia y obtener resultados más impresionantes de sus campañas de marketing.

## Sintaxis

Las plantillas de contenido basadas en [Liquid de Shopify](https://shopify.github.io/liquid/) utilizan una combinación de [**etiquetas**](#tags), [**objetos**](#objects) y [**filtros**](#filtros) para cargar contenido dinámico. Las plantillas de contenido le permiten acceder a ciertas variables desde una plantilla y mostrar sus datos sin tener que saber nada sobre los datos en sí.

<Aside type="note">
Para obtener más información sobre la sintaxis, consulte la [documentación de Liquid](https://shopify.github.io/liquid/basics/introduction/).
</Aside>

### Objetos

Los `objetos` definen el contenido que se mostrará a un usuario. Los `objetos` deben estar encerrados en llaves dobles: `{{ }}`

Por ejemplo, al personalizar un mensaje, envíe `{{Name}}` en su cuerpo para agregar los nombres de los usuarios al contenido del mensaje. El nombre del usuario (valor de la etiqueta Name) reemplazará el objeto Liquid en el mensaje que el usuario verá.

<Tabs>
<TabItem label="Entrada">
```
¡Hola {{Name}}! ¡Nos alegra que hayas vuelto!
```
</TabItem>

<TabItem label="Salida">
¡Hola Anna! ¡Nos alegra que hayas vuelto!
</TabItem>
</Tabs>

### Etiquetas

Las `etiquetas` crean la lógica y el flujo de control para las plantillas. Los delimitadores de porcentaje de llave `{%` y `%}` y el texto que rodean no producen ninguna salida visible cuando se renderiza la plantilla. Esto le permite asignar variables y crear condiciones o bucles sin mostrar ninguna de la lógica de Liquid a un usuario.

Por ejemplo, usando la etiqueta `if`, puede variar el idioma del mensaje según el idioma configurado en el dispositivo del usuario:

<Tabs>
  <TabItem label="Entrada">

```liquid
{% if Language == 'fr' %}
Salut!
{% else %}
Hello!
{% endif %}
````

  </TabItem>

  <TabItem label="Salida (fr)">
    Salut!
  </TabItem>

  <TabItem label="Salida (es)">
    Hello!
  </TabItem>
</Tabs>


### Operadores de etiquetas

<table data-header-hidden><thead><tr><th width="189.5" align="center">Operador</th><th>Descripción</th></tr></thead><tbody><tr><td align="center"><code>==</code></td><td>igual a</td></tr><tr><td align="center"><code>!=</code></td><td>no es igual a</td></tr><tr><td align="center"><code>></code></td><td>mayor que</td></tr><tr><td align="center"><code>&#x3C;</code></td><td>menor que</td></tr><tr><td align="center"><code>>=</code></td><td>mayor o igual que</td></tr><tr><td align="center"><code>&#x3C;=</code></td><td>menor o igual que</td></tr><tr><td align="center"><code>or</code></td><td>o lógico</td></tr><tr><td align="center"><code>and</code></td><td>y lógico</td></tr><tr><td align="center"><code>contains</code></td><td>comprueba la presencia de una subcadena dentro de una cadena o un array de cadenas</td></tr></tbody></table>

<Aside type="note">
En las etiquetas con más de un operador `and` u `or`, los operadores se comprueban en orden _de derecha a izquierda_. No puede cambiar el orden de las operaciones usando paréntesis — los paréntesis son caracteres no válidos en Liquid e impedirán que sus etiquetas funcionen.
</Aside>

### Filtros

Los `filtros` modifican la salida de un objeto o variable Liquid. Se utilizan dentro de llaves dobles `{{ }}` y en la asignación de variables, y se separan por un carácter de barra vertical `|`. Se pueden usar múltiples filtros en una salida, y se aplican de izquierda a derecha.

<Tabs>
<TabItem label="Entrada">

```

{{ Name | capitalize | prepend:"Hola " }}

```

</TabItem>

<TabItem label="Salida">

Hola Anna

</TabItem>
</Tabs>

## Uso de plantillas Liquid

Las plantillas Liquid están disponibles tanto para los mensajes enviados desde el Panel de Control como para las [solicitudes de API](/es/developer/guides/personalization/liquid-templates#using-liquid-templates-in-messages-sent-via-api).

En Pushwoosh, las plantillas Liquid son aplicables a todos los campos de contenido de cualquier mensaje de canal:

* Notificaciones push
* Correos electrónicos

Para agregar una Plantilla Liquid a su mensaje, insértela en el cuerpo del mensaje. Puede hacerlo cuando trabaje con elementos de [push](/es/product/customer-journey/journey-elements/#push) o [correo electrónico](/es/product/customer-journey/journey-elements/#email), directamente desde la interfaz del Customer Journey Builder.

Vaya a **Customer Journey Builder** > **Crear Campaña** > arrastre y suelte los siguientes elementos en su lienzo: **Entrada basada en Audiencia**, **Push** (o **Correo electrónico**), y **Salida**. Conecte los elementos. Luego haga clic en el icono de **Push**, elija **Contenido personalizado**, e inserte su texto.

Para agregar lógica Liquid, use valores de etiqueta con la siguiente sintaxis:

```liquid  
{% if TagName == 'value' %}  
  Contenido a enviar en este escenario  
{% else %}  
  Contenido a enviar de otra manera  
{% endif %}
```
Luego haga clic en **Aplicar**.

<video src="/personalization-liquid-templates-1.webm" title="Interfaz del Customer Journey Builder que muestra cómo agregar lógica de plantilla Liquid con condiciones if-else al contenido de la notificación push" autoplay loop muted playsinline />

Las variables de plantilla (Etiquetas de Pushwoosh) no deben contener espacios y solo deben tener valores alfanuméricos y guiones bajos, por ejemplo, `mi_etiqueta` o `miEtiqueta` en lugar de `Mi Etiqueta`.

[Aprenda más sobre las plantillas Liquid en los journeys](/es/product/customer-journey/journey-elements/dynamic-content-and-liquid-templates-in-journeys)

<Aside type="tip">
 También puede usar la sintaxis Liquid en las solicitudes `/createMessage` para implementar plantillas Liquid. Para esto, necesitará la ayuda de su equipo de desarrollo. Comparta con ellos la [guía de plantillas Liquid](/es/developer/guides/personalization/liquid-templates) para obtener una orientación detallada.
</Aside>

## Contenido conectado

El contenido conectado es una característica en las plantillas Liquid que le permite recuperar y usar dinámicamente datos de una fuente externa, como un servicio web, directamente dentro de sus mensajes de correo electrónico o notificación push. Esta característica permite la personalización en tiempo real al obtener datos JSON de una URL especificada y guardarlos en una variable que se puede utilizar en su contenido.

#### Casos de uso clave

- **Recomendaciones de productos**: Muestre listas de productos personalizadas y adaptadas a cada usuario.

- **Códigos promocionales**: Inserte códigos promocionales únicos generados por un servicio de backend.

#### Prerrequisitos

* Para usar el Contenido Conectado, debe tener su propio servicio de backend que genere y proporcione los datos requeridos (p. ej., códigos promocionales, recomendaciones de productos) basados en **User ID, HWID o etiquetas personalizadas**. Pushwoosh luego obtiene estos datos antes de enviar un mensaje.

### Guía de implementación paso a paso

<Aside type="caution" icon="setting" title="Se necesita ayuda del desarrollador">
Necesitará la ayuda de su equipo de desarrolladores para usar el Contenido conectado. Comparta esta guía con ellos para comenzar.
</Aside>

#### Paso 1. Configurar el servicio de backend

El servicio de backend debería:

* Aceptar una solicitud que contenga parámetros específicos del usuario (p. ej., `userId`). El Contenido Conectado admite `UserID`, `HWID` o cualquier etiqueta personalizada que haya configurado en su proyecto.
* Devolver una respuesta JSON con los datos requeridos. Este contenido puede luego insertarse dinámicamente en los mensajes.

<Aside type="note" title="Cómo funciona">

El servicio de backend actúa como un proveedor de datos, respondiendo a las solicitudes HTTP con información específica del usuario.

1. Pushwoosh envía una solicitud a su backend, pasando identificadores específicos del usuario como parámetros de consulta.
2. Su backend procesa la solicitud y recupera los datos solicitados.
3. Su backend devuelve una respuesta JSON.
4. Antes de enviar un mensaje, Pushwoosh obtiene la respuesta JSON del servicio de backend y utiliza los valores devueltos (p. ej., el `code`) en el contenido del mensaje de forma dinámica.

**Ejemplo de respuesta**

```
{ "code": "SPECIALOFFERFORUSER12345" }
```
</Aside>

#### Paso 2. Crear un preset con Contenido Conectado en Pushwoosh

1. En el [editor de contenido Push](/es/product/content/push-presets/) o [Email](/es/product/content/email-content/drag-and-drop-email-editor/), inserte la sintaxis de Contenido Conectado en el campo del mensaje.

**Ejemplo**

```
{% connected_content http://your-backend-url.com?userId={{ ${userid} }} :save result %}  
```
**Desglose de la sintaxis**
| | |
| ----- | ----- |
| `connected_content` | Obtiene datos JSON de la URL del backend especificada. |
| `http://your-backend-url.com` | El endpoint del backend que devuelve los datos requeridos en formato JSON. |
| `userId={{ ${userid} }}` | Un parámetro de consulta dinámico que pasa el ID de usuario al backend. |
| `:save result` | Almacena la respuesta JSON obtenida en la variable result para su uso en plantillas Liquid |

![Insertar la sintaxis de Contenido Conectado](/connectedcontent.webp)

**Autenticación (opcional)**

Si su servicio de backend requiere autenticación, puede incluir una clave de API o un token en la solicitud de Contenido Conectado para garantizar un acceso seguro.

```
{% connected_content http://your-backend-url.com?userId={{ ${userid} }}&auth=YOUR_API_KEY :save result %}  
```

También puede enviar datos de autenticación (o cualquier otro) como cabeceras HTTP utilizando el parámetro opcional `:headers` — un objeto JSON de nombres y valores de cabecera.

```
{% connected_content http://your-backend-url.com?userId={{ ${userid} }} :headers {"Authorization": "Bearer YOUR_TOKEN", "X-Api-Key": "YOUR_API_KEY"} :save result %}  
```
| | |
| ----- | ----- |
| `:headers {...}` | Un objeto JSON de cabeceras HTTP enviadas con la solicitud, p. ej. `Authorization: Bearer <token>`. |

<Aside type="caution" title="Solo valores estáticos">
Las variables de personalización `${}` solo funcionan dentro de la URL. Los valores dentro de `:headers` son estáticos y no se interpolan.
</Aside>

**Uso de etiquetas en Contenido conectado**

Para incluir etiquetas personalizadas, insértelas como parámetros de consulta en la solicitud de **Contenido Conectado** (`{{ tag_name }}`).

```
{% connected_content http://your-backend-url.com?userId={{ ${userid} }}{{ Language }} :save result %} 
```

2. A continuación, agregue el texto del mensaje incorporando los **datos recuperados**, de esta manera:

```
Hola, {{userid}}, aprovecha tu código promocional personal - {{result.code}} 
```

![Agregar el texto del mensaje con los **datos recuperados**](/connectedcontent-1.webp)

3. Después de finalizar el contenido del mensaje y configurar los ajustes del preset, guárdelo para reutilizarlo en campañas.

<video src="/connectedcontent-2.webm" title="Enviar un mensaje con contenido conectado" autoplay loop muted playsinline />

#### Paso 3. Enviar un mensaje usando el preset configurado

Envíe un mensaje con este preset utilizando el formulario de [push único](/es/product/messaging-channels/push-notifications/send-push-notifications/one-time-push/#how-to-send-a-push-notification-using-the-one-time-push-form) o [correo electrónico](/es/product/messaging-channels/emails/sending-emails/send-one-time-emails/) o un [customer journey](/es/product/customer-journey/pushwoosh-journey-overview/).

<Aside type="caution" title="Importante">
Si el servicio devuelve un estado diferente a HTTP 200 OK, el correo electrónico o la notificación push no se enviarán. Esto asegura que su comunicación solo se envíe si los datos necesarios se recuperan con éxito.
</Aside>