主被动事件是基于「用户」的主动触发和被动受影响的行为描述。在一些业务场景中,用户既有可能是行为的发起者,也有可能是行为的影响者。行为发起者所触发产生的行为称为「主动事件」,行为影响者所受影响的行为称为「被动事件」,当主动事件和被动事件存在对应关系、成对出现时称为「关系事件」。
场景1: 用户A关注了用户B。
用户A是关注行为的发起者,触发了一个主动事件,用户B是关注行为的影响者,被动接受了一个事件。
主动事件:用户A关注了用户B
被动事件:用户B被用户A关注
主动事件和被动事件存在对应关系,并在这个场景中成对出现,于是产生了「关系事件」。
场景2: 用户A给用户B发送了一条消息。
主动事件:用户A发送1条消息
被动事件:用户B接收1条消息
场景3: 用户A给用户B发了一个红包
主动事件:用户A发了1个红包
被动事件:用户B收到一个红包
更多场景 :喜欢与被喜欢、评论与被评论、投诉与被投诉、分享内容与接收内容...
场景描述: 系统给用户推送通知,客服解决投诉过程中给用户推送了一个优惠券,程序触发了给用户发送了消息。
因为主被动事件是基于「用户」的,所以这种场景下不存在主动事件,主动触发行为的不是用户;
用户是行为的接受者,被动受到影响,只有被动事件。
被动事件:用户收到通知/用户收到优惠券/用户收到推送消息
关系事件
事件ID | 事件名称 | 用户ID | 目标对象ID | 发起对象ID | 是否被动 | 是否关系 | 语义 |
---|---|---|---|---|---|---|---|
1 | subscribe | A | B | null | 否 | 是 | A关注B |
2 | $inactive_subscribe | B | null | A | 是 | 是 | B被A关注 |
3 | subscribe | B | A | null | 否 | 否 | B关注A |
当我们想统计回关的比例时,需用到被动事件,构建漏斗如下:
第一步:$inactive_subscribe,关联发起对象ID
第二步:subscribe,关联目标对象ID(由于目前不支持list类型的关联属性,本场景下需要用户自己上报一个目标对象的ID)
其他条件:按用户ID分组。
关系事件和被动事件比主动事件多出一些预置属性用来加以区分,主要区别见下表:
事件名称 | 预置属性 | 展示名 | 预置属性类型 | 取值说明 | |
---|---|---|---|---|---|
主动事件(关系) | event_name | $target_uuid_list | 被动事件UUID | list | 手动上报用户ID |
$inline | 是否为关系事件 | string | true,及其它任意值 | ||
被动事件(关系) | $inactive_{event_name} | $inactive | 是否为被动事件 | string | true,及其它任意值 |
$inline | 是否为关系事件 | string | true,及其它任意值 | ||
$source_uuid | 主动事件UUID | string | 对应的关联事件的 UUID | ||
被动事件(手动) | 自定义 | $inactive | 是否为被动事件 | string | true,及其它任意值 |
用户通过在主动事件中标记当前事件为关系事件($inline 为 "true")时,系统会自动生成对应的被动事件。系统生成的被动事件会额外设置一个预置属性: "$source_uuid", 为主动事件触发用户的 uuid。
被动事件的属性 $inactive 的值为 true,注意目前这个属性的数据类型为 string,而不是 boolean。
上报关系事件时,系统会自动生成被动事件。系统自动生成的被动事件不仅仅会拥有上述预置属性,还会包含 $inline = "true" 和 $source_uuid(值为对应主动事件 uuid)这两个属性,同时事件名称中还会自动添加“$inactive_”前缀。
被动事件在计算事件量消耗时默认会被计算在内,但在计算MAU和DAU时不会被计算在内。被禁用的被动事件一样不会产生消耗。
是的。$target_uuid_list 是 list 属性,支持传入多个 uuid。系统会自动为每个受该事件影响的用户生成一个对应的被动事件。
我们提供用户触发主动事件时自动生成对应的被动事件的方法。
为区分主被动事件,我们新增了事件公共属性 $inactive,当 $inactive 为 true 时对应的事件是被动事件。
属性名称 | 数据类型 | 取值范围 |
---|---|---|
$inactive | string | "true" 被动事件 |
示例代码:"关联事件"
new ActionButton ( "关联事件", new Action () { @Override public void doAction () { JSONObject param = new JSONObject (); try { param.put ( "video_id", Generator.getRandomNum ( 0, 10000000 ) ); param.put ( "category", "主动被动事件" ); param.put ( "author_id", Generator.getRandomNum ( 0, 10000 ) ); param.put ( "$inline", "true" ); JSONArray uuid_list = new JSONArray (); for (int i = 0; i < Generator.getRandomNum ( 0, 10 ); i++) { uuid_list.put ( Generator.getRandomNum ( 10000, 99999 ) ); } param.put ( "$target_uuid_list", uuid_list ); } catch (JSONException e) { e.printStackTrace (); } AppLog.onEventV3 ( "like", param ); } } )
示例代码: "被动事件"
new ActionButton ( "被动事件", new Action () { @Override public void doAction () { JSONObject param = new JSONObject (); try { param.put ( "video_id", Generator.getRandomNum ( 0, 10000000 ) ); param.put ( "category", "主动被动事件" ); param.put ( "author_id", Generator.getRandomNum ( 0, 10000 ) ); param.put ( "$inactive", "true" ); } catch (JSONException e) { e.printStackTrace (); } AppLog.onEventV3 ( "like", param ); } } )
[BDAutoTrack eventV3:@"like" params:@{ @"video_title": @"Lady Gaga on Oscar", @"category" : @"主动被动事件", @"$inactive" : @"false" }];
示例代码:"关联事件"
[BDAutoTrack eventV3:@"like" params:@{ @"video_title": @"Lady Gaga on Oscar", @"category" : @"主动被动事件", @"$inactive" : @"true", @"$inline": @"true", @"$target_uuid_list" : @[@"123", @"456", @"789"] }];
示例代码:"被动事件"
[BDAutoTrack eventV3:@"like" params:@{ @"video_title": @"Lady Gaga on Oscar", @"category" : @"主动被动事件", @"$inactive" : @"true" }];
window.collectEvent('like', { from: "index", category: "主动被动事件", $inactive: "false" });
示例代码:"关联事件"
window.collectEvent('like', { from: "index", category: "主动被动事件", $inactive: "true" , $inline: "true", $target_uuid_list: ["123","456","789"] });
示例代码:"被动事件"
window.collectEvent('like', { from: "index", category: "主动被动事件", $inactive: "true" , });
app.$$Rangers.event('like', { from: "index", category: "主动被动事件", $inactive: "false", })
示例代码:"关联事件"
app.$$Rangers.event('like', { from: "index", category: "主动被动事件", $inactive: "true" , $inline: "true", $target_uuid_list: ["123","456","789"] });
示例代码:"被动事件"
app.$$Rangers.event('like', { from: "index", category: "主动被动事件", $inactive: "true" });
{ "user": { // 建议先在客户端上报用户的user_unique_id,然后再在服务端使用 "user_unique_id": " 74481585297" //用户唯一标示 }, "header": { "app_channel": "App Store" //App渠道 }, "events": [ { "event": "like", //事件名称 "params": "{ \"category\":\"主动被动事件\", \"$inactive\":\"false\" }", //事件属性 "local_time_ms": 1489573628001 //事件发生的时间戳 } ] }
示例代码:"关联事件"
{ "user": { // 建议先在客户端上报用户的user_unique_id,然后再在服务端使用 "user_unique_id": " 74481585297" //用户唯一标示 }, "header": { "app_channel": "App Store" //App渠道 }, "events": [ { "event": "like", //事件名称 "params": "{ \"category\":\"主动被动事件\", \"$inactive\":\"true\", \\"$inline\\":\\"true\\", \"$target_uuid_list\":[\"123\",\"456\",\"789\"] }", //事件属性 "local_time_ms": 1489573628001 //事件发生的时间戳 } ] }
示例代码:"被动事件"
{ "user": { // 建议先在客户端上报用户的user_unique_id,然后再在服务端使用 "user_unique_id": " 74481585297" //用户唯一标示 }, "header": { "app_channel": "App Store" //App渠道 }, "events": [ { "event": "like", //事件名称 "params": "{ \"category\":\"主动被动事件\", \"$inactive\":\"true\" }", //事件属性 "local_time_ms": 1489573628001 //事件发生的时间戳 } ] }