如何将 Segment.io 服务器和客户端事件连接到同一匿名用户?

2023-12-28

我正在致力于在现有 .NET 电子商务应用程序上实现 Segment 分析中心,以便与 Mixpanel 以及其他一些服务一起使用。我了解 Analytics.js 和 Segment .NET API 的 API 文档,但我很困惑如何将匿名事件连接到同一用户。

例如,假设我正在跟踪某个商品已添加到购物车。我正在服务器端进行此操作,因为有多个页面可以将商品添加到购物车,但只有一个控制器。用户无需登录即可执行此操作,并且我们已经为他们分配了一个客户 ID,因此我的代码如下所示:

Analytics.Client.Track(cartItem.CustomerId, "Added Product", new Properties() {
    { "sku", cartItem.Sku },
    { "quantity", quantity }
});

然后,假设用户查看产品类别页面。由于这是一个相对简单的操作,我目前在客户端执行此操作,因此我的代码如下所示:

analytics.track('Viewed Product Category', {
    category: '@Model.CategoryName',
    subCategory: '@Model.SubCategoryName'
});

我在 Analytics.js 规范中看到:

您无需为网站的匿名访问者调用“identify”。 我们会自动为他们分配一个anonymousId,所以只需调用page 并且轨道在没有识别的情况下仍然可以正常工作。

我的主要问题是,如何告诉 Segment 执行这两个操作的是同一个(当前是匿名)用户?作为第二个问题,即使 Track 调用包含用户 ID,我是否需要在服务器端调用之前调用“识别”?


我在 Segment 工作。搭售匿名的使用 Segment 跨客户端和服务器端调用的活动很棘手,原因如下:

  • Segment 的服务器端库是完全无状态的,并且对请求上下文来说是幼稚的,因此您需要获取相关信息并将其传递到对 Segment 的调用中。

  • 此外,在客户端上,您集成的捆绑的第三方工具将自行管理各自的匿名/会话标识符。

  • 一些服务器端集成有一个特殊的context字段作为其匿名标识符(如 GA),但大多数都没有,因此您需要编写一个包装器来抽象下面的示例情况(使用不同的值发送多个调用)anonymousIds 同时指定哪个应该发送到哪个服务)。

注:customerId如果即使在购买后仍保留其唯一标识符,该方法将有效,以便您可以always用它作为userId。但值得记住的是,如果您打算将其用作中间伪匿名标识符,则并非所有工具都能够为多个 ID 起别名,因此,如果您这样做,您可能无法在所有工具中保持一致的用户配置文件方法。

但是,在以下情况下可以有效地完成此操作:don't有事实上的userId(我想对于其他提出这个问题的人来说也是如此)实际上是一个你正在使用哪些工具的问题;对于它们中的每一个,您需要从请求中获取它们各自的匿名标识符(它们通常在 cookie 中可用)并将其附加到服务器端对 Segment 的调用中各自的字段。

如果您使用 KISSmetrics、Mixpanel 和 Google Analytics,情况可能如下:

str gaClientId, kmAnonId, mpAnonId;

HttpCookieCollection cookies = Request.Cookies;

//GA clientId is stored as part of the _ga cookie
if (cookies["_ga"] != null)
{
    string gaCookie = Request.Cookies["_ga"];
    string[] parts = gaCookie.Split('.')
    gaClientId = Strint.Format("{0}.{1}", parts[2], parts[3])
}

// KM anonId
if (cookies["km_ai"] != null)
{
    kmAnonId = Request.Cookies["km_ai"];
}

// for brevity, I'll omit retrieving mixpanel distinctId
// from their cookie. You will need to serialize the value of 
// "mp_<acesstoken>_mixpanel" to JSON and take the `distinct_id` value
// see here: http://marcmezzacca.com/integrating-mixpanel-with-asp-net-mvc-server-side-and-javascript-client-side/

Analytics.Model.Options kmCallOptions = new Options()
  .SetIntegration("all", false)
  .SetIntegration("Kissmetrics", true)
  .SetIntegration("Google Analytics", true)
  .SetContext (new Context () {
    { "ip", GetUserIP() },
    { "Google Analytics", new Dict() {
      { "clientId", gaClientId }
    } 
    },
    { "AnonymousId", kmAnonId }
  }
});

Analytics.Model.Options mpCallOptions = new Options()
  .SetIntegration("all", false)
  .SetIntegration("Mixpanel", true)
  .SetContext (new Context () {
    { "ip", GetUserIP() },
    },
    { "AnonymousId", mpAnonId }
  }
});

// Send to KM and GA
Analytics.Client.Track(null, "Added Product", new Properties() {
    { "sku", cartItem.Sku },
    { "quantity", quantity }
}, kmCallOptions);

// Send to Mixpanel
Analytics.Client.Track(null, "Added Product", new Properties() {
    { "sku", cartItem.Sku },
    { "quantity", quantity }
}, mpCallOptions);

一个简单的说明:Segment 肯定是为了解决这个令人头疼的问题,让实现这一目标变得更容易,但我们并不是让 API 复杂化以适应每个工具的多个匿名标识符,而是打算以一种完全消除这种需要的方式来解决问题。在此期间,为了避免复杂性,我们强烈建议将所有匿名跟踪保留在一个位置,无论是服务器端(使用 sessionId 或类似的匿名 ID)还是(最好)客户端。如果您想混合搭配,服务器端跟踪最好保留给具有 userId 的登录用户。

另外,请随时直接联系支持人员@[电子邮件受保护] /cdn-cgi/l/email-protection!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 Segment.io 服务器和客户端事件连接到同一匿名用户? 的相关文章

随机推荐