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
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
Adicione placeholders Liquid
Envie custom_data na sua requisição de API
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: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):{{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.”
- 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.
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

Exemplo de template de email de carrinho abandonado
Crie o template de email
Adicione a estrutura de layout
- 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

Template de email inicial para carrinho abandonado
Exiba a contagem de itens
Inicie o loop
- 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
- 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
{% for %} deve ter um {% endfor %} correspondente. Se estiver faltando, a renderização do email será quebrada.Adicione um botão de link do carrinho

Template base finalizado de email de carrinho abandonado sem estilização
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.
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:
Exemplo de template de push de carrinho abandonado
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
- 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
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
Create Message API
Usando sintaxe Liquid
Templates
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