全部产品

事件管理

在创建行为事件触发类型的自动化营销任务前,需要定义事件,然后上报事件。本文对事件自定义、事件管理操作,以及事件上报方法进行说明。

事件分为两类:

  • 自定义事件:

    您的一方应用采集的事件需要由管理员、开发者或其他具有事件管理权限的自定义角色来定义。例如:将用户在您的APP、小程序或H5页面中点击某个按钮、购买某个产品等动作作为一个事件。

    然后,您的研发人员需要根据定义事件时填写的事件ID编写脚本,将应用采集的log日志转化为标准的MQ事件模型,并将其上报到Quick Audience。

  • 系统默认事件:

    系统已预定义社交互动等部分功能模块涉及的系统默认事件,可在事件列表中查看,事件来源显示为对应的功能模块。

    说明
    • 使用社交互动事件的前提是:已购买社交互动功能包,社交互动模块已绑定微信公众号,且与用户营销模块绑定的微信公众号为同一公众号。

    • 支持组织管理员、空间管理员,以及具有“社交互动-客户运营”或“社交互动-公众号运营”角色的成员使用社交互动事件。

自定义事件

由管理员、开发者或其他具有事件管理权限的自定义角色来定义事件。

操作步骤:

  1. 选择用户营销>所在工作空间>自动化营销>事件管理,进入事件列表页面。

  2. 单击右上角新建事件。弹出新增事件对话框,如下图所示。1

  3. 在弹出的对话框中,配置以下参数:

    参数

    说明

    事件来源

    从下拉列表选择事件来源,如app_android。

    单击下拉列表中的添加事件来源、下拉列表右侧的编辑事件来,可分别新建、编辑事件来源。具体操作,请参见下面的添加事件来源子步骤。

    事件名称

    输入事件名称。

    事件ID

    输入事件ID。负责采集埋点开发人员定义需要采集的事件ID,唯一标识一个事件。

    事件属性

    添加事件时,需要存储的附加信息可以用事件属性进行存储。例如如:事件为“成功购买理财产品”,可添加“理财产品类型”为事件属性。

    单击添加事件属性,可增加一行事件属性。

    单击移除,可移除对应的事件属性。

    事件属性数据类型

    选择事件属性的数据类型为文本型或数值型。

    事件属性名称

    输入事件属性名称。

    事件属性ID

    输入事件属性ID。事件属性ID来源于采集事件的扩展字段。

    负责采集埋点开发人员定义需要采集的事件属性ID,主要用于存储采集事件的附属信息,如采集事件为“注册app”,事件属性可为“注册邮箱”,事件属性ID将对“注册邮箱”这个属性进行描述。

    1. 添加事件来源:单击添加事件来源后,如下图所示,设置事件来源名称、事件来源类型、事件来源code,其中:

      • 事件来源类型:支持APP、小程序、H5页面。

      • 事件来源code:可以唯一标识一个事件来源,一般为采集平台上定义的appkey。

      2
    2. 编辑事件来源:单击编辑事件来源,进入如下图所示的弹窗。

      • 单击编辑,可修改事件来源名称。

      • 若事件来源下无事件,单击删除,可删除该事件来源。

      3
  4. 单击确认,完成新建事件。

管理事件

事件列表如下图所示。4您可对事件进行以下管理操作:

  • 搜索:页面右上角支持通过名称或ID搜索。

  • 筛选:页面右上角支持筛选指定事件来源的事件。

  • 编辑:单击自定义事件对应的编辑,可编辑事件。支持修改事件名称、事件属性名称,以及添加事件属性,不支持修改其他参数或删除事件属性。具体操作与新建事件时相同。

  • 删除:单击自定义事件对应的删除,可删除未被自动化营销任务使用的事件。如事件已被使用,则不可删除。

上报事件

您的研发人员需要根据创建事件时填写的事件ID编写脚本,将应用采集的log日志转化为标准的MQ事件模型,并将其上报到Quick Audience。事件、用户信息上报链路如下图所示。33

事件上报需要安装阿里云提供的Java SDK,使用行为事件消息上报接口、用户身份标识上报接口。说明如下:

使用准备

  • 安装Java SDK

    1. 安装阿里云Java核心库,请参见安装Alibaba Cloud SDK for Java

      说明

      SDK使用说明,请参见Java SDK参考

    2. 安装QuickAudience Java SDK。打开Aliyun Java SDK QuickAudience Public,下载并安装QuickAudience Java SDK。

    3. 在项目目录下的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(智能用户增长)订单对应的详情,进入订单详情页面获取实例名称。4356789

    • organizationId:请通过浏览器的开发者工具,在登录QA时获取,,如下图所示。34546576987

  • 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

    [{"customerId":"customer001","eventCode":"event001","eventSourceCode":"eventsource001","eventTime":1625126360471,"extendAttributes":{"key1":"123456"},"orgnizationId":"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.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;
    
    /**
     * 上报行为事件消息
     * @author:
     * @date: 2021/7/1 3:27 下午
     */
    public class RecieveEventMessage {
    
        static String accessKey = "";
        static String accessSecret = "";
        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.setOrgnizationId(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 orgnizationId;
    
            @ApiModelProperty(required = true, value = "用户/粉丝Id")
            String customerId;
    
            @ApiModelProperty("事件来源应用code: 如果事件消息中没有该信息,自动化营销任务计算不受来源应用限制")
            String eventSourceCode;
    
            @ApiModelProperty(required = true, value = "行为事件Id")
            String eventCode;
    
            @ApiModelProperty(required = true, value = "行为事件实际发生的时间")
            Long eventTime;
    
            @ApiModelProperty("行为事件消息扩展属性")
            Map<String, String> extendAttributes = new HashMap<>();
    
            @ApiModelProperty("事件消息模型版本号")
            Integer v = 1;
        }
    
    }

用户身份标识上报接口

  • 接口入参

    参数

    含义

    参数类型

    必填

    示例

    customerMessageModelListStr

    用户身份标识消息体列表

    String

    [{"customerId":"customer001","customerIdList":[{"customerId":"13888888888","idMapping":"mobile"}],"orgnizationId":"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;
    
    /**
     * 上报用户身份标识
     * @author:
     * @date: 2021/7/1 3:27 下午
     */
    public class RecieveCustomerMessage {
    
        static String accessKey = "";
        static String accessSecret = "";
        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.setOrgnizationId(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 orgnizationId;
    
            @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;
    
            /**
             目前QA 支持如下用户Id类型.
             1)oneid:客户自定义ID类型,不映射数据银行的类型
             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:微信的用户id
             12) union_id:微信的用户id
             */
            @ApiModelProperty(required = true, value = "用户Id类型")
            String idMapping;
        }
    
    }