Я работаю на сегменте. Связывание анонимной деятельности по клиентским и серверным вызовам с сегментом является сложным, по нескольким причинам: серверные библиотеки
сегмента полностью без гражданства и наивные в контекст запроса, так что до вас захватить соответствующую информацию и передать ее в ходе вызова Сегмента.
Кроме того, на клиенте интегрированные сторонние инструменты, с которыми вы интегрировали, будут самостоятельно управлять своими анонимными/сеансовыми идентификаторами.
Некоторые интеграции на стороне сервера имеют специальное поле 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]!
После немного более подробного ознакомления с документами, я думаю, что ответ на мой первый вопрос, вероятно, заключается в том, чтобы передать CustomerId во внешний интерфейс и сделать клиентскую клиентскую службу псевдонимов, чтобы связать пользователя анонимного сеанса с CustomerId, используемым для серверные сегментные вызовы. – Donald