Iterar em dados contextuais personalization-contexts
Saiba como usar a sintaxe de iteração do Handlebars para exibir listas dinâmicas de dados de várias fontes em suas mensagens, incluindo eventos, respostas de ação personalizadas e outros dados contextuais.
Visão geral overview
O Journey Optimizer fornece acesso a dados contextuais de várias fontes durante a personalização da mensagem. Você pode iterar matrizes dessas fontes usando a sintaxe Handlebars em canais nativos (email, push, SMS) para exibir conteúdo dinâmico como listas de produtos, recomendações ou outros elementos repetitivos.
Fontes de contexto disponíveis:
- Eventos: dados de eventos de jornada (eventos comerciais, eventos unitários)
- Respostas da ação personalizada: dados retornados de chamadas de API externas por meio de ações personalizadas
- Pesquisa de conjunto de dados: dados enriquecidos recuperados de conjuntos de dados do Adobe Experience Platform
- Propriedades técnicas: metadados de Jornada, como ID de jornada e identificadores complementares
- Contexto de Jornada: outros dados relacionados à jornada acessíveis durante a execução
Este guia mostra como iterar sobre matrizes de cada uma dessas fontes em suas mensagens e como trabalhar com matrizes ao configurar atividades de jornada. Comece com Sintaxe de iteração Handlebars para entender as noções básicas de personalização de mensagens ou vá para Trabalhe com matrizes em expressões de Jornada para saber como transmitir dados de matriz para ações personalizadas e pesquisas de conjuntos de dados.
Sintaxe de iteração de Handlebars syntax
Handlebars fornece o {{#each}} auxiliar para iterar sobre matrizes. A sintaxe básica é:
Pontos principais:
- Substituir
arrayPathpelo caminho para os dados da matriz - Substitua
itemcom qualquer nome de variável que você preferir (por exemplo,product,response,element) - Acessar propriedades de cada item usando
{{item.propertyName}} - Você pode aninhar vários blocos
{{#each}}para matrizes de vários níveis
Iterar dados do evento event-data
Os dados do evento estão disponíveis quando a sua jornada é acionada por um evento. Isso é útil para exibir dados capturados no momento em que a jornada foi iniciada, como conteúdo do carrinho, itens de pedido ou envios de formulário.
Caminho de contexto para eventos
<event_ID>: o identificador exclusivo do evento conforme configurado na jornada<fieldPath>: O caminho para o campo ou matriz no esquema de evento
Exemplo: itens do carrinho de um evento
Se o esquema de evento incluir uma matriz productListItems (formato XDM padrão), você poderá exibir o conteúdo do carrinho conforme detalhado na amostra abaixo.
| code language-handlebars |
|---|
|
Exemplo: matrizes aninhadas em eventos
Para estruturas aninhadas, use {{#each}} blocos aninhados.
| code language-handlebars |
|---|
|
Saiba mais sobre o aninhamento em Práticas recomendadas.
Iterar sobre respostas de ação personalizadas custom-action-responses
As respostas de ação personalizada contêm dados retornados de chamadas de API externas. Isso é útil para exibir informações em tempo real de seus sistemas, como pontos de fidelidade, recomendações de produtos, status do inventário ou ofertas personalizadas.
Caminho de contexto para ações personalizadas
<actionName>: O nome da sua ação personalizada conforme configurado na jornada<fieldPath>: O caminho para o campo ou matriz na carga de resposta
Exemplo: recomendações de produto de uma API
Para iterar sobre uma matriz de recomendações de produto retornadas de uma ação personalizada e exibi-las como cartões individuais em sua mensagem, consulte o exemplo abaixo.
Resposta da API:
| code language-json |
|---|
|
Personalização da mensagem:
| code language-handlebars |
|---|
|
Exemplo: matrizes aninhadas de ações personalizadas
Para iterar sobre uma resposta de ação personalizada contendo matrizes aninhadas (uma matriz de objetos, em que cada objeto contém outra matriz), consulte o exemplo abaixo. Isso demonstra o uso de loops {{#each}} aninhados para acessar vários níveis de dados.
Resposta da API:
| code language-json |
|---|
|
Personalização da mensagem:
| code language-handlebars |
|---|
|
Para obter padrões de aninhamento mais complexos, consulte Práticas recomendadas.
Exemplo: benefícios do nível de fidelidade
Para exibir benefícios dinâmicos com base no status de fidelidade, consulte o exemplo abaixo.
Resposta da API:
| code language-json |
|---|
|
Personalização da mensagem:
| code language-handlebars |
|---|
|
Repetir nos resultados da pesquisa do conjunto de dados dataset-lookup
A Atividade de Pesquisa de Conjunto de Dados permite recuperar dados de conjuntos de dados do Adobe Experience Platform durante o tempo de execução da jornada. Os dados enriquecidos são armazenados como uma matriz e podem ser repetidos em suas mensagens.
Saiba mais sobre como configurar a atividade Pesquisa de Conjunto de Dados em esta seção. A pesquisa de conjunto de dados é particularmente eficiente quando combinada com dados de evento. Consulte Exemplo: dados de evento enriquecidos com a pesquisa de conjunto de dados para obter um caso de uso prático.
Caminho de contexto para pesquisas de conjunto de dados
<activityID>: o identificador exclusivo da sua atividade de Pesquisa de Conjunto de Dadosentities: A matriz de dados enriquecidos recuperados do conjunto de dados
Exemplo: detalhes do produto de um conjunto de dados
Se você estiver usando uma atividade de Pesquisa de conjunto de dados para recuperar informações do produto com base em SKUs, consulte o exemplo abaixo.
Configuração de Pesquisa de Conjunto de Dados:
- Chaves de Pesquisa:
list(@event{purchase_event.products.sku}) - Campos a Serem Retornados:
["SKU", "category", "price", "name"]
Personalização da mensagem:
| code language-handlebars |
|---|
|
Exemplo: iteração filtrada com dados do conjunto de dados
Para filtrar os resultados da pesquisa do conjunto de dados durante a iteração e exibir apenas itens que correspondam a critérios específicos (por exemplo, produtos de uma categoria específica), use instruções condicionais {{#if}} no loop {{#each}}. Veja o exemplo abaixo.
| code language-handlebars |
|---|
|
Saiba mais sobre a filtragem condicional em Práticas recomendadas.
Exemplo: Calcular totais a partir da pesquisa do conjunto de dados
Para calcular e exibir totais ao iterar pelos resultados da pesquisa do conjunto de dados, consulte o exemplo abaixo.
| code language-handlebars |
|---|
|
Usar propriedades técnicas do jornada technical-properties
As propriedades técnicas do Jornada fornecem acesso aos metadados sobre a execução da jornada, como a ID da jornada e os identificadores complementares. Eles podem ser úteis quando combinados com padrões de iteração, especialmente para filtrar matrizes com base em instâncias de jornada específicas.
Propriedades técnicas disponíveis
Exemplo: filtrar itens de matriz usando o identificador complementar
Ao usar identificadores complementares em jornadas acionadas por eventos com matrizes, você pode filtrar para mostrar somente o item relevante para a instância de jornada atual. Saiba mais sobre identificadores complementares em este guia.
Cenário: uma jornada é acionada com várias reservas, mas você deseja exibir informações somente para a reserva específica (identificada pela ID complementar) que acionou essa instância de jornada.
| code language-handlebars |
|---|
|
Exemplo: incluir ID da jornada para rastreamento
Para incluir a ID da jornada na mensagem para fins de rastreamento, consulte o exemplo abaixo.
| code language-handlebars |
|---|
|
Combinar várias fontes de contexto combine-sources
Você pode combinar dados de diferentes fontes na mesma mensagem para criar experiências ricas e personalizadas. Esta seção mostra exemplos práticos de uso de várias fontes de contexto juntas.
Fontes de contexto que você pode combinar:
Exemplo: itens do carrinho com inventário em tempo real
Para combinar dados de evento (conteúdo do carrinho) com dados de ação personalizados (status do inventário), visualize a amostra abaixo.
| code language-handlebars |
|---|
|
Exemplo: dados de evento enriquecidos com pesquisa de conjunto de dados
Para combinar SKUs de evento com informações detalhadas do produto de uma pesquisa de conjunto de dados, veja a amostra abaixo.
| code language-handlebars |
|---|
|
Exemplo: combinar várias fontes com propriedades técnicas
Para combinar várias fontes de contexto (dados de perfil, dados de evento, ações personalizadas e propriedades técnicas) em uma única mensagem, veja a amostra abaixo.
| code language-handlebars |
|---|
|
Outros tipos de contexto other-contexts
Embora este guia se concentre na iteração sobre matrizes, outros tipos de contexto estão disponíveis para personalização que normalmente não exigem iteração. Elas são acessadas diretamente em vez de serem colocadas em loop:
- Atributos do perfil (
profile.*): campos de perfil individuais do Adobe Experience Platform - Públicos-alvo (
inAudience()): verificações de associação de público-alvo - Decisões de oferta: ofertas de gerenciamento de decisão
- Atributos do público-alvo (somente campanhas orquestradas): atributos calculados na tela da campanha
- Token (
context.token): tokens de sessão ou autenticação
Para obter a sintaxe de personalização completa e exemplos usando essas fontes, consulte:
Trabalhar com matrizes em expressões de Jornada arrays-in-journeys
Embora as seções anteriores se concentrem em iterar sobre matrizes na personalização de mensagens usando Handlebars, você também trabalha com matrizes ao configurar atividades de jornada. Esta seção explica como usar dados de matriz de eventos em expressões de Jornada, especialmente ao transmitir dados para ações personalizadas ou usar matrizes com pesquisas de conjunto de dados.
first, all e serializeList. No conteúdo da mensagem, você usa a sintaxe Handlebars com {{#each}} loops.Envio de valores de matriz para parâmetros de ação personalizados arrays-to-custom-actions
Ao configurar ações personalizadas, geralmente é necessário extrair valores de matrizes de eventos e passá-los como parâmetros. Esta seção aborda padrões comuns.
Saiba mais sobre como transmitir coleções em Transmitir coleções para parâmetros de ação personalizados.
Extrair um valor único de uma matriz
Caso de uso: obtenha um campo específico de uma matriz de eventos para passar como parâmetro de consulta em uma solicitação GET.
Exemplo de cenário: extraia o primeiro SKU com um preço maior que 0 de uma lista de produtos.
Exemplo de esquema de evento:
| code language-json |
|---|
|
Configuração de ação personalizada:
- Em sua ação personalizada, configure um parâmetro de consulta (por exemplo,
sku) com tipostring - Marcar como
Variablepara permitir valores dinâmicos
Expressão de Jornada no parâmetro de ação:
| code language-javascript |
|---|
|
Explicação:
@event{YourEventName}: Referencia seu evento de jornada.first(currentEventField.condition): retorna o primeiro item de matriz correspondente à condiçãocurrentEventField: representa cada item na matriz de eventos à medida que você a percorre.SKU: extrai o campo SKU do item correspondente- Resultado:
"SKU-1"(uma cadeia de caracteres adequada ao parâmetro de ação)
Saiba mais sobre a função first em Funções de gerenciamento de coleção.
Criar uma lista de valores de uma matriz
Caso de uso: crie uma lista separada por vírgulas de IDs a serem transmitidas como um parâmetro de consulta (por exemplo, /products?ids=sku1,sku2,sku3).
Configuração de ação personalizada:
- Configurar um parâmetro de consulta (por exemplo,
ids) com tipostring - Marcar como
Variable
Expressão de Jornada:
| code language-javascript |
|---|
|
Explicação:
-
.all(currentEventField.condition): retorna todos os itens de matriz correspondentes à condição (retorna uma lista) -
currentEventField: representa cada item na matriz de eventos à medida que você a percorre -
.SKU: Projeta a lista para incluir apenas valores de SKU -
serializeList(list, delimiter, addQuotes): Ingressa a lista em uma cadeia de caracteres",": usar vírgula como delimitadortrue: adicionar aspas em cada elemento da cadeia de caracteres
-
Resultado:
"SKU-1,SKU-3"(adequado para um parâmetro de consulta)
Saiba mais sobre:
O manuseio de coleção para ações personalizadas é abordado em Transmitir coleções para parâmetros de ação personalizados.
Passar uma matriz de objetos para uma ação personalizada
Caso de uso: enviar uma matriz completa de objetos em um corpo de solicitação (para POST ou GET com corpo).
Solicitar exemplo de corpo:
| code language-json |
|---|
|
Configuração de ação personalizada:
- No corpo da solicitação, defina
productscomo tipolistObject - Marcar como
Variable - Definir os campos de objeto:
id,name,price,color(cada um se torna mapeável)
Configuração da tela de Jornada:
-
No modo Avançado, defina a expressão de coleção:
code language-javascript @event{YourEventName.commerce.productListItems.all(currentEventField.priceTotal > 0)} -
Na interface de mapeamento de coleção:
- Mapa
id→productListItems.SKU - Mapa
name→productListItems.name - Mapa
price→productListItems.priceTotal - Mapa
color→productListItems.color
- Mapa
O Journey Optimizer constrói a matriz de objetos que correspondem à estrutura de carga da ação.
| note note |
|---|
| NOTE |
Ao trabalhar com matrizes de eventos, use currentEventField para fazer referência a cada item. Para coleções de fonte de dados (Adobe Experience Platform), use currentDataPackField. Para coleções de resposta de ação personalizada, use currentActionField. |
Saiba mais em Transmitir coleções para parâmetros de ação personalizados.
Usar matrizes com pesquisas de conjunto de dados arrays-with-dataset-lookup
Ao usar a atividade de Pesquisa de Conjunto de Dados, você pode passar uma matriz de valores como chaves de pesquisa para recuperar dados enriquecidos.
Exemplo: pesquisar detalhes do produto para todas as SKUs em uma matriz de eventos.
Configuração de Pesquisa do Conjunto de Dados:
No campo de chaves de pesquisa, use list() para converter um caminho de matriz em uma lista:
| code language-javascript |
|---|
|
Isso cria uma lista de todos os valores de SKU a serem pesquisados no conjunto de dados. Os resultados estão disponíveis como uma matriz em context.journey.datasetLookup.<activityID>.entities que você pode iterar na sua mensagem (consulte Iterar nos resultados da pesquisa do conjunto de dados).
Limitações e padrões array-limitations
Esteja ciente destas limitações ao trabalhar com arrays no jornada:
Nenhum loop dinâmico em arrays no fluxo de jornada
O Jornada não pode criar loops dinâmicos em que um nó de ação é executado várias vezes para cada item em uma matriz. Isso é intencional para evitar problemas de desempenho descontrolados.
O que você não pode fazer:
- Executar uma ação personalizada uma vez por item do array dinamicamente
- Criar várias ramificações de jornada com base no comprimento da matriz
Padrões recomendados:
-
Enviar todos os itens de uma só vez: passar toda a matriz ou uma lista serializada para uma única ação personalizada que processa todos os itens. Consulte Criar uma lista de valores de uma matriz.
-
Usar agregação externa: faça com que sua API externa aceite várias IDs e retorne resultados combinados em uma única chamada.
-
Pré-calcular no AEP: use atributos computados para pré-calcular valores de matrizes no nível do perfil.
-
Extração de valor único: se você precisar de apenas um valor, extraia-o usando
firstouhead. Consulte Extrair um único valor de uma matriz.
Saiba mais em Medidas de proteção e limitações.
Considerações sobre o tamanho da matriz
Arrays grandes podem afetar o desempenho da jornada:
- Matrizes de eventos: manter cargas de evento abaixo do total de 50 KB
- Respostas da ação personalizada: as cargas de resposta devem ter menos de 100KB
- Resultados da pesquisa do conjunto de dados: Limitar o número de chaves de pesquisa e entidades retornadas
Exemplo completo: matriz de eventos para ação personalizada complete-example
Este é um fluxo de trabalho completo que mostra como usar uma matriz de eventos com uma ação personalizada.
Cenário: quando um usuário abandona o carrinho, envie os dados do carrinho para uma API de recomendação externa para obter sugestões personalizadas e, em seguida, as exiba em um email.
Etapa 1: configurar a ação personalizada
Crie uma ação personalizada "GetCartRecommendations":
- Método: POST
- URL:
https://api.example.com/recommendations - Corpo da solicitação:
| code language-json |
|---|
|
- Marcar
cartItemscomo tipolistObjecteVariable - Definir campos:
sku(cadeia de caracteres),price(número),quantity(inteiro)
Saiba mais em Configurar uma ação personalizada.
Etapa 2: configurar carga de resposta
Na ação personalizada, configure a resposta:
| code language-json |
|---|
|
Saiba mais em Usar respostas de chamada de API.
Etapa 3: conectar a ação na jornada
-
Após o evento de abandono do carrinho, adicione a ação personalizada
-
No modo Avançado para a coleção
cartItems:code language-javascript @event{cartAbandonment.commerce.productListItems.all(currentEventField.quantity > 0)} -
Mapeie os campos da coleção:
sku→productListItems.SKUprice→productListItems.priceTotalquantity→productListItems.quantity
Etapa 4: usar a resposta no seu email
No conteúdo do email, repita as recomendações:
| code language-handlebars |
|---|
|
Etapa 5: testar sua configuração
Antes de executar uma jornada em tempo real, teste a ação personalizada usando o recurso "Enviar solicitação de teste" na configuração da ação para verificar a solicitação e os valores criados.
- Usar modo de teste de jornada
- Acionar com dados de evento de exemplo, incluindo uma matriz
productListItems - Verifique se a ação personalizada recebe a estrutura de matriz correta
- Verificar os logs de teste de ação
- Visualize o e-mail para confirmar se os dois storages são exibidos corretamente
Saiba mais em Solucionar problemas de ações personalizadas.
Práticas recomendadas best-practices
Siga essas práticas recomendadas ao iterar em dados contextuais para criar personalização executável e que possa ser mantida.
Usar nomes de variáveis descritivas
Escolha nomes de variáveis que indiquem claramente sobre o que você está iterando. Isso torna o código mais legível e fácil de manter. Saiba mais sobre a sintaxe de personalização:
| code language-handlebars |
|---|
|
Fragmentos de expressão em loops
Ao usar fragmentos de expressão dentro de {{#each}} loops, esteja ciente de que você não pode passar variáveis com escopo de loop como parâmetros de fragmento. No entanto, os fragmentos podem acessar variáveis globais definidas no conteúdo da mensagem fora do fragmento.
Padrão com suporte - Use variáveis globais:
| code language-handlebars |
|---|
|
O fragmento pode referenciar globalDiscount porque está definido globalmente na mensagem.
Sem suporte - Passando variáveis de loop:
| code language-handlebars |
|---|
|
Solução alternativa: inclua a lógica de personalização diretamente no loop em vez de usar um fragmento ou chame o fragmento fora do loop.
Saiba mais sobre o uso de fragmentos de expressão dentro de loops, incluindo exemplos detalhados e soluções alternativas adicionais.
Lidar com matrizes vazias
Use a cláusula {{else}} para fornecer conteúdo de fallback quando uma matriz estiver vazia. Saiba mais sobre funções auxiliares:
| code language-handlebars |
|---|
|
Combinar com auxiliares condicionais
Use {{#if}} em loops para conteúdo condicional. Saiba mais sobre regras condicionais e veja exemplos nas seções Respostas de ação personalizadas e Pesquisa de conjunto de dados.
| code language-handlebars |
|---|
|
Limitar iteração para desempenho
Para matrizes grandes, considere limitar o número de iterações:
| code language-handlebars |
|---|
|
Acessar metadados da matriz
Handlebars fornecem variáveis especiais em loops que ajudam nos padrões avançados de iteração:
@index: Índice de iteração atual (baseado em 0)@first: verdadeiro para a primeira iteração@last: verdadeiro para a última iteração
| code language-handlebars |
|---|
|
@index, @first, @last) só estão disponíveis nos loops {{#each}} de personalização de mensagens. Para trabalhar com matrizes em expressões de Jornada (como obter o primeiro item de uma matriz antes de passar para uma ação personalizada), use funções de matriz como head, first ou all. Consulte Trabalhar com matrizes em expressões de Jornada para obter mais detalhes.Solução de problemas troubleshooting
Problemas com a iteração? Esta seção aborda problemas e soluções comuns.
Matriz não exibida
Problema: sua iteração de matriz não está mostrando conteúdo.
Possíveis causas e soluções:
-
Caminho incorreto: verifique o caminho exato para a matriz com base na fonte do contexto:
- Para eventos:
context.journey.events.<event_ID>.<fieldPath> - Para ações personalizadas:
context.journey.actions.<actionName>.<fieldPath> - Para pesquisas do conjunto de dados:
context.journey.datasetLookup.<activityID>.entities
- Para eventos:
-
A matriz está vazia: adicione uma cláusula
{{else}}para verificar se a matriz não tem dados. Consulte Práticas recomendadas para ver exemplos. -
Dados ainda não disponíveis: verifique se a ação personalizada, o evento ou a atividade de pesquisa do conjunto de dados foi executada antes da atividade de mensagem no fluxo de jornada.
Erros de sintaxe
Problema: falha na validação da expressão ou a mensagem não é renderizada.
Erros comuns:
- Marcas de fechamento ausentes: todo
{{#each}}deve ter um{{/each}}. Revise a sintaxe de iteração de Handlebars para obter a estrutura adequada. - Nome de variável incorreto: garanta o uso consistente do nome da variável em todo o bloco. Consulte Práticas recomendadas para convenções de nomenclatura.
- Separadores de caminho incorretos: use pontos (
.), não barras ou outros caracteres
Fragmentos de expressão que não funcionam em loops
Problema: um fragmento de expressão não exibe o conteúdo esperado quando usado dentro de um loop {{#each}}, ou mostra uma saída vazia/inesperada.
Possíveis causas e soluções:
-
Tentando passar variáveis de loop como parâmetros: os fragmentos de expressão não podem receber variáveis de escopo de loop (como o item de iteração atual) como parâmetros. Essa é uma limitação conhecida.
Solução: use uma destas soluções alternativas:
- Definir variáveis globais na mensagem que o fragmento pode acessar
- Inclua a lógica de personalização diretamente no loop em vez de usar um fragmento
- Chame o fragmento fora do loop se ele não precisar de dados específicos do loop
-
O fragmento espera um parâmetro que não está disponível: se o fragmento foi projetado para receber parâmetros de entrada específicos, ele não funcionará corretamente quando esses parâmetros não puderem ser passados de dentro de um loop.
Solução: reestruture sua abordagem para usar variáveis globais que o fragmento pode acessar. Consulte Práticas recomendadas - Fragmentos de expressão em loops para obter exemplos.
-
Escopo de variável incorreto: o fragmento pode estar tentando fazer referência a uma variável que só existe dentro do escopo do loop.
Solução: defina todas as variáveis de que o fragmento precisa no nível da mensagem (fora do loop) para que fiquem acessíveis globalmente.
Saiba mais sobre como usar fragmentos de expressão dentro de loops, incluindo explicações detalhadas, exemplos e padrões recomendados.
Teste das iterações
Use o modo de teste de jornada para verificar suas iterações. Isso é especialmente importante ao usar ações personalizadas ou pesquisas de conjunto de dados:
- Inicie sua jornada no modo de teste
- Acionar o evento ou a ação personalizada com dados de amostra
- Verifique a visualização da mensagem para verificar se a iteração é exibida corretamente
- Revise os logs do modo de teste para quaisquer erros (consulte Logs do modo de teste de ação personalizada)
Tópicos relacionados related-topics
Fundamentos do Personalization: Introdução à personalização | Adicionar personalização | Sintaxe do Personalization | Funções auxiliares | Criar regras condicionais
Configuração de Jornada: Sobre eventos | Configurar ações personalizadas | Envio de coleções em parâmetros de ação personalizados | Usar respostas de chamada de API em ações personalizadas | Solucionar problemas de ações personalizadas | Usar dados do Adobe Experience Platform no jornada | Usar identificadores complementares no jornada | Medidas de proteção e limitações | Testar sua jornada
Funções de expressão de Jornada: Editor de expressão avançado | Funções de gerenciamento de coleções (primeiro, todos, último) | Listar funções (serializeList, filtro, classificação) | Funções de matriz (head, tail)
Casos de uso do Personalization: Email de abandono de carrinho | Notificação do status do pedido
Design da mensagem: Introdução ao design de email | Criar notificações por push | Criar mensagens SMS | Visualizar e testar seu conteúdo