Konfigurieren mit Hybrid Auth
eCDN-Regeln für hybride Implementierungen
Einstein-Aktivitäten für hybride Implementierungen
Erfolgsfördernde Fähigkeiten
Fragen Sie die Community
Mit Berichts-Dashboards & können Sie Trends im Laufe der Zeit erkennen und intelligentere Geschäftsentscheidungen auf der Grundlage Ihrer B2C-Commerce-Daten treffen.
Berichte & Dashboards-Analysen können nur aus Webadapterprotokollen oder der Einstein-Aktivitäten-API abgeleitet werden. Standardmäßig werden SFRA- und SiteGenesis-Analysedaten in Webadapterprotokollen gespeichert, während das PWA-Kit Analysedaten an die Einstein Activities API sendet.
Wenn Sie eine Hybridimplementierung anstreben, bei der einige Seiten von PWA Kit und andere von SFRA oder SiteGenesis unterstützt werden, und Sie Berichtsdashboards & auf Ihrer gesamten Website verwenden möchten, müssen Sie Ihre SFRA- oder SiteGenesis-Implementierung aktualisieren, um die Einstein Activities API zu verwenden. Dadurch wird sichergestellt, dass die API das gesamte Einkaufserlebnis erfasst, unabhängig davon, ob sich der Käufer in PWA Kit, SFRA oder SiteGenesis befindet.
Nur bestehende Kunden können auf einige der Links auf dieser Seite zugreifen. Besuchen Sie Salesforce Commerce Cloud GitHub Repositories and Access (Salesforce Commerce Cloud GitHub Repositorys und Zugriff), um Informationen darüber zu erhalten, wie Sie Zugriff auf die Commerce Cloud-Repositorys erhalten.
Tip
In diesem Leitfaden erfahren Sie, wie Sie die Einstein-Aktivitäten-API in den Checkout von SFRA integrieren, sodass er die gleichen Aktivitäten wie der Checkout von PWA Kit sendet.
Wenn die schrittweise Einführung zusätzliche Seiten in SFRA oder SiteGenesis enthält, die Analysedaten an die Webadapterprotokolle senden, können Sie für diese Seiten einen ähnlichen Prozess wie in diesem Leitfaden ausführen. Schauen Sie sich die entsprechenden Seiten in der Retail React App an und beobachten Sie, welche Aktivitäten sie versenden. Sie müssen dann dieselben Aktivitäten auf Ihren SFRA- oder SiteGenesis-Seiten senden. Als Ressource zeigt Ihnen diese Übersicht der Einstein-Aktivitäten, wo diese Aktivitäten verwendet werden sollen.
Implementierungen, die SiteGenesis mit Composable Storefront verwenden, werden nicht offiziell unterstützt.
Note
Seien Sie bei der Integration der mitgelieferten Code-Beispiele vorsichtig und testen Sie Ihren Code immer gründlich, bevor Sie ihn in eine Production-Instanz pushen.
Zeilen, die in vorhandenen Code eingefügt werden sollen, sind mit einem Pluszeichen (+), zu löschende Zeilen mit einem Minuszeichen (-) gekennzeichnet.
Ersetzen Sie vor dem Ausführen der Befehle in diesem Tutorial alle Platzhalter durch tatsächliche Werte. Platzhalter haben das folgende Format: $PLACEHOLDER.
Aktualisieren Sie als Erstes den Checkout-Controller, damit er die aktuelle Warenkorb-ID enthält.
1res.render('checkout/checkout', {
2+ basketId: currentBasket.UUID,
3 order: orderModel,
4 customer: accountModel,
5 ...
6});Aktualisieren Sie für die Kaufabwicklung verwendete ISML-Vorlage. Diese Änderung stellt dem Browser die Warenkorb-ID, die Artikel und die Gesamtsumme bereit.
1- <div id="checkout-main" class="container data-checkout-stage <isif condition="${pdict.order.usingMultiShipping && pdict.order.shipping.length > 1}">multi-ship</isif>" data-customer-type="${pdict.customer.registeredUser ? 'registered' : 'guest'}" data-checkout-stage="${pdict.currentStage}" data-checkout-get-url="${URLUtils.https('CheckoutServices-Get')}">
2+ <div id="checkout-main" class="container data-checkout-stage <isif condition="${pdict.order.usingMultiShipping && pdict.order.shipping.length > 1}">multi-ship</isif>" data-customer-type="${pdict.customer.registeredUser ? 'registered' : 'guest'}" data-checkout-stage="${pdict.currentStage}" data-checkout-get-url="${URLUtils.https('CheckoutServices-Get')}" data-checkout-price-total="${pdict.order.priceTotal}" data-checkout-items="${JSON.stringify(pdict.order.items)}" data-basket-id="${pdict.basketId}">Erstellen Sie eine JavaScript-Datei namens js/einsteinHelpers.js, die Helferfunktionen enthält:
Vergessen Sie nicht, die Platzhalter $YOUR_SITE_ID und $YOUR_CLIENT_ID durch die tatsächlichen Werte zu ersetzen.
Important
1'use strict';
2
3/**
4 * Get the value of a cookie
5 * Source: https://gist.github.com/wpsmith/6cf23551dd140fb72ae7
6 * @param {string} name The name of the cookie
7 * @return {string | undefined} The cookie value
8 */
9function getCookie(name) {
10 var value = '; ' + document.cookie;
11 var parts = value.split('; ' + name + '=');
12 var result;
13
14 if (parts.length === 2) {
15 result = parts.pop().split(';').shift();
16 }
17 return result;
18}
19
20/**
21 * Fire a given Einstein activity with the provided data.
22 *
23 * @param {string} name - The name of the activity.
24 * @param {Object} data - The activity payload.
25 */
26function fireEinsteinActivity(name, data) {
27 // NOTE: These should be placed in the custom preferences of BM. This will help
28 // avoid any code deployments if you need to change these values.
29 // NOTE 2: this is _Einstein_ site id (not the same as SFRA one like RefArch).
30 var SITE_ID = '$YOUR_SITE_ID';
31 var CLIENT_ID = '$YOUR_CLIENT_ID';
32 // Reports & Dashboards will only show data that's been tagged as `prd` (production)
33 var INSTANCE_TYPE = 'prd';
34
35 // Assign the realm to the data.
36 var activityData = Object.assign(data, {
37 realm: SITE_ID.split('-')[0],
38 instanceType: INSTANCE_TYPE
39 });
40
41 var userId = data.userId;
42 var cookieId = data.cookieId;
43
44 // Apply payload information for logged in users.
45 if (userId) {
46 activityData = Object.assign(activityData, {
47 userId: userId
48 });
49 }
50
51 if (cookieId) {
52 activityData = Object.assign(activityData, {
53 cookieId: cookieId
54 });
55 }
56
57 var url =
58 'https://api.cquotient.com/v3/activities' +
59 '/' + SITE_ID +
60 '/' + name;
61
62 try {
63 fetch(url, {
64 headers: {
65 'Content-Type': 'application/json',
66 'x-cq-client-id': CLIENT_ID
67 },
68 method: 'POST',
69 body: JSON.stringify(activityData)
70 });
71 } catch (e) {
72 console.error(e);
73 }
74}
75
76var exports = {
77 fireEinsteinActivity: fireEinsteinActivity,
78 getCookie: getCookie
79};
80
81module.exports = exports;Aktualisieren Sie Ihr checkout.js-Skript, sodass es Aktivitäten aufzeichnet. Sie müssen diesen Aufruf von require() ganz oben in Ihrem Checkout-Skript hinzufügen und diese Funktion muss nach allen vorhandenen Importvorgängen erscheinen.
1var einsteinHelpers = require('../einsteinHelpers');Lösen Sie bei Änderung der Kaufabwicklungsphase die Aktivität checkoutStep aus. Hängen Sie den folgenden Code an die Methode updateUrl an:
1/**
2 * @returns {boolean} whether the current customer is registered or not
3 */
4function isRegisteredCustomer() {
5 return $('.data-checkout-stage').data('customer-type') === 'registered';
6}
7
8/**
9 * Get the cookieId, which is a unique identifier used for linking subsequent activities to the same user.
10 * If the cookieId is not defined, then Reports & Dashboards will treat the activity as coming from an anonymous user.
11 * @returns {string | undefined} value of the cookieId param for Einstein Activities API
12 */
13function getCookieId() {
14 var siteId = window.CQuotient && window.CQuotient.siteId;
15 // This usid cookie is set by either PWA or plugin_slas
16 return einsteinHelpers.getCookie('usid_' + siteId) || einsteinHelpers.getCookie('usid') || undefined;
17}
18
19/**
20 * Get the userId, which is for linking registered users across different devices.
21 * @returns {string | undefined} value of the userId param for Einstein Activities API
22 */
23function getUserId() {
24 var siteId = window.CQuotient && window.CQuotient.siteId;
25 // This enc_user_id is set by PWA
26 return window.localStorage.getItem('enc_user_id_' + siteId) || window.localStorage.getItem('enc_user_id') || undefined;
27}
28
29/**
30 * Updates the URL to determine stage
31 * @param {number} currentStage - The current stage the user is currently on in the checkout
32 */
33function updateUrl(currentStage) {
34 // ...
35
36 var cookieId = getCookieId();
37 var userId = isRegisteredCustomer() ? getUserId() : undefined;
38
39 einsteinHelpers.fireEinsteinActivity('checkoutStep', {
40 basketId: $('#checkout-main').data('basket-id'),
41 stepName: checkoutStages[currentStage],
42 stepNumber: currentStage,
43 cookieId: cookieId,
44 userId: userId
45 });
46}Die Auslösung der Aktivität checkoutStep in der Methode updateUrl stellt sicher, dass jeder Übergang von einer Checkout-Phase zur nächsten (oder vorhergehenden) verfolgt wird.
Note
Lösen Sie die Aktivität beginCheckout am Ende der initialize-Funktion für Ihren Checkout-Code aus:
1//
2// Send Einstein `beginCheckout` activity
3//
4// Parse total amount value
5var amount = $('#checkout-main').data('checkout-price-total');
6amount = Number(amount.replace(/[^0-9.-]+/g, ''));
7
8var products = $('#checkout-main')
9 .data('checkout-items')
10 .items.map(function (item) {
11 return {
12 id: item.id,
13 price: Number(item.priceTotal.price.replace(/[^0-9.-]+/g, '')),
14 quantity: item.quantity
15 };
16 });
17
18var cookieId = getCookieId();
19var userId = isRegisteredCustomer() ? getUserId() : undefined;
20
21einsteinHelpers.fireEinsteinActivity('beginCheckout', {
22 products: products,
23 amount: amount,
24 cookieId: cookieId,
25 userId: userId
26});Die beginCheckout Aktivität wird nur einmal pro Seitenaufruf während des Checkouts ausgelöst. Die Vorbereitung der Aktivitätsdaten erfolgt automatisch.
Note
Das ist schon alles! Sie haben Einstein-Aktivitäten erfolgreich in den Checkout von SFRA integriert. So schließen Sie die Einrichtung von Reports & Dashboards, führen Sie die Schritte in Berichte & Dashboards.