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

この方法は、Web サーバーの初期化と起動を同時にAdobe Target SDKを初期化できる場合に最適です。 ルールアーティファクトは、Adobe Target SDKによってダウンロードされ、web サーバーアプリケーションがリクエストの処理を開始する前にメモリにキャッシュされます。 Web アプリケーションを起動して実行すると、メモリ内ルール アーティファクトを使用してすべてのAdobe Target決定が実行されます。 キャッシュされたルール アーティファクトは、SDKの初期化手順で指定したpollingIntervalに基づいて更新されます。

手順の概要

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

​1. SDKのインストール

NPM
code language-javascript line-numbers
npm i @adobe/target-nodejs-sdk -P
MVN
code language-javascript line-numbers
<dependency>
    <groupId>com.adobe.target</groupId>
    <artifactId>java-sdk</artifactId>
    <version>1.0</version>
</dependency>

​2. SDKの初期化

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

    Node.js

    code language-javascript line-numbers
    
    const TargetClient = require("@adobe/target-nodejs-sdk");
    

    Java

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

    Node.js

    code language-javascript line-numbers
    
    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);
    

    Java

    code language-javascript line-numbers
    
    ClientConfig config = ClientConfig.builder()
        .client("<you target client code>")
        .organizationId("<your EC org id>")
        .build();
    TargetClient targetClient = TargetClient.create(config);
    
  3. 次に示すように、Administration > Implementation​に移動すると、クライアントと組織Idの両方をAdobe Targetから取得できます。

    Targetの管理下にある実装ページ ​

​3. ルールアーティファクトの保存と使用

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

Node.js
code language-javascript line-numbers
//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);
})
Java
code language-java line-numbers
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);
NOTE
上記のコードサンプルでは、TargetClient オブジェクトはメモリ内ルールアーティファクトへの参照を保持しています。 このオブジェクトを使用して標準のSDK メソッドを呼び出す場合、決定にはメモリ内ルールアーティファクトが使用されます。 クライアントのリクエストを初期化およびリッスンするファイル以外のファイルでSDK メソッドを呼び出す必要がある構造がアプリケーションにある場合や、それらのファイルがTargetClient オブジェクトにアクセスできない場合は、JSON ペイロードをダウンロードして、他のファイルで使用するローカル JSON ファイルに格納し、SDKを初期化する必要があります。 これは、次の節で、JSON ペイロードを使用したルールアーティファクトのダウンロード ​について説明します。

Adobe Target SDKを初期化した後にweb アプリケーションを開始する例を次に示します。

Node.js
code language-javascript line-numbers
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!");
    });
}
Java
code language-java line-numbers
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);
    // ...
  }
}
recommendation-more-help
target-dev-help-dev