如何将 Segment.io 服务器和客户端事件连接到同一个匿名用户?
How do I connect Segment.io server and client side events to the same anonymous user?
我正在努力在现有的 .NET 电子商务应用程序上实施细分分析中心,以便与 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 规范中看到:
You won’t need to call identify for anonymous visitors to your site.
We’ll automatically assign them an anonymousId, so just calling page
and track will still work just fine without identify.
我的主要问题是,我如何告诉 Segment 执行这两项操作的是同一个(当前是匿名的)用户?作为次要问题,我是否需要在服务器端调用之前调用 Identify,即使 Track 调用包含用户 ID?
我在 Segment 工作。使用 Segment 在客户端和服务器端调用之间绑定 anonymous activity 很棘手,原因如下:
Segment 的服务器端库是完全无状态的,并且对请求上下文是天真的,因此您需要获取相关信息并在对 Segment 的调用中传递它。
此外,在客户端上,您集成的捆绑的第 3 方工具将自行管理它们各自的 anonymous/session 标识符。
一些服务器端集成有一个特殊的 context
字段用于它们的匿名标识符(如 GA),但大多数没有,因此您需要编写一个抽象的包装器在下面的示例案例中(使用不同的 anonymousId
发送多个调用,同时指示应将哪个调用发送到哪个服务)。
注意:customerId
方法将有效,如果即使在购买后它仍将保留其唯一标识符,这样您就可以始终 将其用作 userId
.但如果您打算将其用作中间伪匿名标识符,则值得牢记,并非所有工具都能够为多个 ID 设置别名,因此如果您采用这种方式,您可能无法在所有工具中保持一致的用户配置文件方法。
但是在你没有事实上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 或类似的 anonymousId)或(最好)客户端。如果您想混合搭配,服务器端跟踪最好保留给具有 userId 的登录用户。
此外,不要犹豫,直接联系支持@朋友@segment.com!
我正在努力在现有的 .NET 电子商务应用程序上实施细分分析中心,以便与 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 规范中看到:
You won’t need to call identify for anonymous visitors to your site. We’ll automatically assign them an anonymousId, so just calling page and track will still work just fine without identify.
我的主要问题是,我如何告诉 Segment 执行这两项操作的是同一个(当前是匿名的)用户?作为次要问题,我是否需要在服务器端调用之前调用 Identify,即使 Track 调用包含用户 ID?
我在 Segment 工作。使用 Segment 在客户端和服务器端调用之间绑定 anonymous activity 很棘手,原因如下:
Segment 的服务器端库是完全无状态的,并且对请求上下文是天真的,因此您需要获取相关信息并在对 Segment 的调用中传递它。
此外,在客户端上,您集成的捆绑的第 3 方工具将自行管理它们各自的 anonymous/session 标识符。
一些服务器端集成有一个特殊的
context
字段用于它们的匿名标识符(如 GA),但大多数没有,因此您需要编写一个抽象的包装器在下面的示例案例中(使用不同的anonymousId
发送多个调用,同时指示应将哪个调用发送到哪个服务)。
注意:customerId
方法将有效,如果即使在购买后它仍将保留其唯一标识符,这样您就可以始终 将其用作 userId
.但如果您打算将其用作中间伪匿名标识符,则值得牢记,并非所有工具都能够为多个 ID 设置别名,因此如果您采用这种方式,您可能无法在所有工具中保持一致的用户配置文件方法。
但是在你没有事实上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 或类似的 anonymousId)或(最好)客户端。如果您想混合搭配,服务器端跟踪最好保留给具有 userId 的登录用户。
此外,不要犹豫,直接联系支持@朋友@segment.com!