Pular para o conteúdo principal
Data Feeds permitem que você busque dados em tempo real de suas APIs diretamente em mensagens no momento do envio. Isso permite entregar conteúdo altamente personalizado sem pré-carregar dados no OneSignal. Use Data Feeds quando seus dados mudam frequentemente, como:
  • Saldo de recompensas atual de um usuário
  • Status de pedido mais recente
  • Recomendações personalizadas de produtos
Outros métodos de personalização (como tags ou conteúdo dinâmico) são ótimos para dados estáticos, mas Data Feeds são melhores para valores dinâmicos e que mudam rapidamente.
Data Feeds estão atualmente disponíveis apenas para mensagens de email enviadas através de Journeys. Precisa de outro canal? Preencha esta breve pesquisa.

Como funcionam os Data Feeds

  1. Criar um Data Feed – Configure como o OneSignal se conecta à sua API.
  2. Anexar o Data Feed a um template de mensagem.
  3. Inserir campos de resposta na sua mensagem usando sintaxe Liquid.
  4. No momento do envio, o OneSignal faz uma chamada de API para cada destinatário, analisa a resposta e injeta os dados na sua mensagem.

Exemplo: Exibir pontos de recompensa

Suponha que você queira mostrar a cada cliente seu saldo de recompensas:
Olá {{ first_name }},

Você tem {{ data_feed.rewards.points }} pontos!
Seu status de membro é {{ data_feed.rewards.status_level }}.

Continue comprando para ganhar mais pontos!
Quando Sarah receber este email, ela verá seu saldo real de pontos e status de membro no lugar de {{ data_feed.rewards.points }} e {{ data_feed.rewards.status_level }}. Usaremos este exemplo para mostrar como configurar um Data Feed passo a passo abaixo.

Criando e usando um Data Feed

1. Configurar sua configuração de Data Feed

Navegue até Data > Data Feeds na barra lateral para ver a lista de Data Feeds existentes e criar um novo. Cada Data Feed deve ter:
  • Name: Um nome descritivo como “Customer Rewards API” para ajudá-lo a distingui-lo na sua lista de feeds. Recomendamos que sejam únicos, mas não é obrigatório.
  • Alias: Um nome curto como rewards que você usará na sintaxe Liquid. Estes devem ser únicos, não conter espaços e só podem conter caracteres alfanuméricos minúsculos sem símbolos especiais.
  • Method: Como devemos contatar sua API. Geralmente isso é GET, mas POST também é suportado.
  • URL: O endereço da API. Você pode incluir sintaxe Liquid, permitindo-nos chamar a API para buscar dados específicos do usuário.
Por exemplo, talvez seu endpoint de recompensas possa ser formatado desta forma, onde você usaria uma tag de dados para inserir o ID externo (armazenado no OneSignal) para buscar os dados de recompensas daquele usuário:
https://acme.com/customers/user_id={{ external_id }}/rewards
  • Headers: Insira pares chave-valor de cabeçalho conforme necessário pelas especificações da sua API. Um uso importante típico será incluir informações de autenticação. Esses campos também suportam sintaxe Liquid caso seja necessário.
  • Body: Se sua API exigir, você pode incluir um body na solicitação em formato JSON. Este editor suporta sintaxe Liquid, assim como Webhooks de Journey.
Por exemplo, em vez de na string URL como acima, sua API pode precisar que você especifique o ID do usuário no body da solicitação:
{
	"customer_id": "{{ external_id }}"
}
Uma configuração completa de Data Feed pode parecer algo assim:

Exemplo de configuração de Data Feed

Recomendamos testar seu feed antes de usá-lo. Você o testa usando Test Subscriptions, então certifique-se de que os atributos da sua assinatura de teste retornarão um resultado real da sua API. Finalmente, Ative seu novo Data Feed para que fique pronto para uso.

2. Anexar o Data Feed ao seu template de mensagem

Anexe seu Data Feed ao seu template de mensagem para que o OneSignal saiba usá-lo.
  1. Navegue até Messages > Templates
  2. Na seção Message, selecione o botão Personalization

Opções do botão de personalização

  1. Ative Data Feeds e selecione seu feed

Seção Data Feeds no compositor de mensagens

  1. Salve seu template

3. Usar os dados na sua mensagem

