The Emarsys Salesforce B2C Commerce plug-in was certified by Salesforce in August 2021. The integration and documentation are available on Salesforce Marketplace.
Integration components
The Emarsys integration consists of two Salesforce Commerce Cloud cartridges, one used for communicating with the Emarsys Platform and the other one used to extend the standard Business Manager functionality with a custom module - this module will allow the merchant to customize the newsletter subscription behavior and to configure the Salesforce Commerce Cloud fields that will be added to the transactional emails. Also, the Business Manager module extension will allow the merchant to set the fields that will be added to the CSV file that is used for the initial database load feature. Please find the cartridge components listed below.
SFRA Commerce Cloud cartridges
1. Integration Cartridge
- int_emarsys
Forms
- default/emarsyssignup.xml
- default/newsletter_unsubscribe.xml
Models
- loyaltyCustomerData.js
Scripts
- js/emarsys.js
- js/emarsysAnalytics.js
- js/emarsysSubscription.js
- js/util.js
- scripts/hooks/emails.js
- scripts/service/emarsysService.js
- scripts/service/emarsysFTPService.js
- scripts/util/StepUtil.js
- scripts/helpers/emarsysAnalyticsHelper.js
- scripts/helpers/emarsysEventsHelper.js
- scripts/helpers/emarsysHelper.js
- scripts/helpers/emarsysResource.js
- scripts/helpers/ftpClientHelper.js
- scripts/helpers/scarabQueueHelper.js
- scripts/helpers/jobHelper.js
- scripts/helpers/emarsysEventsHelper.js
- scripts/helpers/triggerEventsHelper.js
-
JOBS
- scripts/jobsteps/createExternalEvents.js
- scripts/jobsteps/createSingleChoiceValueMapping.js
- scripts/jobsteps/exportCatalog.js
- scripts/jobsteps/exportCustomerInfo.js
- scripts/jobsteps/exportOrders.js
- scripts/jobsteps/ftpUpload.js
- scripts/jobsteps/getExternalEventsJob.js
- scripts/jobsteps/getProfileFieldsJob.js
- scripts/jobsteps/getSourceID.js
- scripts/jobsteps/orderStatusСhangeNotification.js
SCSS
- scss/_mixins.scss
- scss/_newsletter.scss
- scss/stylesheet.scss
Static
- static/default/css/stylesheet.css
- static/default/js/emarsys.js
- static/default/js/emarsysAnalytics.js
- static/default/js/emarsysSubscription.js
- static/default/js/util.js
Templates
- default/email/dbload_notification.isml
- default/resources/emarsysresources.isml
- default/subscription/double_optin_thank_you_page.isml
- default/subscription/emarsys_alreadyregistered.isml
- default/subscription/emarsys_datasubmitted.isml
- default/subscription/emarsys_disabled.isml
- default/subscription/emarsys_emailsettings.isml
- default/subscription/emarsys_error.isml
- default/subscription/emarsys_thankyou.isml
- default/subscription/emarsyssignup.isml
- default/unsubscribe/account_unsubscribe.isml
- default/unsubscribe/landing_unsubscribe.isml
- default/loyaltyWallet.isml
- default/successjson.isml
Resources
- resources/dbload_notification.properties
- resources/emarsys.properties
- resources/emarsysinfo.properties
- resources/forms.properties
- resources/locale.properties
- resources/newsletter_unsubscribe.properties
2. Cartridge SFRA
- int_emarsys_sfra
Scripts
- helpers/emarsysSFRAHelper.js
- helpers/newsletterHelper.js
Models
- customerModel.js
Controllers
- Account.js
- CheckoutServices.js
- Cart.js
- ContactUs.js
- EmarsysNewsletter.js
- Home.js
- Order.js
- Predict.js
- Product.js
- Search.js
Templates
- default/initAnalytics.isml
- default/subscription/userdataforn.isml
3. Cartridge SG
- int_emarsys_sg
Controllers
- controllers/Account.js
- controllers/CustomerService.js
- controllers/EmarsysNewsletter.js
- controllers/Predict.js
Scripts
- scripts/models/emarsysNewsletterModel.js
Templates
- default/subscription/userdataform.isml
- default/unsubscribe/landing_unsubscribe.isml
Resources
- resources/emarsys.properties
4. Business Manager Cartridge
- bm_emarsys
Controllers
- EmarsysAdmin.js
- ExternalEvents.js
- NewsletterSubscription.js
Forms
- default/newsletterSub.xml
- default/sendOrderConfEmail.xml
Scripts
- js/components/showStatus.js
- js/components/dialogPopup.js
- js/dynamic.js
- js/externalEvents.js
- js/forms.js
- js/main.js
- js/tabs.js
- js/utils.js
- scripts/helpers/BMEmarsysHelper.js
SCSS
- scss/dialogPopup.scss
- externalEvents.scss
- scss/global.scss
- scss/main.scss
- scss/notification.scss
- scss/tabs.scss
Static
- default/scss/dialogPopup.scss
- default/scss/externalEvents.scss
- default/scss/global.scss
- default/scss/main.scss
- default/scss/notification.scss
- default/scss/tabs.scss
- default/js/dynamic.js
- default/js/externalEvents.js
- default/js/forms.js
- default/js/main.js
- default/js/tabs.js
- default/js/util.js
Templates
- default/application/inputfield.isml
- default/application/modules.isml
- default/components/dialogPopup.isml
- default/components/dynamic.isml
- default/components/errorPage.isml
- default/components/modules.isml
- default/components/newsletterConfiguration.isml
- default/components/pageHeader.isml
- default/components/sendOrderConfEmail.isml
- default/components/tabs.isml
- default/eventsPageisml
- default/mainPage.isml
- default/pageWrapper.isml
Resources
- resources/dialogPopup.properties
- resources/dynamicTemplate.properties
- resources/errorMessages.properties
- resources/externalEvents.properties
- resources/forms.properties
- resources/newsletter.properties
- resources/pageDescription.properties
- resources/pageTitle.properties
- resources/tabs.properties
Extension file
- bm_extensions.xml
Setup
Emarsys cartridge installation (SFRA)
To install the Emarsys integration for the first time on your instance, you need to follow the next steps:
- Reach your Emarsys representative or open a Support ticket on the Emarsys Help Portal to receive an Emarsys integration archive. Then extract it to your local file system. For example, the cartridge folder of your project.
- Inside the site_template folder, modify the RefArch folder name and RefArch references inside the XML files to match your site name.
- Import the cartridge into your workspace and link it to the Salesforce B2C Commerce Server Connection.
- Import the file site_template.zip into your instance (please see more details in the following sections of the document).
- Assign the emarsys_sfra_changes, int_emarsys, int_emarsys_sfra and bm_emarsys cartridges to all sites that you want to integrate with Emarsys - make sure that the int_emarsys and int_emarsys_sfra - cartridges are placed before the storefront cartridge (detailed below).
If you implement the bm_emarsys cartridge on a site level, then it may cause conflict with the JavaScript implemented on your site and break the implementation. Please compare the Salesforce B2C Commerce code with the Emarsys code and make sure that they are implemented at the appropriate level.
- Assign the int_emarsys and bm_emarsys cartridges to the Business Manager site (detailed below).
Emarsys cartridge installation (SG)
To install the Emarsys integration for the first time on your instance, you need to follow the next steps:
- Reach out to your Emarsys representative or open a Support ticket on the Emarsys Help Portal to receive the Emarsys integration archive. Then extract it to your local file system. For example, the cartridge folder of your project.
- Inside site_template folder, modify the SiteGenesis folder name and SiteGenesis references inside the XML files to match your site name.
- Import the cartridge into your workspace and link it to the B2C Commerce Server Connection.
- Import site_template.zip into your instance (please see more details in the following sections of the document).
- Assign the emarsys_sg_changes, int_emarsys, and int_emarsys_sg cartridges to all sites that you want to integrate with Emarsys make sure that int_emarsys and int_emarsys_sg cartridge are placed before the storefront cartridge (detailed below).
- Assign the int_emarsys and bm_emarsys cartridges to the Business Manager site (detailed below).
Configuration
Once you have the cartridges installed, you will need to make the necessary configurations in order for the integration to work.
Business Manager Configuration (SFRA)
1. Log in to the Business Manager.
2. Go to Administration > Sites > Manage Sites.
3. Select the site that you would like to integrate with Emarsys.
4. Go to the Settings tab
5. Add the cartridges (emarsys_sfra_changes , int_emarsys, int_emarsys_sfra and bm_emarsys) into the Cartridges field. Make sure that the int_emarsys and int_emarsys_sfra cartridges appear before the storefront cartridge.
6. Click the Apply button.
7. Navigate back to Manage sites (using breadcrumbs or by clicking the Back to list button).
8. Click the Business Manager link.
9. Add the bm_emarsys, bm_app_storefront_base, bm_custom_plugin and int_emarsys cartridges to the Cartridges path.
10. Click the Apply button.
Business Manager Configuration (SG)
1. Log in to the Business Manager.
2. Go to Administration > Sites > Manage Sites.
3. Select the site that you would like to integrate with Emarsys
4. Go to the Settings tab.
5. Add the cartridges (emarsys_sg_changes, int_emarsys and int_emarsys_sg) to the Cartridges field. Make sure that the int_emarsys and int_emarsys_sg cartridges appear before the storefront cartridge.
6. Click the Apply button.
7. Navigate back to Manage sites (using breadcrumbs or by clicking the Back to list button).
8. Click the Business Manager link.
9. Add the bm_emarsys, bm_app_storefront_base, bm_custom_plugin and int_emarsys cartridges to the Cartridges path.
10. Click the Apply button.
Import site_template.zip (SFRA)
In the site_template folder, modify the RefArch folder name and RefArch references in the XML files to match your site name. Afterwards, you’ll need to make a zip archive of the folder in order to be able to import it into Business Manager.
1. Log in to the Business Manager and navigate to Administration > Site Development > Site Import & Export.
2. From the Import > Upload archive section, upload the zip archive you’ve just created: site_template.zip.
3. Upload the file.
4. Select the uploaded archive file and import it.
5. Once the archive has been uploaded, select it from the list of available files and click the Import button in the bottom-right corner.
6. Confirm that you want to import it, so that the import process can start.
7. Wait until the import job has successfully finished.
Import site_template.zip (SG)
In the site_template folder, modify the SiteGenesis folder name and SiteGenesis references in the XML files to match your site name. Afterwards, you’ll need to make a zip archive of the folder to import it into Business Manager.
1. Log in to the Business Manager and navigate to Administration > Site Development > Site Import & Export.
2. From the Import > Upload archive section, upload the zip archive you’ve just created: site_template.zip.
3. Upload the file.
4. Select the uploaded archive file and import it.
5. Once the archive has been uploaded, select it from the list of available files and click the Import button in the bottom-right corner.
6. Confirm that you want to import it, so that the import process can start.
7. Wait until the import job has successfully finished.
Business Manager Modules
After the cartridge has been installed, you’ll have to activate the Emarsys Business Manager modules that will allow you to make the configuration for the integration. Please see the steps below that you need to follow in order to activate the modules.
1. Log in to the Business Manager.
2. Go to Administration > Organization > Roles & Permissions.
3. Select the Administrator role.
4. Switch to the Business Manager Modules tab.
5. Open the Context dropdown. Select your site from the Context dropdown.
6. Click the Apply button.
7. Enable the required Emarsys modules with checkboxes.
8. Click the Update button.
Site preferences configuration
1. Log in to the Business Manager.
2. Go to Merchant Tools > Site Preferences > Custom Site Preferences.
3. Select Emarsys.
4. Set the following attributes:
- Enable Emarsys Services: this is the switch to turn the Emarsys functionality on or off.
- Emarsys Environment: this should be set to the Emarsys suite that you will connect to. Make sure to omit the https:// part (please check the screenshot below).
- Emarsys Source Name: this is the name of the source that was previously created in Emarsys.
-
Emarsys Country Codes: the JSON used to map the country or region IDs on the Salesforce B2C Commerce side with the IDs in the Emarsys side. If you need to add another country or region, you’ll have to manually update the JSON with the correct key-value pairs, where the key is the DW country or region ID and the value is the Emarsys country or region ID. Please check this link for the complete list of Emarsys country or region IDs: https://help.emarsys.com/hc/en-us/articles/115004634749-Overview-Single-choice-fields-and-their-values For using values not listed on Emarsys list for countries, you need to use a custom field. To access the language information, SFCC Locale class has an attribute named
language
that provides lowercase ISO 639 language code for the current locale. - Emarsys Gender Codes: it is automatically populated after metadata import.
- Emarsys Contact Fields Map: the JSON used to map account information and shipping address on the Salesforce B2C Commerce side with the IDs on the Emarsys side. If you need to add another fields to map, you’ll have to manually update the JSON with the correct key-value pairs, where the key is the ID on the Emarsys side and the value is the Profile/Address System Object attribute.
Example of the JSON for this field is:
{
"1": "firstName",
"2": "lastName",
"3": "emailAddress",
"4": "birthday",
"5": "gender",
"10": "address1",
"11": "city",
"12": "stateCode",
"13": "postalCode",
"14": "countryCode",
"15": "phone",
"17": "jobTitle",
"18": "companyName",
"46": "salutation",
"xx": "customerID",
}
This configuration maps the first value set by the customer as address: shipping or billing address.
Every Emarsys account comes with a standard set of contact data fields such as Salutation, Title, First name, Last name, Email address, etc. These system fields can neither be edited nor deleted. If you need a system field to be defined differently, for example, because you want to include more or other options in the Title field, you must create a copy of the system field and rename it; the new field will then behave like a custom field.
These articles list the system fields, their numeric IDs and their string IDs, as well as the values of single-and multi-choice fields:
- Emarsys Address Fields Map: the JSON used to map the rest of saved fields for every customer addresses on the Salesforce B2C Commerce side with the IDs on the Emarsys side. If you need to add another fields to map or map more addresses, you’ll have to manually update the JSON with the correct key-value pairs, where the key is ID on the Emarsys side and the value is the Address System Object attribute.
Example of the JSON for this field is:
{
"1": {
"1_1": "firstName",
"2_1": "lastName",
"3_1": "emailAddress",
"10_1": "address1",
"11_1": "city",
"12_1": "stateCode",
"13_1": "postalCode",
"14_1": "countryCode",
"15_1": "phone",
"18_1": "companyName"
},
"2": {
"1_2": "firstName",
"2_2": "lastName",
"3_2": "emailAddress",
"10_2": "address1",
"11_2": "city",
"12_2": "stateCode",
"13_2": "postalCode",
"14_2": "countryCode",
"15_2": "phone",
"18_2": "companyName"
}
}
This configuration will map the second and third saved by customer address if any. All fields like “1_1
”, “2_1
”, “2_1
” must be configured on the Emarsys side at first.
5. Click the Apply button.
6. Click the Back button.
7. Open the EmarsysCatalog configurations
8. Set the following attributes:
- Predict Merchant ID - it represents the ID of the Predict merchant user. It should be taken from the Emarsys dashboard > Management > Predict Data Sources > Account Details screen.
- Predict: Enable tracking code - It enables or disables the JS tracking code on your site.
-
List of Product Variation attributes for predict feed - the list of product variation attributes used for the predict job. All the product variation attributes should be put here. For example:
product.custom.color
product.custom.size
-
Predict: Product attributes for exporting - list of product attributes for export feed. Mandatory attributes:
- The merchant will be able to add any Salesforce B2C Commerce product standard and custom attributes, for example: product.ID, product.availability, product.name, product.url, product.image, product.categories, product.price, product.onlineFlag, product.skinConcern, product.custom.color, product.custom.size, product.shortDescription, product.longDescription, product.pageTitle, product.taxClassID, product.brand,
- Some mandatory attributes with specific syntax: item, title, link, category, image, price, availability.
- Please see section Emarsys Predict Export Attributes Configuration for a detailed description.
9. Open the EmarsysSmartInsight configurations.
10. Set the following attributes:
-
SmartInsight Available Elements - The list of available attributes for SmartInsight order export CSV.
- The following attributes are required in the CSV file:
- order - order number
- date - date of the order (YYYY-MM-DD)
- customer - unique customer id (this ID must be available in the Emarsys Platform as well)
- item - ProductId of the sold item (this ID must be in the products CSV as well)
- quantity - quantity of the ordered item
- price - price of the sold items (this value must be negative if an order was cancelled)
- f_original_price - order’s total net price (in float). (This could be the order’s gross price in case the business uses gross pricing). Always use the period (
.
) as the decimal mark (i.e.10.5
, and not10,5
). Do NOT use any thousands separator (i.e.2000
, not2,000
). Do NOT include the currency. For refunds, always submit a negative value. - s_original_currency - curreny code (e.g. EUR, CHF, USD, etc.)
- s_coupon - the ID of the coupon applied to the order. Insert here all coupons and voucher codes used at checkout. If the user used more than one, add multiple codes by separating them with a comma. If the coupon was not used for a specific item, you can send the same coupon code for all items purchased.
- The following attributes are required in the CSV file:
Please see section Emarsys SmartInsight Export Attributes Configuration for a detailed description.
If you use the date format YYYY-MM-DD, then you will not be able to use Smart Insight as the data source for Revenue Attribution and you cannot use Emarsys Loyalty at all. If you would like to use these features, change the date to timestamp in your sales date file. For more information, see timestamp
in Standard field set.
If you are using a unique customer ID other than email, then you need to ensure that the setCustomerId Web Extend command is used.
11. Open the EmarsysLoyaltyWallet configurations.
12. Set the following attributes:
- Emarsys Loyalty Wallet Enabled - it is used to switch the Emarsys Loyalty Wallet functionality on or off.
- Emarsys appId
- Emarsys customerId
- Emarsys Secret - server side secret from Loyalsys
- Emarsys Region
- Loyalsys URL exaccess.
Example: https://exaccess.loyalsys.io/v1.0.1/ls_ea.min.js?x=
- Loyalsys URL ui-elements.
Example: https://ui-elements.loyalsys.io/v1.0.1/embed.min.js?x=
Emarsys Predict Export Attributes Configuration
Emarsys Predict is used for recommending products based on a self-learning algorithm. Recommended products can be rendered within shop pages and within emails. In order to work, Predict requires a CSV product data feed which will be fetched from a remote location (HTTP / SFTP).
Emarsys Predict Attributes will be configurable under the emarsysPredictProductAttributes site preference.
The following attributes are mandatory for the feed:
- product.ID
- product.availability
- product.name
- product.url
- product.images
- product.categories
- product.price
If you need to add another attribute, the following attributes are available:
- Standard product attributes
- Product custom attributes
Emarsys SmartInsight Export Attributes Configuration
Emarsys SmartInsight attributes will be configurable under the emarsysSmartInsightAvailableElements site preference. Merchants will be able to add product custom attributes like custom.product.color
.
The column name of these additional columns must begin with a prefix specifying the data type. The prefix then must be followed by an underscore (_
) and the name of the custom column. If the field's name consists of multiple words, then each word must start with a lowercase letter and should be separated by an underscore. For example: s_original_currency
For more information on how to format custom fields, see Custom fields.
Available custom field prefixes:
The following attributes are mandatory in the feed:
- order - order number
- date - date of the order (YYYY-MM-DD)
If you use the date format YYYY-MM-DD, then you will not be able to use Smart Insight as the data source for Revenue Attribution and you cannot use Emarsys Loyalty at all. If you would like to use these features, change the date to timestamp in your sales date file. For more information, see timestamp
in Standard field set.
- customer - unique customer ID (this ID must be available in the Emarsys platform as well)
If you are using a unique customer ID other than email, then you need to ensure that the setCustomerId Web Extend command is used.
- item - ProductId of the sold item (this ID must be in the products CSV as well)
- quantity - quantity of the ordered item
- price - price of the sold items (this value must be negative if an order was cancelled)
The following kind of attributes are possible:
-
Billing address: The available element should start with 'billingAddress' and it should contain real attributes. In this way, we get the required values from the
billingAddress
object. Examples: billingAddress.address1, billingAddress.postalCode, billingAddress.countryCode.displayValue. -
Shipping address: The available element should start with 'shippingAddress' and it should contain real attributes. In this way, we get the required values from
order.shipments[0].shippingAddress
object. Examples: shippingAddress.address1, shippingAddress.postalCode, shippingAddress.countryCode.displayValue, etc. -
General order attributes: The available element should start with 'order' and it should contain real attributes. In this way, we get the required values from the
order
object. Examples: order.orderNo, order.creationDate, etc. -
Delivery method: Separate case for the 'deliveryMethod.display' element only. It reads the shipping method name and description from the
order.shipments[0].shippingMethod
object: -
Payment method: Separate case for the 'paymentMethod.display' element only. It reads 1st payment method from the
order
object. - Order rebate: Separate case for the 'orderRebate' element only.
-
Shipping costs: Separate case for the 'shippingCosts.display' element only, it reads shipping total price from the
order.shipments[0]
object. - customerNo: Separate case for customer No.
- masterid, variantid: Include those attributes to send the ID of master and variation products for the purchased product.
- Custom attributes: You have 3 types of custom attributes available for output: custom.order, custom.product and custom.lineItem. Each type represents Order, Product and ProductLineItem/GiftCertificateLineItem object attributes respectively, please visit https://documentation.b2c.commercecloud.salesforce.com/DOC2/index.jsp to see the full list of available attributes for these objects.
-
Specific custom attributes: Tracking number, shipment company, date of arrival, tracking link, should have the following element definition: custom.shipmentTrackingNumber, custom.shippingCompany, custom.arrivalDate, custom.trackingLink. The available element should start with 'custom', it reads custom attributes values from the
order.shipments[0]
object.
Emarsys Catalog and Smart Insight Site Preferences
The table below contains the list of Site Preferences for Emarsys Catalog and SmartInsight.
Custom attribute | Type | Description |
Predict: Merchant ID | String | Used to enable JavaScript tracking code, recommendations, etc. |
Predict: Enable tracking code | Boolean | Enables/disables the JavaScript tracking code. |
Thank You For Your Order Page Recommendation Type | Enum Of Strings | Select recommendation widget type to show on storefront "thank you for your order” page. |
Product Detail Page Recommendation Type | Enum Of Strings | Select recommendation widget type to show on storefront PDP. |
Home Page Recommendation Type | Enum Of Strings | Select recommendation widget type to show on storefront Home page. |
Cart Page Recommendation Type | Enum Of Strings | Select recommendation widget type to show on storefront cart page. |
Search Page Recommendation Type | Enum of Strings | Select recommendation widget type to show on storefront search page. |
Category Page Recommendation Type | Enum of Strings | Select recommendation widget type to show on storefront category page. |
List of product variation attributes for Predict Feed | Set of String | List of product variation attributes for Predict Feed. |
Predict: Product attributes for exporting | Set Of String | Mandatory attributes: item, available, title, link, image, category (path), price for catalog export. |
Export Folder | String | Emarsys Predict export folder relative to IMPEX/src/ . |
Map of locales and currencies | String | Map of configured locales and their currency codes {"en_US":"USD", "it_IT":"EUR", "en_GB":"GBP”}. |
SmartInsight Available Elements | Set Of String | Smart Insight Available Elements. |
Job schedules
Emarsys-Setup
You also need to run the Emarsys-Setup job to ensure that several Emarsys Integration screens open properly.
Once the cartridges are installed and the credentials have been configured in the Business Manager, a job schedule needs to be run in order to get all the data that is necessary for the integration to work from the Emarsys platform:
- Emarsys profile fields (profile fields are stored in a custom object on the Salesforce Commerce Cloud side: EmarsysProfileFields)
- External events configuration (whitelisted SFCC side events and their mapping with Emarsys side events: EmarsysExternalEvents)
- The source ID defined in Emarsys (will be saved on the Salesforce Commerce Cloud side in a custom preference attribute: Merchant Tools > Site Preferences > Custom Site Preferences > Emarsys > Emarsys Source ID)
Please note that the source ID is optional.
- All available values for Emarsys single choice fields (will be saved on the Salesforce Commerce Cloud side in a custom preference attribute: Merchant Tools > Site Preferences > Custom Site Preferences > Emarsys DB Init Configuration > Emarsys Single Choice Value Mapping)
All this data will be automatically stored in the Salesforce Commerce Cloud when the job is successfully executed.
Before running the job, you should check some Business Manager configuration:
- Log in to Business Manager.
- Select your site in the top-left corner of the page.
- Navigate to Merchant Tools > Custom Objects > Custom Object Editor.
- Select the object type EmarsysExternalEvent and click the Find button.
- Click the StoredEvents link in the (ExternalEvents) column.
- Fields Newsletter Subscription Source and Other Source should not be empty. These fields should contain lists of SFCC events, for which appropriate Emarsys external events should be created.
After you checked the configuration you are all set to run the job:
- Log in to Business Manager.
- Go to Administration > Operations > Job schedules.
- Select the Emarsys-Setup job and run it.
This job includes 5 steps:
- GetSourceID - It reads the contact source name from the emarsysSourceName site custom preference. Then it tries to get its ID from Emarsys. If there are no contact sources with this name, the job step creates it. The main purpose of this step is to store the ID of the contact source in the emarsysSourceID site custom preference.
- GetAvailableProfileFields - It gets Emarsys system and custom field descriptions and stores them in the EmarsysProfileFields custom object. The language of the fields is taken from the emarsysGetProfileFieldsLanguage site custom preference.
- CreateSingleChoiceValueMapping - It collects option descriptions for Emarsys fields of single choice type. These fields hold only the index of the selected option but not its value. The job step stores option descriptions for such fields in the emarsysSingleChoiceValueMapping site custom preference.
- CreateExternalEvents - It reads SFCC events names from the newsletterSubscriptionSource and otherSource fields of the EmarsysExternalEvents custom object. For every SFCC event, it creates an appropriate event on the Emarsys side. It stores initial mapping between SFCC events and Emarsys events. Mapping objects are written in the newsletterSubscriptionResult or otherResult field depending on the type of the event.
- GetAvailableEvents - It gets all Emarsys external event descriptions and stores them in the result field of the EmarsysExternalEvents custom object.
Steps Configuration Description
1. custom.EmarsysComponents.CreateExternalEvents
1.1 customObjectKey - It specifies the key of the EmarsysExternalEvents custom object. External event configuration (default value: StoredEvents) is stored in this object.
2. custom.EmarsysComponents.GetAvailableEvents
2.1 isDisabled - It provides a convenient way to deactivate this job step.
Emarsys-ExportOrders
EmarsysExportOrders will export order data into a CSV file through a new job schedule. Every field in the CSV file will be mapped to the corresponding field defined in the Emarsys documentation.
File structure:
- Name: sales_items_<YYYYMMDDHHiiss>_<shopinfo>.csv
Please make sure that your sales data file follows this naming convention.
- Encoding: UTF-8
- Column separator: ","
At least these columns are required in the CSV:
1. order - order number
2. date - date of the order (YYYY-MM-DD)
If you use the date format YYYY-MM-DD, then you will not be able to use Smart Insight as the data source for Revenue Attribution and you cannot use Emarsys Loyalty at all. If you would like to use these features, change the date to timestamp in your sales date file. For more information, see timestamp
in Standard field set.
3. customer - unique customer ID (this ID must be available in the Emarsys platform as well)
If you are using a unique customer ID other than email, then you need to ensure that the setCustomerId Web Extend command is used.
4. item - ProductId of the sold item (this ID must be in the products CSV as well)
5. quantity - quantity of the ordered item
6. price - price of the items sold (this value must be negative if an order was cancelled)
1. Log in to Business Manager.
2. Go to Administration > Operations > Jobs Schedules.
3. Open the Emarsys-ExportOrders job.
4. Check if the job is scheduled daily.
Description Configure Steps
1. custom.EmarsysComponents.EmarsysExportOrders
1.2 destinationFolder - the target folder path to save the CSV file.
1.3 smartInsightCurrency - mnemonic currency code of the currency that is configured for Smart.Insight.
1.4 enableCustomTimeFrame - it enables timeframe for exported orders.
1.5 queryString - it adds a query addendum for searchOrders. Starts with AND.
1.6 timeframeStart - timeframe start date for the Emarsys historical export job.
1.7 timeframeEnd - timeframe end date for the Emarsys historical export job.
2. custom.CSComponents.FtpUpload
2.2 ServiceID - the service ID used in the Job. Default value: exchange.emarsys.api.
2.3 FilePattern - file pattern where regular expression is used.
2.4 SourceFolder - local folder with files, relative to IMPEX/.
2.5 TargetFolder - remote folder on Server, relative to home directory.
2.6 ArchiveFolder - local folder where files are archived, relative to IMPEX/.
2.7 NoFileFoundStatus - the exit code in case no files were found.
2.8 IsDisabled - it marks the step as disabled. This will skip the step and returns an OK status.
Emarsys-InitDatabase
This job fetches profile data from Salesforce Commerce Cloud and sends it to Emarsys. This job is needed to create segments, personalize your marketing messages to engage your clientele more efficiently.
Description Configure Steps
1. custom.DBLoad.ExportCustomerInfo
1.1 csvFileColumnsDelimiter - The character used to separate columns in the CSV file.
1.2 optInStatus - 0 - All users empty; 1 - All users true; 2 - Depending on the attribute.
1.3 customAttributeId - The opt-in status custom attribute ID.
1.4 profilesExportThreshold - How many profiles should be exported at once?
1.5 queryString - Add a query addendum for searchOrders. Starts with AND.
1.6 enableCustomTimeFrame - It enables timeframe for exported orders.
1.7 timeframeStart - Timeframe start date for the Emarsys historical export job.
1.8 timeframeEnd - Timeframe end date for the Emarsys historical export job
1.9 fromEmail - The email address for forwarding notifications.
1.10 mailTo - Notification destination email address.
1.11 mailSubject - Mail subject.
Emarsys-ExportCatalog
A new job schedule Emarsys-ExportCatalog will export catalog data into a CSV file. Every field in the CSV file will be mapped to the corresponding field defined in the Emarsys documentation. Once this job is finished, a CSV file is created and you can use the products in Emarsys to personalize your marketing messages.
File structure:
- Name: products_<nameSite>.csv
- Encoding: UTF-8
- Column separator: ","
At least these columns are required in the CSV:
- item - unique product id
- available - Is the product available (and can be recommended)?: true or false
- title_multilang - product title
- link_multilang - deep link to the product
- image - URL of the product image
- category_multilang - category path to the product separated by " > ", e.g. books > scifi > startrek
- price_multilang - product price (float value, e.g. 1234.99)
- group_id - master product ID
- Log in to Business Manager.
- Go to Administration > Operations > Job schedules.
- Check if the Emarsys-ExportCatalog job is scheduled daily.
- Run the job.
- The exported catalog file will be saved in the root folder of the
EmarsysProductFeedLibrary
library. Also, a URL will be generated in the job log so when this URL is opened, it will download the catalog export file in .csv format. You can test the provided link by opening it in the browser and checking the exported product details. - The exported file should then be imported to Emarsys Predict.
Description Configure Steps
1. custom.EmarsysComponents.EmarsysExportCatalog
1.1 exportFolderName - target folder path (mandatory, default value is EmarsysProductFeedLibrary)
1.2 exportFileName - export file name (mandatory)
1.3 catalogConfigKey - add the unique key value for a custom object
Emarsys - OrderStatusСhangeNotification
This job initializes email sending about confirmation or cancellation order through campaigns in Emarsys.
Description Configure Steps
1. custom.EmarsysComponents.OrderStatusСhangeNotification
1.1 isDisabled - Marks the step as disabled. This will skip the step and returns an OK status.
1.2 stepFunctional - 0 - sends shipping data for Emarsys; 1 - sends cancelled orders for Emarsys.
Custom code
In order for the email subscriptions to work, a few updates need to be made on the storefront cartridge and in the Business Manager.
SFRA integration
Email settings
In order to connect the Email Settings, you need to open the file header.isml (app_storefront_base\cartridge\templates\default\account\header.isml) and add this code snippet after line 17:
<li class="nav-item" role="presentation">
<a title="EmailSettings" href="${URLUtils.url('EmarsysNewsletter-EmailSettings')}" role="menuitem" tabindex="-1">
${Resource.msg('emarsys.settings','emarsys',null)}
</a></li>
In this file mobileHeader.isml (app_storefront_base\cartridge\templates\default\account\mobileHeader.isml) add code after line 23:
<li class="dropdown-item" role="menuitem">
<a href="${URLUtils.url('EmarsysNewsletter-EmailSettings')}" class="dropdown-link" role="button" title="EmailSettings">
${Resource.msg('emarsys.settings','emarsys',null)} </a></li>
Add the checkbox "Please add me to Salesforce Commerce Cloud's email list."
For adding the subscription checkbox to the billing address, you need to open the file billing.isml (app_storefront_base\cartridge\templates\default\checkout\billing\billing.isml) and add this code after line 73:
<div class="form-group custom-control custom-checkbox">
<input
type="checkbox"
class="custom-control-input" id="add-to-email-list"
<isprint value=${pdict.forms.billingForm.addToEmailList.attributes} encoding="off"/>>
<label class="custom-control-label" for="add-to-email-list">
<isprint value="${pdict.forms.billingForm.addToEmailList.label}" encoding="html content"/>
</label>
</div>
In this file billing.xml (app_storefront_base\cartridge\forms\default\billing.xml), add code after line 7:
<field formid="addToEmailList" label="checkout.addtoemaillist" type="boolean" mandatory="false"/>
In this file forms.properties (app_storefront_base\cartridge\templates\resources\forms.properties), add code after line 187:
checkout.addtoemaillist=Please add me to Salesforce Commerce Cloud's email list
Checkout subscription
For the checkout subscription with place order, the following code must be inserted in CheckoutService.js, the file is in the path: cartridges\app_storefront_base\cartridge\controllers\CheckoutServices.js
1. After line 659:
if (require('dw/system/HookMgr').hasHook('emarsys.sendOrderConfirmation')){
require('dw/system/HookMgr').callHook('emarsys.sendOrderConfirmation', 'orderConfirmation', {Order:order});
}
2. After line 712:
if (require('dw/system/HookMgr').hasHook('emarsys.order.afterSubmit')){
require('dw/system/HookMgr').callHook('emarsys.order.afterSubmit', 'afterOrderSubmit', order);
}
Update home page
You need to update the code in homePage.isml, the file is in the path: app_storefront_base\cartridge\templates\default\home\homePage.isml
1. Find line 30 and add the ID: id="emarsys-newsletter-subscription"
2. In line 34, update the <input>
tag:
<input type="text"
id="email-alert-address"
class="form-control"
name="hpEmailSignUp"
placeholder="${Resource.msg('placeholdertext.form.emailsignup', 'homePage', null)}"
aria-label="${Resource.msg('placeholdertext.form.emailsignup', 'homePage', null)}">
Page header update
You need to update the code in pageHeader.isml, the file is in the path:
cartridges\app_storefront_base\cartridge\templates\default\components\header\pageHeader.isml
1. After line 17, insert the code:
<script>
var analyticsData = {};
analyticsData.emarsysAnalytics = <isprint value="${JSON.stringify(pdict.analyticsData)}" encoding="off"/>
|| {emarsysAnalytics: {isEnableEmarsys:false}};
</script>
Predict (SFRA)
To make recommendations on the site, you need to add a <div>
tag with id="predict-recs"
to the following places:
- Product detail page (Path: app_storefront_base/cartridge/templates/default/product/productDetails.isml)
- Home page (Path: app_storefront_base/cartridge/templates/default/home/)
- Cart page (Path: app_storefront_base/cartridge/templates/default/cart/cart.isml)
- Search results page (Path: app_storefront_base/cartridge/templates/default/search/searchResults.isml)
- Category page (Path: app_storefront_base/cartridgeето/templates/default/rendering/category/catLanding.isml)
- Order confirmation page (Path: app_storefront_base/cartridge/templates/default/checkout/confirmation/confirmation.isml)
Example: productDetails.isml
<iscomment>PredictRecommendationsWidgetGoesHere</iscomment>
<div id="predict-recs"></div>
Loyalty Wallet (SFRA)
To attach your Loyalty wallet, it should be included in the footer (path: app_storefront_base\cartridge\templates\default\components\footer\pageFooter.isml) after line 35: <isinclude template="/loyaltyWallet"/>
Also, to customize Emarsys Loyalty Wallet, proceed as follows:
- Navigate to Business Manager > Merchant Tools > Site Preferences > Custom Preferences.
- Look for the EmarsysLoyaltyWallet Custom Site Preference Group
- The preference Emarsys Loyalty Wallet Enabled have to be enabled.
- Other fields of the group also have to be filled. Please see section Site preferences configuration for a detailed description.
You should login to your site to see if the Loyalty Wallet is attached. In the right corner of the page, the Loyalty Wallet menu should appear.
SG integration
Custom code inside core templates
In the storefront cartridge, find the template footer_UI.isml. Path: app_storefront_core\cartridge\templates\default\components\footer\footer_UI.isml
Add the following lines of code at the bottom of the footer_UI.isml template:
<isif condition="${dw.system.Site.current.preferences.custom.emarsysEnabled}">
<script type="text/javascript"><isinclude template="resources/emarsysresources"/></script>
<script src="${URLUtils.staticURL('/js/emarsys.js')}" type="text/javascript"></script>
</isif>
Path: app_storefront_core\cartridge\templates\default\components\header\htmlhead.isml
Include the CSS file in the htmlhead.isml template :
<link rel="stylesheet"href="${URLUtils.staticURL('/css/stylesheet.css')}"/>
Account subscription Business Manager Configuration
- Navigate to Business Manager > Merchant Tools > Content > Content Assets.
- Search for the account-nav-registered content asset.
- Lock the content asset in order to be able to edit it.
- Go to the
body
attribute and add the following line to the list ofMy Account
section (please also check the screenshot below):
<li><a title="Email Settings" href="$httpsUrl(EmarsysNewsletter-EmailSettings)$">Email Settings</a></li>
Controller integration configuration
Account Subscription
For the subscription from the account profile to work, an update to the account needs to be made. Also, there is a small change required in the account-nav-registered content asset.
Search for CustomerModel.js in your storefront controllers cartridge, and add the createAccount
function and replace the return
with:
// Logs the customer in.
var result = Transaction.wrap(function () {
return CustomerMgr.loginCustomer(email, password, rememberMe);
});
// Emarsys subscription
require('int_emarsys_sg/cartridge/controllers/EmarsysNewsletter').AccountSubscriptionPipe();
return result;
Search for the Account.js controller in the storefront controllers cartridge, and add the confirm
function after line 129:
// Emarsys subscription
require('int_emarsys_sg/cartridge/controllers/EmarsysNewsletter').AccountSubscriptionPipe();
Checkout Subscription
To allow the end-user to subscribe to newsletters during the checkout process, an update to the COBilling.js controller file from the controllers cartridge needs to be made. At line 549, in the save
function and after the step is marked as fulfilled, add a call to EmarsysNewsletter-CheckoutSubscription method:
// Emarsys checkout subscription
require('int_emarsys_sg/cartridge/controllers/EmarsysNewsletter').CheckoutSubscriptionPipe();
Order Confirmation Emails
Search for COPlaceOrder.js in the storefront controllers cartridge and in the start()
function: before payments handling add the following code snippet:
if(require('dw/system/HookMgr').hasHook('payment.beforeHandle')) {
require('dw/system/HookMgr').callHook('payment.beforeHandle', 'beforeHandlePayment', {Order:order});
}
After the order is created and submitted, and in the successful execution or the order placement add the following code snippet at line 175 :
if(require('dw/system/HookMgr').hasHook('order.afterSubmit')) {
require('dw/system/HookMgr').callHook('order.afterSubmit', 'afterOrderSubmit', {Order:order});
}
External Events Triggering Functionality
Contact Form Submitted
Search for the controller CustomerService.js. in the storefront controllers cartridge. The function submit()
should return the value of the contactUsResult
variable (line 68):
Forgot Password Submitted
Search for the controller Account.js. in the storefront controllers cartridge. Add the return
statement to the passwordResetDialogForm()
function (line 262):
You need to add some additional return
statements (lines 199 and 224) to the passwordResetDialogForm()
function:
Shipping Confirmation Emails Integration
It doesn't require any additional modifications to the core cartridge.
Initial Database Load Integration
It doesn't require any additional modifications to the core cartridge.
Predict (SG)
- In the storefront cartridge, search for the pt_productdetail.isml template.
- Path: app_storefront_core\cartridge\templates\default\product\pt_productdetails.isml
- Include the following code update after line 8:
<isset name="EmarsysAnalyticsHelper" value="${new (require('int_emarsys/cartridge/scripts/helpers/emarsysAnalyticsHelper'))()}" scope="page"/>
<isscript>
var pageContext = {
title: (pdict.Product.name || 'Product Detail'),
type: 'product',
ns:'product',
pdict: pdict
};
pageContext.analytics = EmarsysAnalyticsHelper.setPageData(pageContext);
</isscript>
- In the storefront cartridge, search for the pt_cart.isml template.
- Path: app_storefront_core\cartridge\templates\default\checkout\cart\pt_cart.isml
- Include the following code before the closing
isif
tag near line 891.
<isset name="EmarsysAnalyticsHelper" value="${new (require('int_emarsys/cartridge/scripts/helpers/emarsysAnalyticsHelper'))()}" scope="page"/>
<isscript>
var pageContext = {
title: 'Cart',
type: 'Cart',
ns: 'cart',
pdict: pdict
};
pageContext.analytics = EmarsysAnalyticsHelper.setPageData(pageContext);
</isscript>
- In the storefront cartridge, search for the cart.isml template.
- Path: app_storefront_core\cartridge\templates\default\checkout\cart\cart.isml
- Include the following code before the
iselse
tag under<isif condition="${pdict.Basket == null || (empty(pdict.Basket.productLineItems) && empty(pdict.Basket.giftCertificateLineItems))}"
condition near line 24:
<iscomment>Predict Recommendations Widget Goes Here</iscomment>
<div id="predict-recs"></div>
Add the same code after line 890:
- In the storefront cartridge, search for the confirmation.isml template.
- Path: app_storefront_core\cartridge\templates\default\checkout\confirmation\confirmation.isml
- Include the following code before the closing
isdecorate
tag near line 34.
<iscomment>Predict Recommendations Widget Goes Here</iscomment>
<div id="predict-recs"></div>
- In the storefront cartridge, search for the homepage.isml template.
- Path: app_storefront_core\cartridge\templates\default\content\home\homepage.isml
- Include the following code before the closing
isdecorate
tag near line 29.
<iscomment>Predict Recommendations Widget Goes Here</iscomment>
<div id="predict-recs"></div>
- In the storefront cartridge, search for the producttopcontent.isml template.
- Path: app_storefront_core\cartridge\templates\default\product\producttopcontent.isml
- Include the following code before the closing
isif
tag near line 92.
<iscomment>Predict Recommendations Widget Goes Here</iscomment>
<div id="predict-recs"></div>
- In the storefront cartridge, search for the catlanding.isml template.
- Path: app_storefront_core\cartridge\templates\default\rendering\category\catlanding.isml
- Include the following code before the closing
decorate
tag near line 30.
<iscomment>Predict Recommendations Widget Goes Here</iscomment>
<div id="predict-recs"></div>
- In the storefront cartridge, search for the productgrid.isml template.
- Path: app_storefront_core\cartridge\templates\default\search\productgrid.isml
- Include the following code before the
<ul id="search-result-items"
tag near line 9.
<iscomment>Predict Recommendations Widget Goes Here</iscomment>
<div id="predict-recs"></div>
- In the storefront cartridge, search for the pt_account.isml template.
- Path: app_storefront_core\cartridge\templates\default\account\pt_account.isml
- Replace the following code after line 8.
<isset name="EmarsysAnalyticsHelper" value="${new (require('int_emarsys/cartridge/scripts/helpers/emarsysAnalyticsHelper'))()}" scope="page"/>
<isscript>
var pageContext = {
title: 'My Account',
type: 'MyAccount',
ns: 'account',
pdict: pdict
};
pageContext.analytics = EmarsysAnalyticsHelper.setPageData(pageContext);
</isscript>
- In the storefront cartridge, search for the pt_checkout.isml template.
- Path: app_storefront_core\cartridge\templates\default\checkout\pt_checkout.isml
- Replace the following code after line 8.
<isset name="EmarsysAnalyticsHelper" value="${new (require('int_emarsys/cartridge/scripts/helpers/emarsysAnalyticsHelper '))()}" scope="page"/>
<isscript>
var pageContext = {
title: 'Checkout',
type: 'checkout',
ns: 'checkout',
pdict: pdict
};
pageContext.analytics = EmarsysAnalyticsHelper.setPageData(pageContext);
</isscript>
- In the storefront cartridge, search for the pt_orderconfirmation.isml template.
- Path: app_storefront_core\cartridge\templates\default\checkout\pt_orderconfirmation.isml
- Replace the following code after line 8.
<isset name="EmarsysAnalyticsHelper" value="${new (require('int_emarsys/cartridge/scripts/helpers/emarsysAnalyticsHelper'))()}" scope="page"/>
<isscript>
var pageContext = {
title: 'Order Confirmation',
type: 'orderconfirmation',
ns: 'orderconfirmation',
pdict: pdict
};
pageContext.analytics = EmarsysAnalyticsHelper.setPageData(pageContext);
</isscript>
- In the storefront cartridge, search for the pt_storefront.isml template.
- Path: app_storefront_core\cartridge\templates\default\content\home\pt_storefront.isml
- Replace the following code after line 8.
<isset name="EmarsysAnalyticsHelper" value="${new (require('int_emarsys/cartridge/scripts/helpers/emarsysAnalyticsHelper'))()}" scope="page"/>
<isscript>
pdict.showCountrySelector = true;
var pageContext = {
title: 'Storefront',
type: 'storefront',
ns: 'storefront',
pdict: pdict
};
pageContext.analytics = EmarsysAnalyticsHelper.setPageData(pageContext);
</isscript>
- In the storefront cartridge, search for the pt_categorylanding.isml template.
- Path: app_storefront_core\cartridge\templates\default\search\pt_categorylanding.isml
- Replace the following code after line 8.
<isset name="EmarsysAnalyticsHelper" value="${new (require('int_emarsys/cartridge/scripts/helpers/EmarsysAnalyticsHelper'))()}" scope="page"/>
<isscript>
var pageContext = {
title: 'Product Search Results',
type:'search',
ns:'search',
pdict: pdict
};
pageContext.analytics = EmarsysAnalyticsHelper.setPageData(pageContext);
</isscript>
- In the storefront cartridge, search for the pt_contentsearchresult.isml template.
- Path: app_storefront_core\cartridge\templates\default\search\pt_contentsearchresult.isml
- Replace the following code after line 8.
<isset name="EmarsysAnalyticsHelper" value="${new (require('int_emarsys/cartridge/scripts/helpers/EmarsysAnalyticsHelper'))()}" scope="page"/>
<isscript>
var pageContext={
title: 'Content Search Results',
type: 'search',
ns: 'search',
pdict: pdict
};
pageContext.analytics = EmarsysAnalyticsHelper.setPageData(pageContext);
</isscript>
- In the storefront cartridge, search for the pt_productsearchresult_nohits.isml template.
- Path: app_storefront_core\cartridge\templates\default\search\pt_productsearchresult_nohits.isml
- Replace the following code after line 8.
<isset name="EmarsysAnalyticsHelper" value="${new (require('int_emarsys/cartridge/scripts/helpers/EmarsysAnalyticsHelper'))()}" scope="page"/>
<isscript>
var pageContext = {
title: 'Product Search Results No Hits',
type:'search',
ns:'search',
pdict: pdict
};
pageContext.analytics = EmarsysAnalyticsHelper.setPageData(pageContext);
</isscript>
c. Include the following code after line 52.
<iscomment>Predict Recommendations Widget Goes Here</iscomment>
<div id="predict-recs"></div>
- In the storefront cartridge, search for the productgrid.isml template.
- Path: app_storefront_core\cartridge\templates\default\search\productgrid.isml
- Replace the following code after line 8.
isset name="EmarsysAnalyticsHelper" value="${new (require('int_emarsys/cartridge/scripts/helpers/emarsysAnalyticsHelper'))()}" scope="page"/>
<isscript>
var pageContext = {
title: 'Product Search Results',
type:'search',
ns:'search',
pdict: pdict
};
pageContext.analytics = EmarsysAnalyticsHelper.setPageData(pageContext);
</isscript>
- In the storefront cartridge, search for the pt_productsearchresult.isml template.
- Path: app_storefront_core\cartridge\templates\default\search\pt_productsearchresult.isml
- Replace the following code after line 8.
isset name="EmarsysAnalyticsHelper" value="${new (require('int_emarsys/cartridge/scripts/helpers/emarsysAnalyticsHelper'))()}" scope="page"/>
<isscript>
var pageContext = {
title: 'Product Search Results',
type:'search',
ns:'search',
pdict: pdict
};
pageContext.analytics = EmarsysAnalyticsHelper.setPageData(pageContext);
</isscript>
- In order to handle cart data sending to Emarsys right after the user clicks the Add to cart button, the following modifications are required: in the storefront cartridge, search for the addToCart.js script.
- Path: app_storefront_core\cartridge\js\pages\product\addToCart.js
- Add the following code in the
addToCart
function:
$.ajax({
url: EmarsysUrls.emarsysAddToCartAjax
}).done(function (data) {
if (data) {
window.ScarabQueue.push(['cart', data]);
window.ScarabQueue.push(['go']);
}
});
Loyalty Wallet (SG)
To connect your Loyalty Wallet, the following code snippet should be placed in the footer
(path: app_storefront_core\cartridge\templates\default\components\footer\footer_UI.isml) after 38 line:
<isinclude template="/loyaltyWallet"/>
Also, to customize the Emarsys Loyalty Wallet, you need to:
- Navigate to Business Manager > Merchant Tools > Site Preferences > Custom Preferences.
- Search for the EmarsysLoyaltyWallet Custom Site Preference Groups
- Emarsys Loyalty Wallet Enabled must be enabled.
- Other fields must also be filled. Please see section Site preferences configuration for detailed description.
Testing
For a complete list of test cases, please refer to the test cases document.