有效负载数组中的动态字段在AJO推送通知中失败

在Adobe Journey Optimizer (AJO)中,推送通知无法呈现有效负载数组(如“callerName"”)中的动态字段,即使相同的数据在电子邮件和短信中也可正常使用。 字段可能显示为空白或以十六进制代码显示特殊字符。 要解决此问题,请简化表达式,尽可能扁平化有效负载,并确保端到端地保留UTF-8编码。

描述 description

环境

产品: Adobe Journey Optimizer (AJO)
渠道:推送(通过APN的iOS、通过FCM的Android)

问题/症状

推送通知中基于数组的字段的动态个性化失败。

重现问题的步骤

  1. 在AJO中创建触发推送通知的历程。

  2. 传递一个有效负载,其中个性化属性是数组的一部分,例如:

    code language-none
    {
      "attribute_list_group": [
        {
          "name": "callerName",
          "value": "Bill Robert"
        }
      ]
    }
    
  3. 在推送通知标题/正文中,配置个性化表达式:

    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. 发送通知。

注意:在移动设备上,字段显示为空白或显示特殊字符的十六进制代码。 相同的表达式在电子邮件和短信渠道中可正常使用。

原因

  • AJO的推送渠道解析器比电子邮件和短信更严格。 它需要纯字符串值,并且对标题或正文中的循环、复杂表达式和非字符串数据类型支持有限。
  • 在推送通知字段中可能不支持模板和帮助程序语法(Handlebars与Nunjucks/Liquid)。
  • 在序列化期间,有效负载中的特殊字符可能会编码为十六进制(例如,\u2019)。 推送服务和某些设备应用程序可能不会解码这些序列,而是按原样显示它们。
  • APN和FCM等推送服务会强制UTF-8编码、拒绝控制字符,并且可能会错误呈现、丢弃或拒绝序列格式不正确或转义的消息。
  • AJO仅支持正确键入的字符串。 如果动态表达式解析为对象、格式错误的字符串或数组,则推送消息可能会以静默方式失败或被截断。

解决方法 resolution

  • 从循环表达式中删除所有空格和新行。 使用压缩版本,如下所示:#each context.journey.events.[ eventId] ._tmobile.decision_detail_group.attribute_list_group as |container|{%#if contains(container.name, "callerName")%}container.value{%/if%}/each 这解决了当前客户实施中的拉丁字符问题。
  • 如果可能,请将callerName移至顶级字段以扁平化有效负载。 然后直接在推送模板中使用event.callerName
  • 如果无法使用拼合,请确保选择了正确的数组索引,并在AJO中测试个性化预览以确认渲染。
  • 确保在每个阶段都保留UTF-8编码 — 从源系统到AJO处理再到推送服务。 避免双重编码或转义特殊字符。
  • 如果特殊字符仍显示为十六进制,则可能是推送渠道或设备渲染的限制。 AJO当前不提供用于在设备上强制解码这些字符的设置。

相关阅读

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