Pular para o conteúdo principal
Custom Events permitem personalizar mensagens de Journeys usando propriedades de eventos (nomes de produtos, precos, URLs, arrays, etc.). As propriedades de eventos ficam disponiveis nos templates somente se o evento:
  • Aciona a entrada no Journey, ou
  • Corresponde a uma condicao Wait Until dentro do Journey
As propriedades de eventos armazenadas podem ser acessadas usando sintaxe Liquid.

Como funciona a personalizacao com Custom Events

Adicione propriedades de eventos as suas mensagens de Journey seguindo estes passos:
1

Enviar um Custom Event com propriedades

Exemplo de payload de Custom Events:
JSON
{
  "name": "purchase",
  "properties": {
    "item": "Blue Sweater",
    "price": "29.99",
    "order status": "pending",
    "details": [
      {
        "manufacturer": "Company A",
        "model": "1234567890"
      },
      {
        "manufacturer": "Company B",
        "model": "9876543210"
      }
    ]
  },
  "external_id": "user_12345",
  "timestamp": "2025-10-21T19:09:32.263Z",
}
2

Referenciar propriedades de eventos nos templates de mensagem do Journey

Use sintaxe Liquid para acessar propriedades de eventos.

Padroes comuns de acesso Liquid

O que voce querLiquidResultado
Nome do evento{{ journey.first_event.name }}purchase
Propriedade{{ journey.first_event.properties.item }}Blue Sweater
Propriedades aninhadas{{ journey.first_event.properties.details.first.manufacturer }}Company A
Propriedade com caracteres especiais{{ journey.last_event.properties["order status"] }}pending
Timestamp{{ journey.last_event.timestamp | date: "%B %d, %Y at %I:%M %p" }}October 21, 2025 at 07:09 PM

Padroes de acesso Liquid aninhados

Voce tambem pode acessar propriedades aninhadas usando notacao de ponto e colchetes:
Liquid
{{ journey.first_event.properties.details.first.manufacturer }} = Company A
{{ journey.first_event.properties.details.last.manufacturer }} = Company B
{{ journey.first_event.properties.details[0].manufacturer }} = Company A
{{ journey.first_event.properties.details[1].manufacturer }} = Company B
Liquid invalido ou propriedades ausentes sao renderizados como strings vazias. As mensagens ainda sao enviadas. Use filtros default para definir um valor de fallback.
3

Criar um Journey

Configure o Journey para usar o Custom Event como regra de entrada e/ou condicao Wait Until.Adicione nos de mensagem com os templates.

Regras de armazenamento de propriedades de eventos

  • Voce pode usar varios eventos no seu Journey combinando regras de entrada e etapas Wait Until.
  • Maximo: 100 propriedades de eventos armazenadas por usuario por instancia de Journey (as mais antigas sao descartadas).
  • As propriedades de eventos sao armazenadas por usuario, por instancia de Journey.
  • Eventos enviados antes da entrada nao sao acessiveis.
  • As propriedades de eventos sao limpas quando o usuario sai do Journey.
Eventos armazenados em um Journey nao podem ser acessados em outro Journey.

Referencia Liquid de Custom Events

Use estes objetos para acessar eventos armazenados dentro do Journey.
journey.first_event
O primeiro evento armazenado para esta instancia de Journey.
  • Se estiver usando uma regra de entrada por Custom Event, este e o evento que causou a entrada no Journey.
  • Se nao estiver usando uma regra de entrada por Custom Event, este e o primeiro evento armazenado ao corresponder a uma condicao Wait Until.
Liquid
Thanks for purchasing {{ journey.first_event.properties.item | default: "your item" }}!
journey.last_event
O evento armazenado mais recente para esta instancia de Journey.
  • Se apenas um evento estiver armazenado, first_event e last_event retornam o mesmo resultado.
Liquid
Your most recent purchase was {{ journey.last_event.properties.item | default: "made" }}!
journey.event.EVENT_NAME
O evento armazenado mais recente com um nome especifico.
  • Substitua EVENT_NAME pelo nome do seu evento (ex.: purchase).
  • Se o mesmo nome de evento for usado varias vezes, este retorna a instancia mais recente.
Liquid
{% assign event = journey.event.purchase %}
Se o nome do seu evento inclui espacos ou caracteres especiais, use notacao de colchetes.Exemplo de evento: "name": "order status"
Liquid
{% assign event = journey.event["order status"] %}
journey.all_events
array
Todos os eventos armazenados para esta instancia de Journey, na ordem em que foram armazenados.
Liquid
{% for event in journey.all_events %}
{{ event.properties.item | default: "Item" }} — ${{ event.properties.price | default: "0.00" }}
{% endfor %}
  • journey.first_event e uma abreviacao para journey.all_events[0].
  • journey.last_event e uma abreviacao para o evento mais recente no array.

Exemplo: Templates de carrinho abandonado usando Custom Events

Este exemplo mostra como personalizar mensagens de carrinho abandonado usando Custom Events. Ele se baseia no tutorial de Carrinho Abandonado. Exemplo de conjunto de Custom Events:
JSON
{
  "events": [
    {
      "name": "cart_abandoned",
      "properties": {
        "cart_url": "https://yourdomain.com/username/cart",
        "cart": [
          {
            "product_name": "24 Pack of Acorns",
            "product_image": "https://i.imgur.com/ssPCfbC.png",
            "product_price": "$12.99",
            "product_quantity": "1"
          },
          {
            "product_name": "Fancy Sweater",
            "product_image": "https://i.imgur.com/8QWTfV4.png",
            "product_price": "$9.99",
            "product_quantity": "1"
          }
        ]
      },
      "external_id": "ID_OF_THE_USER"
    }
  ]
}

Template de e-mail

