custom_data na Create Message API para enviar dados dinâmicos do seu backend e renderizá-los dentro de templates usando sintaxe Liquid.
custom_data:
- É específico da mensagem
- Não é armazenado
- Existe apenas durante a requisição da API
- Deve ser usado com um
template_id
Liquid
Quando usar custom_data
Use custom_data quando você precisa:
- Dados que mudam por mensagem (totais de pedidos, itens do carrinho, saldos)
- Você precisa de arrays (listas de produtos, itens de linha, recomendações)
- Dados que não devem persistir (códigos únicos, URLs temporárias)
- Você envia mensagens disparadas pelo backend
- Você quer personalização em massa em uma única requisição de API
Como funciona a personalização com custom_data
Adicionar custom_data às mensagens requer alguns passos:
Crie um template
Crie um template de Push, Email ou SMS em Templates no painel ou via Create Template API.
Envie custom_data na sua requisição de API
Chame a Create Message API com:
template_id- O ID do templatecustom_data- O objeto de dados- Segmentação de audiência (
include_player_ids,include_aliasesou segments)
Padrões de dados
Exemplos comuns de padrões de dados que você pode usar comcustom_data.
Exemplo de JSON plano
Use pares chave-valor simples para personalização básica como nomes, IDs, URLs ou qualquer dado de valor único. Caso de uso: Mensagens transacionais (faturas, recibos, confirmações) onde cada campo contém um único valor. Template:Liquid
JSON
Text
Exemplo de dados com array
Passe arrays de objetos para trabalhar com múltiplos itens como produtos do carrinho, itens de linha de pedidos ou recomendações. Arrays permitem tanto acesso direto (indexação) quanto iteração (loops). Caso de uso: Exibição de listas de produtos, rankings, resumos de pedidos ou qualquer dado com múltiplos itens. Template de indexação (acessando o primeiro item):Liquid
Liquid
Text
{{message.custom_data.cart_items.size}}— Número de itens no array (retorna2neste exemplo){{message.custom_data.cart_items.first.item_name}}— Nome do primeiro item (equivalente a[0]){{message.custom_data.cart_items.last.item_name}}— Nome do último item
Exemplo de personalização em massa
Envie uma única requisição de API para múltiplos usuários onde cada destinatário vê conteúdo personalizado com base no seuexternal_id.
Como funciona:
- Estruture
custom_datacomo um objeto onde as chaves são external_ids e os valores são dados específicos do usuário - No template, use
subscription.external_idpara buscar os dados do destinatário atual - O OneSignal renderiza o template uma vez por destinatário com seus dados específicos
subscription.external_idcontém o external_id do destinatário atual (ex.: “user123”)message.custom_data.users[subscription.external_id]busca os dados desse usuário no objeto custom_datauserse torna uma variável de atalho para os dados desse usuário- Cada destinatário vê apenas seu próprio conteúdo personalizado
- John (user123): “Hi John, you have 150 points. Your level is Gold.”
- Sarah (user456): “Hi Sarah, you have 200 points. Your level is Platinum.”
Requisitos para personalização em massa:
- Todos os destinatários devem ter um
external_iddefinido no OneSignal - Cada
external_ideminclude_aliasesdeve ter uma chave correspondente emcustom_data.users - Se o external_id de um destinatário estiver ausente em
custom_data, a mensagem dele terá campos vazios
Exemplo: Carrinho abandonado com custom_data
Como criar mensagens de carrinho abandonado para email e push usandocustom_data.
Quando usar esta abordagem:
- Seu servidor detecta o abandono de carrinho (ex.: 1 hora após a última atividade)
- Os dados do carrinho em tempo real estão no seu banco de dados
- Você quer exibir múltiplos produtos com imagens, nomes e preços
- Cada usuário pode ter itens e quantidades diferentes
- Você quer orquestrar a mensagem a partir do seu backend
Exemplo de payload custom_data
Esta é a requisição da Create Message API para este exemplo.
JSON
| Campo | Tipo | Finalidade |
|---|---|---|
cart_url | string | Link único do carrinho do cliente (para botões/URLs de abertura) |
cart | array | Lista de produtos — suporta contagem, loops e exibição de detalhes |
product_image | string | Imagem do produto (por item no array) |
product_name | string | Nome do produto (por item) |
product_quantity | string | Quantidade (por item) |
product_price | string | Preço com formatação (por item) |
Você pode nomear os campos como quiser — apenas certifique-se de que a sintaxe Liquid do seu template corresponda.
Template de email
Este exemplo mostra como criar um template de email que exibe:- A contagem de itens do carrinho
- Cada produto com imagem, nome, quantidade e preço usando um for-loop
- Um botão que linka para a URL única do carrinho do cliente

Crie o template de email
Navegue até Messages > Templates > New Email Template e abra o Editor Drag & Drop.
Adicione a estrutura de layout
Crie cinco linhas:
- Linhas 1, 2 e 4: uma coluna com um bloco Paragraph
- Linha 3: quatro colunas com HTML | Paragraph | Paragraph | Paragraph
- Linha 5: uma coluna com um bloco Button

