2

对于某些背景,我们正在与我们的电子商务网站上的https://segment.com/docs/集成。

我们的网站目前有 3 个地区(美国、加拿大和英国)。

该区域由不同的 url 路径标识,(例如 /*(美国)、/ca/*(加拿大)、/uk/*(英国))。

locale我们根据您访问的区域定义一个对象,例如

// A user who visits /uk/* will have this locale
const locale = {
    region: 'UK',
    currency: 'GBP', // one day this may be configurable
    language: window.navigator.language // en, en-US, en-GB etc.
}

// A user who visits /* will have this locale
const locale = {
    region: 'US',
    currency: 'USD', // one day this may be configurable
    language: window.navigator.language // en, en-US, en-GB etc.
}

我们希望将我们的locale数据与细分 API 调用(跟踪、页面、标识等)相关联


我可以看到 3 个潜在的选择:

  1. region,currencylanguage* 添加到context对象。例如

    window.analytics.track('Button Clicked', {}, {
      context: {
        region: locale.region,
        currency: locale.currency,
        language: locale.language
      }
    });
    
    • 这将允许所有 API 调用(跟踪、页面、标识等)将调用与当前语言环境相关联。
    • 我希望这应该通过 analytics.js 中间件来完成?
    • *我知道上下文规范已经定义了locale相当于我们的locale.language(例如 en-US),所以我们可以设置context.locale: locale.language而不是context.language: locale.language.

我对上述内容的主要担忧是我不能 100% 确定将我们自己的数据添加到context对象中是可以接受的,文档只是说“因此忽略规范之外的属性”,但是我希望我们的数据仓库仍然可以利用这些额外的特性?

因此,另一种方法可能是将其视为用户trait

  1. identify使用我们的语言环境在页面加载时匿名调用,traits例如
    window.analytics.identify({
        region: locale.region,
        currency: locale.currency,
        language: locale.language
    });
    
    • 对此进行测试后,似乎识别的特征不会与后续事件(轨道、页面等)一起发送
      • 因此,我认为我们必须另外通过一些中间件来传递我们的locale数据以context.traits进行所有其他调用?

然而,我对第二种方法的担忧是,鉴于我们的locale数据是暂时的(用户可以随时导航到不同的区域/它不会针对数据库中的用户记录存储),它可能不属于用户的“特征” '?

  1. 为每个区域定义一个单独的 segment.io source,例如
    window.analytics.load("REGION_SPECIFIC_WRITE_KEY");
    
    • 我不确定这是否安全,因为他们都住在同一个域上?

有推荐的设计吗?

4

0 回答 0