2015-05-21 12 views
6

Tôi đang làm việc để triển khai trung tâm phân tích Phân đoạn trên ứng dụng thương mại điện tử .NET hiện có để sử dụng với Mixpanel, trong số một số dịch vụ khác. Tôi hiểu các tài liệu API nói chung cho cả Analytics.js và API phân đoạn .NET, nhưng tôi nhầm lẫn cách kết nối các sự kiện ẩn danh với cùng một người dùng.Làm cách nào để kết nối các sự kiện phía máy chủ và máy khách Segment.io với cùng một người dùng ẩn danh?

Ví dụ: giả sử tôi đang theo dõi một mục được thêm vào giỏ hàng. Tôi đang làm phía máy chủ này, vì có nhiều trang mà các mục có thể được thêm vào giỏ hàng nhưng chỉ có một bộ điều khiển. Người dùng có thể làm điều này mà không cần đăng nhập, và chúng tôi đang gán cho họ một ID khách hàng đã có, do đó, mã của tôi trông giống như sau:

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

Sau đó, nói rằng người dùng xem một trang danh mục sản phẩm. Do đây là một hành động khá tầm thường, Tôi hiện đang làm việc đó client-side, vì vậy mã của tôi trông giống như sau:

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

tôi thấy trong spec analytics.js:

Bạn thắng' t cần phải gọi xác định cho khách truy cập ẩn danh vào trang web của bạn. Chúng tôi sẽ tự động chỉ định cho họ một anonymousId, vì vậy chỉ cần gọi trang và theo dõi sẽ vẫn hoạt động tốt mà không xác định.

Câu hỏi chính của tôi là, làm cách nào để nói với Phân đoạn rằng đó là cùng một người dùng (hiện đang ẩn danh) đã thực hiện cả hai hành động này? Là một câu hỏi phụ, tôi có cần gọi đến Identify trước cuộc gọi phía máy chủ, ngay cả khi cuộc gọi Theo dõi bao gồm một id người dùng?

+0

Sau khi đọc nhiều tài liệu hơn, tôi nghĩ câu trả lời cho câu hỏi đầu tiên của tôi có thể là vượt qua CustomerId vào giao diện người dùng và tạo một bí danh gọi phía máy khách để liên kết người dùng phiên ẩn danh với CustomerId được sử dụng cho cuộc gọi phân đoạn phía máy chủ. – Donald

Trả lời

9

Tôi làm việc tại Phân đoạn. Buộc ẩn danh hoạt động trên client và server-side cuộc gọi với Segment là khó khăn, vì một vài lý do: thư viện server-side

  • Segment của là hoàn toàn không quốc tịch và ngây thơ với bối cảnh yêu cầu, do đó, nó tùy thuộc vào bạn để lấy thông tin có liên quan và chuyển thông tin trong cuộc gọi đến Phân đoạn.

  • Hơn nữa, trên máy khách, các công cụ bên thứ ba đi kèm bạn đã tích hợp sẽ tự quản lý các số nhận dạng ẩn danh/phiên tương ứng của chúng.

  • Một số tích hợp phía máy chủ có trường đặc biệt context cho mã định danh ẩn danh của chúng, (như GA), nhưng hầu hết không, vì vậy bạn cần phải viết trình bao bọc tóm tắt trong trường hợp ví dụ bên dưới (gửi nhiều cuộc gọi với anonymousId s khác nhau trong khi quyết định sẽ được gửi đến dịch vụ nào).

Lưu ý: Cách tiếp cận customerId sẽ làm việc nếu điều đó sẽ vẫn nhận biết duy nhất của họ ngay cả sau khi mua, do đó bạn có thể luôn sử dụng đó là userId. Nhưng bạn nên nhớ rằng nếu bạn định sử dụng nó làm định danh ẩn danh giả trung gian, không phải tất cả các công cụ đều có khả năng bí danh nhiều ID, vì vậy bạn không thể giữ hồ sơ người dùng gắn kết trong tất cả các công cụ của mình nếu bạn sử dụng tiếp cận.

Nhưng thực hiện điều này một cách hiệu quả trong trường hợp khi bạn không có một de-facto userId (mà tôi tưởng tượng sẽ là trường hợp cho folks khác, những người đến @ câu hỏi này) thực sự là một vấn đề mà các công cụ bạn' tái sử dụng; cho mỗi người trong số họ, bạn sẽ cần phải lấy số nhận dạng ẩn danh tương ứng của họ ra khỏi yêu cầu (chúng thường có sẵn trong cookie) và đính kèm nó vào trường tương ứng của nó trong cuộc gọi phía máy chủ để Phân đoạn.

Dưới đây là làm thế nào mà có thể xem xét nếu bạn đang sử dụng KISSmetrics, Mixpanel và 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); 

Một lưu ý nhanh chóng: Segment chắc chắn có ý định mở hơn đau đầu này và làm cho cuộc sống dễ dàng hơn trong việc hoàn thành điều này, nhưng thay vì hơn là làm phức tạp API để chứa nhiều số nhận dạng ẩn danh cho mỗi công cụ mà chúng tôi dự định giải quyết vấn đề theo cách làm giảm hoàn toàn nhu cầu đó. Trong tạm thời, để tránh sự phức tạp, chúng tôi thực sự khuyên bạn nên giữ tất cả theo dõi ẩn danh của bạn ở một nơi, hoặc phía máy chủ (sử dụng sessionId hoặc tương tự cho anonymousId) hoặc (tốt nhất) phía máy khách. Nếu bạn muốn trộn và kết hợp, theo dõi phía máy chủ được dành riêng tốt nhất cho người dùng đã đăng nhập bằng userId.

Ngoài ra, đừng ngần ngại liên hệ trực tiếp với bộ phận hỗ trợ @ [email protected]!

+0

Điều này cực kỳ hữu ích. Cảm ơn, Chris! Chắc chắn sẽ liên hệ nếu tôi có bất kỳ câu hỏi nào khác. – Donald

+0

Điều này thực sự hữu ích! Có bản cập nhật về chiến lược cho điều này với SDK phân đoạn không? –

+0

Có thể yêu thích cập nhật về điều này – stujo

Các vấn đề liên quan