Los campos dinámicos de las matrices de carga útil fallan en las notificaciones push de AJO

En Adobe Journey Optimizer (AJO), las notificaciones push no pueden procesar campos dinámicos desde matrices de carga útil como "callerName"", aunque los mismos datos funcionen en correos electrónicos y SMS. Los campos pueden aparecer en blanco o mostrar caracteres especiales como códigos hexadecimales. Para solucionarlo, simplifique las expresiones, aplane la carga útil si es posible y asegúrese de que la codificación UTF-8 se conserva de principio a fin.

Descripción description

Entorno

Producto: Adobe Journey Optimizer (AJO)
Canales: push (iOS a través de APN, Android a través de FCM)

Problema/Síntomas

La personalización dinámica falla en los campos basados en matrices en las notificaciones push.

Pasos a seguir

  1. Cree un recorrido en AJO que almacene en déclencheur una notificación push.

  2. Pase una carga útil en la que el atributo de personalización forme parte de una matriz, por ejemplo:

    code language-none
    {
      "attribute_list_group": [
        {
          "name": "callerName",
          "value": "Bill Robert"
        }
      ]
    }
    
  3. En el título/cuerpo de la notificación push, configure una expresión personalizada:

    code language-none
    #each context.journey.events.[ eventId] ._tmobile.decision_detail_group.attribute_list_group as |container|
      {%#if contains(container.name, "callerName")%}
        container.value
      {%/if%}
    /each
    
  4. Envíe la notificación.

Observado: en dispositivos móviles, el campo aparece en blanco o muestra códigos hexadecimales para caracteres especiales. La misma expresión funciona correctamente en los canales de correo electrónico y SMS.

Causa

  • El analizador de canales push de AJO es más estricto que el correo electrónico y los SMS. Espera valores de cadena plana y tiene una compatibilidad limitada con bucles, expresiones complejas y tipos de datos que no son de cadena en el título o cuerpo.
  • Es posible que la sintaxis de creación de plantillas y ayuda (Handlebars vs. Nunjucks/Liquid) no sea igual de compatible en los campos de notificaciones push.
  • Los caracteres especiales de la carga útil se pueden codificar como hexadecimales (por ejemplo, \u2019) durante la serialización. Es posible que los servicios push y algunas aplicaciones de dispositivos no descodifican estas secuencias y, en su lugar, las muestren tal cual.
  • Los servicios push como APNS y FCM aplican la codificación UTF-8, rechazan los caracteres de control y pueden procesar incorrectamente, soltar o rechazar mensajes con secuencias mal formadas o de escape.
  • AJO solo admite cadenas escritas correctamente. Si una expresión dinámica se resuelve en un objeto, una cadena o una matriz mal formados, el mensaje push puede fallar silenciosamente o truncarse.

Resolución resolution

  • Elimine todos los espacios en blanco y las líneas nuevas de la expresión de bucle. Usar una versión compacta como esta:#each context.journey.events.[ eventId] ._tmobile.decision_detail_group.attribute_list_group as |container|{%#if contains(container.name, "callerName")%}container.value{%/if%}/each Esto resolvió el problema de los caracteres latinos en una implementación de cliente actual.
  • Si es posible, acople la carga moviendo callerName a un campo de nivel superior. A continuación, use event.callerName directamente en la plantilla push.
  • Si no se puede acoplar, asegúrese de que esté seleccionado el índice de matriz correcto y pruebe la previsualización de personalización en AJO para confirmar la renderización.
  • Asegúrese de que la codificación UTF-8 se conserva en cada fase, desde el sistema de origen hasta el procesamiento de AJO y el servicio push. Evite la doble codificación o el escape de caracteres especiales.
  • Si los caracteres especiales siguen apareciendo como hexadecimales, es probable que sea una limitación del canal push o del procesamiento de dispositivos. Actualmente, AJO no ofrece ninguna configuración para forzar la descodificación de estos caracteres en el dispositivo.

Manejo de caracteres especiales y Unicode en cargas útiles

Al pasar cadenas en cargas JWT o datos de personalización, asegúrese siempre de codificar o escapar correctamente los caracteres especiales y validar la entrada Unicode. Una codificación incorrecta puede provocar problemas de procesamiento, errores de análisis o campos en blanco en las notificaciones push.

Codificación de cadenas JSON y escape de caracteres adecuados

JSON requiere que se escapen ciertos caracteres para garantizar que la carga útil se analice correctamente:

Carácter
Secuencia de escape
Retroceso
\b
Avance de página
\f
Nueva línea
\n
Retorno de carro
\r
Tabulación
\t
Comilla doble
\"
Barra invertida
\\

Ejemplo:

{
  "message": "Hello\\nWorld! She said, \\\"Hi there!\\\"."
}

Escape en el código

  • JavaScript: JSON.stringify("Hello\nWorld! She said, \"Hi there!\".")
  • Python: json.dumps("Hello\nWorld! She said, \"Hi there!\".")

Administración Unicode

JSON admite Unicode mediante la codificación UTF-8. Los caracteres se pueden representar directamente o con la notación \uXXXX:

{
  "emoji": ":grinning:",
  "currency": "€",
  "chinese": "你好",
  "heart": "\u2764"
}

Carga útil de ejemplo con caracteres especiales:

{
  "scopes": [ "read", "write", "special:áéíóú", "quote:\"test\""] ,
  "user": "John\\nDoe"
}

Caracteres no compatibles o confidenciales en los módulos JWT

Las cargas útiles deben ser un JSON válido. Evite:

  • Comillas dobles sin escape o líneas nuevas fuera de las cadenas
  • Caracteres de control (códigos ASCII 0-31, excepto espacio en blanco)
  • No UTF-8 bytes

Consulte RFC 8259, sección 7 para reglas de codificación de caracteres JSON.

Problemas conocidos:

  • Comas, puntos y barras invertidas en los nombres de los campos
  • Análisis de saltos de comillas sin escape
  • Caracteres de control y secuencias Unicode no válidas

Prácticas recomendadas para Unicode y codificación

  • Establecer siempre el encabezado: Content-Type: application/json; charset=UTF-8

  • Utilice bibliotecas estándar para la serialización:

    • JSON.stringify() en JavaScript
    • json.dumps() en Python
  • Validar cargas útiles con herramientas como JSONLint

  • Evite el escape doble o la serialización doble

  • Pruebe con caracteres multilingües y emoji para garantizar una representación adecuada

Lectura relacionada

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f