如何用AMPscript在Salesforce中记录邮件打开时间至数据扩展?
解决方案:记录邮件打开时间到数据扩展
你的问题根源在于:邮件内的AMPscript默认在发送阶段执行,所以NOW()获取的是邮件发送时间,而非用户打开时间。要实现记录打开时间,需要利用「邮件打开触发的事件」或「像素追踪触发后端逻辑」,以下是两种可靠方案:
方案一:使用触发型自动化(官方推荐)
这是Marketing Cloud中记录打开事件的标准方式,依赖系统内置的_Open数据视图:
确保你的
Limited Time Offer数据扩展已配置:SubscriberKey:文本类型,设置为主键FirstOpenTimestamp:日期时间类型
在Automation Studio创建触发型自动化:
- 触发条件选择「Email Open」,并指定目标邮件
- 添加「SQL Query」活动,编写查询语句将首次打开时间写入数据扩展:
INSERT INTO [Limited Time Offer] (SubscriberKey, FirstOpenTimestamp) SELECT o.SubscriberKey, o.EventDate AS FirstOpenTimestamp FROM _Open o LEFT JOIN [Limited Time Offer] lo ON o.SubscriberKey = lo.SubscriberKey WHERE o.JobID = 12345 -- 替换为你的邮件JobID AND o.IsUnique = 1 -- 仅记录首次打开 AND lo.FirstOpenTimestamp IS NULL -- 避免重复更新已记录的用户 - 运行自动化,后续用户打开邮件时,系统会自动触发该逻辑更新数据扩展。
方案二:使用CloudPage隐形像素(自定义场景)
适合需要灵活扩展逻辑的场景,通过邮件中的隐形图片触发CloudPage的AMPscript:
创建CloudPage,添加以下代码:
%%[ VAR @SubscriberKey, @OpenTimestamp SET @SubscriberKey = RequestParameter("sk") SET @OpenTimestamp = NOW() // 仅当SubscriberKey存在且未记录过打开时间时更新 IF NOT Empty(@SubscriberKey) THEN VAR @existingTimestamp SET @existingTimestamp = Lookup("Limited Time Offer", "FirstOpenTimestamp", "SubscriberKey", @SubscriberKey) IF Empty(@existingTimestamp) THEN UPSERTDE("Limited Time Offer", 1, "SubscriberKey", @SubscriberKey, "FirstOpenTimestamp", @OpenTimestamp) ENDIF ENDIF ]%% <!-- 1x1透明隐形像素 --> <img src="data:image/gif;base64,R0lGODlhAQABAIAAAMLCwgAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" width="1" height="1" border="0" alt="" />在邮件中插入该CloudPage的链接作为隐形图片:
<img src="https://your-cloudpage-domain.com/your-page-path?sk=%%=v(_SubscriberKey)=%%" width="1" height="1" border="0" alt="" style="display: none; visibility: hidden;" />用户打开邮件时,浏览器会加载该像素,触发CloudPage中的AMPscript,记录当前打开时间。
注意事项
- 方案一需确保目标邮件已开启「Open Tracking」(默认开启)
- 方案二可能受邮件客户端图片拦截影响,导致部分打开行为无法被记录
- 两种方案都加入了「仅记录首次打开」的逻辑,若需记录所有打开时间,可移除对应判断条件
内容的提问来源于stack exchange,提问作者Monowar Hossain
相关产品推荐
相关产品推荐

