事件上報(bào)接口規(guī)范2.0
本文檔提供Quick Audience事件上報(bào)開放接口,當(dāng)您采用自主接入的事件上報(bào)方式時(shí)可使用。
完整的自主接入事件數(shù)據(jù)上報(bào)流程,請(qǐng)參見自主接入上報(bào)流程。
當(dāng)前僅提供Java語言的SDK。
安裝Java SDK
操作步驟:
安裝阿里云Java核心庫(kù),請(qǐng)參見安裝Alibaba Cloud SDK for Java。
SDK使用說明,請(qǐng)參見Java示例。
訪問Aliyun Java SDK Retailadvqa Public,下載并安裝Quick Audience Java SDK。
下載quicka-openapi-sdk-4.4.0-SNAPSHOT.jar,加入項(xiàng)目目錄。
在項(xiàng)目目錄下的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>
獲取接口通用參數(shù)
調(diào)用開放接口前需要獲取幾個(gè)通用參數(shù):
參數(shù)名稱 | 含義 | 獲取方法 |
endpoint | Quick Audience開放接口的訪問地址。 | 公共云Quick Audience開放接口的訪問地址為:
|
accessId | 您的Quick Audience的組織ID。 | 組織管理員賬號(hào)登錄Quick Audience后,選擇管理中心>組織管理>組織系統(tǒng)配置,頁(yè)面展示的AccessKey ID即為組織ID,您可以單擊復(fù)制按鈕進(jìn)行復(fù)制。 |
workspaceId | 事件歸屬的工作空間ID。 選填。若不傳入,當(dāng)不同空間有多個(gè)相同事件編碼的事件時(shí),多個(gè)事件均將獲得上報(bào)的數(shù)據(jù)。 | 組織管理員賬號(hào)登錄Quick Audience后,選擇管理中心>組織管理>工作空間管理,在列表中查詢工作空間對(duì)應(yīng)的ID。 |
ACCESS_KEY_ID、ACCESS_SECRET | 具有Quick Audience訪問權(quán)限的RAM用戶的AccessKey ID、AccessKey Secret。 | 具有Quick Audience訪問權(quán)限的RAM用戶登錄RAM控制臺(tái),創(chuàng)建并獲取AccessKey ID、AccessKey Secret,請(qǐng)參見創(chuàng)建AccessKey。 阿里云賬號(hào)AccessKey擁有所有API的訪問權(quán)限,建議您使用RAM用戶進(jìn)行API訪問或日常運(yùn)維。 強(qiáng)烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導(dǎo)致AccessKey泄露,威脅您賬號(hào)下所有資源的安全。 本示例以將AccessKey 和 AccessKeySecret 保存在環(huán)境變量為例說明。 |
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網(wǎng)關(guān)參數(shù) ****************
*/
/**
* 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 {
/**
* 阿里云賬號(hào)AccessKey擁有所有API的訪問權(quán)限,建議您使用RAM用戶進(jìn)行API訪問或日常運(yùn)維。
* 強(qiáng)烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導(dǎo)致AccessKey泄露,威脅您賬號(hào)下所有資源的安全。
* 本示例以將AccessKey 和 AccessKeySecret 保存在環(huán)境變量為例說明。
* 保存環(huán)境變量的方法參考如下:
* Linux和macOS系統(tǒng)配置方法
* 執(zhí)行以下命令:
* export SCA_AK_ENV=<access_key_id>
* export SCA_SK_ENV=<access_key_secret>
* <access_key_id>替換為已準(zhǔn)備好的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);
}
/**
* 事件數(shù)據(jù)上報(bào)消息明細(xì)
*/
@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");
// 是否是交易數(shù)據(jù),0 (不是) / 1 (是)
clientEventMessageModel.setIsOrder(0);
// 事件發(fā)生時(shí)間
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);
}
}
事件數(shù)據(jù)上報(bào)接口
接口描述 | 用于發(fā)送事件數(shù)據(jù)實(shí)時(shí)上報(bào)消息,自主接入方式。 | |||
URL | openapi/event/detail/receive?=accessId | |||
請(qǐng)求方式 | post | |||
參數(shù)名 | 數(shù)據(jù)類型 | 參數(shù)類型 | 是否必填 | 說明 |
1.accessId | string | body | 是 | AccessKey ID,您的Quick Audience的組織ID。 |
2.eventMessageModelListStr | string | 是 | 詳細(xì)見下面的事件模型ClientEventMessageModel。 | |
狀態(tài)碼 | 說明 | |||
200 | 接口請(qǐng)求成功 | |||
其他 | 請(qǐng)求失敗 | |||
返回屬性名 | 類型 | 說明 | ||
1.traceId | string | 請(qǐng)求的唯一ID,用于定位鏈路上的問題。 | ||
2.success | boolean | 服務(wù)器處理是否成功。 | ||
3.errorCode | string | 錯(cuò)誤碼。 | ||
4.errorDesc | string | 錯(cuò)誤描述。 | ||
示例 | ||||
請(qǐng)求參數(shù) | 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;
/**
* 事件發(fā)生時(shí)間,必填
*/
Long eventTime;
/**
* 事件屬性,是否必填取決于事件定義中對(duì)屬性的設(shè)置
*/
Map<String, String> extendAttributes = new HashMap<>();
/**
* Quick Audience空間支持的用戶ID,若之前同一個(gè)customerId上報(bào)過customerIdList,則選填
*/
List<CustomerIdModel> customerIdList = new ArrayList<>();
/**
* 是否是交易數(shù)據(jù),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 = "實(shí)際用戶ID,如手機(jī)號(hào)類型的139****0000")
String customerId;
@ApiModelProperty(required = true, value = "用戶ID類型,如手機(jī)號(hào),請(qǐng)參見下面的用戶ID類型說明")
String idMapping;
}
用戶ID類型說明:
Quick Audience空間支持的用戶ID類型包括本空間的ID類型管理頁(yè)面中所有已啟用狀態(tài)的ID類型,請(qǐng)?jiān)诖a中使用ID類型編碼作為ID類型的名稱。
系統(tǒng)預(yù)置ID的ID類型編碼,請(qǐng)查閱系統(tǒng)預(yù)置ID列表。
自定義ID的ID類型編碼,請(qǐng)單擊ID對(duì)應(yīng)的編輯按鈕進(jìn)行查看。