使用者識別與分組

使用者識別

在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",
  ...
}

在此範例中,產生的tntId10abf6304b2714215b1fd39a870f01afc.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);

上述範例示範如何傳送含有authenticatedStatecustomerId。 傳送customerId時,需要integrationCodeidauthenticatedState以及marketingCloudVisitorIdintegrationCode是您透過CRS提供的客戶屬性檔案的別名。

合併的設定檔

您可以在同一個要求中合併tntIdthirdPartyIDmarketingCloudVisitorId。 在此案例中,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);

上述範例示範如何在相同要求中合併tntIdthirdPartyIDmarketingCloudVisitorId

分段

系統會根據您設定Adobe Target活動的方式,將您的使用者分段,以便檢視體驗。 在Adobe Target中,分組為:

  • 決定性: MurmurHash3是用來確保您的使用者會被分段,而且只要使用者ID一致,每次都能看到正確的變數。
  • 粘性: Adobe Target會儲存您的使用者在使用者設定檔中看到的變數,以確保該使用者在各個工作階段和管道中都能一致地看到這些變數。 使用伺服器端決策功能時,可確保變異和粘著度。 使用裝置上決策時,無法保證粘著度。

端對端分組工作流程

在深入研究實際分組演演算法之前,請務必強調,類似的步驟既可用於根據其流量分配百分比來選取活動,也可用於選取活動內的體驗。

活動選擇步驟

  1. 產生裝置ID,通常是UUID
  2. 取得使用者端代碼
  3. 取得活動ID
  4. 取得salt,這通常是一些字串,例如「activity」
  5. 使用MurmurHash3計算雜湊
  6. 取得雜湊的絕對值
  7. 將雜湊絕對值除以10000
  8. 餘數除以10000,這會產生介於0和1之間的值
  9. 將結果乘以100%
  10. 比較活動流量分配百分比與取得的百分比。 如果流量分配百分比較低,則會選取活動。 否則,會略過活動。

體驗選取步驟

  1. 產生裝置ID,通常是UUID
  2. 取得使用者端代碼
  3. 取得活動ID
  4. 取得Salt,這通常是「體驗」之類的字串
  5. 使用MurmurHash3計算雜湊
  6. 取得雜湊的絕對值
  7. 將雜湊絕對值除以10000
  8. 餘數除以10000,這會產生介於0和1之間的值
  9. 將結果乘以活動內的體驗總數
  10. 舍入結果。 這應該會產生體驗索引。

範例

假設以下事項:

  • 使用者端代碼為acmeclient的使用者端C
  • 具有識別碼1111和三個體驗E1E2E3的活動A
  • 體驗有以下分佈: E1 - 33%、E2 - 33%、E3 - 34%

選取流程看起來像這樣:

  1. 裝置ID 702ff4d0-83b1-4e2e-a0a6-22cbe460eb15
  2. 使用者端代碼acmeclient
  3. 活動ID 1111
  4. 加鹽experience
  5. 雜湊值acmeclient.1111.702ff4d0-83b1-4e2e-a0a6-22cbe460eb15.experience,雜湊值-919077116
  6. 雜湊919077116的絕對值
  7. 除以10000後的餘數,7116
  8. 餘數後的值除以10000, 0.7116
  9. 將值與體驗總數3 * 0.7116 = 2.1348相乘後的結果
  10. 體驗索引是2,這表示第三個體驗,因為我們使用0型索引。
recommendation-more-help
6906415f-169c-422b-89d3-7118e147c4e3