Este exemplo mostra como criar um template de e-mail que exibe:
  • A quantidade de itens no carrinho
  • Cada produto com imagem, nome, quantidade e preco usando um loop for
  • Um botao que direciona para a URL unica do carrinho do cliente
1

Criar o template de e-mail

Navegue ate Messages > Templates > New Email Template e abra o Editor Drag & Drop.
2

Adicionar 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
3

Exibir a contagem de itens

Na linha 1, adicione:
Liquid
We're holding onto {{journey.first_event.properties.cart.size}} items in your cart, but don't wait too long!
Para melhor gramatica, voce poderia usar um condicional para dizer “1 item” vs “2 itens”, mas para e-mails de carrinho abandonado, o plural geralmente e aceitavel.
Liquid
{% assign cart = message.custom_data.cart %}
{% assign item_count = cart.size | plus: 0 %}
{% if item_count == 1 %}
We're holding onto {{item_count}} item in your cart, but don't wait too long, other squirrels are getting ahead!
{% endif %}
{% if item_count > 1 %}
We're holding onto {{item_count}} items in your cart, but don't wait too long, other squirrels are getting ahead!
{% endif %}
4

Iniciar o loop for

Use um loop for para repetir a linha de exibicao do produto para cada item do carrinho.Na linha 2 (inicio do loop), adicione:
Liquid
{% for product in journey.first_event.properties.cart %}
O que isso faz:
  • Inicia um loop que itera sobre cada objeto no array cart
  • Cria uma variavel temporaria product representando o item atual
  • Tudo entre {% for %} e {% endfor %} se repete uma vez por item do carrinho
  • Voce pode nomear product como quiser (ex.: item, cartItem) — apenas mantenha a consistencia
Posicionamento do loop for: Certifique-se de que a sintaxe {% for %} esteja em sua propria linha de bloco de texto. Nao a coloque dentro de uma linha com varias colunas junto a outro conteudo, pois isso pode quebrar a renderizacao do e-mail em alguns clientes.
5

Exibir detalhes do produto

Esta linha de 4 colunas mostra imagem, nome, quantidade e preco. Como esta 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):
<img src="{{product.product_image}}" alt="Product image" style="max-width:100%;" />
Colunas 2-4 - Blocos de texto (nome do produto, quantidade, preco):
  • Coluna 2: {{product.product_name}}
  • Coluna 3: {{product.product_quantity}}
  • Coluna 4: {{product.product_price}}
Como o loop funciona:
  • Na primeira iteracao, product = primeiro objeto no array do carrinho
  • {{product.product_image}} obtem a imagem do primeiro item
  • Na segunda iteracao, product = segundo objeto
  • A linha se repete automaticamente para todos os itens do carrinho
Correspondencia de nomes de campos: Chaves como product_image devem corresponder exatamente ao payload do seu evento (diferencia maiusculas de minusculas). Incompatibilidades sao renderizadas como strings vazias.
6

Encerrar o loop for

Feche o loop para marcar onde a repeticao termina.Na linha 4 (fim do loop), adicione:
Liquid
{% endfor %}
Todo {% for %} deve ter um {% endfor %} correspondente. A ausencia dele quebrara a renderizacao do e-mail.
7

Adicionar o botao com URL do carrinho

No bloco Button da linha 5, defina a URL da acao como:
Liquid
{{journey.first_event.properties.cart_url}}
8

Testar o template

  • Adicione o template a um Journey em branco e defina a regra de entrada como Custom Event.
  • Ative o Journey e entre nele por meio da API de Custom Events.
  • Verifique se os dados sao exibidos corretamente.
Sucesso! Agora voce pode aplicar sua propria estilizacao ao template. Consulte Criar e-mails com drag-and-drop.

Template de push

Notificacoes push tem espaco limitado, entao exiba um item e mencione a contagem total. Campo de mensagem: Exiba o item e a contagem com gramatica correta usando instrucoes condicionais.
Liquid
{% assign cart = journey.first_event.properties.cart %}
{% assign item_count = cart.size | plus: 0 %}
{% if item_count == 1 %}
You left {{cart.first.product_name}} in your cart.
{% endif %}
{% if item_count == 2 %}
You left {{cart.first.product_name}} and {{item_count | minus: 1}} more item in your cart.
{% endif %}
{% if item_count > 2 %}
You left {{cart.first.product_name}} and {{item_count | minus: 1}} more items in your cart.
{% endif %}
Campo de imagem:
Liquid
{{journey.first_event.properties.cart.first.product_image | default: "https://i.imgur.com/ssPCfbC.png"}}
Campo de URL de abertura:
Liquid
{{journey.first_event.properties.cart_url | default: "https://yourdomain.com/cart"}}
Envie uma notificacao push de teste adicionando-a ao Journey de teste e entrando nele por meio de outra chamada da API de Custom Events. Voce devera ver uma notificacao semelhante a esta:
Sucesso! Agora voce pode criar mais templates e usa-los no Journey de Carrinho Abandonado.

Solucao de problemas e melhores praticas

Erros comuns:
ErroPor que falhaSintaxe correta
{{ journey.first_event.item }}Faltando .properties{{ journey.first_event.properties.item }}
{{ journey.event.purchase.item }}Faltando .properties{{ journey.event.purchase.properties.item }}
{{ journey.first_event.properties.Item }}Maiuscula/minuscula incorreta (deveria ser item){{ journey.first_event.properties.item }}
{{ event.properties.item }}Faltando o prefixo journey.{{ journey.first_event.properties.item }}
Melhores praticas:
  • Sempre teste os templates antes de colocar em producao
  • Use filtros default para propriedades opcionais
  • Valide se o schema do evento corresponde as expectativas do template

Paginas relacionadas

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
Estamos felizes em ajudar!