En esta página: Encuentre fórmulas de personalización listas para usar para fechas, matrices, cadenas, lógica condicional y casos extremos de PQL que pueda copiar directamente en el contenido de Adobe Journey Optimizer.
Esta página proporciona patrones de personalización listos para usar para los casos de uso más comunes en Adobe Journey Optimizer. Todos los ejemplos utilizan la sintaxis del editor de personalización y se pueden copiar directamente en el contenido de correo electrónico, SMS o push.
Para obtener una referencia completa de las funciones disponibles, vea Funciones de ayuda, Funciones de fecha y hora, Funciones de cadena y Funciones de matriz.
Fechas y recetas de hora date-time-recipes
Fórmula 1: mostrar la fecha actual en un formato legible recipe-current-date
Use formatDate con getCurrentZonedDateTime() para procesar la fecha de hoy en cualquier formato:
{%= formatDate(getCurrentZonedDateTime(), "MMMM dd, yyyy") %}
Salida (ejemplo): April 11, 2026
Patrones de formato comunes:
"dd/MM/yyyy"11/04/2026"MM/dd/yyyy"04/11/2026"EEEE, MMMM dd"Saturday, April 11"yyyy-MM-dd"2026-04-11y (año natural) en lugar de Y (año basado en semanas) para evitar resultados inesperados en los límites de los años. Consulte caracteres de patrón para obtener la referencia completa.Fórmula 2: Cuenta atrás hasta una fecha de vencimiento o evento recipe-countdown
Use dateDiff para calcular el número de días restantes hasta un atributo de fecha de perfil y luego renderizarlo dinámicamente:
Salida (ejemplo): Your reward points expire in 7 days. Use them before they're gone!
Fórmula 3: X días antes de una fecha de finalización dinámica recipe-days-before
Para calcular una fecha X días antes de un atributo de perfil (por ejemplo, para hacer referencia a en el contenido o en las líneas de asunto), use addDays con un desplazamiento negativo:
{%= formatDate(addDays(stringToDate(profile.subscription.endDate), -7), "MMMM dd, yyyy") %}
Salida (ejemplo): April 04, 2026 (7 días antes del 11 de abril)
Para establecer también una hora fija del día (por ejemplo, 9 a. m.), combine con setHours:
{%= formatDate(setHours(addDays(stringToDate(profile.subscription.endDate), -7), 9), "dd/MM/yyyy HH:mm") %}
Fórmula 4: mostrar el tiempo actual solo como HH:MM recipe-time-only
Use extractHours y extractMinutes para mostrar solamente la porción de tiempo, con un protector de cero a la izquierda para los minutos:
Salida (ejemplo): Your appointment is at 14:05.
Fórmula 5: Detectar fin de semana frente a día laborable recipe-weekend
Use dayOfWeek para adaptar el contenido en función del día. La función devuelve 1 (lunes) a 7 (domingo). Utilice el solo operador = (sintaxis de PQL, no ==):
dayOfWeek() es para adaptar contenido según el día. Para perfiles de enrutamiento diferentes en un recorrido según el día de la semana, use la opción integrada Condición horaria → día de la semana en la actividad Condición de recorrido. Más informaciónFórmulas de matriz y bucle array-recipes
Fórmula 6: enumerar todos los elementos de una matriz de perfiles recipe-list-items
Use {{#each}} para recorrer en iteración una matriz de perfiles y procesar cada elemento. Solo está disponible en el editor de personalización (correo electrónico, SMS, push):
Salida (ejemplo):
- Running shoes: 89€
- Water bottle: 15€
- Gym bag: 45€
{{#each}} no se admite en la actividad de condición de recorrido. Para filtrar matrices en condiciones, use funciones de administración de colecciones.Fórmula 7: mostrar los N elementos principales de una matriz por precio recipe-first-n
Use topN para ordenar y recuperar los elementos N principales por un campo numérico. Dado que topN es una función de PQL, asígnela primero a una variable con {% let %} y, a continuación, realice un bucle con {{#each}}:
topN(profile.orders, price, 3) ordena los pedidos por price en orden descendente y devuelve los 3 elementos principales, no devuelve simplemente los 3 primeros elementos en el orden de matriz original.O bien, use head para obtener solamente el elemento principal único:
{%= head(profile.purchases.recentItems).name %}
Fórmula 8: procesar contenido de forma condicional por elemento de matriz recipe-conditional-loop
Use {%#if%} dentro de {{#each}} para procesar la salida solo para los elementos coincidentes. Defina un alias de bucle con as |order| para que el evaluador de PQL pueda resolver la referencia de atributo en la condición:
this.status funciona en expresiones Handlebars, pero no lo ha resuelto el evaluador de PQL dentro de {%#if%}. El uso de un alias de bucle con nombre (p. ej. order) hace que el atributo esté disponible para los contextos Handlebars y PQL.Cadena y fórmulas de formato string-recipes
Fórmula 9: Limpiar una cadena con replaceAll y reutilizarla recipe-replaceall-reuse
replaceAll devuelve un nuevo valor (no modifica el original). Use {% let %} para almacenar el resultado y hacer referencia a él varias veces sin repetir la llamada a la función:
Salida (ejemplo):
Hi John,
Your exclusive code is: WELCOME-JOHN
Fórmula 10: Comilla doble un valor en la salida JSON recipe-json-quotes
Para incluir una comilla doble literal dentro de una cadena (por ejemplo, generar JSON para una carga útil personalizada), escríbala con una barra invertida (\"):
Salida: { "greeting": "Hello \"John\"" }
Fórmula 11: Dar formato a un componente de fecha en mayúsculas recipe-uppercase-date
Combinar formatDate con upperCase para representar nombres de mes o día en mayúsculas:
{%= upperCase(formatDate(getCurrentZonedDateTime(), "MMMM")) %}
Salida (ejemplo): APRIL
Para una cadena de fecha en mayúsculas completa:
{%= upperCase(formatDate(profile.person.birthDateTime, "EEEE MMMM dd yyyy")) %}
Salida (ejemplo): WEDNESDAY JANUARY 01 2020
Fórmulas de lógica condicional conditional-recipes
Fórmula 12 — IF/ELSEIF/ELSE en contenido personalizado recipe-if-elseif
Use {%#if%}, {%else if%} y {%else%} para la lógica condicional de varias ramas. Este patrón funciona en el contenido del correo electrónico y en los fragmentos:
Fórmula 13: visualización de atributos con seguridad nula recipe-null-safe
Utilice una reserva condicional para evitar la representación de valores vacíos cuando un atributo de perfil pueda ser nulo o faltar:
O en línea con un patrón de estilo ternario usando isEmpty:
Fórmulas de casos extremos de PQL pql-edge-cases
Fórmula 14 — Hacer referencia a una clave de atributo con guiones recipe-hyphenated-key
Si el nombre del campo de esquema XDM contiene guiones (p. ej. order-total, event-type), encapsúlelo en comillas invertidas dentro de una expresión PQL para evitar que el guión se interprete como un operador de resta:
{%= profile.events.`order-total` > 100 %}
{%= ... %}). No se aceptan en la interpolación simple de Handlebars ({{...}}). Si necesita procesar directamente un valor de campo con guiones, evaluarlo mediante una expresión PQL o almacenarlo primero en una variable usando {% let %}.Fórmula 15: Hacer referencia a un ID de evento numérico en un atributo de contexto recipe-numeric-event-id
Cuando utilice un evento de contexto de recorrido cuyo ID sea una cadena numérica (p. ej. 1697323153), ajuste el ID en comillas invertidas y use {% let %} con toDateTime() y formatDate():
Salida (ejemplo): Your appointment: 18/03/2026 14:30
Fórmula 16 — Coerción de tipo: comparar un campo de cadena con un número recipe-type-coercion
PQL tiene establecimiento inflexible de tipos. Cuando un campo de perfil se almacena como una cadena pero necesita compararlo numéricamente, conviértalo primero con stringToNumber():
{%= stringToNumber(profile.loyalty.pointsBalance) > 500 %}
Para campos booleanos almacenados como cadenas:
{%= toBool(profile.consents.email.val) = true %}