在創建行為事件觸發的自動化營銷任務前,需要定義事件,并實現上報事件。本文對事件自定義、事件管理操作,以及事件上報方法進行說明。
事件分為兩類:
自定義事件:
顧名思義,自定義事件需要由您自行定義,自行實現事件上報。
支持通過以下渠道上報自定義事件:
您的一方應用:APP、小程序、網頁(含H5頁面)
第三方系統應用
例如:將用戶在您的H5頁面中點擊某個按鈕、購買某個產品等動作作為一個事件,上報至Quick Audience。
不同的渠道有兩種方法可以上報事件:
適用于APP、小程序、網頁、第三方系統:一方應用或第三方系統通過加入腳本,將應用自行采集的log日志轉化為標準的MQ事件模型,并將其上報到Quick Audience,具體方法請參見上報事件。
適用于APP、小程序、網頁:Quick Audience支持對接阿里云用戶行為洞察分析平臺什么是Quick Tracking,一方應用可以利用Quick Tracking提供的SDK實現事件采集上報,具體方法請參見數據采集接口。
系統默認事件:
系統已預定義社交互動等部分功能模塊涉及的系統默認事件,直接由系統對接對應的功能模塊,自動上報。
說明使用社交互動事件的前提是:已購買社交互動功能包,社交互動模塊已綁定微信公眾號,且與用戶營銷模塊綁定的微信公眾號為同一公眾號。
支持組織管理員、空間管理員,以及具有“社交互動-客戶運營”或“社交互動-公眾號運營”角色的成員使用社交互動事件。
自定義事件
操作步驟:
選擇工作空間>配置管理>自動化營銷>事件管理,進入事件列表頁面。
單擊右上角新建事件,彈出新建事件對話框。
在彈出的對話框中,配置以下參數:
參數
說明
應用類型
選擇事件上報渠道的應用類型,支持:
APP
小程序
Web:網頁,含H5頁面
第三方系統
是否Quick Tracking采集
對于非第三方系統的事件上報渠道,選擇是否使用了Quick Tracking采集。
平臺類型
對于使用了Quick Tracking采集的APP或小程序,選擇您在數據采集接口配置渠道時已為渠道指定的平臺類型。
渠道名稱
對于未使用Quick Tracking采集的渠道,從下拉列表選擇渠道名稱。
單擊下拉列表中的添加渠道名稱、下拉列表右側的編輯渠道名稱,可分別新建、編輯渠道名稱。具體操作,請參見下面的添加渠道名稱子步驟。
對于使用了Quick Tracking采集的渠道,選擇您在數據采集接口配置渠道時設置的渠道名稱。
事件編碼
輸入或選擇事件編碼。由埋點開發人員定義事件編碼,用于唯一標識一個事件。
事件名稱
輸入事件名稱。
事件屬性
添加事件時,需要存儲的附加信息可以用事件屬性進行存儲。例如:事件為“成功購買理財產品”,可添加“理財產品類型”為事件屬性。
單擊添加事件屬性,可增加一行事件屬性。
單擊移除,可移除對應的事件屬性。
屬性類型
對于使用了Quick Tracking采集的渠道,選擇事件屬性的類型:
事件屬性:默認選擇事件屬性,為僅用于當前事件的屬性。
全局屬性:若選擇全局屬性,該屬性設置一次性后,將在同一個渠道的所有事件中都自動添加,如同一個渠道的所有事件中都攜帶登錄用戶ID。
對于未使用Quick Tracking采集的渠道,無屬性類型選項,均為僅用于當前事件的屬性,無全局屬性。
事件屬性數據類型
選擇事件屬性的數據類型為文本型或數值型。
事件擴展屬性ID
輸入事件擴展屬性ID。
由埋點開發人員定義屬性ID,用于存儲采集事件的附屬信息,如app采集事件為“購買商品”,屬性名稱可為“商品ID”,屬性ID可對應“item_id”。
事件擴展屬性名稱
輸入事件擴展屬性名稱。
添加渠道名稱:對于未使用Quick Tracking采集的渠道,若單擊添加渠道名稱,在彈窗中輸入渠道名稱、APP_KEY,其中APP_KEY可以唯一標識一個渠道,一般為采集平臺上定義的appkey。
編輯渠道名稱:對于未使用Quick Tracking采集的渠道,若單擊編輯渠道名稱,出現如下圖所示的彈窗。
單擊編輯,可修改渠道名稱。
若渠道下無事件,單擊刪除,可刪除該渠道的記錄。
單擊確認,完成新建事件。
管理事件
事件列表如下圖所示。
列表中顯示的三種事件類型:
Quick Tracking采集:使用了Quick Tracking采集的自定義事件。
自定義事件:未使用Quick Tracking采集的自定義事件。
系統默認事件:渠道名稱將顯示為事件對接的功能模塊,如社交互動。
您可對事件進行以下管理操作:
搜索:頁面右上角支持通過名稱或事件編碼搜索。
篩選:頁面右上角支持篩選指定渠道的事件。
編輯:單擊自定義事件對應的編輯,可編輯事件。支持修改事件名稱、事件擴展屬性名稱,以及添加事件屬性,不支持修改其他參數或刪除事件屬性。具體操作與新建事件時相同。
刪除:單擊自定義事件對應的刪除,可刪除未被自動化營銷任務使用的事件。如事件已被使用,則不可刪除。
上報事件
若您不通過Quick Tracking采集數據,則一方應用或第三方系統的研發人員需要編寫腳本,將應用自行采集的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:客戶自定義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:微信OpenID 12) union_id:微信UnionID */ @ApiModelProperty(required = true, value = "用戶Id類型") String idMapping; } }