如果电子邮件投放有多个内容,并且想了解哪个版本对目标用户群影响最大,可以将不同版本发送给某些收件人,然后选择成功率最高的版本并发送给其他收件人。
在此用例中,我们将通过定位工作流来比较两个电子邮件投放内容。 消息和文本在两个投放中是相同的:只更改布局。
目标人口分为三个:两个测试组和剩余人口。 投放的不同版本将发送到每个测试组。 在投放之后,在收集最佳打开速率的结果之前配置5天的等待时间。 得分最高的投放的内容随后由脚本恢复,并发送给未用作测试组的人群。
请注意,将决定哪个投放最佳的标准可能会根据您的需要而更改。 可以是开放率、点击率、订阅率、反应性等。
此外,此用例中详细介绍的测试只涉及两个投放,但您可以根据需要测试任意多个版本。 只需向工作流中添加活动。
要创建A/B测试,请应用以下步骤:
您需要在活动的Targeting and Workflows选项卡中创建工作流。 它由Query活动、链接到两个Email delivery活动的Split活动、Wait活动、JavaScript code活动和Delivery活动组成。
如果尚未创建活动,请创建此区域(有关详细信息,请参阅此部分)。
转到 Targeting and Workflows 选项卡。
更改现有工作流的标签或单击Add以创建新工作流(有关详细信息,请参阅此部分)。
使用鼠标将活动拖放到工作流图中,包括Query(Target选项卡)、Split(Target选项卡)、两个Email deliveries(Deliveries选项卡)、Wait活动(Flow Control选项卡)、JavaScript code活动(Actions选项卡)和Delivery活动(Actions选项卡)。
多次-单击Query活动。
单击Edit query链接,然后选择要目标的收件人。
将Query活动链接到Split活动。
此活动允许您创建多个人群:接收投放A的投放B,以及剩余人口。 使用随机选择,您只能目标每个投放的一部分人口。
创建人口A:
多次-单击Split活动。
在现有选项卡中,将标签更改为填充A。
选择Limit the selected records选项。
单击Edit链接,选择Activate random sampling,然后单击Next。
将阈值设置为10%,然后单击Finish。
创建人口B:
单击Add为人口B创建新选项卡。
将人口限制为以前的10%。
创建剩余人口:
转到 General 选项卡。
选择 Generate complement。
更改标签以指定此填充不包括A和B,然后单击OK以关闭活动。
我们现在想创建两个投放模板。 每个模板都将在链接到Split活动的Email delivery活动中引用。 有关更多信息,请参阅此](…/…/delivery/using/about-templates.md)章节[。
转到Resources > Delivery template文件夹。
重复Email投放模板。
创建要用于投放A的内容。
重复此过程以为投放B创建模板。
下一步是配置投放。 它们的目标是前一阶段创造的三个人口:步骤2:配置填充示例。 前两个投放允许您向群体A和B发送不同的内容。第三个投放用于未接收A和B的群体。其内容将由脚本计算,并且与A或B相同,具体取决于打开率最高的群体。 我们需要为第三个投放配置等待期,以了解投放A和B的结果。这就是为什么第三个投放包括Wait活动。
转到Split活动,将用于填充A的过渡链接到工作流中已有的电子邮件投放之一。
多次-单击投放以打开它。
使用下拉列表,选择投放A的模板。
单击Continue视图投放,然后保存它。
将用于人口B的Split活动的过渡链接到第二个电子邮件投放。
打开投放,在投放B中选择模板,然后保存投放。
将用于剩余人口的过渡链接到Wait活动。
打开Wait活动并配置5天的等待期。
将Wait活动链接到JavaScript code活动。
投放内容的选择将由脚本计算。 此脚本以最高打开率恢复有关投放的信息,并将内容复制到最终投放。
以下脚本可以像在定位工作流中一样使用。 有关详细信息,请参阅实施。
// query the database to find the winner (best open rate)
var winner = xtk.queryDef.create(
<queryDef schema="nms:delivery" operation="get">
<select>
<node expr="@id"/>
<node expr="@label"/>
<node expr="[@operation-id]"/>
<node expr="[@workflow-id]"/>
</select>
<where>
<condition expr={"@FCP=0 and [@workflow-id]= " + instance.id}/>
</where>
<orderBy>
<node expr="[indicators/@estimatedRecipientOpenRatio]" sortDesc="true"/>
</orderBy>
</queryDef>).ExecuteQuery()
// create a new delivery object and initialize it by doing a copy of
// the winner delivery
var delivery = nms.delivery.create()
delivery.Duplicate("nms:delivery|" + winner.@id)
// append 'final' to the delivery label
delivery.label = winner.@label + " final"
// link the delivery to the operation to make sure it will be displayed in
// the campaign dashboard. This attribute needs to be set manually here since
// the Duplicate() method has reset it to its default value => 0
delivery.operation_id = winner.@["operation-id"]
delivery.workflow_id = winner.@["workflow-id"]
// adjust some delivery parameters to make it compatible with the
// "Prepare and start" option selected in the Delivery tab of this activity
delivery.scheduling.validationMode = "manual"
delivery.scheduling.delayed = 0
// save the delivery in database
delivery.save()
// store the new delivery Id in event variables
vars.deliveryId = delivery.id
有关脚本的详细说明,请参阅脚本的详细信息。
打开JavaScript code活动。
将脚本示例中提供的脚本复制到JavaScript code窗口中。
在Label字段中,输入脚本的名称,即
<%= vars.deliveryId %>
关闭JavaScript code活动。
保存您的工作流。
本节详细介绍了脚本的各个部分及其操作模式。
脚本的第一部分是查询。 使用queryDef命令,您可以从NmsDelivery表中恢复通过执行定位工作流创建的投放,并根据其估计的打开率对它们进行排序,然后恢复来自打开率最高的投放的信息。
// query the database to find the winner (best open rate)
var winner = xtk.queryDef.create(
<queryDef schema="nms:delivery" operation="get">
<select>
<node expr="@id"/>
<node expr="@label"/>
<node expr="[@operation-id]"/>
</select>
<where>
<condition expr={"@FCP=0 and [@workflow-id]= " + instance.id}/>
</where>
<orderBy>
<node expr="[indicators/@estimatedRecipientOpenRatio]" sortDesc="true"/>
</orderBy>
</queryDef>).ExecuteQuery()
打开率最高的投放重复。
// create a new delivery object and initialize it by doing a copy of
// the winner delivery
var delivery = nms.delivery.create()
delivery.Duplicate("nms:delivery|" + winner.@id)
修改复制投放的标签,并将单词final添加到该标签中。
// append 'final' to the delivery label
delivery.label = winner.@label + " final"
投放被复制到活动仪表板。
// link the delivery to the operation to make sure it will be displayed in
// the campaign dashboard. This attribute needs to be set manually here since
// the Duplicate() method has reset it to its default value => 0
delivery.operation_id = winner.@["operation-id"]
delivery.workflow_id = winner.@["workflow-id"]
// adjust some delivery parameters to make it compatible with the
// "Prepare and start" option selected in the Delivery tab of this activity
delivery.scheduling.validationMode = "manual"
delivery.scheduling.delayed = 0
投放保存在数据库中。
// save the delivery in database
delivery.save()
复制投放的唯一标识符存储在工作流变量中。
// store the new delivery Id in event variables
vars.deliveryId = delivery.id
以上示例允许您根据电子邮件打开率选择投放的内容。 您可以根据其他投放特定指标调整它:
[indicators/@recipientClickRatio]
,[indicators/@reactivity]
,[indicators/@refusedRatio]
[indicators/@transactionRatio]
,[indicators/@totalWebPage]
,[indicators/@optOutRatio]
,[indicators/@amount]
。创建脚本以选择A/B测试入选方后,您可以定义最终投放的参数。
将JavaScript code活动连接到其余Delivery活动。
打开Delivery活动。
取消选中Generate an outbound transition选项,以使用此活动完成工作流。
保留其他选项的默认值。
准备在过渡中指定的投放(通过Javascript Code活动定义)后,您便可以批准该并开始发送,如下一步所述。
单击Start工作流。
通过目标仪表板批准投放A和B的活动和内容。
确认投放。
等到5天期间结束,了解在投放开始结果后计算了哪些内容。
在这种情况下,选择模板B。
确定第三个投放的内容后,批准该目标和该内容。
发送测试投放后,您可以检查已将其发送到的收件人以及是否已打开它们。
要查找哪些收件人是目标投放,请通过活动仪表板打开一个,然后单击Delivery选项卡。
要了解投放是否已打开,请转至Tracking选项卡。
与其他投放比较。
在我们的例子中,投放B的公开率最高。 这意味着内容B将用于最终投放。