# Modelos Liquid

<YouTube id="A7l1_gK5yOA" playlabel="Vídeo do YouTube: Aprenda a usar modelos de conteúdo em Jornadas do Cliente"/>


Os modelos Liquid ampliam significativamente as capacidades de personalização do Pushwoosh, implementando lógica sofisticada além do uso regular de[ Conteúdo Dinâmico](/pt/product/personalization/dynamic-content/).

A personalização de mensagens no Pushwoosh é baseada em [Tags (dados do usuário)](/pt/product/audience-data-and-segmentation/user-data-tags/tags). O Pushwoosh oferece uma variedade de [Tags padrão](/pt/product/audience-data-and-segmentation/user-data-tags/tags#default-tags) e [Tags personalizadas](/pt/product/audience-data-and-segmentation/user-data-tags/tags#custom-tags). Usando-as, você pode especificar o nome, a cidade, o histórico de compras de um usuário, etc., para enviar uma mensagem mais personalizada. Por exemplo: `Olá {{First_name}}, obrigado por pedir {{item}}`.

Os modelos Liquid adicionam mais lógica ao conteúdo dinâmico. Por exemplo, se a tag de assinatura de um usuário contiver "gratuito", você pode enviar a ele uma mensagem: “Aproveite seu desconto de 10%.”

Modificar o conteúdo da mensagem de acordo com os IDs, comportamentos e preferências dos usuários é a maneira mais eficiente de aumentar a relevância e obter resultados mais impressionantes de suas campanhas de marketing.

## Sintaxe

Modelos de conteúdo baseados no [Liquid da Shopify](https://shopify.github.io/liquid/) usam uma combinação de [**tags**](#tags), [**objetos**](#objects) e [**filtros**](#undefined) para carregar conteúdo dinâmico. Os modelos de conteúdo permitem que você acesse certas variáveis de dentro de um modelo e exiba seus dados sem precisar saber nada sobre os dados em si.

<Aside type="note">
Para saber mais sobre a sintaxe, consulte a [documentação do Liquid](https://shopify.github.io/liquid/basics/introduction/).
</Aside>

### Objetos

`objetos` definem o conteúdo que será exibido para um usuário. `objetos` devem ser colocados entre chaves duplas: `{{ }}`

Por exemplo, ao personalizar uma mensagem, envie `{{Name}}` em seu corpo para adicionar os nomes dos usuários ao conteúdo da mensagem. O nome do usuário (valor da tag Name) substituirá o objeto Liquid em uma mensagem que o usuário verá.

<Tabs>
<TabItem label="Entrada">
```
Olá {{Name}}! Estamos felizes por você ter voltado!
```
</TabItem>

<TabItem label="Saída">
Olá Anna! Estamos felizes por você ter voltado!
</TabItem>
</Tabs>

### Tags

`tags` criam a lógica e o fluxo de controle para os modelos. Os delimitadores de chave e porcentagem `{%` e `%}` e o texto que eles envolvem não produzem nenhuma saída visível quando o modelo é renderizado. Isso permite que você atribua variáveis e crie condições ou laços sem mostrar nenhuma lógica do Liquid para o usuário.

Por exemplo, usando a tag `if`, você pode variar o idioma da mensagem com base no idioma definido no dispositivo do usuário:

<Tabs>
  <TabItem label="Entrada">

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

  </TabItem>

  <TabItem label="Saída (fr)">
    Salut!
  </TabItem>

  <TabItem label="Saída (es)">
    Hello!
  </TabItem>
</Tabs>


### Operadores de tags

<table data-header-hidden><thead><tr><th width="189.5" align="center">Operador</th><th>Descrição</th></tr></thead><tbody><tr><td align="center"><code>==</code></td><td>igual a</td></tr><tr><td align="center"><code>!=</code></td><td>diferente de</td></tr><tr><td align="center"><code>></code></td><td>maior que</td></tr><tr><td align="center"><code>&#x3C;</code></td><td>menor que</td></tr><tr><td align="center"><code>>=</code></td><td>maior ou igual a</td></tr><tr><td align="center"><code>&#x3C;=</code></td><td>menor ou igual a</td></tr><tr><td align="center"><code>or</code></td><td>ou lógico</td></tr><tr><td align="center"><code>and</code></td><td>e lógico</td></tr><tr><td align="center"><code>contains</code></td><td>verifica a presença de uma substring dentro de uma string ou array de strings</td></tr></tbody></table>

<Aside type="note">
Em tags com mais de um operador `and` ou `or`, os operadores são verificados em ordem _da direita para a esquerda_. Você não pode alterar a ordem das operações usando parênteses — parênteses são caracteres inválidos no Liquid e impedirão que suas tags funcionem.
</Aside>

### Filtros

`filtros` modificam a saída de um objeto ou variável Liquid. Eles são usados dentro de chaves duplas `{{ }}` e na atribuição de variáveis, e são separados por um caractere de pipe `|`. Múltiplos filtros podem ser usados em uma única saída e são aplicados da esquerda para a direita.


<Tabs>
<TabItem label="Entrada">

```

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

```

</TabItem>

<TabItem label="Saída">

Hello Anna

</TabItem>
</Tabs>



## Uso de modelos Liquid

Os modelos Liquid estão disponíveis tanto para mensagens enviadas do Painel de Controle quanto para [solicitações de API](/pt/developer/guides/personalization/liquid-templates#using-liquid-templates-in-messages-sent-via-api).

No Pushwoosh, os modelos Liquid são aplicáveis a todos os campos de conteúdo de qualquer mensagem de canal:

* Notificações push
* E-mails

Para adicionar um Modelo Liquid à sua mensagem, insira-o no corpo da mensagem. Você pode fazer isso ao trabalhar com elementos de [push](/pt/product/customer-journey/journey-elements/#push) ou [e-mail](/pt/product/customer-journey/journey-elements/#email), diretamente da interface do Construtor da Jornada do Cliente.


Vá para **Construtor da Jornada do Cliente** > **Criar Campanha** > arraste e solte os seguintes elementos em sua tela: **Entrada Baseada em Público**, **Push** (ou **E-mail**) e **Saída**. Conecte os elementos. Em seguida, clique no ícone de **Push**, escolha **Conteúdo personalizado** e insira seu texto.


Para adicionar a lógica Liquid, use os valores das tags com a seguinte sintaxe:

```liquid  
{% if TagName == 'value' %}  
  Conteúdo a ser enviado neste cenário  
{% else %}  
  Conteúdo a ser enviado caso contrário  
{% endif %}
```
Em seguida, clique em **Aplicar**.

<video src="/personalization-liquid-templates-1.webm" title="Interface do Construtor da Jornada do Cliente mostrando como adicionar lógica de modelo Liquid com condições if-else ao conteúdo da notificação push" autoplay loop muted playsinline />

As variáveis de modelo (Tags do Pushwoosh) não devem conter espaços e devem ter apenas valores alfanuméricos e sublinhados, por exemplo, `minha_tag` ou `minhaTag` em vez de `Minha Tag`.

[Saiba mais sobre modelos Liquid em jornadas](/pt/product/customer-journey/journey-elements/dynamic-content-and-liquid-templates-in-journeys)

<Aside type="tip">
 Você também pode usar a sintaxe Liquid em solicitações `/createMessage` para implementar modelos Liquid. Para isso, você precisará da ajuda de sua equipe de desenvolvimento. Compartilhe o [guia de modelos Liquid](/pt/developer/guides/personalization/liquid-templates) com eles para obter orientação detalhada.
</Aside>

## Conteúdo conectado

Conteúdo conectado é um recurso em modelos Liquid que permite recuperar e usar dados dinamicamente de uma fonte externa, como um serviço web, diretamente em suas mensagens de e-mail ou notificação push. Este recurso permite a personalização em tempo real, buscando dados JSON de uma URL especificada e salvando-os em uma variável que pode ser utilizada em seu conteúdo.

#### Principais casos de uso

- **Recomendações de produtos**: Exiba listas de produtos personalizadas e adaptadas a cada usuário.

- **Códigos promocionais**: Insira códigos promocionais únicos gerados por um serviço de backend.

#### Pré-requisitos

* Para usar o Conteúdo Conectado, você deve ter seu próprio serviço de backend que gera e fornece os dados necessários (por exemplo, códigos promocionais, recomendações de produtos) com base no **ID do Usuário, HWID ou tags personalizadas**. O Pushwoosh então busca esses dados antes de enviar uma mensagem.

### Guia de implementação passo a passo

<Aside type="caution" icon="setting" title="Necessária assistência de desenvolvedor">
Você precisará da ajuda de sua equipe de desenvolvimento para usar o Conteúdo conectado. Compartilhe este guia com eles para começar.
</Aside>

#### Passo 1. Configure o serviço de backend

O serviço de backend deve:

* Aceitar uma solicitação contendo parâmetros específicos do usuário (por exemplo, `userId`). O Conteúdo Conectado suporta `UserID`, `HWID` ou quaisquer tags personalizadas que você tenha configurado em seu projeto.
* Retornar uma resposta JSON com os dados necessários. Este conteúdo pode então ser inserido dinamicamente nas mensagens.

<Aside type="note" title="Como funciona"> 

O serviço de backend atua como um provedor de dados, respondendo a solicitações HTTP com informações específicas do usuário.

1. O Pushwoosh envia uma solicitação ao seu backend, passando identificadores específicos do usuário como parâmetros de consulta.
2. Seu backend processa a solicitação e recupera os dados solicitados.
3. Seu backend retorna uma resposta JSON.
4. Antes de enviar uma mensagem, o Pushwoosh busca a resposta JSON do serviço de backend e usa os valores retornados (por exemplo, o `code`) no conteúdo da mensagem dinamicamente.

**Exemplo de resposta**

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



#### Passo 2. Crie uma predefinição com Conteúdo Conectado no Pushwoosh
 
1. No [editor de conteúdo de Push](/pt/product/content/push-presets/) ou [E-mail](/pt/product/content/email-content/drag-and-drop-email-editor/), insira a sintaxe do Conteúdo Conectado no campo da mensagem.

**Exemplo**

```
{% connected_content http://your-backend-url.com?userId={{ ${userid} }} :save result %}  
```
**Detalhamento da sintaxe**
|  |  |
| ----- | ----- |
| `connected_content` | Busca dados JSON da URL de backend especificada. |
|    `http://your-backend-url.com` | O endpoint de backend que retorna os dados necessários em formato JSON. |
| `userId={{ ${userid} }}` | Um parâmetro de consulta dinâmico que passa o ID do usuário para o backend. |
| `:save result` | Armazena a resposta JSON buscada na variável `result` para uso em modelos Liquid. |

![Insira a sintaxe do Conteúdo Conectado](/connectedcontent.webp)

**Autenticação (opcional)**

Se o seu serviço de backend exigir autenticação, você pode incluir uma chave de API ou token na solicitação de Conteúdo Conectado para garantir o acesso seguro.

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

Você também pode enviar dados de autenticação (ou quaisquer outros) como cabeçalhos HTTP usando o parâmetro opcional `:headers` — um objeto JSON de nomes e valores de cabeçalho.

```
{% connected_content http://your-backend-url.com?userId={{ ${userid} }} :headers {"Authorization": "Bearer YOUR_TOKEN", "X-Api-Key": "YOUR_API_KEY"} :save result %}  
```
|  |  |
| ----- | ----- |
| `:headers {...}` | Um objeto JSON de cabeçalhos HTTP enviados com a solicitação, por exemplo, `Authorization: Bearer <token>`. |

<Aside type="caution" title="Apenas valores estáticos">
As variáveis de personalização `${}` funcionam apenas dentro da URL. Os valores dentro de `:headers` são estáticos e não são interpolados.
</Aside>

**Usando tags no Conteúdo Conectado**

Para incluir tags personalizadas, insira-as como parâmetros de consulta na solicitação de **Conteúdo Conectado** (`{{ tag_name }}`).

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

2. Em seguida, adicione o texto da mensagem incorporando os **dados recuperados**, assim:

```

Olá, {{userid}}, pegue seu código promocional pessoal - {{result.code}} 
```

![Adicione o texto da mensagem com os **dados recuperados**](/connectedcontent-1.webp)

3. Após finalizar o conteúdo da mensagem e configurar as definições da predefinição, salve-a para reutilização em campanhas.

<video src="/connectedcontent-2.webm" title="Envie uma mensagem com conteúdo conectado" autoplay loop muted playsinline />

#### Passo 3. Envie uma mensagem usando a predefinição configurada

Envie uma mensagem com esta predefinição usando o formulário de [push único](/pt/product/messaging-channels/push-notifications/send-push-notifications/one-time-push/#how-to-send-a-push-notification-using-the-one-time-push-form) ou [e-mail](/pt/product/messaging-channels/emails/sending-emails/send-one-time-emails/) ou uma [jornada do cliente](/pt/product/customer-journey/pushwoosh-journey-overview/).

<Aside type="caution" title="Importante">
Se o serviço retornar um status diferente de HTTP 200 OK, o e-mail ou a notificação push não será enviado. Isso garante que sua comunicação só seja enviada se os dados necessários forem recuperados com sucesso.
</Aside>