> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Conteúdo Dinâmico com CSV

> Personalize mensagens push, e-mail e SMS em escala usando Conteúdo Dinâmico com uploads CSV e sintaxe Liquid no OneSignal.

O OneSignal fornece várias maneiras de [personalizar o conteúdo de mensagens](./message-personalization) em escala. Este guia se concentra no uso do recurso de Conteúdo Dinâmico com upload CSV encontrado no painel do OneSignal para push, email e SMS.

**Principais benefícios:**

* **Use um CSV para personalizar em escala** – Uma mensagem, experiências personalizadas para todos
* **Suporte multi-idioma** – Troca automática de idioma por usuário
* **Personalização dinâmica** – O conteúdo se adapta às propriedades do usuário (idioma, região, ID de campanha)
* **Colaboração em equipe** – Usuários não técnicos editam conteúdo em arquivos CSV
* **Injeção de HTML (email)** – Inclua marcação HTML em células CSV para criar dinamicamente conteúdo de email rico
* **Compatibilidade cross-channel** – Reutilize a lógica CSV entre canais

**Casos de uso comuns:**

* Onboarding ou marketing multi-idioma
* Promoções específicas por região
* Anúncios de eventos por localização
* Personalização baseada em campanha

***

## Etapas de configuração do Conteúdo Dinâmico com CSV

**Referência rápida:**

1. Crie um arquivo CSV com suas variações de conteúdo.
2. Mapeie os dados CSV para a mensagem usando a propriedade `dynamic_content` na sintaxe Liquid.
3. Crie uma nova mensagem ou [template](./templates) no painel do OneSignal.
4. Selecione o botão **Conteúdo Dinâmico** ou **Personalização**.
5. Faça upload do arquivo CSV e envie a mensagem.

### Requisitos e configuração do CSV

* **Tamanho do arquivo:** Menos de 200 KB
* **Cabeçalhos de coluna:**
  * Reserve o primeiro cabeçalho de coluna para a chave de tag ou deixe em branco para referenciar seções
  * Somente caracteres alfanuméricos e underscores
  * Use underscores (`_`) em vez de espaços
* **Codificação:** UTF-8

Comece com um CSV em branco ou use um template fornecido. Os templates são fornecidos ao selecionar o botão **Conteúdo Dinâmico** ou **Personalização** nos editores de mensagem e template.

<Frame caption="Botão de Conteúdo Dinâmico encontrado no editor de mensagens.">
  <img src="https://mintcdn.com/onesignal/jBdBk5XvQR5eKOks/images/docs/772f91e24ebca83a05d4e96819a41ec58d5ca0acd3a715e971c4a43ba7654494-Screenshot_2025-02-10_at_5.23.32_PM.png?fit=max&auto=format&n=jBdBk5XvQR5eKOks&q=85&s=c51a6fcb07f7aab797cbfe74423530cb" alt="Botão de Conteúdo Dinâmico no editor de mensagens do OneSignal" width="1960" height="380" data-path="images/docs/772f91e24ebca83a05d4e96819a41ec58d5ca0acd3a715e971c4a43ba7654494-Screenshot_2025-02-10_at_5.23.32_PM.png" />
</Frame>

Templates disponíveis:

* **Multi-idioma** – Localize o conteúdo por idioma
* **Personalização de conteúdo** – Personalize o conteúdo por Tags de Dados

<Frame caption="Opções de template CSV no painel do OneSignal.">
  <img src="https://mintcdn.com/onesignal/YOTSrtBSoqdrJ37A/images/docs/47f48b79aa100bd5d2c59a418216bafba75daaa92d0bf939dcd3ccceca39cd7c-Screenshot_2025-02-10_at_5.26.15_PM.png?fit=max&auto=format&n=YOTSrtBSoqdrJ37A&q=85&s=87947eb40093580c8589cf7eb4183564" alt="Opções de template CSV mostrando templates multi-idioma e de personalização de conteúdo" width="1986" height="870" data-path="images/docs/47f48b79aa100bd5d2c59a418216bafba75daaa92d0bf939dcd3ccceca39cd7c-Screenshot_2025-02-10_at_5.26.15_PM.png" />
</Frame>

#### Exemplos de CSV

Este guia usará os seguintes dados CSV de exemplo.