Exiba a contagem de itens
Na linha 1, adicione:Para uma gramática melhor, você pode usar uma condicional para dizer “1 item” vs “2 items”, mas para emails de carrinho abandonado, o plural geralmente é aceitável.
Liquid
Liquid
Inicie o loop
Use um for-loop para repetir a linha de exibição do produto para cada item no carrinho.Na linha 2 (início do loop), adicione isto ao bloco de texto:O que isto faz:
Text
- Inicia um loop que itera sobre cada objeto no array
cart - Cria uma variável temporária chamada
productque representa o item atual - Tudo entre
{% for %}e{% endfor %}se repete uma vez por item do carrinho - Você pode nomear
productcomo quiser (ex.:item,cartItem) — apenas mantenha a consistência
Exiba os detalhes do produto
Esta linha de 4 colunas mostra imagem, nome, quantidade e preço. Como está dentro do loop, ela se repete para cada item do carrinho.Na linha 3 (detalhes do produto), configure:Coluna 1 - Bloco HTML (imagem do produto):Colunas 2–4 - Blocos de texto (nome do produto, quantidade, preço):
HTML
- Coluna 2:
{{product.product_name}} - Coluna 3:
{{product.product_quantity}} - Coluna 4:
{{product.product_price}}
- Na primeira iteração,
product= primeiro objeto no array cart {{product.product_image}}obtém a URL da imagem do primeiro item- Na segunda iteração,
product= segundo objeto - A linha se repete automaticamente para todos os itens do carrinho
Encerre o loop
Feche o loop para marcar onde a repetição termina.Na linha 4 (fim do loop), adicione:
Liquid
Todo
{% for %} deve ter um {% endfor %} correspondente. Se estiver faltando, a renderização do email será quebrada.Teste o template
- Configure sua requisição de API usando o Exemplo de payload
custom_data - Envie o email para você mesmo.
- Verifique se os dados são exibidos corretamente.
Sucesso! Agora você pode aplicar seu próprio estilo ao template. Consulte Design de emails com drag-and-drop.
Template de push
Notificações push têm limites de caracteres e restrições do sistema operacional, então em vez de mostrar todos os itens, exiba o primeiro produto e indique a contagem total com gramática adequada. Aqui está um exemplo de notificação push que vamos construir:
Liquid
Consulte Usando sintaxe Liquid para mais informações.
Liquid
Consulte Imagens de notificação e rich media para mais informações.
Liquid
Sucesso! Salve o template e use seu
template_id na requisição de API Create message com a propriedade custom_data para testar.Solução de problemas e boas práticas
- Mantenha simples: Inclua apenas dados que você realmente usará no template
- Mantenha abaixo de 2KB: Monitore o tamanho do seu payload, especialmente com arrays
- Use nomenclatura consistente: Mantenha
snake_caseoucamelCaseem todo o código - Valide antes de enviar: Verifique valores nulos, arrays vazios e campos obrigatórios
- Sempre use filtros default para campos opcionais:
Liquid
- Verifique o tamanho do array antes de iterar:
Liquid
- Teste com casos extremos: arrays vazios, campos ausentes, contagens máximas de itens
- Registre as respostas da API no lado do servidor para capturar erros de validação
- Monitore as taxas de entrega de mensagens — quedas repentinas podem indicar erros de Liquid
- Mantenha templates de fallback prontos para mensagens transacionais críticas
- Pré-formate dados complexos no seu backend em vez de usar lógica Liquid complexa
- Faça cache de templates e reutilize-os em muitas chamadas de API
- Considere separar mensagens transacionais de alto volume de campanhas de marketing
A mensagem é enviada mas o conteúdo está em branco
A mensagem é enviada mas o conteúdo está em branco
Causa: Erros de sintaxe Liquid ou nomes de campos incompatíveisSoluções:
- Verifique se os nomes dos campos correspondem exatamente entre
custom_datae o template (diferencia maiúsculas e minúsculas) - Verifique erros de digitação:
{{message.custom_data.name}}e não{{message.custm_data.name}} - Use filtros default para capturar campos ausentes
- Teste templates com a estrutura real de
custom_dataantes de colocar em produção
Erro de API: Corpo da requisição muito grande
Erro de API: Corpo da requisição muito grande
Causa:
custom_data excede o limite de 2KBSoluções:- Remova campos desnecessários do seu payload
- Encurte nomes de campos e valores quando possível
- Limite arrays aos primeiros 3-5 itens
- Mova conteúdo estático grande (como HTML completo) para o seu template
Páginas relacionadas
Personalização de mensagens
Visão geral de todas as opções de personalização no OneSignal, incluindo Data Tags, atributos de usuário e segmentação.
Create Message API
Referência completa da API para envio de mensagens com custom_data, opções de segmentação e todos os campos disponíveis.
Usando sintaxe Liquid
Referência completa de sintaxe Liquid incluindo filtros, condicionais, loops e manipulação de strings.
Templates
Crie e gerencie templates de mensagens reutilizáveis para canais de Push, Email, SMS e In-App.
Precisa de ajuda?Converse com nossa equipe de Suporte ou envie email para
support@onesignal.comPor favor inclua:- Detalhes do problema que você está enfrentando e passos para reproduzir se disponível
- Seu OneSignal App ID
- O External ID ou Subscription ID se aplicável
- A URL para a mensagem que você testou no Dashboard OneSignal se aplicável
- Quaisquer logs ou mensagens de erro relevantes
