本文檔提供Quick Audience事件上報開放接口,當您采用自主接入的事件上報方式時可使用。
完整的自主接入事件數據上報流程,請參見自主接入上報流程。
當前僅提供Java語言的SDK。
安裝Java SDK
操作步驟:
安裝阿里云Java核心庫,請參見安裝Alibaba Cloud SDK for Java。
SDK使用說明,請參見Java示例。
訪問Aliyun Java SDK Retailadvqa Public,下載并安裝Quick Audience Java SDK。
下載quicka-openapi-sdk-4.4.0-SNAPSHOT.jar,加入項目目錄。
在項目目錄下的pom.xml文件中,添加以下Maven依賴。
<dependency>
<groupId>com.aliyun.quicka</groupId>
<artifactId>quicka-openapi-sdk</artifactId>
<version>4.4.0-SNAPSHOT</version>
<scope>system</scope>
<!--以下替換為quicka-openapi-sdk-4.4.0-SNAPSHOT的目錄地址-->
<systemPath>/Users/fin-13921/Documents/project/qa-second/Abc/quicka-openapi-sdk-4.4.0-SNAPSHOT.jar</systemPath>
</dependency>
<dependency>
<groupId>com.aliyun.api.gateway</groupId>
<artifactId>sdk-core-java</artifactId>
<version>1.1.6</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<optional>true</optional>
<version>[4.5.6,5.0.0)</version>
</dependency>
獲取接口通用參數
調用開放接口前需要獲取幾個通用參數:
參數名稱 | 含義 | 獲取方法 |
endpoint | Quick Audience開放接口的訪問地址。 | 公共云Quick Audience開放接口的訪問地址為:
|
accessId | 您的Quick Audience的組織ID。 | 組織管理員賬號登錄Quick Audience后,選擇管理中心>組織管理>組織系統配置,頁面展示的AccessKey ID即為組織ID,您可以單擊復制按鈕進行復制。 |
workspaceId | 事件歸屬的工作空間ID。 選填。若不傳入,當不同空間有多個相同事件編碼的事件時,多個事件均將獲得上報的數據。 | 組織管理員賬號登錄Quick Audience后,選擇管理中心>組織管理>工作空間管理,在列表中查詢工作空間對應的ID。 |
ACCESS_KEY_ID、ACCESS_SECRET | 具有Quick Audience訪問權限的RAM用戶的AccessKey ID、AccessKey Secret。 | 具有Quick Audience訪問權限的RAM用戶登錄RAM控制臺,創建并獲取AccessKey ID、AccessKey Secret,請參見創建AccessKey。 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。 本示例以將AccessKey 和 AccessKeySecret 保存在環境變量為例說明。 |
SDK demo示例
import com.alibaba.fastjson.JSON;
import com.aliyuncs.AcsRequest;
import com.aliyuncs.AcsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.retailadvqa_public.client.QAHttpApiClient;
import com.aliyuncs.retailadvqa_public.client.constants.enums.GatewayType;
import com.aliyuncs.retailadvqa_public.client.constants.enums.InvokerType;
import com.aliyuncs.retailadvqa_public.client.model.event.ClientEventMessageModel;
import com.aliyuncs.retailadvqa_public.client.model.event.CustomerIdModel;
import com.aliyuncs.retailadvqa_public.client.param.PopClientBuilderParam;
import com.aliyuncs.retailadvqa_public.model.v20200515.ReceiveEventMessageRequest;
import com.aliyuncs.retailadvqa_public.model.v20200515.ReceiveEventMessageResponse;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
public class EventCenterPopTest {
/**
*組織ID
*/
private final static String accessId = "78e8f4b4***5ae16b59b";
/**
* ************ pop網關參數 ****************
*/
/**
* quicka-public.[RegionId].aliyuncs.com
*/
protected final static String ENDPOINT = "quicka-public.cn-shanghai.aliyuncs.com";
protected final static String REGION_ID = "cn-shanghai";
protected final static String ENDPOINT_NAME = "retailadvqa-public";
protected final static String PRODUCT = "retailadvqa-public";
/**
*工作空間ID,選填
*/
String workspaceId = "f35f12d7****ccdf9da93ad3";
@Before
public void init() throws ClientException {
/**
* 阿里云賬號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。
*/
PopClientBuilderParam popClientBuilderParam = PopClientBuilderParam.builder()
.endpointName(ENDPOINT_NAME)
.endpoint(ENDPOINT)
.accessKeyId(System.getenv("SCA_AK_ENV"))
.accessSecret(System.getenv("SCA_SK_ENV"))
.regionId(REGION_ID)
.product(PRODUCT).build();
QAHttpApiClient.initPopInstance(popClientBuilderParam);
}
/**
* 事件數據上報消息明細
*/
@Test
public void receiveMessage() {
ReceiveEventMessageRequest request = new ReceiveEventMessageRequest();
// 組織ID
request.setAccessId(accessId);
ClientEventMessageModel clientEventMessageModel = new ClientEventMessageModel();
// 工作空間ID,選填
clientEventMessageModel.setWorkspaceId(workspaceId);
// 事件編碼
clientEventMessageModel.setEventCode("testEventCode");
// 事件屬性,包含屬性編碼和屬性值
clientEventMessageModel.setExtendAttributes(new HashMap<String, String>(){{
this.put("occur_time_default", "1658112165000");
this.put("attr_code", "attr_value");
}});
// 用戶在您自有體系中的用戶ID
clientEventMessageModel.setCustomerId("100001");
// 是否是交易數據,0 (不是) / 1 (是)
clientEventMessageModel.setIsOrder(0);
// 事件發生時間
clientEventMessageModel.setEventTime(System.currentTimeMillis());
// Quick Audience空間支持的用戶ID,必填
clientEventMessageModel.setCustomerIdList(new ArrayList<CustomerIdModel>(){{
this.add(new CustomerIdModel("188****5531", "MOBILE"));
}});
request.setEventMessageModelListJson(JSON.toJSONString(Arrays.asList(clientEventMessageModel)));
try {
ReceiveEventMessageResponse acsResponse = (ReceiveEventMessageResponse) invoke(request);
if (acsResponse.getSuccess()) {
System.out.println("success");
System.out.println(JSON.toJSONString(acsResponse));
} else {
System.out.println(JSON.toJSONString(acsResponse));
}
} catch (ClientException e) {
e.printStackTrace();
}
}
private AcsResponse invoke(AcsRequest request) throws ClientException {
return QAHttpApiClient.invoke(request, GatewayType.POP, InvokerType.OTHER);
}
}
事件數據上報接口
接口描述 | 用于發送事件數據實時上報消息,自主接入方式。 | |||
URL | openapi/event/detail/receive?=accessId | |||
請求方式 | post | |||
參數名 | 數據類型 | 參數類型 | 是否必填 | 說明 |
1.accessId | string | body | 是 | AccessKey ID,您的Quick Audience的組織ID。 |
2.eventMessageModelListStr | string | 是 | 詳細見下面的事件模型ClientEventMessageModel。 | |
狀態碼 | 說明 | |||
200 | 接口請求成功 | |||
其他 | 請求失敗 | |||
返回屬性名 | 類型 | 說明 | ||
1.traceId | string | 請求的唯一ID,用于跟蹤鏈路上的問題。 | ||
2.success | boolean | 服務器處理是否成功。 | ||
3.errorCode | string | 錯誤碼。 | ||
4.errorDesc | string | 錯誤描述。 | ||
示例 | ||||
請求參數 | curl --location --request POST 'https://endpoint/openapi/event/detail/receive?accessId=7*****65ae16b59b' \ --form 'eventMessageModelListJson="[{\"comeFrom\":\"test\",\"customerId\":\"100001\",\"customerIdList\":[{\"customerId\":\"188****5531\",\"idMapping\":\"MOBILE\"}],\"eventCode\":\"testEventCode\",\"eventTime\":1658226007958,\"extendAttributes\":{\"attr_code\":\"attr_value\",\"occur_time_default\":\"1658112165000\"}}]"' | |||
返回值 | { "errorCode": null, "errorDesc": null, "success": true, "traceId": "ff0f996e-6c63-412d-a4cd-acf5d007****" } |
事件模型ClientEventMessageModel
@Data
public class ClientEventMessageModel {
/**
* 組織ID,必填
*/
String organizationId;
/**
* 空間ID,選填
*/
String workspaceId;
/**
* 用戶在您自有體系中的用戶ID,必填
*/
String customerId;
/**
* 事件編碼,必填
*/
String eventCode;
/**
* 事件發生時間,必填
*/
Long eventTime;
/**
* 事件屬性,是否必填取決于事件定義中對屬性的設置
*/
Map<String, String> extendAttributes = new HashMap<>();
/**
* Quick Audience空間支持的用戶ID,若之前同一個customerId上報過customerIdList,則選填
*/
List<CustomerIdModel> customerIdList = new ArrayList<>();
/**
* 是否是交易數據,0 (不是) / 1 (是)
*/
String isOrder;
}
@Data
public class CustomerIdModel {
String customerId;
String idMapping;
public CustomerIdModel() {
}
public CustomerIdModel(String customerId, String idMapping) {
this.customerId = customerId;
this.idMapping = idMapping;
}
}
CustomerIdModel:
public class CustomerIdModel {
@ApiModelProperty(required = true, value = "實際用戶ID,如手機號類型的139****0000")
String customerId;
@ApiModelProperty(required = true, value = "用戶ID類型,如手機號,請參見下面的用戶ID類型說明")
String idMapping;
}
用戶ID類型說明:
Quick Audience空間支持的用戶ID類型包括本空間的ID類型管理頁面中所有已啟用狀態的ID類型,請在代碼中使用ID類型編碼作為ID類型的名稱。
系統預置ID的ID類型編碼,請查閱系統預置ID列表。
自定義ID的ID類型編碼,請單擊ID對應的編輯按鈕進行查看。