本文对自动化营销目录下的老版事件管理页面进行介绍。老版事件上报的数据仅可用于行为事件组件开始的自动化营销活动。
Quick Audience现已提供新版事件上报功能,新版功能支持事件数据参与ID Mapping,实现在不同渠道识别同一用户,便于在自动化营销中灵活设置营销方案,并且支持事件数据存储于分析源,作为普通用户行为表使用,详情请参见新版事件上报文档。
若您希望使用新版事件上报功能,请联系我们的技术人员帮助您将现有事件迁移到新版。迁移后,您需要按照新版事件上报流程购买Tablestore实例,进行相关配置,按新版接口调整事件上报程序,实现实时事件数据上报。
在自动化营销使用行为事件数据前,需要定义事件,并开发脚本实现上报事件。
事件需要由您自行定义,自行实现事件上报。
支持通过以下渠道上报自定义事件:
您的一方应用:APP、小程序、网页(含H5页面)
第三方系统应用
例如:将用户在您的H5页面中点击某个按钮、购买某个产品等动作作为一个事件,上报至Quick Audience。
一方应用或第三方系统通过加入脚本,将应用自行采集的log日志转化为标准的MQ事件模型,并将其上报到Quick Audience,请参见上报事件。
自定义事件
操作步骤:
选择工作空间>配置管理>自动化营销>事件管理。
单击右上角新建事件。
在弹出的对话框中,配置以下参数:
参数
说明
应用类型
选择事件上报渠道的应用类型,支持:
APP
小程序
WEB:即网页,含H5页面
第三方系统
渠道名称
从下拉列表选择渠道名称。
单击下拉列表中的添加渠道名称、下拉列表右侧的编辑渠道名称,可分别新建、编辑渠道名称。具体操作,请参见下面的添加渠道名称子步骤。
事件编码
输入或选择事件编码。由埋点开发人员定义事件编码,用于唯一标识一个事件。
事件名称
输入事件名称。
事件属性
添加事件时,需要存储的附加信息可以用事件属性进行存储。例如:事件为“成功购买理财产品”,可添加“理财产品类型”为事件属性。
单击添加事件属性,可增加一行事件属性。
单击移除,可移除对应的事件属性。
事件属性数据类型
选择事件属性的数据类型为文本型或数值型。
事件扩展属性ID
输入事件扩展属性ID。
由埋点开发人员定义属性ID,用于存储采集事件的附属信息,如app采集事件为“购买商品”,属性名称可为“商品ID”,属性ID可对应“item_id”。
事件扩展属性名称
输入事件扩展属性名称。
添加渠道名称:若单击添加渠道名称,在弹窗中输入渠道名称、APP_KEY,其中APP_KEY可以唯一标识一个渠道,一般为采集平台上定义的appkey。
编辑渠道名称:若单击编辑渠道名称,出现如下图所示的弹窗。
单击编辑,可修改渠道名称。
若渠道下无事件,单击删除,可删除该渠道的记录。
单击确认,完成新建事件。
管理事件
事件列表如下图所示。
您可对事件进行以下管理操作:
搜索:页面右上角支持通过名称或事件编码搜索。
筛选:页面右上角支持筛选指定渠道的事件。
编辑:单击自定义事件对应的编辑,可编辑事件。支持修改事件名称、事件扩展属性名称,以及添加事件属性,不支持修改其他参数或删除事件属性。具体操作与新建事件时相同。
删除:单击自定义事件对应的删除,可删除未被自动化营销任务使用的事件。如事件已被使用,则不可删除。
上报事件
一方应用或第三方系统的研发人员需要编写脚本,将应用自行采集的log日志转化为标准的MQ事件模型,并将其上报到Quick Audience。事件、用户信息上报链路如下图所示。
事件上报需要安装阿里云提供的Java SDK,使用行为事件消息上报接口、用户身份标识上报接口。说明如下:
使用准备
安装Java SDK
安装阿里云Java核心库,请参见安装Alibaba Cloud SDK for Java。
说明SDK使用说明,请参见Java示例。
安装QuickAudience Java SDK。打开Aliyun Java SDK QuickAudience Public,下载并安装QuickAudience Java SDK。
在项目目录下的pom.xml文件中,添加Maven依赖。添加依赖后,Maven项目管理工具会自动下载相关JAR包。
<!--引入阿里云Core 包--> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.5.2</version> </dependency> <!--引入QuickAudience 阿里云SDK--> <!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-retailadvqa-public --> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-retailadvqa-public</artifactId> <version>3.3.16</version> </dependency>
接口通用入参
参数
含义
必填
示例
accessId
QA实例ID,调用方识别码
是
retailadvqa-cn-xxxxxxxxx
organizationId
QA组织ID
是
56621289-820e-433a-9947-xxxxxxxxx
accessId:请使用购买QA的主账号进入订单列表,单击QA(智能用户增长)订单对应的详情,进入订单详情页面获取实例名称。
organizationId:请通过浏览器的开发者工具,在登录QA时获取,,如下图所示。
OpenAPI Endpoint列表
地域
地域
Endpoint
cn-shanghai
上海
quicka-public.cn-shanghai.aliyuncs.com
cn-shenzhen
深圳
quicka-public.cn-shenzhen.aliyuncs.com
cn-zhangjiakou
张家口
quicka-public.cn-zhangjiakou.aliyuncs.com
行为事件消息上报接口
接口入参
参数
含义
参数类型
必填
示例
eventMessageModelListStr
行为事件消息体列表
String
是
[ { "organizationId": "组织ID,获取方法见接口通用入参", "workspaceId": "空间ID,可在空间管理获取", "customerId": "用户ID", "eventSourceCode": "事件渠道编码", "eventCode": "事件编码", "eventTime": 1651114368518, "extendAttributes": { "事件属性": "事件属性值", "outBizId": "唯一业务ID,必填" }, "customerIdList": [ { "customerId": "xxxxxxxxx", "idMapping": "mobile" }, { "customerId": "xxxxx@alibaba.com", "idMapping": "email" } ], "v": 1 } ]
接口出参
参数
含义
参数类型
示例
success
接口调用成功与否
Boolean
true
errorCode
错误码:接口调用失败时
String
ES0110000002
errorDesc
错误信息:接口调用失败时
String
鉴权失败!
traceId
请求ID:便于问题跟踪
String
无
接入Demo
import com.alibaba.fastjson.JSONObject; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.retailadvqa_public.model.v20200515.RecieveEventMessageRequest; import com.aliyuncs.retailadvqa_public.model.v20200515.RecieveEventMessageResponse; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Arrays; import java.util.HashMap; import java.util.Map; /** * 上报事件消息 */ public class RecieveEventMessage { // 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。 // 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。 // 本示例以将AccessKey 和 AccessKeySecret 保存在环境变量为例说明。 // 保存环境变量的方法参考如下: // Linux和macOS系统配置方法 // 执行以下命令: // export SCA_AK_ENV=<access_key_id> // export SCA_SK_ENV=<access_key_secret> // <access_key_id>替换为已准备好的AccessKey ID,<access_key_secret>替换为AccessKey Secret。 static String accessKey = System.getenv("SCA_AK_ENV"); static String accessSecret = System.getenv("SCA_SK_ENV"); static String regionId = "cn-shanghai"; static String product = "retailadvqa-public"; static String endpointUrl = "quicka-public.cn-shanghai.aliyuncs.com"; static IAcsClient client = null; static { DefaultProfile profile = DefaultProfile.getProfile( regionId, // 地域ID accessKey, // RAM账号的AccessKeyID accessSecret // RAM账号AccessKeySecret ); try { DefaultProfile.addEndpoint( regionId, product, endpointUrl ); } catch (Exception e) { } client= new DefaultAcsClient(profile); } public static void recieveEventMessage() throws ClientException { RecieveEventMessageRequest eventMessageRequest = new RecieveEventMessageRequest(); eventMessageRequest.setAccessId("retailadvqa-xx-xxxxxxxxx"); eventMessageRequest.setOrganizationId("56621289-820e-433a-9947-xxxxxxxxx"); EventMessageModel messageModel = new EventMessageModel(); messageModel.setOrganizationId(eventMessageRequest.getOrganizationId()); messageModel.setCustomerId("customer001"); messageModel.setEventSourceCode("eventsource001"); messageModel.setEventCode("event001"); messageModel.setEventTime(System.currentTimeMillis()); Map<String, String> extendAttributes = new HashMap<>(); extendAttributes.put("key1", "value1"); extendAttributes.put("key2", "123456"); messageModel.setExtendAttributes(extendAttributes); // 批量上报接口,批量限制100。 eventMessageRequest.setEventMessageModelListStr(JSONObject.toJSONString(Arrays.asList(messageModel))); System.out.println(JSONObject.toJSONString(Arrays.asList(messageModel))); RecieveEventMessageResponse recieveEventMessageResponse = client.getAcsResponse(eventMessageRequest); System.out.println("result = " + JSONObject.toJSONString(recieveEventMessageResponse)); } public static void main(String... args) throws ClientException { recieveEventMessage(); } @Data public static class EventMessageModel { @ApiModelProperty("组织Id") String organizationId; @ApiModelProperty(required = true, value = "用户/粉丝Id") String customerId; @ApiModelProperty("app_key。如果事件消息中没有app_key,自动化营销任务计算将不受渠道限制") String eventSourceCode; @ApiModelProperty(required = true, value = "事件编码") String eventCode; @ApiModelProperty(required = true, value = "事件实际发生的时间") Long eventTime; @ApiModelProperty("事件扩展属性ID和对应的值") Map<String, String> extendAttributes = new HashMap<>(); @ApiModelProperty("事件消息模型版本号") Integer v = 1; } }
用户身份标识上报接口
接口入参
参数
含义
参数类型
必填
示例
customerMessageModelListStr
用户身份标识消息体列表
String
是
[{"customerId":"customer001","customerIdList":[{"customerId":"13888888888","idMapping":"mobile"}],"organizationId":"56621289-820e-433a-9947-xxxxxxxxx","v":1}]
接口出参
参数
含义
参数类型
示例
success
接口调用成功与否
Boolean
true
errorCode
错误码:接口调用失败时
String
ES0110000002
errorDesc
错误信息:接口调用失败时
String
鉴权失败!
traceId
请求ID:便于问题跟踪
String
无
接入Demo
import com.alibaba.fastjson.JSONObject; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.retailadvqa_public.model.v20200515.RecieveUserMessageRequest; import com.aliyuncs.retailadvqa_public.model.v20200515.RecieveUserMessageResponse; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Arrays; import java.util.List; /** * 上报用户身份标识 */ public class RecieveCustomerMessage { // 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。 // 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。 // 本示例以将AccessKey 和 AccessKeySecret 保存在环境变量为例说明。 // 保存环境变量的方法参考如下: // Linux和macOS系统配置方法 // 执行以下命令: // export SCA_AK_ENV=<access_key_id> // export SCA_SK_ENV=<access_key_secret> // <access_key_id>替换为已准备好的AccessKey ID,<access_key_secret>替换为AccessKey Secret。 static String accessKey = System.getenv("SCA_AK_ENV"); static String accessSecret = System.getenv("SCA_SK_ENV"); static String regionId = "cn-shanghai"; static String product = "retailadvqa-public"; static String endpointUrl = "quicka-public.cn-shanghai.aliyuncs.com"; static IAcsClient client = null; static { DefaultProfile profile = DefaultProfile.getProfile( regionId, // 地域ID accessKey, // RAM账号的AccessKeyID accessSecret // RAM账号AccessKeySecret ); try { DefaultProfile.addEndpoint( regionId, product, endpointUrl ); } catch (Exception e) { } client= new DefaultAcsClient(profile); } public static void recieveCustomerMessage() throws ClientException { RecieveUserMessageRequest recieveUserMessageRequest = new RecieveUserMessageRequest(); recieveUserMessageRequest.setAccessId("retailadvqa-xx-xxxxxxxxx"); recieveUserMessageRequest.setOrganizationId("56621289-820e-433a-9947-xxxxxxxxx"); CustomerMessageModel customerMessageModel = new CustomerMessageModel(); customerMessageModel.setOrganizationId(recieveUserMessageRequest.getOrganizationId()); customerMessageModel.setCustomerId("customer001"); CustomerIdModel idModel = new CustomerIdModel(); idModel.setCustomerId("13888888888"); idModel.setIdMapping("mobile"); customerMessageModel.setCustomerIdList(Arrays.asList(idModel)); // 消息上报,批量限制100。 recieveUserMessageRequest.setCustomerMessageModelListStr(JSONObject.toJSONString(Arrays.asList(customerMessageModel))); System.out.println(JSONObject.toJSONString(Arrays.asList(customerMessageModel))); RecieveUserMessageResponse recieveUserMessageResponse = client.getAcsResponse(recieveUserMessageRequest); System.out.println("result = " + JSONObject.toJSONString(recieveUserMessageResponse)); } public static void main(String... args) throws ClientException { recieveCustomerMessage(); } @Data public static class CustomerMessageModel { @ApiModelProperty("组织Id") String organizationId; @ApiModelProperty(required = true, value = "用户/粉丝Id") String customerId; @ApiModelProperty(required = true, value = "用户身份标识ID信息:如 idfa、imei、mobile") List<CustomerIdModel> customerIdList; @ApiModelProperty("用户身份标识消息模型版本号") Integer v = 1; } @Data public static class CustomerIdModel { @ApiModelProperty(required = true, value = "用户/粉丝Id") String customerId; /** 目前支持如下用户ID类型: 1)oneid 2)email:电子邮件 3)mobile:手机号 4)taobao_id:淘宝ID 5)taobao_nick:淘宝昵称 6)imei:手机IMEI 7)idfa:手机IDFA 8)mac_org:MAC地址 9)weibo_id_org:微博ID 10)alipay_id:支付宝ID 11)open_id:微信OpenID 12) union_id:微信UnionID */ @ApiModelProperty(required = true, value = "用户Id类型") String idMapping; } }