2015-05-21 3 views
6

Я работаю над внедрением концентратора аналитики сегментов в существующем приложении электронной коммерции .NET для использования с Mixpanel среди нескольких других сервисов. Я понимаю документы API в целом как для Analytics.js, так и для Segment .NET API, но я смущен тем, как подключать анонимные события к одному пользователю.Как подключить события сервера Segment.io и клиентской стороны к одному и тому же анонимному пользователю?

Например, я отслеживаю, что товар добавлен в корзину. Я делаю это на стороне сервера, так как есть несколько страниц, которые могут быть добавлены в корзину, но только один контроллер. Пользователь может сделать это без регистрации, и мы присваиваем им идентификатор клиента уже, так что мой код выглядит примерно так:

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 спецификации:

Вы выиграли» t нужно вызвать идентификацию анонимных посетителей вашего сайта. Мы будем автоматически назначать им anonymousId, поэтому просто вызывающая страница и трек по-прежнему будут работать отлично, без идентификации.

Мой главный вопрос: как сообщить сегменту, что он был тем же (в настоящее время анонимным) пользователем, который выполнял оба этих действия? В качестве второстепенного вопроса мне нужно вызвать Identify перед вызовом на стороне сервера, даже если вызов Track включает идентификатор пользователя?

+0

После немного более подробного ознакомления с документами, я думаю, что ответ на мой первый вопрос, вероятно, заключается в том, чтобы передать CustomerId во внешний интерфейс и сделать клиентскую клиентскую службу псевдонимов, чтобы связать пользователя анонимного сеанса с CustomerId, используемым для серверные сегментные вызовы. – Donald

ответ

9

Я работаю на сегменте. Связывание анонимной деятельности по клиентским и серверным вызовам с сегментом является сложным, по нескольким причинам: серверные библиотеки

  • сегмента полностью без гражданства и наивные в контекст запроса, так что до вас захватить соответствующую информацию и передать ее в ходе вызова Сегмента.

  • Кроме того, на клиенте интегрированные сторонние инструменты, с которыми вы интегрировали, будут самостоятельно управлять своими анонимными/сеансовыми идентификаторами.

  • Некоторые интеграции на стороне сервера имеют специальное поле context для их анонимного идентификатора (например, GA), но большинство из них этого не делают, поэтому вам нужно написать обертку, которая абстрагируется по приведенному ниже примеру (отправка нескольких вызовов с разными anonymousId с, при этом диктуется, что должно быть отправлено на какой сервис).

Примечание: customerId подход будет работать, если это останется их уникальный идентификатор, даже после покупки, так что вы можете всегда использовать его в качестве userId. Но стоит иметь в виду, если вы намереваетесь использовать его в качестве псевдо-анонимного идентификатора посредника, чтобы не все инструменты имели возможность псевдонимов нескольких идентификаторов, поэтому вам не удастся сохранить сплоченные профили пользователей во всех ваших инструментах, если вы примете это подход.

Но достичь этого эффективно в том случае, когда вы не есть де-факто userId (который я предполагаю, будет иметь место и для других людей, которые приходят @ этот вопрос) действительно вопрос, какие инструменты вы» повторное использование; для каждого из них вам нужно будет удалить свой анонимный идентификатор из запроса (обычно они доступны в виде куки-файлов) и прикрепить его к соответствующему полю в вызове на стороне сервера на сегмент.

Вот как это может выглядеть, если вы используете 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); 

Одно быстрое примечание: Сегмент определенно намеревается проложить по этой головной боли и сделать жизнь проще в реализации, но скорее чем усложнять API для размещения нескольких анонимных идентификаторов для каждого инструмента, который мы намереваемся решить проблему таким образом, чтобы полностью устранить необходимость в этом. Тем временем, чтобы избежать сложностей, мы действительно рекомендуем сохранять все ваши анонимные отслеживания в одном месте, либо на стороне сервера (с использованием sessionId или т.п. для анонимной), либо (предпочтительно) на стороне клиента. Если вы хотите смешивать и сопоставлять, отслеживание на стороне сервера лучше всего зарезервировано для зарегистрированных пользователей с userId.

Кроме того, не стесняйтесь обращаться в службу поддержки напрямую @ [email protected]!

+0

Это очень полезно. Спасибо, Крис! Определенно протянусь, если у меня возникнут другие вопросы. – Donald

+0

Это действительно полезно! Есть ли обновление стратегий для этого с помощью сегмента SDK? –

+0

Да, понравилось бы обновление по этому поводу – stujo

Смежные вопросы