Download, archiviazione e aggiornamento dell’artefatto della regola tramite payload JSON

Questo approccio è ideale se l’applicazione è strutturata in modo da richiedere l’inizializzazione dell’SDK su ciascun file in cui utilizza i metodi SDK. Prima che l’applicazione web possa utilizzare il payload JSON dell’artefatto della regola durante l’inizializzazione dell’SDK, assicurati che il payload JSON sia stato scaricato e che sia disponibile per l’utilizzo da parte dell’applicazione.

Riepilogo dei passaggi

  1. Installare l’SDK
  2. Inizializzare l’SDK
  3. Memorizzare e utilizzare il payload JSON

1. Installare l’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. Inizializzare l’SDK

  1. Importa innanzitutto l’SDK. Importa nello stesso file da cui è possibile controllare l'avvio del server.

    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. Per configurare l’SDK, utilizza il metodo 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: {
            artifactDownloadSucceeded: onArtifactDownloadSucceeded,
            artifactDownloadFailed: onArtifactDownloadFailed
        }
    };
    
    const TargetClient = TargetClient.create(CONFIG);
    
    function onArtifactDownloadSucceeded(event) {
        //Adobe Target SDK has now downloaded the JSON Artifact/Payload
        console.log(event.artifactLocation) // Location from where the Artifact is downloaded.
        console.log(event.artifactPayload) // JSON Payload which we can store locally.
    }
    
    function onArtifactDownloadFailed(event) {
        //Adobe Target SDK has failed to download the JSON Artifact/Payload.
        console.log(event.artifactLocation) // Location from where the Artifact is downloaded.
        console.log(event.error.message) // Error message
    }
    

    Java

    code language-javascript line-numbers
       package com.adobe.target.edge.client.model.ondevice.OnDeviceDecisioningHandler;
    
    ClientConfig config = ClientConfig.builder()
        .client("<you target client code>")
        .organizationId("<your EC org id>")
        .onDeviceDecisioningHandler(
          new OnDeviceDecisioningHandler() {
            void onDeviceDecisioningReady() {
              // On-Device Decision is ready.
            }
            void artifactDownloadSucceeded(byte[] artifactData) {
              // Store artifactData to local disk.
              // ...
            }
          }
        )
        .build();
    TargetClient targetClient = TargetClient.create(config);
    
  3. Il client e organizationId possono essere recuperati da Adobe Target passando a Administration > Implementation, come illustrato di seguito.

    <!— Inserisci image-client-code.png —>
    Alt immagine

3. Memorizzare e riattivare il payload JSON

Il meccanismo utilizzato per memorizzare il payload JSON dipende dall’architettura del sistema. È possibile utilizzare un file locale, un database o un sistema di memorizzazione nella cache degli oggetti di memoria, ad esempio Memcached. Devi essere in grado di leggere questo JSON dall’applicazione per l’utilizzo. In questa guida viene utilizzato un file locale come archivio.

Node.js
code language-javascript line-numbers
//... Code removed for brevity

function onArtifactDownloadSucceeded(event) {
    const jsonPath = 'src/config/target-rules.json'
    fs.writeFile(jsonPath, JSON.stringify(event.artifactPayload), 'utf8', (err) => {
        if (err) {
            throw err;
        };
        console.log(`The artifact from '${event.artifactLocation}' is now saved to '${jsonPath}'`);
    });
}


function onArtifactDownloadFailed(event) {
  console.log(`The local decisioning artifact failed to download from '${event.artifactLocation}' with the following error message: ${event.error.message}`);
}

//... Code removed for brevity
Java
code language-javascript 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
Inizializzando l'SDK Adobe Targettramite il payload JSON, il server è pronto a distribuire le richieste immediatamente con le attività di decisioning sul dispositivo, poiché l'SDK Adobe Targetnon deve attendere che l'artefatto della regola venga scaricato.

Ecco un esempio che illustra la funzionalità di inizializzazione del payload JSON.

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,
        artifactDownloadSucceeded : onArtifactDownloadSucceeded,
        artifactDownloadFailed : onArtifactDownloadFailed
    },
};

function onArtifactDownloadSucceeded(event) {
    const jsonPath = 'src/config/target-rules.json'
    fs.writeFile(jsonPath, JSON.stringify(event.artifactPayload), 'utf8', (err) => {
        if (err) {
            throw err;
        };
        console.log(`The artifact from '${event.artifactLocation}' is now saved to '${jsonPath}'`);
    });
}

function onArtifactDownloadFailed(event) {
  console.log(`The on-device decisioning artifact failed to download from '${event.artifactLocation}' with the following error message: ${event.error.message}`);
}

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-javascript 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>")
        .onDeviceDecisioningHandler(
          new OnDeviceDecisioningHandler() {
            void onDeviceDecisioningReady() {
              // On-Device Decision is ready.
            }
            void artifactDownloadSucceeded(byte[] artifactData) {
              // Store artifactData to local disk.
              // ...
            }
          }
        )
        .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
6906415f-169c-422b-89d3-7118e147c4e3