<Tabs>
  <Tab title="Exemplo de Template Multi-idioma">
    * Mapeie os cabeçalhos de coluna para seus [códigos de idioma suportados](./multi-language-messaging#supported-languages).
    * Adicione suas traduções a cada linha para cada código de idioma.
    * Se você tiver várias seções (como em um email), designe a primeira coluna como o nome da seção.

    Este exemplo inclui:

    * 3 idiomas: inglês, espanhol e francês.
    * 2 seções: "section\_1" e "section\_2".

    <Frame caption="CSV multi-idioma correspondendo atributo de idioma do usuário ao conteúdo (semelhante ao PROCV).">
      <img src="https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/8716e43deead16759c2500d85900d2d1be8b6a9c51e0477160569b05534a58fb-Screenshot_2025-02-10_at_8.37.25_PM.png?fit=max&auto=format&n=0qspEXXeJ8zJbkJ-&q=85&s=4a20651cf2949bad117b8a9fda432536" alt="CSV multi-idioma com códigos de idioma como cabeçalhos de coluna e conteúdo traduzido nas linhas" width="1438" height="220" data-path="images/docs/8716e43deead16759c2500d85900d2d1be8b6a9c51e0477160569b05534a58fb-Screenshot_2025-02-10_at_8.37.25_PM.png" />
    </Frame>
  </Tab>

  <Tab title="Exemplo de Template de Personalização de Conteúdo">
    * Mapeie o primeiro cabeçalho de coluna para a chave de tag e as linhas subjacentes aos valores que você deseja referenciar. Veja [Tags](./add-user-data-tags) para mais informações sobre como adicionar tags aos usuários.
    * Mapeie os cabeçalhos de coluna restantes para as seções ou componentes que você deseja personalizar.

    Neste exemplo:

    * A chave de tag é `campaign_id` com valores possíveis de `A` e `B`.
    * Há 3 componentes: "title", "message" e "url".

    <Frame caption="CSV de personalização usando a Tag de Dados campaign_id.">
      <img src="https://mintcdn.com/onesignal/3zq1PvSaqvUE2bIx/images/docs/2d49628c7c891801e50b7f397442f5887e7b776897d24788be16887ed191f631-Screenshot_2025-04-10_at_9.47.35_AM.png?fit=max&auto=format&n=3zq1PvSaqvUE2bIx&q=85&s=23ec0fe2224cc3103e7a7c62168dd050" alt="CSV de personalização de conteúdo usando a tag campaign_id com colunas title, message e url" width="1406" height="160" data-path="images/docs/2d49628c7c891801e50b7f397442f5887e7b776897d24788be16887ed191f631-Screenshot_2025-04-10_at_9.47.35_AM.png" />
    </Frame>

    <Warning>
      **Importante:** Remova espaços e caracteres não alfanuméricos dos cabeçalhos CSV
      ou use notação hash no Liquid.
    </Warning>

    <Frame caption="Exemplo de CSV detalhado usando sintaxe Liquid para referenciar Tags.">
      <img src="https://mintcdn.com/onesignal/tc0EvmtSSX56SX0c/images/docs/9352ff1-event_translation.csv.png?fit=max&auto=format&n=tc0EvmtSSX56SX0c&q=85&s=e71b92286f500fc201b95bafa2b38a85" alt="Exemplo de CSV detalhado mostrando referências de sintaxe Liquid para personalização baseada em tags" width="3189" height="2646" data-path="images/docs/9352ff1-event_translation.csv.png" />
    </Frame>
  </Tab>
</Tabs>

### Mapear dados CSV para o conteúdo da mensagem

Usando [sintaxe Liquid](./using-liquid-syntax), referencie os dados CSV em sua mensagem usando a propriedade `dynamic_content`:

```liquid theme={null}
<!-- Opção 1: acessar por componente primeiro -->
{{dynamic_content.file_name.message_component[user_property]}}

<!-- Opção 2: acessar por propriedade do usuário primeiro -->
{{dynamic_content.file_name[user_property].message_component}}
```

**Parâmetros:**

* `dynamic_content` – O nome da propriedade usado para referenciar os dados CSV
* `file_name` – Nome do arquivo CSV (sem extensão `.csv`)
* `message_component` – O componente de mensagem específico que você deseja personalizar. Este é o texto estático no cabeçalho de coluna CSV ou na primeira linha.
* `user_property` – A [propriedade de usuário](./message-personalization#properties) que você deseja referenciar.

**Conteúdo de fallback:**

Sempre use fallbacks de string `default` codificados para garantir que as mensagens sejam renderizadas se a busca CSV ou o Conteúdo Dinâmico falhar.

```liquid Sintaxe Liquid para o fallback theme={null}
{{ dynamic_content.my_template.header[user.language] | default: "Bem-vindo à nossa última atualização" }}
```

Isso significa que se a busca CSV ou o Conteúdo Dinâmico falhar, a mensagem renderizará o texto de fallback `"Bem-vindo à nossa última atualização"`.

Isso garante:

* O Conteúdo Dinâmico é usado quando disponível
* Uma mensagem codificada aparece se o Conteúdo Dinâmico falhar
* Os usuários nunca recebem conteúdo em branco

<Tabs>
  <Tab title="Exemplo de Mensagem Multi-idioma">
    ```csv translations.csv theme={null}
    ,en,es,fr
    section_1,Hello,Hola,Bonjour
    section_2,Thanks for shopping with us...,Gracias por comprar con nosotros...,Merci pour votre achat avec nous...
    ```

    * O `file_name` é `translations.csv`.
    * O `message_component` está nas linhas da primeira coluna `section_1` e `section_2`.
    * O `user_property` é o cabeçalho de coluna correspondente ao código de idioma. Podemos referenciar isso no usuário com a [propriedade](./message-personalization#properties) `user.language`.

    ```liquid Sintaxe Liquid básica para a mensagem multi-idioma theme={null}
    {{dynamic_content.translations.section_1[user.language]}}
    {{dynamic_content.translations.section_2[user.language]}}
    ```

    ```liquid (Recomendado) Sintaxe Liquid com fallback padrão para a mensagem multi-idioma theme={null}
    {% assign supported_langs = "en,es,fr,de" | split: "," %}
    {% assign lang = user.language | default: "en" %}

    {% unless supported_langs contains lang %}
      {% assign lang = "en" %}
    {% endunless %}

    {{ dynamic_content.translations.section_1[lang] | default: "Hello" }}
    {{ dynamic_content.translations.section_2[lang] | default: "Thanks for shopping with us..." }}
    ```

    <Frame caption="Adicionando sintaxe Liquid para conteúdo de email multi-idioma.">
      <img src="https://mintcdn.com/onesignal/4HyuQPBpu-4xjmQC/images/docs/d0df135475c202308b5b5e40f3893f1beff6d7d387a99e9264c5c5936283d699-Screenshot_2025-02-10_at_10.08.20_PM.png?fit=max&auto=format&n=4HyuQPBpu-4xjmQC&q=85&s=bb3aaec56a1bcca6e1400b096a5550b7" alt="Editor de email do OneSignal com sintaxe Liquid para Conteúdo Dinâmico multi-idioma" width="1062" height="446" data-path="images/docs/d0df135475c202308b5b5e40f3893f1beff6d7d387a99e9264c5c5936283d699-Screenshot_2025-02-10_at_10.08.20_PM.png" />
    </Frame>
  </Tab>

  <Tab title="Exemplo de Mensagem de Personalização de Conteúdo">
    ```csv content_personalization_template.csv theme={null}
    campaign_id,title,message,url
    campaign_123,Flash deal for you,Tap to claim,https://example.com/flash
    campaign_456,Weekend picks are here,See what's trending,https://example.com/weekend
    default,Our latest offers,See what's new,https://example.com
    ```

    * O `file_name` é `content_personalization_template.csv`.
    * O `user_property` mapeia para a chave de tag: `campaign_id`.
    * O `message_component` é o cabeçalho de coluna mapeado para a seção da mensagem que você deseja personalizar (title, message ou url).

    ```liquid Sintaxe Liquid para a mensagem de personalização de conteúdo theme={null}
    {{ dynamic_content.content_personalization_template[campaign_id].title }}
    {{ dynamic_content.content_personalization_template[campaign_id].message }}
    {{ dynamic_content.content_personalization_template[campaign_id].url }}
    ```

    ```liquid (Recomendado) Sintaxe Liquid com fallback padrão para a mensagem de personalização de conteúdo theme={null}
    {% assign cid = campaign_id | default: "default" %}

    {% unless dynamic_content.content_personalization_template[cid] %}
      {% assign cid = "default" %}
    {% endunless %}

    {{ dynamic_content.content_personalization_template[cid].title | default: "Nossas últimas ofertas" }}
    {{ dynamic_content.content_personalization_template[cid].message | default: "Veja as novidades" }}
    {{ dynamic_content.content_personalization_template[cid].url | default: "https://example.com" }}
    ```

    <Frame caption="Adicionando sintaxe Liquid para personalização push baseada em campanha.">
      <img src="https://mintcdn.com/onesignal/tNi1OgLc_p9hiq7_/images/docs/1c80cff787617df73a16bd4858446a07db6af84f4d79404c4a2ad34e3e509876-Screenshot_2025-02-10_at_9.53.13_PM.png?fit=max&auto=format&n=tNi1OgLc_p9hiq7_&q=85&s=37a96d318756adc6b0f2a35aecc20c92" alt="Exemplo de Liquid para personalização com Conteúdo Dinâmico" width="1774" height="1018" data-path="images/docs/1c80cff787617df73a16bd4858446a07db6af84f4d79404c4a2ad34e3e509876-Screenshot_2025-02-10_at_9.53.13_PM.png" />
    </Frame>
  </Tab>
</Tabs>

<Check>
  Use Liquid com fallback `default` para atualizar linhas de assunto, preheaders, rótulos de botões
  e URLs.
</Check>

### Usar HTML em células CSV (somente e-mail)

Você pode incluir marcação HTML diretamente em células CSV para injetar conteúdo rico em emails. Isso é útil para trocar seções inteiras de um email — como banners, CTAs ou blocos estilizados — com base nas propriedades do usuário.

```csv promo_banners.csv theme={null}
campaign_id,banner_html
spring_sale,<div style="background:#4CAF50;padding:16px;text-align:center;"><a href="https://example.com/spring" style="color:#fff;font-size:18px;">Shop the Spring Sale</a></div>
default,<div style="background:#333;padding:16px;text-align:center;"><a href="https://example.com" style="color:#fff;font-size:18px;">See What's New</a></div>
```

Referencie a célula HTML em seu template de email:

```liquid theme={null}
{{ dynamic_content.promo_banners[campaign_id].banner_html | default: "<p>Check out our latest offers</p>" }}
```

O HTML é renderizado diretamente no corpo do email, portanto você pode usar qualquer estilo inline e marcação que os clientes de email suportem.

<Warning>
  O HTML de células CSV é suportado apenas em email. Os canais push e SMS renderizam o conteúdo como texto simples e não interpretam marcação HTML.
</Warning>

***

## Referência

### Atualizando templates

Faça re-upload de CSVs via painel ou use a propriedade `dynamic_content` da [API Update Template](/reference/update-template).

### Caracteres especiais em chaves

**Notação hash** (para chaves não alfanuméricas):

```liquid theme={null}
{{ dynamic_content.file_name["!the_row!"]["&the_column&"] }}
```

**Notação de ponto** (para chaves padrão):

```liquid theme={null}
{{ dynamic_content.file_name.the_row.the_column }}
```

***

## FAQ

### Como posso testar o Conteúdo Dinâmico com CSV?

Use email para testar múltiplas variações da mensagem.

* Use endereçamento `+` em emails para testar múltiplas variações: `username+test@example.com`.
* Configure tags seguindo os exemplos multi-idioma e de personalização de conteúdo acima.
* Veja [Importar](./import) para mais informações sobre upload de múltiplos usuários e tags de dados.

### Quando usar Conteúdo Dinâmico com CSV vs. outras opções de personalização?

Use **Conteúdo Dinâmico com CSV** ao enviar mensagens do painel e quando tiver dados de usuário em um arquivo CSV. Para outras formas de adicionar conteúdo dinâmico às mensagens, veja [Personalização de Mensagem](./message-personalization) ou [Mensagens Multi-idioma](./multi-language-messaging).

***

## Páginas relacionadas

<Columns cols={2}>
  <Card title="Personalização de Mensagem" icon="wand-magic-sparkles" href="./message-personalization">
    Visão geral de todas as opções de personalização disponíveis no OneSignal.
  </Card>

  <Card title="Usando Sintaxe Liquid" icon="code" href="./using-liquid-syntax">
    Referência completa de sintaxe Liquid para mensagens do OneSignal.
  </Card>

  <Card title="Importar" icon="file-import" href="./import">
    Fazer upload de dados de usuário e segmentos para o OneSignal.
  </Card>

  <Card title="Templates" icon="clone" href="./templates">
    Criar templates de mensagem reutilizáveis.
  </Card>
</Columns>