Use sintaxe Liquid para inserir os dados de resposta em qualquer lugar da sua mensagem. No nosso exemplo, digamos que a resposta para Sarah, cujo external_id é 1a1-b2c3, é um blob JSON simples assim:
{
	"external_id": a1-b2c3,
	"points": 193,
	"status_level": "Gold"
}
Queremos inserir o número de pontos e o nível de status na mensagem, o que é realizado através da notação de ponto típica:
Você tem {{ data_feed.rewards.points }} pontos!
Seu status de membro é {{ data_feed.rewards.status_level }}.
Isso diz ao OneSignal:
  • Use um Data Feed
  • Use o Data Feed rewards
    • Lembre-se: o feed rewards sabe chamar a API com o external_id do destinatário
  • Da resposta, insira o valor do item points (193) e do item status_level (Gold)

Requisitos e limites

Sua API precisa:
  • Aceitar autenticação de etapa única com tokens de autenticação em cabeçalhos
  • Responder rapidamente. Menos de 250ms recomendado (isso afeta diretamente a velocidade de envio)
  • Retornar JSON. Outros formatos não são suportados neste momento.
    • Se você tem um caso de uso que depende de um formato alternativo, queremos ouvir de você! Preencha esta breve pesquisa aqui.
  • Lidar com seu volume e taxa de envio de mensagens. Se sua API tem um limite de taxa baixo, isso impedirá que entreguemos suas mensagens rapidamente.
  • Retornar payloads de tamanho razoável. Recomendamos manter as respostas abaixo de 50kb para melhor performance.
Limites atuais:
  • Um Data Feed por template. Esperamos aumentar esse limite no futuro. Preencha esta breve pesquisa aqui para nos informar que você precisa disso.
  • Uma chamada de API por Data Feed por mensagem. Busque tudo o que você precisa em uma chamada.
  • Apenas Journeys. Ainda não disponível para outros métodos de envio. Preencha esta breve pesquisa aqui para nos informar que você precisa disso.
  • Sem encadeamento de chamadas. O payload de um Data Feed não pode ser usado para chamar outro.

Configurando sua API

Antes de criar um Data Feed, certifique-se de que sua API pode atender a esses requisitos:

Autenticação

Sua API deve aceitar autenticação via cabeçalhos:
Authorization: Bearer YOUR_TOKEN
ou
X-API-Key: YOUR_KEY

Body de solicitação JSON

Se você precisa incluir um body na solicitação, sua API deve aceitar JSON. Isso pode significar que seus cabeçalhos precisam incluir Content: application/json.

Resposta JSON

Sua API deve retornar um objeto JSON. Tipicamente isso significa que seus cabeçalhos incluirão Accept: application/json.

Parâmetros de personalização

Você normalmente passará identificadores de usuário na URL assim:
https://api.example.com/users/{{external_id}}/data
https://api.example.com/rewards?email={{email | url_encode}}
E/ou no body:
JSON
{
	"customer_id": "{{ external_id }}",
	"email": "{{ subscription.email }}"
}
Certifique-se de que esses dados existirão no OneSignal (geralmente como tags de dados, mas outras opções estão disponíveis como propriedades de eventos personalizados).

Limites de taxa

Considere os limites de taxa da sua API. Se você está enviando para 10.000 usuários em rápida sucessão, faremos 10.000 chamadas de API. Certifique-se de que sua API pode lidar com esse volume.

Tratamento de erros

Se sua API retornar um erro ou não tiver dados para um usuário, a mensagem não será enviada para aquele destinatário. Certifique-se de que sua API retorna dados para todos os usuários esperados.

Checklist de primeiros passos

Antes de implementar Data Feeds, responda estas perguntas:
  • Quais dados eu quero mostrar na minha mensagem? Trabalhar de trás para frente a partir de um esboço simples com os itens a serem preenchidos pela sua API identificados ajudará você a organizar seu pensamento.
  • Esses dados estão disponíveis através de um único endpoint de API?
  • Como vou autenticar solicitações de API?
  • Qual identificador ou outro item de dados vou usar para buscar dados personalizados?
  • Esse identificador já está armazenado no OneSignal? Se não, como será preenchido?
  • Minha API pode lidar com o volume de solicitações que vou gerar?
  • O que acontece se minha API não tiver dados para um usuário?

Exemplos e casos de uso avançados

Data Feeds podem ser usados com sintaxe Liquid ou em combinação com outros recursos de formas criativas para produzir personalização mais complexa.

Iterando com loops: carrinho abandonado

Digamos que você tem um Data Feed cart que retorna um array de itens no carrinho do usuário, mais o valor total em dólares do carrinho:
JSON
{
  "items": [
    {
      "name": "Blue Running Shoes",
      "price": 84.00,
      "image_url": "https://acme.com/blue-running-shoes.png"
    },
    {
      "name": "Protein Bar",
      "price": 5.99,
      "image_url": "https://acme.com/protein-bar.png"
    }
  ],
  "total": 89.99
}
Se você quiser mostrar cada item no carrinho, mais o total do carrinho, você pode usar um loop for em Liquid:
HTML
<ul>
  {% for item in data_feed.cart.items %}
    <li>
      <strong>{{ item.name }}</strong><br>
      ${{ item.price }}<br>
      <img src="{{ item.image_url }}" alt="{{ item.name }}">
    </li>
  {% endfor %}
