Dynamische Felder aus Payload-Arrays schlagen in AJO-Push-Benachrichtigungen fehl

In Adobe Journey Optimizer (AJO) können Push-Benachrichtigungen keine dynamischen Felder aus Payload-Arrays wie "callerName"" rendern, obwohl dieselben Daten in E-Mail und SMS funktionieren. Felder können leer sein oder Sonderzeichen als Hexadezimalcodes anzeigen. Um dies zu beheben, vereinfachen Sie Ihre Ausdrücke, reduzieren Sie die Payload nach Möglichkeit und stellen Sie sicher, dass die UTF-8-Codierung End-to-End beibehalten wird.

Beschreibung description

Umgebung

Produkt: Adobe Journey Optimizer (AJO)
Kanäle: Push (iOS über APNs, Android über FCM)

Problem/Symptome

Die dynamische Personalisierung schlägt für Array-basierte Felder in Push-Benachrichtigungen fehl.

Schritte zur Reproduktion

  1. Erstellen Sie eine Journey in AJO, die eine Push-Benachrichtigung Trigger.

  2. Übergeben Sie eine Payload, bei der das Personalisierungsattribut Teil eines Arrays ist, z. B.:

    code language-none
    {
      "attribute_list_group": [
        {
          "name": "callerName",
          "value": "Bill Robert"
        }
      ]
    }
    
  3. Konfigurieren Sie im Titel/Text der Push-Benachrichtigung einen Personalisierungsausdruck:

    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. Senden Sie die Benachrichtigung.

Beobachtet: Auf Mobilgeräten wird das Feld leer angezeigt oder es werden Hexadezimalcodes für Sonderzeichen angezeigt. Derselbe Ausdruck funktioniert in E-Mail- und SMS-Kanälen ordnungsgemäß.

Ursache

  • Der Push-Kanal-Parser von AJO ist strenger als E-Mail und SMS. Sie erwartet flache Zeichenfolgenwerte und verfügt über eine begrenzte Unterstützung für Schleifen, komplexe Ausdrücke und Nicht-Zeichenfolgen-Datentypen im Titel oder Hauptteil.
  • Die Vorlagen- und Helper-Syntax (Handlebars vs. Nunjucks/Liquid) wird in Push-Benachrichtigungsfeldern möglicherweise nicht gleichermaßen unterstützt.
  • Sonderzeichen in der Payload können während der Serialisierung als Hexadezimalzeichen codiert werden (z. B. \u2019). Push-Services und einige Geräte-Apps decodieren diese Sequenzen möglicherweise nicht und zeigen sie stattdessen unverändert an.
  • Push-Services wie APNs und FCM erzwingen UTF-8-Kodierung, lehnen Steuerzeichen ab und können Nachrichten mit fehlerhaften oder mit Escape-Zeichen versehenen Sequenzen falsch rendern, löschen oder ablehnen.
  • AJO unterstützt nur ordnungsgemäß typisierte Zeichenfolgen. Wenn ein dynamischer Ausdruck zu einem Objekt, einer falsch formatierten Zeichenfolge oder einem Array aufgelöst wird, kann die Push-Nachricht im Hintergrund fehlschlagen oder abgeschnitten werden.

Auflösung resolution

  • Entfernen Sie alle Leerzeichen und Zeilenumbrüche aus Ihrem Schleifenausdruck. Verwenden Sie eine kompakte Version wie die folgende:#each context.journey.events.[ eventId] ._tmobile.decision_detail_group.attribute_list_group as |container|{%#if contains(container.name, "callerName")%}container.value{%/if%}/each Dadurch wurde das Problem für lateinische Zeichen in einer aktuellen Kundenimplementierung behoben.
  • Reduzieren Sie die Payload nach Möglichkeit, indem Sie callerName in ein Feld der obersten Ebene verschieben. Verwenden Sie dann event.callerName direkt in der Push-Vorlage.
  • Wenn das Reduzieren nicht möglich ist, stellen Sie sicher, dass der richtige Array-Index ausgewählt ist, und testen Sie die Personalisierungsvorschau in AJO, um das Rendering zu bestätigen.
  • Stellen Sie sicher, dass die UTF-8-Codierung in jeder Phase erhalten bleibt - vom Quellsystem über die AJO-Verarbeitung bis zum Push-Service. Vermeiden Sie die Doppelkodierung oder das Maskieren von Sonderzeichen.
  • Wenn Sonderzeichen weiterhin als Hexadezimalzeichen angezeigt werden, ist dies wahrscheinlich eine Einschränkung des Push-Kanal- oder Geräte-Renderings. AJO bietet derzeit keine Einstellung, um die Decodierung dieser Zeichen auf dem Gerät zu erzwingen.

Umgang mit Sonderzeichen und Unicode in Payloads

Achten Sie beim Übergeben von Zeichenfolgen in JWT-Payloads oder Personalisierungsdaten immer darauf, dass Sonderzeichen ordnungsgemäß codiert oder mit Escape-Zeichen versehen sind, und validieren Sie die Unicode-Eingabe. Unsachgemäße Kodierung kann zu Rendering-Problemen, Parsing-Fehlern oder leeren Feldern in Push-Benachrichtigungen führen.

Korrekte JSON-Zeichenkodierung und Escape-Zeichen

Für JSON müssen bestimmte Zeichen maskiert werden, um sicherzustellen, dass die Payload korrekt geparst wird:

Zeichen
Escapesequenz
Rücktaste
\b
Formularvorschub
\f
Zeilenumbruch
\n
Wagenrücklauf
\r
Tabulatortaste
\t
Doppeltes Anführungszeichen
\"
Umgekehrter Schrägstrich
\\

Beispiel:

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

Escaping im Code

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

Unicode-Handhabung

JSON unterstützt Unicode über UTF-8-Codierung. Zeichen können direkt oder mit \uXXXX Notation dargestellt werden:

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

Beispiel-Payload mit Sonderzeichen:

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

Nicht unterstützte oder vertrauliche Zeichen in JWT-Modulen

Payloads müssen gültige JSON sein. Vermeiden Sie:

  • Doppelte Anführungszeichen ohne Escape-Zeichen oder Zeilenumbrüche außerhalb von Zeichenfolgen
  • Steuerzeichen (ASCII-Codes 0-31, außer Leerzeichen)
  • Nicht-UTF-8 Bytes

Siehe RFC 8259 Abschnitt 7 für JSON-Zeichenkodierungsregeln.

Bekannte Probleme:

  • Kommas, Punkte und umgekehrte Schrägstriche in Feldnamen
  • Analyse von nicht escaped Anführungszeichen
  • Steuerzeichen und ungültige Unicode-Sequenzen

Best Practices für Unicode und Kodierung

  • Legen Sie immer die Kopfzeile fest: Content-Type: application/json; charset=UTF-8

  • Verwenden von Standardbibliotheken für die Serialisierung:

    • JSON.stringify() in JavaScript
    • json.dumps() in Python
  • Validieren von Payloads mit Tools wie JSONLint

  • Doppeltes Maskieren oder doppeltes Serialisieren vermeiden

  • Testen mit mehrsprachigen und Emoji-Zeichen, um ein korrektes Rendering sicherzustellen

Verwandtes Lesen

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