我正致力于在现有的.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规范中看到了:
您无需为您网站的匿名访问者打电话。 我们会自动为它们分配一个anonymousId,所以只需要调用页面 并且在没有识别的情况下,轨道仍然可以正常工作。
我的主要问题是,如何告诉Segment它是执行这两个操作的同一个(当前是匿名的)用户?作为次要问题,我是否需要在服务器端呼叫之前呼叫识别,即使Track呼叫包含用户ID?
答案 0 :(得分:11)
我在Segment工作。使用Segment跨客户端和服务器端调用绑定匿名活动很棘手,原因如下:
Segment的服务器端库完全没有状态且对请求上下文很幼稚,因此您可以在调用Segment时获取相关信息并将其传递。
此外,在客户端上,您集成的捆绑第三方工具将自行管理其各自的匿名/会话标识符。
某些服务器端集成有一个特殊的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的登录用户保留服务器端跟踪。
此外,请不要犹豫直接联系支持@ friends@segment.com!