ルールアーティファクトのダウンロード、保存、更新を、 Adobe Target SDK

最終更新日: 2023-07-27
  • トピック:
  • APIs/SDKs
    このトピックの詳細を表示
  • 作成対象:
  • Developer

この方法は、 Adobe Target SDK は、Web サーバーを初期化して起動すると同時に使用します。 ルールアーティファクトは、 Adobe Target SDK およびメモリにキャッシュしてから、Web サーバーアプリケーションがリクエストの処理を開始します。 Web アプリケーションが起動して実行されたら、 Adobe Target 決定は、インメモリルールアーティファクトを使用して実行されます。 キャッシュされたルールアーティファクトは、 pollingInterval SDK の初期化手順の間にを指定します。

手順の概要

  1. SDK のインストール
  2. SDK の初期化
  3. ルールアーティファクトの保存と使用

1. SDK をインストールします。

npm i @adobe/target-nodejs-sdk -P
<dependency>
    <groupId>com.adobe.target</groupId>
    <artifactId>java-sdk</artifactId>
    <version>1.0</version>
</dependency>

2. SDK を初期化します

  1. まず、SDK を読み込みます。 サーバーの起動を制御できる同じファイルにインポートします。

    Node.js

       const TargetClient = require("@adobe/target-nodejs-sdk");
    

    Java

       import com.adobe.target.edge.client.ClientConfig;
    import com.adobe.target.edge.client.TargetClient;
    
  2. SDK を設定するには、 create メソッドを使用します。

    Node.js

       const CONFIG = {
        client: "<your target client code>",
        organizationId: "your EC org id",
        decisioningMethod: "on-device",
        pollingInterval : 300000,
        events: {
            clientReady: startWebServer
        }
    };
    
    const TargetClient = TargetClient.create(CONFIG);
    
    function startWebServer() {
        //Adobe Target SDK has now downloaded the JSON Artifacts and is available in the memory.
        //You can start your web server now to serve requests now.
    }
    

    Java

       ClientConfig config = ClientConfig.builder()
        .client("<you target client code>")
        .organizationId("<your EC org id>")
        .build();
    TargetClient targetClient = TargetClient.create(config);
    
  3. クライアント ID と組織 ID の両方を、 Adobe Target 移動して 管理 > 実装、ここに示すように。

    <!— image-client-code.png を挿入 —>
    Target の管理の下の実装ページ

3.ルールアーティファクトを保存して使用する

ルールアーティファクトを自分で管理する必要はなく、SDK メソッドの呼び出しは簡単である必要があります。

//req is the request object from the server request listener method
const targetCookie = req.cookies[TargetClient.TargetCookieName];
const request = {
    context: {
        channel: "web"
    },
    execute: {
        mboxes: [{
            address: { url: req.headers.host + req.originalUrl },
            name: "on-device-homepage-banner"
        }],
    },
};

TargetClient.getOffers({
    request,
    targetCookie
}).then(function(response) {
    //This Target response is coming from the In-memory Target artifact.
    console.log("Target response", response);
}).catch(function(err) {
    console.error("Target:", err);
})
MboxRequest mbox = new MboxRequest().name("homepage").index(0);
TargetDeliveryRequest request = TargetDeliveryRequest.builder()
    .context(new Context().channel(ChannelType.WEB))
    .execute(new ExecuteRequest().mboxes(Arrays.asList(mbox)))
    .build();
TargetDeliveryResponse response = targetClient.getOffers(request);
メモ

上記のコードサンプルでは、 TargetClient オブジェクトは、メモリ内ルールアーティファクトへの参照を保持します。 このオブジェクトを使用して標準の SDK メソッドを呼び出すと、判定にメモリ内ルールアーティファクトが使用されます。 アプリケーションが、初期化およびクライアント要求をリッスンするファイル以外のファイルで SDK メソッドを呼び出す必要があり、これらのファイルが TargetClient オブジェクトにアクセスできない場合、JSON ペイロードをダウンロードし、SDK を初期化する必要があります。 次の項で、 JSON ペイロードを使用したルールアーティファクトのダウンロード.

以下に、 Adobe Target SDK.

const express = require("express");
const cookieParser = require("cookie-parser");
const TargetClient = require("@adobe/target-nodejs-sdk");
const CONFIG = {
    client: "<your target client code>",
    organizationId: "your EC org id",
    decisioningMethod: "on-device",
    pollingInterval : 300000,
    events: {
        clientReady: startWebServer
    }
};

const app = express();
const targetClient = TargetClient.create(CONFIG);

app.use(cookieParser());

function saveCookie(res, cookie) {
  if (!cookie) {
    return;
  }

  res.cookie(cookie.name, cookie.value, {maxAge: cookie.maxAge * 1000});
}

const getResponseHeaders = () => ({
  "Content-Type": "text/html",
  "Expires": new Date().toUTCString()
});

function sendSuccessResponse(res, response) {
  res.set(getResponseHeaders());
  saveCookie(res, response.targetCookie);
  res.status(200).send(response);
}

function sendErrorResponse(res, error) {
  res.set(getResponseHeaders());
  res.status(500).send(error);
}

function startWebServer() {
    app.get('/*', async (req, res) => {
    const targetCookie = req.cookies[TargetClient.TargetCookieName];
    const request = {
        execute: {
        mboxes: [{
            address: { url: req.headers.host + req.originalUrl },
            name: "on-device-homepage-banner" // Ensure that you have a LIVE Activity running on this location
        }]
        }};

    try {
        const response = await targetClient.getOffers({ request, targetCookie });
        sendSuccessResponse(res, response);
    } catch (error) {
        console.error("Target:", error);
        sendErrorResponse(res, error);
    }
    });

    app.listen(3000, function () {
    console.log("Listening on port 3000 and watching!");
    });
}
import com.adobe.target.edge.client.ClientConfig;
import com.adobe.target.edge.client.TargetClient;
import com.adobe.target.delivery.v1.model.ChannelType;
import com.adobe.target.delivery.v1.model.Context;
import com.adobe.target.delivery.v1.model.ExecuteRequest;
import com.adobe.target.delivery.v1.model.MboxRequest;
import com.adobe.target.edge.client.entities.TargetDeliveryRequest;
import com.adobe.target.edge.client.model.TargetDeliveryResponse;

@Controller
public class TargetController {

  private TargetClient targetClient;

  TargetController() {
    // You should instantiate TargetClient in a Bean and inject the instance into this class
    // but we show the code here for demonstration purpose.
    ClientConfig config = ClientConfig.builder()
        .client("<you target client code>")
        .organizationId("<your EC org id>")
        .build();
    targetClient = TargetClient.create(config);
  }

  @GetMapping("/")
  public String homePage() {
    MboxRequest mbox = new MboxRequest().name("homepage").index(0);
    TargetDeliveryRequest request = TargetDeliveryRequest.builder()
        .context(new Context().channel(ChannelType.WEB))
        .execute(new ExecuteRequest().mboxes(Arrays.asList(mbox)))
        .build();
    TargetDeliveryResponse response = targetClient.getOffers(request);
    // ...
  }
}

このページ