【问题标题】:Fire DTM rule after certain seconds几秒钟后触发 DTM 规则
【发布时间】:2016-11-16 14:01:37
【问题描述】:

这是我们的客户建议的场景之一,包括在一定时间后触发 DTM 规则。

场景 - 根据要求,一旦网站被加载,并且用户没有执行任何活动,则必须在 5 秒后触发页面加载规则。如果用户在 5 秒之前执行了点击或任何其他操作,则必须触发该特定跟踪规则。

关于我应该如何去做这个的任何建议。

【问题讨论】:

  • 您需要做的第一件事是提出更具体/现实的定义。 “网站已加载”对您意味着什么? DOM 准备好了吗?窗口加载?还有什么? “[..]任何其他行动”真的是什么意思?因为从技术上讲,这包括按键、鼠标移动、滚动……所有这些几乎肯定会在您将“网站已加载”定义为 5 秒之前发生。
  • 另外,您的请求说要在 5 秒规则之后的 AND 之前触发页面加载规则。那么它是哪一个?还是应该根据触发时间触发,但道具或其他东西的值不同?更具体地说明您的要求。

标签: analytics adobe-analytics


【解决方案1】:

这是一个 PoC,一个起点。您需要根据自己的定义对此进行扩展。

正如我的 cmets 关于您的问题所提到的,您需要定义“网站已加载”对您的实际意义(以一种可以实际编码的方式),并定义什么构成用户操作(也以某种方式实际上可以编码)。

作为概念证明 (PoC),我将“网站已加载”定义为 window.load 事件,将“点击或任何其他操作”定义为“点击任何链接”。

此外,您并不完全清楚您想要实际触发什么。据我所知,无论如何,您都想触发相同的事情,并且没有说明任何区别。因此,我将通过调用单个 Direct Call 规则来相应地简化这个 PoC,从而公开一条表明发生了哪种情况的消息。


第 1 部分 - 超时

页面加载规则已创建并设置为在window.load 事件上触发。发生这种情况时,会调用 setTimeout,它将在 5 秒后调用一个函数。调用该函数时,它会检查是否存在名为“fiveSecondRule”的数据元素。如果它不存在,则将其设置为值“超时”以表示它是从此代码设置的。然后调用名为“fiveSecondRule”(定义如下)的Direct Call规则。


说明

首先,转到规则 > 页面加载规则,然后点击创建新规则。为您的规则指定一个名称“五秒规则 - 超时”。

Conditions下,将Trigger rule at下拉菜单设置为“Onload”。

Javascript / 第三方 标签部分,单击 添加新脚本 以打开脚本叠加层。将其命名为“配置”。对于Type,选择“Non-Sequential Javascript”,然后选择/选中Execute Globally选项。

在代码框中添加以下代码:

window.setTimeout(
  function() {
    if (!_satellite.getVar('fiveSecondRule')) {
      _satellite.setVar('fiveSecondRule','timeout');
      _satellite.track('fiveSecondRule');
    }
  }
  ,5000
);

单击保存代码,然后单击保存规则以保存规则。


扩展 PoC

如果您对“网站已加载”的定义不是window.load 事件,这就是您需要更改的内容。例如,您可以改为将其定义为 DOM Ready,在这种情况下,您可以简单地将 Trigger rule at 更改为“DOM Ready”。但是,如果您的定义更复杂(例如,等待来自您网站框架的一些回调),那么您需要将其放入 Direct Call 规则中并自己显式调用它。

注意:有一个Event Based Rule为“time passedEvent Type,您可以设置为5秒后触发.作为 PoC 的替代方案,您可以这样做,并添加类似于下面 第 2 部分 中所述的规则条件(而不是上面的代码)。 DTM 文档没有详细说明计时器何时实际启动或它实际上如何跟踪此事件的时间。

我并没有真正花太多时间尝试对核心 DTM 库进行逆向工程,但从 5 秒的时间来看,我可以告诉它,在“页面顶部”代码执行期间的某个时间“注册”这种类型的事件(放置 DTM Header 脚本的地方),它使用 cookie/localstorage 和 timeInterval 不断轮询它。

因此,如果这一切都符合您对 5 秒规则的定义,那么创建基于事件的 5 秒规则的代码会少一些。但是我选择了上面的页面加载规则和setTimeout 方法来为您提供更大的灵活性作为基线,如果您的定义更复杂。


第 2 部分 - 用户操作

基于事件的规则设置为在用户点击链接时触发。当规则触发时,条件代码检查是否设置了名为“fiveSecondRule”的数据元素。如果不是,则设置“linkClick”值以表示单击了链接。然后调用名为“fiveSecondRule”的Direct Call规则。


说明

转到规则 > 基于事件的规则,然后点击创建新规则。为您的规则指定一个名称“五秒规则 - 链接点击次数”。

条件 > 事件 > 事件类型下,选择“click”(应该是默认选项)。

然后对于标签 > 元素标签或选择器,添加“a”(无引号)。

注意:这超出了本文的范围,但根据您的网站/页面上实现的其他代码,您可能需要更改本节中的一些其他设置.

接下来,在Rule Conditions > Criteria下,选择“Data> Custom”并点击Add Criteria强>。在自定义代码框中,添加以下代码:

if (!_satellite.getVar('fiveSecondRule')) {
  _satellite.setVar('fiveSecondRule','linkClick');
  _satellite.track('fiveSecondRule');
}
return true;

点击保存规则保存规则。


扩展 PoC

如前所述,这仅涵盖点击链接。听起来您对“行动”的定义不止于此。一旦定义了用户操作的构成要素,请相应地创建更多基于事件的规则


第 3 部分 - 触发器

直接调用规则设置为充当“触发器”。第 1 部分和第 2 部分中的所有规则最终都将调用此规则,当用户在 5 秒前或 5 秒过去后执行操作时,您可以在此处放置要执行的代码。


说明

转到规则 > 直接呼叫规则并点击创建新规则。为您的规则指定一个名称“五秒规则 - 触发器”。在Conditions > String下,添加“fiveSecondRule”(无引号)。

从这里,您可以触发您已实施的任何工具,或添加您想要触发的任何第 3 方标签。您可以在工具字段中使用%fiveSecondRule% 语法,它将有一个值表示它是如何被调用的(例如,“linkClick”或“timeout”,如上所示)。对于 javascript 语法(在 js 代码框中),您可以使用 _satellite.getVar('fiveSecondRule') 来获取值。


扩展 PoC

我认为您可能希望触发单独的直接呼叫规则,具体取决于它是在 5 秒结束之前还是之后触发。但这实际上取决于您最终希望触发什么,而您尚未澄清。

但如果是这样,则将此直接调用规则重命名为“五秒规则 - 之前”,对于 条件,将其更改为“beforeFiveSecondRule”(不加引号)。此外,对于您在 第 2 部分中制定的所有规则,返回并将 _satellite.track() 调用参数更改为此。

然后,创建另一个名为“Five Second Rule - After”的直接调用规则,并为 Condition 输入“afterFiveSecondRule”(无引号)。另外,返回并将第 1 部分中的 _satellite.track() 参数更改为此。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多