Sintaxe de personalização personalization-syntax
O Personalization no Journey Optimizer usa duas sintaxes complementares que funcionam juntas na mesma expressão:
- Handlebars (
{{...}}) — usado para renderizar atributos de perfil, sobrepor matrizes e auxiliares de bloco de chamadas. Consulte a documentação de HandlebarsJS para obter uma referência completa. - Profile Query Language (PQL) (
{%= ... %}) — usado para chamar funções internas (por exemplo,upperCase(),formatDate(),dateDiff()) e avaliar expressões condicionais.
Entender em qual contexto você está é fundamental para evitar erros de tempo de execução. Por exemplo, uma chamada de função PQL colocada dentro de {{...}} falhará porque o Handlebars tenta resolvê-la como auxiliar, em vez de avaliá-la como uma expressão PQL.
Exemplos:
{{profile.person.name.firstName}}{%= upperCase(profile.person.name.firstName) %}{%#if profile.loyalty.tier = "gold"%}...{%/if%}{{#each profile.orders}}...{{/each}}A estrutura de atributos é definida em um Esquema XDM do Adobe Experience Platform. Saiba mais.
Regras gerais de sintaxe general-rules
-
Os identificadores podem ser qualquer caractere unicode, exceto os seguintes caracteres especiais, que são reservados para a sintaxe Handlebars:
code language-none Whitespace ! " # % & ' ( ) * + , . / ; < = > @ [ \ ] ^ ` { | } ~ -
A sintaxe diferencia maiúsculas de minúsculas.
-
As palavras true, false, null e undefined só são permitidas na primeira parte de uma expressão de caminho.
-
Em Handlebars, os valores retornados por {{expression}} são HTML-escaped. Se a expressão contiver
&, a saída HTML-escaped retornada será gerada como&. Se você não quiser que o Handlebars escape um valor, use o “triple-stash”.Suponha que o valor do campo
profile.person.nameseja “Mark & Mary”. A sintaxe{{profile.person.name}}exibiráMark & Mary, enquanto{{{profile.person.name}}}exibiráMark & Mary. -
Em relação a argumentos de funções literais, o analisador de linguagem de modelo não oferece suporte ao símbolo único de barra invertida sem escape (
\). Este caractere deve ser evitado com um símbolo adicional de barra invertida (\). Exemplo:{%= regexGroup("abc@xyz.com","@(\\w+)", 1)%} -
Para incluir uma aspas duplas literais dentro de um valor de sequência de caracteres (por exemplo, ao gerar saída JSON), use uma barra invertida (
\") para escapará-la:code language-handlebars { "message": "Hello \"{{profile.person.name.firstName}}\"" }Saída:
{ "message": "Hello \"John\"" }Como alternativa, use o caractere triplo
{{{ }}}para gerar HTML sem escape quando o próprio valor contiver caracteres especiais que você não deseja codificar em HTML.
Palavras-chave reservadas reserved-keywords
Determinadas palavras-chave são reservadas no Profile Query Language (PQL) e não podem ser usadas diretamente como nomes de campos ou variáveis em expressões de personalização. Se o esquema XDM contiver campos com nomes que correspondam a palavras-chave reservadas, você deverá fazer o escape com acentos graves (`) para referenciá-los em suas expressões.
As palavras-chave reservadas incluem:
nextlastthis
Exemplo:
Se o esquema de perfil tiver um campo chamado next, você deverá envolvê-lo em acentos graves:
{{profile.person.`next`.name}}
Sem os backticks, o editor de personalização falhará a validação com um erro.
{{...}} quanto a expressões PQL {%= ... %}, pois essas palavras-chave são reservadas no nível de resolução de caminho. Isso é diferente de nomes de campo hifenizados, em que o escape de backtick é compatível somente dentro de expressões PQL. Consulte Chaves de atributo hifenizadas.Regras de sintaxe do PQL para chaves de atributo especiais pql-special-keys
Além das palavras-chave reservadas, dois casos adicionais exigem o escape de backtick em expressões PQL.
Chaves de atributo hifenizadas hyphenated-keys
Se o esquema XDM contiver nomes de campo com hifens (por exemplo, my-field, event-type) ou nomes que comecem com ou contenham números, coloque a chave entre acentos graves dentro de expressões PQL:
{%= profile.events.`order-total` > 100 %}
{%= ... %}). Não há suporte para isso na interpolação Handlebars ({{...}}). No entanto, nomes de campos hifenizados podem ser referenciados diretamente em {{...}} blocos (por exemplo, {{profile.my-custom-field}}); somente a sintaxe de backtick falha lá.Sem acentos graves em uma expressão PQL, o hífen é interpretado como um operador de subtração e causa um erro de sintaxe do PQL.
IDs de evento numérico em atributos de contexto numeric-event-ids
Ao fazer referência a atributos de evento de contexto em que a ID do evento é um número (por exemplo, 1697323153), coloque-a entre acentos graves. Isso também se aplica dentro de funções como formatDate():
Coerção de tipo type-coercion
O PQL é altamente digitado. Ao comparar ou transmitir valores, ambos os lados devem ser do mesmo tipo. Casos comuns:
stringToNumber() antes da aritmética ou comparação: {%= stringToNumber(profile.loyalty.pointsBalance) > 500 %}string_to_integer() ou stringToNumber() antes da aritméticatoBool() para converter: {%= toBool(profile.consents.email.val) = true %}Namespaces disponíveis namespaces
-
Perfil
Este namespace permite referenciar todos os atributos definidos no esquema de perfil descrito na documentação do Adobe Experience Platform Data Model (XDM).
Os atributos precisam ser definidos no esquema antes de serem referenciados em um bloco de personalização Journey Optimizer.
Para obter mais informações sobre como utilizar atributos de perfil em condições, consulte esta seção.
accordion Exemplos de referências {{profile.person.name.fullName}}{{profile.person.name.firstName}}{{profile.person.gender}}{{profile.personalEmail.address}}{{profile.mobilePhone.number}}{{profile.homeAddress.city}}{{profile.faxPhone.number}}
-
Público-alvo
Para saber mais sobre o serviço de segmentação, consulte esta documentação.
-
Ofertas
Esse namespace permite fazer referência às decisões de ofertas existentes.
Para fazer referência a uma oferta, é necessário declarar um caminho com as diferentes informações que definem uma oferta. Esse caminho tem a seguinte estrutura:
offers.Type.[Placement Id].[Activity Id].Attributeem que:
offersidentifica a expressão de caminho pertencente ao namespace da ofertaTypedetermina o tipo de representação da oferta. Os valores possíveis são:image,htmletextPlacement IdeActivity Idsão identificadores de posicionamento e atividadeAttributessão atributos específicos da oferta que dependem do tipo de oferta. Exemplo:deliveryUrlpara imagens
Para obter mais informações sobre a API de Decisões e representações de Oferta, consulte esta página
Todas as referências são validadas em relação ao Esquema de Ofertas com um mecanismo de validação descrito em esta página
accordion Exemplos de referências -
Local onde a imagem está hospedada:
offers.image.[offers:xcore:offer-placement:126f767d74b0da80].[xcore:offer-activity:125e2c6889798fd9].deliveryUrl -
URL do Target ao clicar na imagem:
offers.image.[offers:xcore:offer-placement:126f767d74b0da80].[xcore:offer-activity:125e2c6889798fd9].linkUrl -
Conteúdo de texto da oferta proveniente do mecanismo de decisão:
offers.text.[offers:xcore:offer-placement:126f767d74b0da80].[xcore:offer-activity:125e2c6889798fd9].content -
Conteúdo HTML da oferta proveniente do mecanismo de decisão:
offers.html.[offers:xcore:offer-placement:126f767d74b0da80].[xcore:offer-activity:125e2c6889798fd9].content
Auxiliares helpers-all
Um auxiliar do Handlebars é um identificador simples que pode ser seguido por parâmetros. Cada parâmetro é uma expressão Handlebars. Esses auxiliares podem ser acessados de qualquer contexto em um modelo.
Esses auxiliares de bloco são identificados por um # precedendo o nome do auxiliar e exigem um / de fechamento correspondente, do mesmo nome.
Blocos são expressões que têm um bloco abrindo ({{# }}) e fechando ({{/}}).
Para obter mais informações sobre funções auxiliares, consulte esta seção.
Tipos literais literal-types
Adobe Journey Optimizer dá suporte aos seguintes tipos literais:
Exemplos:
"prospect", "jobs", "articles"Exemplos:
-201, 0, 412Observação: não é possível acessar diretamente as propriedades dos itens em uma matriz.
Exemplos:
[1, 4, 7], ["US", "FR"]Práticas recomendadas best-practices
Revise essas regras de sintaxe antes de criar expressões de personalização. A maioria dos erros de tempo de execução vem da combinação de contextos de Handlebars e PQL.
Usar a sintaxe de bloco condicional correta
Sempre usar {%#if%} / {%else if%} / {%else%} / {%/if%}. Não há suporte para a sintaxe {% if %} / {% elseif %} / {% endif %}.
Não chamar funções PQL dentro de {{...}} Handlebars
{{...}} resolve somente variáveis Handlebars e auxiliares — não avalia o PQL. Encurtar uma função PQL como upperCase() dentro de {{...}} causa um erro “não foi possível encontrar auxiliar”. Em vez disso, use {%= ... %}:
{{upperCase(cleanName)}}{%= upperCase(cleanName) %}Usar um alias de loop nomeado ao combinar {{#each}} com{%#if%}
this.field é resolvido pelo renderizador Handlebars, mas não pelo avaliador do PQL dentro de uma condição {%#if%}. Defina um alias nomeado com as |item| para que ambos os contextos possam resolver o campo:
Atribuir os resultados da função PQL a uma variável antes do loop
UDFs do PQL como topN não podem ser chamados diretamente dentro de {{#each}}. Avalie-as primeiro com {% let %} e depois repita sobre o resultado:
Use {% let %} para evitar chamadas de função repetidas
Quando um valor calculado for necessário mais de uma vez, armazene-o em uma variável. Isso melhora a legibilidade e evita avaliações redundantes:
Usar a ordem correta de argumentos paradateDiff
dateDiff(start, end) toma a data anterior primeiro. Para calcular os dias restantes até uma data futura, passe a data atual como o primeiro argumento:
Use = para comparações de igualdade no PQL, não==
O PQL usa um único operador = para igualdade. Usar == resulta em um erro de sintaxe.
Usar acentos graves para nomes de campo hifenizados — somente em expressões PQL
Se um nome de campo de esquema XDM contiver um hífen (por exemplo, order-total), coloque-o entre acentos graves para impedir que o hífen seja analisado como um operador de subtração. Só há suporte para isso dentro de {%= ... %} expressões PQL, não em {{...}} blocos Handlebars:
{%= profile.events.`order-total` > 100 %}
Para expressões prontas para uso que você pode copiar diretamente para o seu conteúdo, consulte receitas do Personalization.