</ul>

<p>Cart total: ${{ data_feed.cart.total }}</p>

Isso resultará em:
- Blue Running Shoes
- $84.00
- <imagem de tênis de corrida>
- Protein Bar
- $5.99
- <imagem de barra de proteína>
Cart total: $89.99
Se você está usando o editor de blocos de email, ao inserir este tipo de sintaxe Liquid complexa, particularmente se você precisar incluir imagens ou links, para melhores resultados use o elemento de bloco HTML personalizado.

Propriedades de eventos personalizados

Continuando o exemplo anterior de carrinho abandonado, como poderíamos saber como buscar aquele carrinho específico em primeiro lugar? Um método poderia ser criar uma Jornada acionada por um evento personalizado cart_abandoned, onde as propriedades incluem um cart_id. Neste exemplo, esse evento está sendo enviado ao OneSignal via API:
curl
curl --request POST \
  --url https://api.onesignal.com/apps/{app_id}/custom_events \
  --header 'Accept: application/json' \
  --data '{
  "events": [
    {
      "name": "cart_abandoned",
      "external_id": "user_12345",
      "properties": {
        "cart_id": 98765
      }
    }
  ]
}'

Evento personalizado para entrada de Journey

O usuário user_12345 entra na jornada quando este evento é disparado, depois alcança um nó enviando um email. Esse template de email está configurado com o Data Feed cart, onde a URL está definida para recuperar o conteúdo de um carrinho específico assim:
https://acme.com/carts/{{ journey.event.cart_abandoned.data.cart_id }}
Assim, quando este evento específico é ingerido e aciona a Journey:
  1. O valor cart_id de 98765 será armazenado na Journey
  2. Quando a etapa de email for alcançada, o Data Feed cart referenciará aquele valor cart_id e o usará para chamar a API do carrinho
  3. As propriedades JSON retornadas serão analisadas e inseridas no email como no exemplo anterior acima

Exibição condicional: status do pedido

Digamos que você queira incluir o status do pedido de um cliente, mas só incluir um link de número de rastreamento se o pedido foi enviado. Você pode usar uma instrução if para fazer isso:
Seu pedido está {{data_feed.order.status}}!

{% if data_feed.order.tracking_number != empty %}
Rastreie aqui: {{data_feed.order.tracking_url}}
{% endif %}
Aqui, o link de rastreamento só será exibido se o tracking_number existir.

Automação sem personalização

Data Feeds podem ser usados para inserir automaticamente informações atualizadas em suas mensagens sem necessariamente precisar ser personalizado por destinatário. Por exemplo, talvez você insira uma imagem de banner no topo dos seus emails e a altere mensalmente para acompanhar feriados e outros eventos mensais. Em vez de lembrar de fazer upload de uma nova imagem para o OneSignal e alterar todos os seus templates a cada mês, você pode configurar um Data Feed que busque a URL da imagem do banner atual do seu CMS ou outro local de gerenciamento de ativos. Você configuraria um Data Feed banner que aponta para um endpoint sem quaisquer variáveis na URL assim:
https://acme.com/assets/email-banner
Que retorna uma resposta com a URL do banner atual:
JSON
{
	"banner_url": "https://acme.com/assets/email-banner/2025july.png"
}
Você definiria seu template de email para usar {{ data_feed.banner.banner_url }} como a URL de origem da imagem, automatizando este processo daqui em diante.

Solução de problemas

Meus dados não estão aparecendo

  1. Verifique se seu Data Feed está anexado ao template
  2. Verifique se sua sintaxe Liquid corresponde à sua estrutura JSON exatamente
  3. Teste seu endpoint de API manualmente para garantir que está retornando dados
  4. Verifique se o usuário tem as tags de dados necessárias (como external_id)

As mensagens estão sendo enviadas lentamente

  1. Verifique o tempo de resposta da sua API
  2. Certifique-se de que sua API pode lidar com solicitações simultâneas

Alguns destinatários não estão recebendo mensagens

  1. Sua API pode não ter dados para esses usuários
  2. Verifique o log de erros na configuração do Data Feed para 404s ou erros
  3. Verifique os logs da sua API para 404s ou erros
  4. Verifique se esses usuários têm os identificadores necessários no OneSignal