有效负载数组中的动态字段在AJO推送通知中失败
在Adobe Journey Optimizer (AJO)中,推送通知无法呈现有效负载数组(如“callerName"
”)中的动态字段,即使相同的数据在电子邮件和短信中也可正常使用。 字段可能显示为空白或以十六进制代码显示特殊字符。 要解决此问题,请简化表达式,尽可能扁平化有效负载,并确保端到端地保留UTF-8编码。
描述 description
环境
产品: Adobe Journey Optimizer (AJO)
渠道:推送(通过APN的iOS、通过FCM的Android)
问题/症状
推送通知中基于数组的字段的动态个性化失败。
重现问题的步骤
-
在AJO中创建触发推送通知的历程。
-
传递一个有效负载,其中个性化属性是数组的一部分,例如:
code language-none { "attribute_list_group": [ { "name": "callerName", "value": "Bill Robert" } ] }
-
在推送通知标题/正文中,配置个性化表达式:
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
-
发送通知。
注意:在移动设备上,字段显示为空白或显示特殊字符的十六进制代码。 相同的表达式在电子邮件和短信渠道中可正常使用。
原因
- 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当前不提供用于在设备上强制解码这些字符的设置。
3d58f420-19b5-47a0-a122-5c9dab55ec7f