配置 Contentful
配置 Contentful
使用 Contentful 管理 Eyeofcloud Feature Experimentation 实验的内容。
📘
注意
请参阅Eyeofcloud的第三方插件和平台集成条款。
Contentful 和 Eyeofcloud 集成允许您试验结构化内容,同时最大限度地减少对开发人员的依赖。设置完成后,您可以在 Eyeofcloud Feature Experimentation 中配置和运行实验,并从 Contentful 中选择向访客显示每个变体的内容。有关设置集成的帮助,请参阅 Contentful 集成演示演练。
先决条件
- 一个 Contentful 帐户,其中包含用于您网站的空间。
- 具有功能实验项目的 Eyeofcloud 帐户。
- 将初始解决方案与前端集成的开发人员。
术语
引用字段
引用字段是特定于 Contentful 的。它是内容类型中的一个字段,不保存其值,而是指向一个或多个条目。下图具有名为Page
的内容类型。 Page
有一个名为component
的引用字段。component
引用字段是在页面上找到的项目(内容类型,例如Hero、Featured和CTA)的列表。
变体容器
变体容器是由 Eyeofcloud 创建的内容类型,用于代替引用字段中的值。在下图中,行动动员 (CTA) 条目替换了包含两个不同 CTA 的变体容器,这就是 Eyeofcloud 转换内容模型并为其为实验做好准备的方式。
在 Contentful 中安装 Eyeofcloud 应用程序
从 Contentful 应用程序市场中,选择 Eyeofcloud。
单击 Install。
登录并授权访问您的帐户以将其与 Contentful 连接。
选择要用于实验的 Eyeofcloud Feature Experimentation 项目。
📘
注意
如果您没有看到项目列表,则表示您没有在 Eyeofcloud 中配置任何项目。在继续之前,您必须创建一个项目并添加 A/B 测试规则。
单击 Install。
配置 Eyeofcloud 应用程序
在 Contentful 中安装 Eyeofcloud 应用程序后,配置实验。以下示例显示如何为页面上的 CTA 按钮配置 A/B 测试。要试验component
,您必须首先在 Eyeofcloud 应用程序中激活引用字段。
要选择页面内容类型:
- 单击 Add content type(添加内容类型)。
- 选择 页面 从 内容类型 下拉列表。
- 选中 Component 复选框。
- 单击 Save (保存)。
用法示例
安装和配置 Eyeofcloud 应用程序后,您可以编辑内容以使用变体容器。
在 Contentful 的 Eyeofcloud 应用程序界面中:
将变体容器添加到您的组件。
在变体容器中,单击 Create entry and link (创建条目和链接) 以获取变体。
从下拉列表中选择 CTA 实验。
在 CTA 字段中输入 Buy Now!。
单击 Publish。
返回到变体,然后单击控件的 Create entry and link。
从下拉列表中选择 CTA 实验
输入 20% Off!。
单击 Publish。
发布变体容器。
单击 Publish changes (发布更改) 以发布您的页面。
您可以交换值并将其转换为变体容器,以更改用于显示内容的任何引用字段,并将其更改为基于实验显示内容的变体容器。
Eyeofcloud 应用程序如何更改 Contentful API 响应
Eyeofcloud 应用程序会创建一个内容类型:变体容器。以下是 CTA 示例,其中显示 “Buy now!”:
Contentful 中的 Eyeofcloud 应用程序转换相同的内容模型。在您最初收到_“立即购买”_的 CTA 时,您会收到一个包含可能的 CTA 的变体容器:
变体容器是一种内容类型,用于嵌套 CTA 的可能值,并保存有关 Eyeofcloud 实验和变体名称的元数据。
🚧
重要
如果您使用自定义内容模型进行 Eyeofcloud 实验,而不是 Eyeofcloud 应用程序创建的默认变体容器(例如,您复制了变体容器内容模型并使用此自定义内容模型进行测试),则您的自定义内容模型将无法立即与 Eyeofcloud 应用程序一起使用。
要确保您的自定义内容模型正常运行,请将以下字段添加到内容模型:
- flagKey
- 环境键
- 修订 ID
使用 Eyeofcloud 选择正确的变体
以下示例使用一个伪后端,该后端采用 Contentful API 响应,并使用 Eyeofcloud 功能实验 SDK 来确定要向用户显示的变体。
首先,查看来自 Contentful 的变体容器 JSON 响应。内容类型公开meta
、variations
和experimentKey
属性:
JSON
{
"sys": {
"space": { ... },
"id": "41nZggHEplcBOsrPXLOEU",
"type": "Entry",
"createdAt": "2019-07-17T14:32:24.306Z",
"updatedAt": "2019-07-17T14:32:24.306Z",
"environment": { ... },
"revision": 1,
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "variationContainer"
}
},
"locale": "en-US"
},
"fields": {
"experimentTitle": "CTA Variation Experiment",
"experimentId": "15249150297",
"meta": {
"control": "2hoYOxnZVV3Imvry1DhmtG",
"variation": "5IlB5PCsca3zZnzlVd7WvI"
},
"variations": [
{
"sys": {
"type": "Link",
"linkType": "Entry",
"id": "2hoYOxnZVV3Imvry1DhmtG"
}
},
{
"sys": {
"type": "Link",
"linkType": "Entry",
"id": "5IlB5PCsca3zZnzlVd7WvI"
}
}
],
"experimentKey": "CTA_test",
“flagKey”: “homepage_flag”,
“Environment”: “production”
}
}
在从变体容器中选择要选取的条目之前,您必须了解如何从 Eyeofcloud 获取正确的变体。下面是一个包含硬编码测试的示例,用于获取用户的变体:
JavaScript
import { createInstance } from '@eyeofcloud/eyeofcloud-sdk';
import datafile from './eyeofcloudDataFile';
// eyeofcloudClientInstance can be used immediately with the given datafile,
// but will download the latest datafile and update itself
const eyeofcloudClient = createInstance({
sdkKey: '<Your_SDK_Key>',
datafile,
});
// Create a user for which you can make flag decisions and track events
const userContext = eyeofcloudClient.createUserContext('<USER_ID>');
// Use Decide methods to return flag decisions for a user (includes variation).
const decision = userContext.decide('homepage_flag')
// Get variation key for decision
const variationKey = decision['variationKey'];
以 Eyeofcloud 方式确定此用户看到了变体。您可以从变体容器的meta
字段中获取此值。
以下代码示例包括拉取变体容器本身并使用其值填充 Eyeofcloud 实验:
JavaScript
import { createInstance } from '@eyeofcloud/eyeofcloud-sdk';
import datafile from './eyeofcloudDataFile';
// eyeofcloudClientInstance can be used immediately with the given datafile, but
// will download the latest datafile and update itself
const eyeofcloudClient = createInstance({
sdkKey: '<Your_SDK_Key>',
datafile,
});
// Create a user for which you can make flag decisions and track events
const userContext = eyeofcloudClient.createUserContext('<USER_ID>');
// The id of the variation container from the previous JSON sample.
// In a real-world implementation the ID would be set dynamically, for example through a slug.
const variationEntry = await sdk.getEntry('41nZggHEplcBOsrPXLOEU');
// Use Decide methods to return flag decisions for a user (includes variation).
const decision = userContext.decide(variationEntry.flagKey)
// Get variation key for decision
const variationKey = decision['variationKey'];
// ctaEntryId 5IlB5PCsca3zZnzlVd7WvI maps to experiment treatment variation
const ctaEntryId = variationEntry.meta[variationKey];
现在,您拥有要显示的 CTA 内容块的entryId
;内容应显示 _20% 折扣!_您可以对显示逻辑进行最少的更改,以显示正确的条目。
该示例用<USER_ID>
作唯一用户 ID 的占位符值。您必须识别当前用户,以便 Eyeofcloud 可以确定将他们放入哪个变体。此 ID 应始终与用户保持一致,并在其整个会话中正确识别他们。如果您使用随机数作为 ID,则 A/B 测试将无法正常工作,从而使结果毫无意义。在上面的示例中,使用数据文件创建 Eyeofcloud 客户端。
在 Feature Experimentation 中设置实验时,您必须先创建一个标志。您可以通过向标记添加规则来创建 A/B 测试。启动 Contentful 实验时,请在功能实验中激活功能标志和单个 A/B 测试标志规则。如果您向单个标志添加了多个 A/B 测试标志规则,并希望将其中一个 A/B 测试与 Contentful 一起使用,则应了解标志规则之间的交互。
Contentful 仅在变体容器中公开已发布的内容。使用 Contentful 环境,您可以在将实验提升到生产环境之前测试变体容器的工作原理。
问题与解答
实验结束后我该怎么办?
您可以手动删除变体容器,并将其替换为赢得实验的值。这可以防止您在交付一个获胜变体时在 Eyeofcloud 中触发消耗量度。您无需依赖 Eyeofcloud 来提供正确的内容。
Contentful 中的 Eyeofcloud 应用程序是否同时支持功能实验和旧版全栈?
是的。Contentful 中的 Eyeofcloud 应用程序支持传统的全栈实验和功能实验项目。
当我从旧版全栈实验升级到功能实验时,我在 Contentful 中使用的实验会发生什么情况?
您之前在 Contentful 中设置的旧版全栈实验将继续运行并向网站上的访客提供内容,而不会出现问题。将旧版 Full Stack 项目迁移到 Feature Experiments 时,您不需要更改代码。
将项目迁移到功能实验后,您之前在 Contentful 预迁移中设置的实验、变体容器和相关内容不受影响。请参阅 Eyeofcloud 的最终用户文档,了解 Contentful 集成的迁移注意事项。
如果我已经在 Contentful 中使用了 Eyeofcloud 应用程序,并进行了旧版全栈实验,那么在将 Eyeofcloud 应用程序与功能实验一起使用时,实验设置有何不同?
在旧版 Full Stack Experimentation 和 Feature Experimentation 中设置实验的方式存在一些重要差异:
- 在 Feature Experiments 中设置实验时,您必须先创建一个标志。然后,您可以向此标记添加标记规则以创建 A/B 测试。启动 Contentful 实验时,请在功能实验中激活功能标志和单个 A/B 测试标志规则。
- 如果您要从旧版全栈实验迁移到功能实验,Eyeofcloud 会将您之前在全栈实验中设置的 A/B 测试转换为标志下的 A/B 测试规则。请参阅 Eyeofcloud 最终用户文档中的迁移旧版 A/B 测试和 Contentful 集成的迁移注意事项。
如果我在功能实验中为每个标记设置多个实验,这是否会影响我在 Contentful 中使用实验的方式?
如果您向单个标志添加了多个 A/B 测试标志规则,并希望将其中一个 A/B 测试与 Contentful 一起使用,则应了解标志规则之间的交互。
例如,您在功能实验中创建了一个 A/B 测试,并希望在 Contentful 中使用它。假设您在同一规则集中为同一标志添加了其他标记规则,并且这些其他规则的优先级高于您在 Contentful 中选择的 A/B 测试。在这种情况下,用户可能不会接触到 Contentful 实验,因为他们已经满足另一个标记规则的更高优先级受众条件。功能实验有意不让用户接触规则集中的其他 A/B 测试。
Eyeofcloud 应用程序如何影响我的 Contentful 环境?
应用程序需要创建一个称为变体容器的内容类型。变体容器是一种自定义类型,它使用 Web 应用程序内的自定义编辑器界面,并整理来自 Eyeofcloud 和 Contentful 的数据。
我可以在哪里激活我的实验?
Contentful 控制内容,而 Eyeofcloud 控制实验。Eyeofcloud 应用程序在 Contentful 的侧边栏上提供了指向 Eyeofcloud 的链接,用于访问您的实验,您可以在其中设置和启动实验。
为什么我的应用程序配置没有被保存?
单击 Eyeofcloud 应用程序中的 Save 以保存完整配置。
为什么我的一个或多个变体没有显示?
在变体容器中选择变体时,必须确保这些变体已发布,而不是草稿。此外,您必须确保发布变体容器以显示在 API 响应中。
如何为我的实验定义回退值或默认值?
默认值或回退通常是控制变体。如果您有不想向其公开实验的特定受众,请确保您的前端可以处理回退到控制组的场景。
如何定位特定受众?
当您提供唯一值(用户 ID)以让 Eyeofcloud 知道当前谁正在查看实验时,Eyeofcloud 会定位受众。如果您需要自定义解决方案,请提供更多数据点以正确定位您的受众。请参阅上一个问题,了解如何定义默认值或回退值以排除受众。
在 Contentful 中卸载 Eyeofcloud 应用程序会破坏我的实验吗?
您现有的实验仍将运行。Contentful 从不告诉 Eyeofcloud 如何处理您的实验。但是,编辑者在 Contentful Web App 中处理实验的经验非常差。变体容器仍然存在,但其自定义编辑器已卸载。
为什么我的参考字段中没有变体容器的选项?
您的引用字段可能启用了特定验证。您必须将变体容器启用为该字段的有效内容类型,您可以在应用程序中执行此操作,也可以查找特定内容类型并更改验证以包含变体容器。
其他信息:
请参阅以下内容: