Hämtar, lagrar och uppdaterar regelfelaktigheten automatiskt via SDK för Adobe Target

Detta är bäst när du kan initiera SDK Adobe Target samtidigt som du initierar och startar webbservern. Regelartefakten hämtas av SDK Adobe Target och cachas i minnet innan webbserverprogrammet börjar hantera begäranden. När webbprogrammet är igång och körs kommer alla Adobe Target-beslut att köras med hjälp av minnesregelartefakten. Den cachelagrade regelartefakten uppdateras baserat på den pollingInterval som du angav under initieringssteget för SDK.

Sammanfattning av steg

  1. Installera SDK
  2. Initiera SDK
  3. Lagra och använd regelartefakt

​1. Installera 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. Initiera SDK

  1. Importera först SDK. Importera till samma fil som du kan styra serverstarten från.

    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. Om du vill konfigurera SDK använder du metoden 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. Du kan hämta både klient- och OrganizationId från Adobe Target genom att gå till Administration > Implementation, vilket visas här.

    <!— Insert image-client-code.png —>
    Implementeringssida under Administration i mål

​3. Lagra och använda regelartefakt

Du behöver inte själv hantera regelfelaktigheten och det ska vara enkelt att anropa SDK-metoder.

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
I kodexemplet ovan innehåller objektet TargetClient en referens till artefakten i minnesregeln. När du använder det här objektet för att anropa SDK standardmetoder används artefakten i minnesregeln för beslut. Om ditt program är strukturerat så att du måste anropa SDK-metoderna i andra filer än den som initierar och lyssnar på klientförfrågningar, och om dessa filer inte har tillgång till TargetClient-objektet, kan du hämta JSON-nyttolasten och lagra den i en lokal JSON-fil som ska användas på andra filer som måste initiera SDK. Detta förklaras i nästa avsnitt om att hämta regelartefakten med JSON-nyttolast.

Här är ett exempel som startar ett webbprogram efter att SDK Adobe Target har initierats.

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