Téléchargement, stockage et mise à jour automatique de l’artefact de règle via Adobe Target SDK

Cette approche est préférable lorsque vous pouvez initialiser le SDK Adobe Target en même temps que vous initialisez et démarrez votre serveur web. L’artefact de règle sera téléchargé par le SDK Adobe Target et mis en mémoire cache avant que votre application de serveur web ne commence à traiter les requêtes. Une fois votre application web en cours d’exécution, toutes les décisions Adobe Target sont exécutées à l’aide de l’artefact de règle en mémoire. L’artefact de règle mis en cache sera mis à jour en fonction du pollingInterval que vous spécifiez lors de l’étape d’initialisation du SDK.

Résumé des étapes

  1. Installation du SDK
  2. Initialiser le SDK
  3. Stocker et utiliser l’artefact de règle

​1. Installation du 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. Initialiser le SDK

  1. Tout d’abord, importez le SDK. Effectuez une importation dans le même fichier à partir duquel vous pouvez contrôler le démarrage de votre serveur.

    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. Pour configurer le SDK, utilisez la méthode 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. Les paramètres client et organizationId peuvent être récupérés à partir de Adobe Target en accédant à Administration > Implémentation, comme illustré ici.

    Page Implémentation sous Administration dans Target

​3. Stocker et utiliser l’artefact de règle

Vous n’avez pas besoin de gérer vous-même l’artefact de règle et l’appel des méthodes SDK doit être simple.

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
Dans l’exemple de code ci-dessus, l’objet TargetClient contient une référence à l’artefact de règle en mémoire. Lorsque vous utilisez cet objet pour appeler les méthodes SDK standard, il utilise l’artefact de règle en mémoire pour la prise de décision. Si votre application est structurée de manière à appeler les méthodes SDK dans des fichiers autres que celui qui initialise et écoute les requêtes des clients, et si ces fichiers n’ont pas accès à l’objet TargetClient, vous pouvez télécharger la payload JSON et la stocker dans un fichier JSON local pour la consommer dans d’autres fichiers, qui doivent initialiser le SDK. Cela est expliqué dans la section suivante, concernant le téléchargement de l’artefact de règle à l’aide d’une payload JSON.

Voici un exemple qui démarre une application web après l’initialisation du SDK Adobe Target.

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