推送实验实施方案

推送实验包含如下图所示的三个步骤。具体实施可以分为两个部分:AB实验配置和编程实现。

推送实验步骤
推送实验步骤

一、实验配置

实验配置需要先完成创建编程实验项目,创建事件,创建指标,创建受众等准备工作,具体操作步骤参见AB实验用户手册。

然后创建一个编程实验。通过菜单:实验管理->实验列表,点击“创建实验”,选择创建编程实验。

创建编程实验
创建编程实验

在实验编辑页面通过点击“变量”,设置推送模板及推送消息内容,例如:template作为推送模板,message作为消息内容,并给变量设置缺省值。

点击左侧菜单的“实验版本”,点击添加按钮,设置实验版本。

在实验编辑页面通过点击“添加规则”,选择A/B测试,创建实验规则。

编辑规则页面,指标中添加之前设置的指标,版本选择中设置待推送的版本,设置流量分配策略,并保存。

二、编程实现

编程过程中,需要用到SDKKey,flagKey,eventKey,这些参数在前面实验配置中可以找到。

SDKKey的获取通过菜单点击项目设置获取,如下图所示。

flagKey为创建实验时设置的key。

eventKey为创建事件时设置的事件key。可以触发多个事件。

2.1 调用decide获取变量值

根据已知策略获取到需要接收推送的用户列表,调用AB系统的分桶服务,并将分桶结果写入指定格式的文件中,将文件发送给推送实施方,由实施方完成推送,以下所有的代码介绍的时如何实现分桶,在对应的服务中完成该实现。

AB系统提供两种方式实现分桶:

方式1:SDK API

以下代码实现为Java中SDK的使用示例,其他语言请参考SDK API手册。

//参数设置
String sdkKey = "2_06aacd900bbd5a74";
String userId = "user123";
String flagKey = "tuisongshiyanceshi";
String eventKey = "tuisongshijian";
String eventEndpoint = "http://serverIP:serverPort/v1/eventss";
String configUrl = "https://serverIP:serverPort/datafiles/%s.json";
//SDK初始化
NotificationCenter notificationCenter = new NotificationCenter();
HttpProjectConfigManager.Builder builder;
builder = HttpProjectConfigManager.builder()
.withFormat(configUrl)
.withNotificationCenter(notificationCenter)
.withEyeofcloudHttpClient(null)
.withSdkKey(sdkKey);
Eyeofcloud eyeofcloud = EyeofcloudFactory.newDefaultInstance(builder.build(), notificationCenter);
//分桶
EyeofcloudUserContext user = eyeofcloud.createUserContext(userId);
EyeofcloudDecision decision = user.decide(flagKey);
//获取推送版本
String variationKey = decision.getVariationKey();
//获取设置的变量
EyeofcloudJSON variables = decision.getVariables();
//获取在AB系统中设置的推送模板
JSONObject template = variables.getValue("template", JSONObject.class);
//获取在AB系统中设置的推送参数
String paramter = variables.getValue("paramater", String.class);
//根据推送参数生成单个用户的推送设置
...
//循环调用以上代码,生成所有用户的推送信息并保存到指定文件中

参数中除在AB系统中设置的的参数外,包括已部署服务的访问接口,eventEndpoint 为事件接收器服务的访问地址,configUrl 为实验配置文件的获取地址,如果已将文件同步至CDN可以使用CDN地址,否则使用属性服务的地址,格式为:”https://属性服务IP:属性服务端口/文根/datafiles/%s.json”;

方式2:分桶服务接口

接口调用地址:http://分桶服务域名/文根/decide

请求类型: 如果不需传用户属性等参数,发送GET请求,如果需要设置用户属性如客群等需要使用POST方式

接口参数:GET请求不需传参,POST请求参数如下:

{
"sdkKey":"2_06aacd900bbd5a74",
"userId":"user5",
"flag":"tuisongshiyanceshi",
"fetchAttribute":true,
"attribute":{
"hoby":"read"
}
}

参数说明:

sdkkey为AB系统生成的项目配置Key

userId为用户的标识

flag为实验的Key

fetchAttribute为是否获取API或数据库中属性并合并,默认仅使用参数中attribute

attribute为用户的属性

接口返回值:

[
    {
        “variationKey”: “tuisongbanben2”,
        “flagKey”: “tuisongshiyanceshi”,
        “enabled”: true,
       “variables”: {
       “payload”: “{\”template\”:{},\”paramater\”:\”v2\”}”
       },
       “ruleKey”: “tuisongshiyanceshi_tuisongshiyanceshi”,
       “userContext”: {
            “userId”: “user123”,
            “attributes”: {}
        },
        “reasons”: []
    }
]

返回参数说明:

varitionKey当前版本

variables中payload为AB系统中的变量设置,template和paramater为在已设置的模板和参数

2.2推送

更加分桶获得的变量值,组装消息并发送。组装和发送可能有多种实现方案,比如获取分桶结果后立即组装发送,也可能将组装好的信息分发给消息队列或暂存为文件,由另外的发送系统再负责发送等等。

2.3触发转化事件

分桶事件在2.1分桶时已自动触发,其他转化事件可以在特定位置触发,触发方式包括通过SDK API和服务接口调用两种方式。

方式1:SDK API

//初始化参照分桶代码,触发推送事件

eventKey = “event_key”

Map<String, Object> tags = new HashMap<>();

tags.add(“count”, 1);

user.trackEvent(eventKey, tags);

方式2:服务接口

调用地址:http://分桶服务域名/文根/trackEvent

参数说明:url添加参数sdkKey,userId,eventKey body中添加需要保存的事件属性,例如:

{

“count”: 1

}

免费AB测试,注册即可开通使用! 立即开通