使用者識別與分組
Last update: Mon May 05 2025 00:00:00 GMT+0000 (Coordinated Universal Time)
使用者識別
在Adobe Target內有多種方式可用來識別使用者。 Target使用以下識別碼:
tntID
tntId
是使用者Target中的主要識別碼。 您可以提供此ID,或如果請求未包含此ID,Target將自動產生此ID。
thirdPartyId
thirdPartyId
是您公司的使用者識別碼,您可以透過每次呼叫傳送該識別碼。 使用者登入公司網站時,公司通常會建立ID,此ID會連結至訪客的帳戶、熟客卡、會員編號或適用於該公司的其他識別碼。
marketingCloudVisitorId
marketingCloudVisitorId
用於合併和共用不同Adobe解決方案之間的資料。 與Adobe Analytics和Adobe Audience Manager整合需要marketingCloudVisitorId。
customerIds
除了Experience Cloud訪客ID之外,還可以使用其他
客戶ID以及每位訪客的已驗證狀態。
Target識別碼(tntID)
Target ID或tntId
可視為裝置ID。 如果要求中未提供此tntId
,Adobe Target會自動產生它。 後續要求必須包含此tntId
,才能將正確的內容傳遞至相同使用者使用的裝置。
下列範例呼叫示範未將tntId
傳遞至Target的情況。
Node.js SDK
code language-javascript line-numbers |
const TargetClient = require("@adobe/target-nodejs-sdk");
const CONFIG = {
client: "acmeclient",
organizationId: "1234567890@AdobeOrg"
};
const targetClient = TargetClient.create(CONFIG);
targetClient.getOffers({
request: {
execute: {
mboxes: [{
name: "some-mbox"
}]
}
}
})
.then(console.log)
.catch(console.error);
|
Java SDK
code language-java line-numbers |
ClientConfig config = ClientConfig.builder()
.client("acmeclient")
.organizationId("1234567890@AdobeOrg")
.build();
TargetClient targetClient = TargetClient.create(config);
Context context = new Context().channel(ChannelType.WEB);
MboxRequest mbox = new MboxRequest()
.name("some-mbox")
.index(0);
ExecuteRequest executeRequest = new ExecuteRequest()
.mboxes(Arrays.asList(mbox));
TargetDeliveryRequest request = TargetDeliveryRequest.builder()
.context(context)
.execute(executeRequest)
.build();
TargetDeliveryResponse offers = targetClient.getOffers(request);
|
在沒有tntId
的情況下,Adobe Target會產生tntId
並在回應中提供它,如下所示。
{
"status": 200,
"requestId": "5b586f83-890c-46ae-93a2-610b1caa43ef",
"client": "acmeclient",
"id": {
"tntId": "10abf6304b2714215b1fd39a870f01afc.35_0"
},
"edgeHost": "mboxedge35.tt.omtrdc.net",
...
}
在此範例中,產生的tntId
為10abf6304b2714215b1fd39a870f01afc.35_0
。 請注意,此tntId
必須跨工作階段用於相同使用者。
第三方ID (thirdPartyId)
如果您的組織使用ID來識別訪客,您可以使用thirdPartyID
來傳遞內容。 thirdPartyID
是您的企業用來識別一般使用者的永久ID,無論他們是否透過Web、行動裝置或IoT管道與您的企業互動。 換言之,thirdPartyId
參考了可以跨管道使用的使用者設定檔資料。 不過,您必須為發出的每Adobe Target個傳遞API呼叫提供thirdPartyID
。
下列範例呼叫示範如何使用thirdPartyId
。
Node.js SDK
code language-javascript line-numbers |
const TargetClient = require("@adobe/target-nodejs-sdk");
const CONFIG = {
client: "acmeclient",
organizationId: "1234567890@AdobeOrg"
};
const targetClient = TargetClient.create(CONFIG);
targetClient.getOffers({
request: {
id: {
thirdPartyId: "B234A029348"
},
execute: {
mboxes: [{
name: "some-mbox"
}]
}
}
})
.then(console.log)
.catch(console.error);
|
Java SDK
code language-java line-numbers |
ClientConfig config = ClientConfig.builder()
.client("acmeclient")
.organizationId("1234567890@AdobeOrg")
.build();
TargetClient targetClient = TargetClient.create(config);
VisitorId id = new VisitorId()
.thirdPartyId("B234A029348");
Context context = new Context().channel(ChannelType.WEB);
MboxRequest mbox = new MboxRequest()
.name("some-mbox")
.index(0);
ExecuteRequest executeRequest = new ExecuteRequest()
.mboxes(Arrays.asList(mbox));
TargetDeliveryRequest request = TargetDeliveryRequest.builder()
.context(context)
.execute(executeRequest)
.build();
TargetDeliveryResponse offers = targetClient.getOffers(request);
|
在此案例中,Adobe Target將會產生tntId
,因為它未傳遞至原始呼叫,而原始呼叫將會對應至提供的thirdPartyId
。
Marketing Cloud訪客ID (marketingCloudVisitorId)
marketingCloudVisitorId
是通用的永久ID,可識別Adobe Experience Cloud中所有解決方案的訪客。 當您的組織實作ID服務時,此ID可讓您在不同的Experience Cloud解決方案(包括Adobe Target、Adobe Analytics和Adobe Audience Manager)中識別相同的網站訪客及其資料。 請注意,將Target與Adobe Analytics和Adobe Audience Manager整合時需要marketingCloudVisitorId
。
下列範例呼叫示範如何將從Experience CloudID服務擷取的marketingCloudVisitorId
傳遞至Target。
Node.js SDK
code language-javascript line-numbers |
const TargetClient = require("@adobe/target-nodejs-sdk");
const CONFIG = {
client: "acmeclient",
organizationId: "1234567890@AdobeOrg"
};
const targetClient = TargetClient.create(CONFIG);
targetClient.getOffers({
request: {
id: {
marketingCloudVisitorId: "10527837386392355901041112038610706884"
},
execute: {
mboxes: [{
name: "some-mbox"
}]
}
}
})
.then(console.log)
.catch(console.error);
|
Java SDK
code language-java line-numbers |
ClientConfig config = ClientConfig.builder()
.client("acmeclient")
.organizationId("1234567890@AdobeOrg")
.build();
TargetClient targetClient = TargetClient.create(config);
VisitorId id = new VisitorId()
.marketingCloudVisitorId("10527837386392355901041112038610706884");
Context context = new Context().channel(ChannelType.WEB);
MboxRequest mbox = new MboxRequest()
.name("some-mbox")
.index(0);
ExecuteRequest executeRequest = new ExecuteRequest()
.mboxes(Arrays.asList(mbox));
TargetDeliveryRequest request = TargetDeliveryRequest.builder()
.context(context)
.execute(executeRequest)
.build();
TargetDeliveryResponse offers = targetClient.getOffers(request);
|
在此案例中,Target將會產生tntId
,因為它未傳遞至原始呼叫,而原始呼叫將會對應至提供的marketingCloudVisitorId
。
客戶ID (customerIds)
客戶ID可新增至Experience Cloud訪客ID或與其相關聯。 每當您傳送customerIds
時,也必須提供marketingCloudVisitorId
。 此外,可以為每個訪客提供驗證狀態,以及每個customerId
。 可以使用以下驗證狀態:
unknown
未知或從未驗證。 此狀態適用於訪客透過按一下顯示廣告而登陸您的網站等情境。
authenticated
使用者目前是以您網站或應用程式上使用中的工作階段驗證。
logged_out
使用者通過驗證,但主動登出。使用者打算中斷已驗證狀態的連線。 使用者不希望具有驗證身分。
請注意,只有當customerId
處於驗證狀態時,Target才會參考已儲存且連結至customerId的使用者設定檔資料。 如果customerId
處於未知或logged_out
狀態,則會被忽略,並且不會將任何可能與該customerId
相關聯的使用者設定檔資料用於對象目標定位。
Node.js SDK
code language-javascript line-numbers |
const TargetClient = require("@adobe/target-nodejs-sdk");
const CONFIG = {
client: "acmeclient",
organizationId: "1234567890@AdobeOrg"
};
const targetClient = TargetClient.create(CONFIG);
targetClient.getOffers({
request: {
id: {
marketingCloudVisitorId : "10527837386392355901041112038610706884",
customerIds: [{
id: "134325423",
integrationCode : "crm_data",
authenticatedState : "authenticated"
}]
},
execute: {
mboxes: [{
name: "some-mbox"
}]
}
}
})
.then(console.log)
.catch(console.error);
|
Java SDK
code language-java line-numbers |
ClientConfig config = ClientConfig.builder()
.client("acmeclient")
.organizationId("1234567890@AdobeOrg")
.build();
TargetClient targetClient = TargetClient.create(config);
CustomerId customerId = new CustomerId()
.id("134325423")
.integrationCode("crm_data")
.authenticatedState(AuthenticatedState.AUTHENTICATED);
VisitorId id = new VisitorId()
.marketingCloudVisitorId("10527837386392355901041112038610706884")
.customerIds(Arrays.asList(customerId));
Context context = new Context().channel(ChannelType.WEB);
MboxRequest mbox = new MboxRequest()
.name("some-mbox")
.index(0);
ExecuteRequest executeRequest = new ExecuteRequest()
.mboxes(Arrays.asList(mbox));
TargetDeliveryRequest request = TargetDeliveryRequest.builder()
.context(context)
.execute(executeRequest)
.build();
TargetDeliveryResponse offers = targetClient.getOffers(request);
|
上述範例示範如何傳送含有authenticatedState
的customerId
。 傳送customerId
時,需要integrationCode
、id
、authenticatedState
以及marketingCloudVisitorId
。 integrationCode
是您透過CRS提供的客戶屬性檔案的別名。
合併的設定檔
您可以在同一個要求中合併tntId
、thirdPartyID
和marketingCloudVisitorId
。 在此案例中,Adobe Target將維護所有這些ID的對應,並將其釘選到訪客。 瞭解如何使用不同的識別碼即時合併及同步設定檔。
Node.js SDK
code language-javascript line-numbers |
const TargetClient = require("@adobe/target-nodejs-sdk");
const CONFIG = {
client: "acmeclient",
organizationId: "1234567890@AdobeOrg"
};
const targetClient = TargetClient.create(CONFIG);
targetClient.getOffers({
request: {
id: {
tntId: "d359234570e044f14e1faeeba02d6ab23439914e.35_0",
thirdPartyId: "B234A029348",
marketingCloudVisitorId : "10527837386392355901041112038610706884"
},
execute: {
mboxes: [{
name: "some-mbox"
}]
}
}
})
.then(console.log)
.catch(console.error);
|
Java SDK
code language-java line-numbers |
ClientConfig config = ClientConfig.builder()
.client("acmeclient")
.organizationId("1234567890@AdobeOrg")
.build();
TargetClient targetClient = TargetClient.create(config);
VisitorId id = new VisitorId()
.tntId("d359234570e044f14e1faeeba02d6ab23439914e.35_0")
.thirdPartyId("B234A029348")
.marketingCloudVisitorId("10527837386392355901041112038610706884");
Context context = new Context().channel(ChannelType.WEB);
MboxRequest mbox = new MboxRequest()
.name("some-mbox")
.index(0);
ExecuteRequest executeRequest = new ExecuteRequest()
.mboxes(Arrays.asList(mbox));
TargetDeliveryRequest request = TargetDeliveryRequest.builder()
.context(context)
.execute(executeRequest)
.build();
TargetDeliveryResponse offers = targetClient.getOffers(request);
|
上述範例示範如何在相同要求中合併tntId
、thirdPartyID
和marketingCloudVisitorId
。
分段
系統會根據您設定Adobe Target活動的方式,將您的使用者分段,以便檢視體驗。 在Adobe Target中,分組為:
- 決定性: MurmurHash3是用來確保您的使用者會被分段,而且只要使用者ID一致,每次都能看到正確的變數。
- 粘性: Adobe Target會儲存您的使用者在使用者設定檔中看到的變數,以確保該使用者在各個工作階段和管道中都能一致地看到這些變數。 使用伺服器端決策功能時,可確保變異和粘著度。 使用裝置上決策時,無法保證粘著度。
端對端分組工作流程
在深入研究實際分組演演算法之前,請務必強調,類似的步驟既可用於根據其流量分配百分比來選取活動,也可用於選取活動內的體驗。
活動選擇步驟
- 產生裝置ID,通常是UUID
- 取得使用者端代碼
- 取得活動ID
- 取得salt,這通常是一些字串,例如「activity」
- 使用MurmurHash3計算雜湊
- 取得雜湊的絕對值
- 將雜湊絕對值除以10000
- 餘數除以10000,這會產生介於0和1之間的值
- 將結果乘以100%
- 比較活動流量分配百分比與取得的百分比。 如果流量分配百分比較低,則會選取活動。 否則,會略過活動。
體驗選取步驟
- 產生裝置ID,通常是UUID
- 取得使用者端代碼
- 取得活動ID
- 取得Salt,這通常是「體驗」之類的字串
- 使用MurmurHash3計算雜湊
- 取得雜湊的絕對值
- 將雜湊絕對值除以10000
- 餘數除以10000,這會產生介於0和1之間的值
- 將結果乘以活動內的體驗總數
- 舍入結果。 這應該會產生體驗索引。
範例
假設以下事項:
- 使用者端代碼為
acmeclient
的使用者端C
- 具有識別碼
1111
和三個體驗E1
、E2
、E3
的活動A
- 體驗有以下分佈:
E1
- 33%、E2
- 33%、E3
- 34%
選取流程看起來像這樣:
- 裝置ID
702ff4d0-83b1-4e2e-a0a6-22cbe460eb15
- 使用者端代碼
acmeclient
- 活動ID
1111
- 加鹽
experience
- 雜湊值
acmeclient.1111.702ff4d0-83b1-4e2e-a0a6-22cbe460eb15.experience
,雜湊值-919077116
- 雜湊
919077116
的絕對值
- 除以10000後的餘數,
7116
- 餘數後的值除以10000,
0.7116
- 將值與體驗總數
3 * 0.7116 = 2.1348
相乘後的結果
- 體驗索引是
2
,這表示第三個體驗,因為我們使用0
型索引。
6906415f-169c-422b-89d3-7118e147c4e3