> Synerise Documentation — Settings > > This file contains the complete "Settings" section of the Synerise documentation. Each article begins with a top-level "# " heading. The manifest listing all sections is at https://hub.synerise.com/llms-full.txt # Synchronizing and exporting data
Synchronization is disabled by default. Before enabling it, verify the configuration of each item attribute to make sure it contains all data you want to include.
## Synchronization options --- - [Continuous (based on observers)](#enabling-continuous-synchronization) - Once synchronization is enabled, any updates or creation of new items will be automatically queued to be sent to Synerise. In this approach, the data on each update/creation is sent as a separate request. - [Full (scheduled for selected scopes)](#scheduling-full-synchronization) - You can send all currently existing data to Synerise. This requires scheduling and can be used for exporting historical data to Synerise. - [Batch (scheduled for selected item sets)](#scheduling-batch-synchronization) - You can schedule batches of items whose data you want to send to Synerise. This is based on manually selecting items. ## Scope of synchronized data --- You can synchronize models for the store views you select.
Click here to expand model description
Model Description Location of data in Synerise
Customers Customer attributes in Magento are qualities assigned to customers. You can send all attributes to Synerise, including custom ones. The list in the Attributes section excludes the required attributes which are sent by default:

- email,
- entity_id,
- firstname,
- lastname,

To deselect or select the attributes, go to Stores > Synerise > Configuration > Data. The changes of attribute selection will apply only for customers who haven't been sent to Synerise yet. To apply the changes to all customers, run full synchronization.
The Behavioral Data Hub
Orders Information about orders are stored as `product.buy`/`transaction.charge` events. Every change of an order's status in Magento (for example, from placed to shipped or completed) updates the corresponding transaction in Synerise. This also applies to cancellations and refunds — changing an order's status to canceled or refunded updates the transaction in Synerise accordingly. Activity list on the profile of a customer in Behavioral Data Hub > Profiles
Products Product attributes in Magento are qualities assigned to items. You can send all attributes to Synerise, including custom ones. The list in the Attributes excludes the required attributes which are sent by default:

- itemId (sku),
- price,
- productUrl,
- parendId,
- deleted,
- category,
- additionalCategories,
- image,

To include tax value in a product price sent to Synerise, set the Calculate tax field to Yes.

To enable sending the text values and IDs of the attribute options, set the Selectable attribute value to ID & Labels. If this option is set to ID, the values are sent to Synerise in the form of IDs, for example, for the `color` attribute, Magento sends the following values: `1`, `2`, `3` instead of `black`, `white`, `grey`.

To deselect or select the attributes go to Stores > Synerise > Configuration > Data. The changes of products selection will apply only for products which haven't been sent to Synerise yet. To apply the changes to all products, run full synchronization.
Data Modeling Hub > Catalogs
Subscribers The value of the subscription attribute of a customer. Profile of a customer in Behavioral Data Hub > Profiles
Automatic updates of order status (including cancellations and refunds) require [continuous synchronization](#enabling-continuous-synchronization) to be enabled for the Orders model. Orders exported only through [full](#scheduling-full-synchronization) or [batch](#scheduling-batch-synchronization) synchronization are not automatically updated in Synerise when their status changes afterwards.
By default, all models and store views are selected to be synchronized. ### Changing scope of synchronized data --- To exclude store views from synchronization, go to **Stores > Synerise > Configuration > Workspaces**. In the **Stores** section, select store views to be synchronized.
The selection also affects tracking the store views. If you deselect store views from synchronization, you also deselect them from tracking.
Synchronization will include the scope of data in accordance with the configuration for store and models. Entities that do not contain data for models selected for synchronization will also be ignored. - To exclude models from synchronization, go to **Stores > Synerise > Configuration > Data**. Under **Models** deselect those that you wish to exclude. - To include or exclude values from particular models in synchronization, go to **Stores > Synerise > Configuration > Data**. ### Enriching requests with custom data ---
The procedure described in this section may require a developer’s help, as it can’t be performed in the interface.
If you want to enrich synchronization requests to Synerise with data which is not available in the [models](#scope-of-synchronized-data), perform the following steps. The best way to modify the contents of requests sent to Synerise is to use [Plugins/Interceptors](https://developer.adobe.com/commerce/php/development/components/plugins). In the example presented in this section: - a custom module has been prepared as prerequisite for this example. To learn more about creating a module, refer to the [Magento documentation](https://experienceleague.adobe.com/en/docs/commerce-learn/tutorials/backend-development/create-module). - a plugin for `OrderCRUD` class will be prepared #### Procedure 1. Register a new plugin (interceptor) in the `etc/di.xml` file in the module:
<config>
       <type name="Synerise\Integration\SyneriseApi\Mapper\Data\OrderCRUD">
           <plugin name="synerise_order_prepare_request" type="CompanyName\ModuleName\Plugin\OrderAttributes" />
       </type>
   </config>
2. Create a plugin class:
<?php
   namespace CompanyName\ModuleName\Plugin;

   use Magento\Sales\Model\Order;
   use Synerise\ApiClient\Model\CreateatransactionRequest;
   use Synerise\Integration\SyneriseApi\Mapper\Data\OrderCRUD;

   class OrderAttributes
   {
       public function afterPrepareRequest(
           OrderCRUD $subject,
           CreateatransactionRequest $request,
           Order $order,
           ?string $uuid = null,
           array $snrsParams = []
       ): CreateatransactionRequest
       {
           $metadata = $request->getMetadata();
           $metadata['customAttribute'] = 'Custom Value';

           $request->setMetadata($metadata);

           return $request;
       }
   }
3. To add custom data to the request, replace the placeholder `$metadata['customAttribute'] = 'Custom Value';` with your custom logic. 4. To make sure your changes will produce a valid request, refer to [Synerise API documentation](https://hub.synerise.com/api-reference) . ### Deleting customers --- You can define how data is synchronized in Synerise when a customer is deleted in Magento. 1. Go to **Stores > Synerise > Configuration > Data**. 2. Expand the **Customers** model. 3. From the **Delete behavior** dropdown list, select one of the following options: | Option name | Behavior in Synerise | |--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Send an Event | A `client.deleteAccount` event is generated on the profile of the customer deleted in Magento; the customer remains in Synerise. You can create a [workflow](/docs/automation/creating-automation) that anonymizes the customer when this event occurs. | | Remove permanently | No event is generated; the customer is deleted | | Ignore | No event is generated; the customer remains |
The Customers section in Magento
The Customers section in Magento
## Enabling continuous synchronization --- The procedure described in this section lets you enable synchronization of real-time data. They will be sent as separate requests each time an entity is created or updated. 1. Go to **Stores > Synerise > Configuration > Data**. 2. To enable incremental data synchronization, in the **Enabled** field, set the value to **Yes**. In continuous data synchronization, new or modified data will be added to the queue and sent to Synerise. 3. Define the values to be included in the Products and Customers models. These values will be included in full synchronization and incremental data synchronization. 4. In the **Max items per request** fields, enter the number of items which will be sent in a [full synchronization](#scheduling-full-synchronization) request to Synerise. Data is split into smaller requests in order to avoid timeouts or other problems resulting from too large requests. 5. To enable sending the text values of the attribute options instead of their IDs, set the **Labels as Values** to **Yes**. 6. In the upper right corner, click **Save Config**. ## Scheduling full synchronization --- This synchronization type lets you send all data (including historical data) to Synerise. 1. Perform all steps described in the [Enabling continuous synchronization](#enabling-continuous-synchronization) section. If you have done it aready, proceed to the next step. 1. Go to **Marketing > Synerise > Synchronization**. 2. From the **Scope** dropdown list, you can select store view or the **All store views** option to be synchronized. If you want to synchronize only a few store views, run full synchronization for one store view at a time. 2. In the table, in the first left column, select the models you want to synchronize. 3. From the **Actions** dropdown list, select the **Schedule** option. - In result, all data will be sent to Synerise. To preview the synchronization logs, go to **System > Synerise > Bulk Actions Log**. - In **Marketing > Synerise > Synchronization**, you can preview amount of data in total and amount of data sent to Synerise for each store view.
The Synchronization section in the Magento panel
The Synchronization section in the Magento panel
## Scheduling batch synchronization --- To synchronize changes within items, orders, customer data, or subscriptions with Synerise: 1. Go to: - **Catalogs > Products** - to synchronize changes in items. - **Sales > Orders** - to synchronize changes in orders. - **Customers > All Customers** - to synchronize changes in customer data. - **Marketing > Communication > Newsletter Subscribers** - to synchronize changes in subscriptions. 2. From the list, select the items. 3. Above the table, from the dropdown list, select **Send to Synerise**. ## Synchronization debugging --- You can learn more about the logic of sending data to Synerise through Message Queue Framework and debugging of the synchronization process in the ["Message Queues logic" article](/docs/settings/tool/magento/magento-message-queues). ## On-demand exports --- If you want to perform an on-demand export of specific set of data to Synerise, follow the instructions in this section. ### Transactions The output of exporting transaction data from Magento to Synerise is generating [`transaction.charge`](/docs/assets/events/event-reference/items#transactioncharge) and [`product.buy`](/docs/assets/events/event-reference/items#productbuy) events on the profile cards of customers who made orders within the selected period. 1. Enable synchronization of data from the Orders module. 1. Go to **Marketing > Configuration > Synerise > Data**.
Enabling synchronization
Enabling synchronization
2. On the **Synchronization** tab: 1. Set **Enabled** to **Yes**. 2. From the **Models** field, make sure **Orders** is selected. 2. Select orders whose information will be exported to Synerise: 1. Go to **Sales > Orders**. 2. On the **Filters** tab, from **Purchase Date** fields, select the period from which orders will be exported to Synerise.
The view of filters in the Orders module
The view of filters in the Orders module
3. Optionally, you can add more filters, such as **Status** (status of the orders), **Purchase Point** (a store view in which the order was placed), and so on. 4. From the table, select the orders which you want to export by selecting the checkbox in the leftmost column. To select multiple orders, you can use the dropdown list in the column header and choose one of the following options: **Select all** or **Select all on this page**.
Batch select option
Batch select option
5. To launch the export, from the **Actions** dropdown list, select **Send to Synerise**.
The Actions dropdown
The Actions dropdown
**Result**: The export request will be queued in the [Batch synchronization queue](/docs/settings/tool/magento/magento-message-queues#queues) and processed in the background. When the queue is processed, the `transaction.charge` and `product.buy` events will be generated on the cards of customers who placed the orders. # My Account My Account sections allow users to manage their personal data available. # Enabling the SMSAPI integration In this article, you will find out how to enable the SMSAPI integration in Synerise and how to create an SMS sender account in Synerise which will allow you to send text messages to your profiles (for example, customers). ## Prerequisites --- - Create an account in SMSAPI. - In the SMSAPI documentation, check the text message limits imposed by SMSAPI. While planning SMS campaigns and sending SMS batches, take these limits into consideration. ## Enabling the integration --- 1. Go to Settings icon**Settings > Apps & Services**. 2. In the list of integrations, find SMSAPI and next to the integration name, click **Show**. - If there is a connection, you may proceed to [Creating SMSAPI SMS account in Synerise](#creating-smsapi-sms-account-in-synerise) - If there is no connection or you want a new one, proceed with the integration settings. 3. Click **Add connection**. **Result**: A pop-up appears. 4. On the pop-up, switch the **Enable integration** toggle. 5. In the **User name** field, enter the login or email address based on which your SMSAPI account is created. 3. In the **Password** field, enter the password to your SMSAPI account. 4. Click **Next**. 5. In the **Connection name** field, enter the name of the connection which will be visible on the list of SMSAPI integrations in Synerise in **Settings > Apps & Services**. 6. Click **Apply** and confirm by clicking **Yes**. 7. Proceed to [creating a sender account](#creating-smsapi-sms-account-in-synerise). ## Creating SMSAPI SMS account in Synerise --- After enabling the connection, you need to create a sender account in Synerise, which can be used in communication. 6. Go to **Settings > SMS > Add account**. 7. In the **Account name** field, enter the name of your SMS account. It's used only on the list of SMS accounts in Synerise. 8. In the **From name (SenderId)** field, enter the telephone number or alias (if supported by your plan) which will be shown to the recipients. 9. From the SMS provider list, select **SMSAPI**. 10. From the **SMSAPI integration** dropdown list, select the connection you created in [the previous part of the process](#enabling-the-integration). 10. Finish by clicking **Apply**. **Result**: You can now use this sender when configuring SMS communication. # General permissions This article describes the [permissions](/docs/settings/identity-access-management/permissions) needed to access the list of workspaces, enter a workspace, and access the user's own data. To set the permissions, you need to create a user role or edit an existing one and open the Permissions matrix. In the matrix, the permissions are collected into groups. Some of these groups can be expanded to set more granular permissions. ## How to read this list In this article, each heading describes an action. The permissions for that action are described in the form of breadcrumbs. **For example**, if the required permissions are: - **Profiles** > **Client list**: `read` - **Search engine**: `create`, `edit` The permission matrix needs to look like this:
Permission matrix in Synerise Settings showing Profiles with read access on Client list and Search engine with create and edit permissions
Permission example, see description above figure.
The `read` permission is not explicitly listed when any higher permission is required - the portal enables it automatically. ## I want to... ### access the list of workspaces You need to log in. Additional permissions are not required. ### enter a workspace You need to be invited to the workspace. Additional permissions are not required, but with no permissions, you can only access your own account details. ### see and change my own account settings You need to log in. Additional permissions are not required. # Users In the Users section in Settings, you can list, invite new users, and manage all the users associated with your company and third party users who have access to your workspace. This section enables your organization's administrators to perform the following actions: - [invite (add) new users](/docs/settings/identity-access-management/users#inviting-users-to-the-workspace), - [set roles (permissions) in the workspace](/docs/settings/identity-access-management/users#setting-user-roles), - [set access expiration](/docs/settings/identity-access-management/users#setting-access-expiration), - [reset a password](/docs/settings/identity-access-management/users#resetting-a-password) - [reset two factor authentication configuration](/docs/settings/identity-access-management/users#resetting-2fa), - [revoke access to the workspace](/docs/settings/identity-access-management/users#revoking-access), - [delete accounts of the managed users](/docs/settings/identity-access-management/users#deleting-accounts), ## Managed and third party users --- We distinguish two types of users: managed and third party. A third party user may be any person that has been invited to your workspace, but you have only a little control over guest accounts (the actions allowed towards the third party users are available in the table below). To gain control over user accounts you must convert them to be manageable, which means you have to prove that you have the power to administer them. In order to do so, you must [confirm ownership of the domain](/docs/settings/identity-access-management/access-control/managed-domains) after which all added and to-be-added users with accounts under the managed domains will be automatically associated to your workspace. Such division of user types also brings different options in overall user account management which by default prevents you from deleting third party accounts, resetting third party accounts two factor authentication (2FA), or resetting a password. You are only entitled to adjust the settings related to users that are connected with your workspace, such as a role level, access expiration and revoking access.
The scope of actions for a managed user
The scope of actions for a managed user

Resetting two factor authentication (2FA) and password won't work for the accounts from external identity providers like Azure AD, Google, and so on.
The scope of user management covers: | | Define access expiration | Set user roles | Reset password | Reset MFA | Revoke access | Delete account | |---------------|--------------------------|----------------|----------------|-----------|---------------|----------------| | Managed users | Green checkmark | Green checkmark | Green checkmark | Green checkmark | Green checkmark | Green checkmark | | Third party users | Green checkmark | Green checkmark | Red checkmark | Red checkmark | Green checkmark | Red checkmark | ## Inviting users to the workspace --- You can invite any person to your workspace by providing user's e-mail address, assigning a user role, and optionally setting access expiration in case you want to grant timed access that expires by a given date. 1. Go to Settings icon **Settings > Users**. 2. In the right upper corner, click **Invite**. **Result**: A pop-up appears. 3. In the **Email** field, enter the email address of a user invited to the workspace. 4. From the **Roles** dropdown list, select a role or roles for the invited user. 5. In the **Expiration date** field, define how long a user has access to your workspace. 6. Confirm by clicking **Apply**. **Result**: An invitation is sent to the email address. 7. The invited user must click the activation link in the email to get access to the workspace.

If you invite people that have email accounts within your managed (verified) domain, they will become automatically managed users.
## Setting user roles --- You can change the user role for the managed and third party users. This way you can control access to specific modules and permit or restrict performing specific actions. You can either use predefined roles or define your own. More about user roles and user permissions is available in [Roles and permissions](/docs/settings/identity-access-management/permissions). 1. Go to Settings icon **Settings > Users**. 2. Find a user on the list. 3. Click the Settings icon icon. **Result**: A dropdown list shows. 4. Select the **Set user role** option. **Result**: A pop-up appears. 5. From the **Roles** list, select the user roles you want to grant to the selected user. 6. Confirm by clicking **Apply**. ## Setting access expiration --- In case you need to grant access to your workspace for a specific time only, you can define when the access to your workspace ends for a specific user through access expiration. 1. Go to Settings icon **Settings > Users**. 2. Find a user on the list. 3. Click the Settings icon icon. **Result**: A dropdown list shows. 4. Select the **Set access expiration** option. **Result**: A pop-up appears. 5. In the **Profile access expiraton** field, select the date (day and time) when access to your workspace expires for the selected user. 6. Confirm by clicking **Apply**. ## Resetting a password --- You can reset a password for a managed user in case there is a necessity to do so. 1. Go to Settings icon **Settings > Users**. 2. Find a managed user on the list. 3. Click the Settings icon icon. **Result**: A dropdown list shows. 4. Select the **Reset password** option. **Result**: A pop-up appears. 5. Confirm by clicking **Reset**. **Result**: An email is sent to the email address of a user. The email includes a link that redirect a user to a reset password form. ## Resetting 2FA --- [Two factor authentication (2FA)](/docs/settings/your-account/account-security) requires a user to log in to the Synerise application with extra credentials. In addition to a login and password, a user enters a security code generated by an authentication app on their device.

This security measure can be enabled for managed and third party users, however, you can force the reset of two factor authentication only for the managed users.
1. Go to Settings icon **Settings > Users**. 2. Find a managed user on the list. 3. Click the Settings icon icon. **Result**: A dropdown list shows. 4. Select the **Reset 2FA** option. **Result**: A pop-up appears. 5. Confirm by clicking **Reset**. ## Revoking access --- You can revoke access to your workspace to any user any time. 1. Go to Settings icon **Settings > Users**. 2. Find a user on the list. 3. Click the Settings icon icon. **Result**: A dropdown list shows. 4. Select the **Revoke access** option. **Result**: A pop-up appears. 5. Confirm by clicking **Revoke**. ## Deleting accounts --- You can delete permanently an account of the managed user. 1. Go to Settings icon **Settings > Users**. 2. Find a user on the list. 3. Click the Settings icon icon. **Result**: A dropdown list shows. 4. Select the **Delete** option. **Result**: A pop-up appears. 5. Confirm by clicking **Delete**. # API Keys API keys are implemented in order to track and control the use of the API. Create the keys and assign permissions required for specific actions. They are essential when you integrate Synerise with other systems that you use in your daily work.
Keep the API keys secret. A leaked key must be deactivated **immediately**!
- We highly recommend changing API keys every 3-6 months for improved security. - Changes made to API keys (creating, deleting, modifying the settings) may take a few minutes to apply after saving.
**Permissions** Permissions allow you to define what kind of API methods are allowed when using an API key (the API methods are available at the link [here](https://hub.synerise.com/api-reference)). This allows users to create customized API keys for the needs of a particular integration. Such a structure provides you with safety when a key is stolen. As an additional form of protection, there is a possibility of defining IP addresses where the given API key can be used. **Allowlist and denylist** Allowlisting and denylisting in API keys allows you to configure which types of events can be sent to the event APIs when using that key. Events that manage promotions, transactions, loyalty points can be denylisted (or not included in the allowlist) for client-type API keys unless your business requires them to be allowed. Sensitive custom events used by your integration can be blocked too, to increase protection against fraud. ## Prerequisites --- - Plan the API key permission structure. - Your account's permissions must allow access to the API keys section. ## Adding API keys --- 1. Go to **Settings > API keys**. 2. Click **Add API key**. 3. On the pop-up: 1. Select the type of the key: - **Profile** - Used to authenticate profiles (for example, users of your mobile application). Allows them to register events, manage their accounts, get recommendations, and more. When authenticating with such a key, it's only possible to access the data of the profile that is authenticated. - **Workspace** - Used to authenticate as a workspace, usually for integrations such as sending batches of data. These keys are used for server-to-server communication and can be used to access all customer data, workspace settings, analytics, and more. **Workspace keys require stricter security** and can't be published or included in the code of your applications and websites. 1. In **API key name**, enter the name of the key. 3. Optionally, enter a description of the key to let other users know what it is for.
Adding a new API key
Adding a new API key
**Result**: The new API key appears on the top of the list.
Adding a new API key
A new API key on the list
4. [Open the API key for editing and configure the settings](#editing-api-keys). ## Editing API keys Open the settings of an API key by clicking the key in the list. The scope of options to configure depends on the type of the API key:
- **General**: general settings and information about the key. - **Permissions**: the types of operations that can be accessed with this key. - **Allowlist**: a list of events that can be created with this key. - **Denylist**: a list of events that can't be created with this key. - **Simple Profile Authentication**: a type of simplified authentication without a password. - **Profile modification allowlist**: a list of profile attributes and tags that can be modified with this key.
- **General**: general settings and information about the key. - **Permissions**: the types of operations that can be accessed with this key. - **Allowlist**: a list of events that can be created with this key. - **Denylist**: a list of events that can't be created with this key. - **IP access restriction**: IP addresses that can be used to authenticate with this key. - **Basic workspace authentication**: a type of simplified authentication for server-to-server communication. Requires additional security measures. - **Profile modification allowlist**: a list of profile attributes and tags that can be modified with this key.
There is no need to refresh the JWT for API keys after updating them. The token will automatically reflect the new settings within a few minutes.
### General settings --- In this section, you can get your API key and change its name and/or description.
Adding a new API key
General settings section
### Permissions --- In this section, you can select the range of permissions for a single API key.
List of permissions
List of permissions
The permission matrix is divided into modules. To grant specific permissions within a module, select the checkbox. The name of the permission corresponds with the name of permissions required for the API method in the API documentation.
Adding a new API key
Permissions in the API documentation
### Allowlist --- In this section, you can create a list of events which can be authenticated with the API key. - This setting only affects the events sent through mobile SDK and custom events generated through API. Events generated by the Synerise backend will be accepted regardless. - The allowlist should only include events that are necessary for your integrations to work.
If you add at least one event to the list, events that are not on the list are rejected, even if permission and IP address settings allow them.
List of events authenticated with the API key
List of events authenticated with the API key
To add an event to the list: 1. Enter the name of the event in the text field. 2. From the dropdown list, you can select more events. 3. Confirm your choice by clicking **Add**. ### Denylist --- In this section, you can create a list of events which cannot be authenticated with the API key. This setting affects only the events sent through mobile SDK and custom events generated through API. Events generated by the Synerise backend will be accepted regardless.
List of events that cannot be authenticated with the API key
List of events that cannot be authenticated with the API key
To add an event to the list: 1. Enter the name of the event in the text field. 2. From the dropdown list, you can select more events. 3. Confirm your choice by clicking **Add**. ### IP access restriction --- This list allows you to define IP addresses from which requests with JWT generated with the API key will be accepted. This way, when an API key is stolen, and the fake requests are sent with JWT generated with the stolen key, they will be blocked because they are sent from a non-accepted IP address.
Blank IP access restriction section
Blank IP access restriction section
4. In the text field, enter an IP address. 5. Confirm by clicking **Add address**. 6. To add more addresses, repeat steps 1 and 2. ### Basic workspace authentication This option is only available for workspace API keys. It allows you to simplify API integrations, but requires additional security measures compared to JWT. This type of authentication uses a static login (workspace GUID) and password (API key) instead of JWTs that need to be regularly refreshed. For more details, see ["Basic API authentication with API keys" in "Workspace authentication"](/developers/api/api-authorization/workspace-login#basic-api-authentication-with-api-keys). If you need to enable basic workspace authentication: 1. Switch the **Enable workspace authentication** option on. 2. On the confirmation pop-up that appears, click **Apply**. **Result:** Basic workspace authentication is enabled. You can copy the workspace's GUID (used as the login part of the authentication) from the settings:
Basic authentication enabled, the workspace GUID is shown
Basic workspace authentication enabled, the workspace GUID is shown
You can now use basic authentication in API endpoints that are available to workspaces. ### Simple profile authentication This option is available only for profile API keys. [Simple profile authentication](/developers/mobile-sdk/user-identification-and-authorization/simple-authentication) is a method available in Mobile SDK and it authenticates customers based on email address or custom ID. For additional security, you can enable a salt (recommended). After you enable the **Authentication salt** toggle, it will be generated automatically in the **Salt** field and it must be added to the initialization script and kept encrypted in the code.
The complete instruction on implementing simple profile authentication in mobile SDK is available [here](/developers/mobile-sdk/user-identification-and-authorization/simple-authentication#integration-process).
### Profile modification allowlist Profile modification allowlist is an option that lets you specify which profile attributes and tags can be changed when using a specific API key for authentication and updating profiles. This helps you control and limit the scope of modifications that can be made using that API key. For example, the request for changing the first name and address will be rejected (403 error will be returned in response) if these attributes aren't selected in the profile modification allowlist. To be able to choose from any [attributes](/docs/crm/customer-properties), and/or tags, you must either create them in **Data Modeling Hub > Profile attributes** and **Data Modeling Hub > Profile Tags** respectively or send them through API.
If you use [Simple Profile Authentication](/developers/mobile-sdk/user-identification-and-authorization/simple-authentication), the attribute allowlist must include: - `UUID` - `email` or `customId` (depending on the identifier you will use in [this method](/developers/mobile-sdk/user-identification-and-authorization/simple-authentication#authentication-methods))
## Copying API keys 1. In the list of keys, find the key and click the Three dot icon icon. 2. In the menu that opens, click the key. **Result**: The key is copied into the clipboard. Alternatively, you can copy the key or scan its QR code in the key's [General settings](#general-settings). ## Deleting API keys When you delete an API key, it stops working. Any integrations that use the key will be disabled. Leaked or compromised keys should be deleted.
- Before deleting a key, make sure that it's not used in any integrations. - Deleting API keys is irreversible.
1. In the list of keys, find the key and click the Three dot icon icon. 2. In the menu that opens, click **Delete**. 3. In the pop-up that opens, confirm by clicking **Delete**. **Result**: The key is deleted. It can no longer be used to authenticate and access data. # Integrating Magento with Synerise This document provides integration instructions for the v2.x and higher plugin versions, which support both *single-store* and *multi-store* implementations. The Synerise users can integrate their websites built on the Magento platform. The scope of integration involves the transmission of the following data from Magento to Synerise: - information about the customers (their activity, identification of a customer throughout the whole journey), - information about the transactions, - information about the items
From 23 Mar, 2024, we support only the Magento versions that are officially supported by Adobe: 2.4.x and higher; and version 2.3 for backward compatibility. We recommend to always keep up with the Magento updates, as suggested by the Magento team.
## Prerequisites --- 1. You must be granted user permissions to access API key section and add the key in Synerise. 2. You must have access to admin panel in the Magento platform. ## Configuration in Synerise --- Log in to your workspace in Synerise and perform the steps described below: ### Create an API key --- 1. In Synerise, go to **Settings > API Keys > Add API key**. 2. On the pop-up: 1. Enter the name of the API key (it will be visible on the list of API keys). 2. Select **Workspace**. 3. Optionally, enter the description of the key (it will be visible on the list of API keys).
Adding a new API key for the Magento integration
Adding a new API key for the Magento integration
3. Confirm by clicking **Save**. 4. Find the key on the top of API key list and click **Permissions**. 5. On the pop-up, select the following permissions: - **CATALOG**: - CATALOGS_CATALOG_CREATE - CATALOGS_CATALOG_READ - CATALOGS_ITEM_BATCH_CATALOG_CREATE - **CLIENT**: - API_BATCH_CLIENT_CREATE - API_CLIENT_CREATE - **EVENTS**: - API_ADDED_TO_CART_EVENTS_CREATE - API_ADDED_TO_FAVORITES_EVENTS_CREATE - API_CUSTOM_EVENTS_CREATE - API_LOGGED_IN_EVENTS_CREATE - API_LOGGED_OUT_EVENTS_CREATE - API_REGISTERED_EVENTS_CREATE - API_REMOVED_FROM_CART_EVENTS_CREATE - **SEARCH**: - ITEMS_SEARCH_CONFIG_SEARCH_CREATE, - ITEMS_SEARCH_CONFIG_SEARCH_UPDATE, - ITEMS_SEARCH_CONFIG_SEARCH_READ, - ITEMS_SEARCH_SEARCH_READ - **TRACKER** - TRACKER_CREATE - **TRANSACTION** - API_BATCH_TRANSACTION_CREATE - API_TRANSACTION_CREATE
Permissions for the API key required by the Magento integration
Permissions for the API key required by the Magento integration
6. Confirm by clicking **Apply settings**. 8. On the **General** section, click **Show**. 9. Copy the API key and paste to the notepad.
Details of the API key
Details of the API key
#### Enable basic workspace authentication (optional) By default, the authorization process involves obtaining a token with a limited lifespan. To acquire this token, you must send a request. Alternatively, basic workspace authentication requires only the usage of the workspace GUID and API key, eliminating the need for additional requests or timeouts. However, this approach may increase vulnerability. The full instruction is available in ["Basic workspace authentication"](/docs/settings/tool/api#basic-workspace-authentication) ## Configuration in the Magento panel --- Log in to your administration panel in Magento and perform the steps described below: ### Download the Synerise plugin --- To download the Synerise plugin in Magento, click [here](https://github.com/Synerise/magento2-integration). ### Add a workspace --- In this part of the process, you need to add a Synerise workspace to your Magento administration panel by using the API key of a workspace. This will allow you to exchange the data between Synerise and Magento. 1. In your Magento administration panel, go to **Marketing > Synerise > Workspaces**. 2. Click **Add workspace**. 3. From the **Environment** dropdown list, select the option according to your Synerise deployment variant. 4. In the **Api Key** field, enter the API key you [created in the previous steps](#create-an-api-key). 5. If you want to use [basic workspace authentication](/docs/settings/tool/api#basic-workspace-authentication): 1. Set the **Enable** option to **Yes**. 2. In the **GUID** field, enter the GUID you obtained while performing the ["Basic workspace authentication"](/docs/settings/tool/api#basic-workspace-authentication) procedure.
Adding a workspace
Adding a workspace
6. To add more workspaces, repeat actions from step 2 onwards. ### Assign workspace to your website --- In this part of the process, assign the workspace you added to the Magento administration panel to the website you manage in Magento. This way, you can exchange data between Synerise and a website in Magento. 1. Go to **Stores > Configuration > Synerise**. 2. In the **Website** section, assign a workspace to your website by selecting a workspace from the dropdown list. 3. If you have more websites, you can assign more workspaces to them. 4. In the **Stores** section, you can select stores for event tracking and [data synchronization with Synerise](/docs/settings/tool/magento/synchronizing-data-between-synerise-and-magento).
Assigning a workspace to a website
Assigning a workspace to a website
### Enable page tracking --- In this part of the process, you can enable tracking the customer activity in your store by [a tracking code](/developers/web/installation-and-configuration) which is added automatically as you assign workspaces to the websites. You can also set advanced options related to page tracking in this section as well. 2. On the left panel, select the **Tracking** section. 1. Set the **Enabled** option to **Yes**. 3. **Recommended**: Set the **Open Graph** option to **Yes**. **Result**: Magento sends the following OG tags to Synerise: - `product:retailer_part_no` which is the SKU of the item, - `product:original_price:amount` which is the original price (before discounts, if any) - `product:price:amount` which is the current price of the item
When **Open Graph** is switched off, the `product:retailer_part_no parameter` parameter is not added to the [page.visit](/docs/assets/events/event-reference/web-and-app#pagevisit) events. This means the event doesn't include an identifier of the viewed event, preventing the generation of Synerise recommendations based on the Similar model, if you use any. Cart and transaction events remain unaffected.
3. In case you need to customize the tracking code, in the **Custom script** subsection, set the **Enabled** option to **Yes**. And then, make changes to the code. 4. If multiple subdomains share a single workspace, in the **Cookie domain** field enter the domain of the common cookies. 5. If you need a custom implementation of the `page.visit` event, in the **Custom Page Visit** field select **Yes**. And then make changes to the code. 6. If you use the [tracking code for single page applications](/developers/web/installation-and-configuration), change the **Virtual Page** option to **Yes**.
The Tracking section
The Tracking section
### Enable event tracking and queuing events --- In this part of the process, enable tracking of the backend events related to customers and products. Also, you can enable [queuing events](#queuing-events) instead of sending them in real time. By default, events are sent in real time. 1. In the left panel, select **Events** section 3. Select the scope of tracked events. 1. Set the **Enabled** option to **Yes**. 2. Select the events (`command + click` or `ctrl + click`) that will be tracked by Synerise and available in the [customers' profiles](/docs/crm/crm-profile). You can choose from the following events:
We recommend selecting all the events.
Click here to expand the list and description of events
Event Description Action name in Synerise
Customer login This event is generated when a customer logs in to
their account on your website.
client.login
Customer logout This event is generated when a customer logs out from
their account on your website.
client.logout
Customer updated This event is generated when a customer makes changes to their account (for example, updates information about birthday, location, and so on). client.updateData
Customer registration This event is generated when a customer creates an account on your website. client.register
Customer added product to cart This event is generated when a customer adds an item
to the cart.
product.addToCart
Customer removed product from cart This event is generated when a customer removes
an item from the cart.
product.removeFromCart
Cart updated This event is generated when a set of items in the cart changes - a customer deleted or added items. cart.status
Cart quantities updated This event is generated when the customer changes the amount of a particular item already present in the cart. cart.status
Order updated This event is generated when a customer changes the order. transaction.charge
Product updated This event is generated when a product has been edited - then the product is added to queue to be synchronized. n/a
Product deleted This event is generated when the product is removed from Magento. The product stays in the Synerise catalog and the `deleted=1` parameter is added. n/a
Product import This event is generated when a product has been edited through the import of data. n/a
Product "is salable" value changed This event is generated when the value of the `is_salable` parameter changes (this parameter defines whether a product can be sold) - then the product is added to queue to be synchronized. n/a
Product stock status changed This event is generated when the stock status of the product changes (stock status and `is_salable` parameter are not equivalent) - then the product is added to queue to be synchronized. n/a
Subscription updated This event is generated when a customer changes their marketing agreements. marketingAgreement.turnOn / marketingAgreement.turnOff / newsletter.unsubscribe
To synchronize additional data apart from those which are sent to Synerise through customer actions, go to the ["Enable data synchronization"](#enable-data-synchronization) section. 3. If you want to add the parameters from the [_snrs_param cookie](/developers/web/cookies#_snrs_params) to the [cart and transaction events](/docs/assets/events/event-reference/items), set the **Include Tracking Params** option to **Yes**. #### Queuing events Queuing events is based on the [Message Queues implementation](https://developer.adobe.com/commerce/php/development/components/message-queues/). When this option is enabled, the events are queued up and then sent through a consumer process. When this option is disabled, the events are sent in real time.
You can learn more about Message Queues in ["Message Queues logic" article](/docs/settings/tool/magento/magento-message-queues).
1. In the **Message Queues** section, set the **Enabled** option to **Yes**. 2. In the **Events to send by queue**, select the scope of events sent this way. The unselected events will be sent in real time. 3. In the upper right corner, click **Save Config**.
If you define new store views in Magento, execute the `bin/magento setup:upgrade` command.
The Events section
The Events section
### Enable data synchronization --- Follow the instructions in the [Synchronizing and exporting data](/docs/settings/tool/magento/synchronizing-data-between-synerise-and-magento) article. ### Define request settings --- In this part of the process, you can define the timeout period for the live and scheduled requests. A timeout defines the time to wait for a response. If the waiting time exceeds the value specified in the configuration, the request will be canceled. In the case of live requests, data may not be sent, hence using [event queuing](#enable-event-tracking-and-queuing-events) is recommended. 1. Go to **Stores > Configuration > Synerise > API**. 2. To define the timeout period for live requests, in the **Live requests** section, in the **Timeout** field, enter the value. 3. To define the timeout period for scheduled requests, in the **Scheduled requests** section, in the **Timeout** field, enter the value. 4. In the upper right corner, click **Save Config**. ### Enable request logging --- You can enable logging all activities in the Synerise module in Magento and easily access the log files in Magento. Each occurrence that needs to be logged, such as an error, triggers the generation of a corresponding log file. In this part of the process, you can: - enable logs of all activities in the Synerise module, which you can later download - enable saving full API request and response from Synerise API - exclude data from logs 1. In the **Debug** section, set the **Enable logging** option to **Yes**. 2. Go to **Content > Logs**. 3. On the list of files, find the one you want to download. 4. In the **Action** column, click **Download** The files contain data such as error descriptions, warnings, and so on.
The Synerise logs section in the Magento panel
The Synerise log section in the Magento panel
5. To enable saving full API requests and responses from Synerise API, in the **Debug** section, set the **API request logging** option to **Yes**. This option can be enabled only when the enable logging option is active. In such case, the requests and responses will be included in the log files. 6. To eliminate unnecessary data from logs, you can add these data to or delete the data in the **Debug** section on the **Exclude from logging** list. Any data included in this list will not appear in the logs.
The Debug section in the Magento panel
The Debug section in the Magento panel
# Approval Services This feature lets you establish a process of deciding which templates can be used in communications. By assigning reviewers and an approver, you indicate the users who will be responsible for verifying the quality and correctness of the templates and approving them. --- In the decision-making process, a user can have one of the following roles: - **Regular user** - A user who isn't a reviewer or an approver. Such a user creates a template and sends it to reviewers to get approval. - **Reviewer** - Responsible for verifying the template and giving a pre-approval. There is no limit on the number of reviewers in the system. - **Approver** - Gives a final approval for a template after the reviewers give their approvals. The process involves the following steps: **Creating a template > Testing > Pre-approval by reviewers > Final approval by an approver**
If you duplicate a template which received an approval, you will need to send the duplicated template to get an approval anyway.
## Configuration --- 1. Settings icon Go to **Settings > Approval services > Add service**. **Result**: A configuration pop-up appears.
Configuration form of approval service
Configuration form of approval service
2. On the pop-up: 1. In the **Service name** field, type the name of your service. This name will be used only for identification purposes. The service you create will be displayed on the list of services marked with the name you enter here. 2. From the **Microservice** dropdown list, choose the microservice within the application you want to design a decision-making process for. For one microservice you can create only 1 approval service. 3. From the **Approver** dropdown list, assign one approver out of the users who are added to a workspace. An approver is a person who gives a final approval to a message, without it the message cannot be sent. 4. Add reviewers by clicking **+ Add user**. Similarly to the approver, from the dropdown list, select a user who will act as a reviewer. You can add as many reviewers as you want to. Before an approver gives a final approve to the message, the reviewers need to verify and confirm the template. 5. If you want the approval of all reviewers to be required before the final approval from the approver, select the **All reviewers have to approve** checkbox. If this option is unselected, approval from only one reviewer is required before the final approval. 4. Confirm the settings by clicking **Save**. ## The approval flow --- ### Regular user perspective 1. The first step is creating a template by a regular user. Go to **Experience Hub** and when creating any type of communication, create a new template. In the upper-right corner, click **Send to approval** to send the template to reviewers.
Send to approval
Send to approval
2. Then the template is checked by reviewers.
Pre-approval
Pre-approval
3. In this stage all reviewers have approved the template and a user awaits for a final approve.
Sent to final approval
Pre-approval
4. The final approval is granted and the user may send the message.
Approved
Approved
### Reviewer perspective 1. A reviewer can check the list of message templates sent to be approved in **Settings > Approval Requests**.
A list of approval requests
A list of approval requests
2. The reviewer goes to the **Templates** folder (it is available in the message type in the **Experience Hub** feature) and accepts or rejects the templates that await for the review. When the reviewer decides to unapprove the template, then they can write reasons for this decision.
Template before the reviewer's approval
Template before the reviewer's approval
### Approver perspective 1. An approver can check the list of message templates sent to be approved in **Settings > Approval Requests**.
A list of approval requests
A list of approval requests
2. The approver goes to the **Templates** folder (it is available in the message type in the **Experience Hub** feature). The approver can either approve or unapprove the template. When the approver decides to unapprove the template, then they can write reasons for this decision.
Template before the final approve
Template before the final approve
## Template statuses in library view --- Any user that belongs to a workspace can see the template status in the template library. - **Approved** - The template received final approval and can be used in communication. - **Draft** - The template was rejected by the approver/reviewers. - **Pending X/X** - This label appears on the template that waits for pre-approval or final approval.
Approval status of a template
Approval status of a template
# Workspaces The Workspace lets you manage your company information and users and their permissions. # What is Co-Brand Decisioning Layer?
This feature is in a [public preview](/glossary/#public-preview) mode.
Co-Brand Decisioning Layer lets you create groups of connected workspaces (co-brand workspaces) that use a consistent profile identifier type (such as email or customID) across all workspaces in the group. Once grouped, you can: - Share segmentation results across workspaces — membership attributes with true/false values are created and regularly synchronized across the group, ensuring the same profile is consistently tagged in every workspace. - Create AI recommendation campaigns that return items from across all grouped workspaces. ## When is this feature useful? This feature is valuable for companies that manage multiple brands or business units under one organization, but currently keep customer data and marketing efforts in separate workspaces for each brand. Since many customers interact with several of these brands, isolated data limits the ability to understand their full journey and preferences. By unifying these brands within co-brand workspaces, you can create more coordinated, personalized, and effective campaigns — such as promoting complementary products from one brand based on purchases in another, targeting inactive customers across brands for reactivation, and so on. Additionally, co-brand workspaces help avoid redundant communications by preventing duplicate promotions across brands and enables prioritizing high-value customers with refined audience segmentation across the entire company. Ultimately, this feature lets you deliver relevant customer experiences at scale across all your brands. ## Synerise features affected When you enable Co-Brand Decisioning Layer, then the following features will be affected: ### Segmentations You can share segmentation results across workspaces, so you can build audiences that combine data from multiple workspaces using simple rules (AND, OR, NOT). This lets you create complex and targeted groups across brands. ### AI recommendations You can create recommendation campaigns that return items from across all grouped workspaces. The recommendation model is trained on behavioral data from all workspaces in the group, improving personalization for all customers — not only those whose profiles exist in multiple workspaces. For example, if workspace A is a sports brand and workspace B is a casual clothing brand, recommendation campaigns in workspace B can return sports clothing or accessories — and vice versa, campaigns in workspace A may return casual clothing items. #### Modes Co-brand workspaces operate in two modes for AI recommendations. The mode is determined automatically based on whether a common profile identifier is configured for the workspace group, and cannot be changed from the UI: - **Events** — used when no common identifier is configured. The AI model is trained on events from all workspaces (item views, clicks, purchases), but customer profiles are not unified across workspaces. Recommendations are still improved compared to a single-workspace model, because the model learns from cross-brand behavioral patterns. - **Model & events (Full)** — used when a common identifier is configured. In addition to combining events, the AI model unifies customer profiles across workspaces, enabling identity-aware personalization and delivering the best recommendation quality. ## Benefits --- - Better personalized messages for customers across brands. - Fewer duplicate messages, improving customer experience. - Smarter cross-selling opportunities between brands. - Increased customer lifetime value (LTV). ## What data can be shared? --- You can share segmentations across workspaces, so you can build audiences that combine data from multiple workspaces using simple rules (AND, OR, NOT). This lets you create complex and targeted groups across brands. ## Example uses --- - A customer buys shoes from Brand B, so Brand A promotes matching accessories. - Someone installs Brand B’s app, and Brand A introduces their products. - Customers inactive in Brand A but active in Brand B can be targeted for reactivation. - VIP customers from Brand B are invited to Brand A’s loyalty program. - Customers who browsed seasonal products in Brand B receive related messages from Brand A. - A customer who already received a promotion from Brand A is excluded from receiving the same promotion from Brand B within a set time frame. - High-value customers from Brand A are prioritized in Brand B's campaigns, while customers already engaged with Brand B are excluded. This feature helps you create seamless, smarter marketing across multiple brands without mixing all data together. ## General requirements --- - Contact the Synerise support to enable this feature. As part of the setup, support configures all product catalogs in the workspace group — the same requirement as for standard recommendation models. - All workspaces intended to be grouped must use the same [profile identifier attribute](/docs/settings/configuration/non-unique-emails), (either `email` or `customID`), to properly synchronize profiles. - Users creating co-brand audiences must have a user role which: - gives them access to the [Organization](/docs/settings/organizations) panel and lets them create workspace groups there. - lets them [share segmentation results and preview synchronization logs](/docs/settings/identity-access-management/permissions/analytics-permissions#share-segmentation-results-and-access-synchronization-logs). - Users creating recommendations based on co-brand personalization must ensure product feeds in co-brand workspaces have matching product IDs and a consistent category structure — categories, subcategories, and deeper levels must be the same across all grouped workspaces. ## Flow --- 1. [Create a group of workspaces which will share data](/docs/settings/workspace/multibrand-workspaces/create-workspace-group). 2. To share segmentation results across workspaces, [configure segmentation sharing](/docs/settings/workspace/multibrand-workspaces/sharing-segmentation-results): - The result of the segmentation will be saved as a [membership attribute](/docs/crm/customer-properties#managing-membership-attributes). - The membership attribute will be created and synchronized in all workspaces from the group. - You can define the [frequency of synchronizing](/docs/settings/workspace/multibrand-workspaces/sharing-segmentation-results#synchronization-frequency) (every 6 hours or once a day). - The membership attributes will be available in **Behavioral Data Hub > Attributes**. - The membership attributes will have predefined names, format: - display name: `: mbr `, however, you can change its [display name](/docs/crm/customer-properties#changing-display-name-and-description). - source name: `:_mbr_` 3. To create AI recommendation campaigns that return items from across all grouped workspaces, contact the Synerise support. The support team will confirm whether your workspace group meets the requirements and determine the appropriate mode for your setup. Then, the Co-Brand Personalization section will be available in the **Additional settings** section in the AI recommendation campaign configuration form. # AI recommendations with co-brand personalization ## What it does When workspaces are grouped as co-brand workspaces, recommendation campaigns in any workspace of the group can return items from across all grouped workspaces. The recommendation model is trained on behavioral data — item views, clicks, and purchases — from all workspaces in the group. This improves personalization for all customers, not only those whose profiles exist in multiple workspaces: - Customers who exist in multiple workspaces receive recommendations that draw from the combined item catalogs of all brands. - Customers who exist in only one workspace also benefit, because the model learns cross-brand behavioral patterns from other customers who shop across brands. The model handles catalog differences gracefully. Differences in feed schema, such as one workspace using a `brand` field and another using a `producer` field for the same concept, are handled automatically. Adding a workspace to the group only adds training data — it does not remove or replace data from any other workspace in the group. This does not guarantee that recommendation quality will match or exceed that of a single-brand model, though: if brands sell largely unrelated product types, for example footwear and cosmetics, prediction quality can vary. **Example:** Workspace A is a sports brand, workspace B is a casual clothing brand. A recommendation campaign in workspace B can return sports clothing or accessories — and vice versa, a campaign in workspace A may return casual clothing items. ## Recommendation models Co-brand personalization works for all [recommendation models](/docs/ai-hub/recommendations-v2/recommendation-types). ## Modes Co-brand workspaces operate in two modes for AI recommendations. The mode is determined automatically based on whether a common profile identifier is configured for the workspace group, and cannot be changed from the UI: - **Events** — used when no common identifier is configured. The AI model is trained on events from all workspaces (item views, clicks, purchases), but customer profiles are not unified across workspaces. Recommendations are still improved compared to a single-workspace model, because the model learns from cross-brand behavioral patterns. - **Model & events (Full)** — used when a common identifier is configured. In addition to combining events, the AI model unifies customer profiles across workspaces, enabling identity-aware personalization and delivering the best recommendation quality. ## Requirements See [General requirements](/docs/settings/workspace/multibrand-workspaces/about#general-requirements). For AI recommendations specifically: - A common profile identifier is not required. If one is configured for the workspace group, it operates in **Model & events (Full)** mode; if not, it operates in **Events** mode. See [Modes](#modes). ## Setting up 1. [Create a group of workspaces](/docs/settings/workspace/multibrand-workspaces/create-workspace-group). 2. Contact the Synerise support to enable co-brand personalization in AI recommendations. The support team will confirm whether your workspace group meets the requirements and determine the appropriate mode. 3. Once enabled, proceed to [creating an AI recommendation](/docs/ai-hub/recommendations-v2/creating-recommendation-campaign). 4. During the configuration, proceed to **Additional settings**. 4. Enable the **Co-Brand Personalization** toggle. - The badge next to the toggle label indicates the mode configured for your group. - The filter applied to the recommendations will consider items from co-brand workspaces. 5. You can [preview the recommendation results](/docs/ai-hub/recommendations-v2/previewing-recommendations#previewing-recommendation-customer-context). You can enable or disable inclusion of items from co-brand workspaces in the preview to compare results between the state of the option. ## Previewing results Instructions on previewing recommendation results for AI recommendations with co-brand personalization enabled are available in ["Previewing recommendations"](/docs/ai-hub/recommendations-v2/previewing-recommendations#previewing-recommendation-customer-context). # Connections The Connections feature facilitates management of connections established within workflows in Automation Hub. This feature lets you organize and oversee the connection activity. Apart from [creating](#creating-connections) and [editing connections](#editing-connections), you can view a list of connections categorized according to services, as well as create your own custom connection categories.
The list of connections
The list of connections
## Prerequisites --- You must be granted a user role that includes the `Connections` [permission](/docs/settings/identity-access-management/permissions#permissions) in the Settings permission catalog with the following scope: `READ`, `EXECUTE`, `CREATE`, `EDIT`, `DELETE`. You can read about assigning roles to users in the ["Roles" article](/docs/settings/identity-access-management/permissions). This permission allows: - previewing, creating, editing, and deleting connections - previewing and editing nodes which use connections - launching workflows that contain the nodes which use connections ## Creating connections --- You can create connections in the following places in the Synerise platform: - within the [integration nodes](/docs/automation/integration), for example, [creating a connection in Snowflake - "Get Data - Reverse ETL" node](/docs/automation/integration/snowflake/get-data-reverse-etl#create-a-connection) - in Settings Instruction in this section describes the process of creating a connection in Settings. 1. Go to **Settings > Connections > New connection**. **Result**: A pop-up appears.
The pop-up with services available for selection
The pop-up with services available for selection
2. From the list on the pop-up, select a service with which you want to connect. **Result**: A list of authorization methods appears. 3. Select the method of authorization with the service. For each service, the selection of the authorization methods differs. To get the instruction on authorizing with a selected service you want to connect, refer to the documentation of services available in [Integration](/docs/automation/integration). 5. After selecting the authorization method, fill out the configuration form. To get the instruction on filling out the form, refer to the documentation of the integration service you selected. 6. Confirm the settings in the configuration form by clicking **Create**. ## Editing connections --- To edit a connection: 1. Go to **Settings > Connections**. 2. Find the connection you want to edit. 3. Click the Three dot icon icon. 4. From the dropdown list, select **Edit**. 5. After you make the changes to the connection, confirm them by clicking **Apply**. # AI Hub permissions This article describes the [permissions](/docs/settings/identity-access-management/permissions) needed to use the [AI Hub](/docs/ai-hub). To set the permissions, you need to create a user role or edit an existing one and open the Permissions matrix. In the matrix, the permissions are collected into groups. Some of these groups can be expanded to set more granular permissions. ## How to read this list In this article, each heading describes an action. The permissions for that action are described in the form of breadcrumbs. **For example**, if the required permissions are: - **Profiles** > **Client list**: `read` - **Search engine**: `create`, `edit` The permission matrix needs to look like this:
Permission matrix in Synerise Settings showing Profiles with read access on Client list and Search engine with create and edit permissions
Permission example, see description above figure.
The `read` permission is not explicitly listed when any higher permission is required - the portal enables it automatically. ## I want to... ### work with AI Recommendations
For permissions needed to configure the AI engine, see ["Settings permissions"](/docs/settings/identity-access-management/permissions/settings-permissions#configure-ai-engine).
#### see Recommendations and statistics - **Communications** > **Recommendations**: `read` - **Assets** > **Catalogs**: `read` #### preview a Recommendation - **Profiles**: `read` - to search or select a profile from the list of all profiles - **Analytics** > **Segmentations**: `read` - to select a profile from a segmentation #### see Recommendation details, create and edit a recommendation - **Communications** > **Recommendations**: `create`, `edit` - **Settings** > **AI engine configuration**: `read` - **Analytics** > **Aggregates**, **Expressions**: `read` - **Search engine**: `read` This also enables saving and activating a Recommendation. #### duplicate a Recommendation **Communications** > **Recommendations**: `create`, `edit` #### delete a Recommendation **Communications** > **Recommendations**: `delete` ### work with Recommendation A/B/X tests - Recommendation permissions as described above - **Communications** > **Test optimizer**: - `read` - to see the tests - `create`, `edit` - to create and edit tests - `execute` - to run tests ### work with promotions #### see promotions - **Communications** > **Promotions**: `read` - **Analytics** > **Segmentations**, **Expressions**, **Aggregates**: `read` #### create, update and duplicate promotions - **Communications** > **Promotions**: `create`, `edit` - **Assets** > **Tags**: `read` - **Assets** > **Catalogs**: `read` #### publish and hide promotions **Communications** > **Promotions**: `create`, `edit` #### delete promotions **Communications** > **Promotions**: `delete` #### import promotions See ["Import data" in "Data Management permissions"](/docs/settings/identity-access-management/permissions/data-management-permissions#import-data). ### work with personalized promotions #### see personalized promotions **Communications** > **Personalized promotions**: `read` #### create, edit, and duplicate personalized promotions - **Communications** > **Personalized promotions**: `create`, `edit` - **Assets** > **Catalogs**: `read` #### publish and unpublish personalized promotions **Communications** > **Personalized promotions**: `create`, `edit` #### delete personalized promotions **Communications** > **Personalized promotions**: `delete` ### access AI search This allows you to see the indexes and suggestion indexes.
For permissions needed to configure the AI engine, see ["Settings permissions"](/docs/settings/identity-access-management/permissions/settings-permissions#configure-ai-engine).
- **Search engine**: `read` - **Settings** > **AI engine configuration**: `read` - **Assets** > **Catalogs**: `read` - For A/B tests: **Communications** > **Test optimizer**: `read` ### edit indexes, suggestion indexes, and A/B tests This includes managing synonyms and query rules.
Indexes may have individual access level configurations. To check your access level, hover over the padlock icon in the index's entry in the index list.
Example: checking your access level on a search index
Example: checking your access level on a search index
To change the access level of an index, see [Change index access settings](/docs/ai-hub/ai-search/change-index-access-settings). - **Search engine**: `edit` - **Settings** > **AI engine configuration**: `edit` - For A/B tests: **Communications** > **Test optimizer**: `edit` To run an A/B test, you need **Communications** > **Test optimizer**: `execute` - For query rules: **Analytics** > **Segmentations**: `read` ### create indexes, suggestion indexes, and A/B tests This includes managing synonyms and query rules. - **Search engine**: `create` - **Settings** > **AI engine configuration**: `create` - For A/B tests: **Communications** > **Test optimizer**: `create` To run an A/B test, you need **Communications** > **Test optimizer**: `execute` - For query rules: **Analytics** > **Segmentations**: `read` ### preview search/suggestion results **Profiles** > **Client list**: `read` - to select a preview context profile ### delete indexes, suggestion indexes, and A/B tests This includes managing synonyms and query rules.
Indexes may have individual access level configurations. To check your access level, hover over the padlock icon in the index's entry in the index list.
Example: checking your access level on a search index
Example: checking your access level on a search index
To change the access level of an index, see [Change index access settings](/docs/ai-hub/ai-search/change-index-access-settings). - **Search engine**: `delete` - **Settings** > **AI engine configuration**: `delete` - For A/B tests: **Communications** > **Test optimizer**: `delete` ### access Predictions This allows you to see the predictions: - **Predictions**: `read` - **Settings** > **Predictions**: `read` - **Settings** > **AI engine configuration**: `read` - **Search engine**: `read` - **Assets** > **Catalogs**: `read` ### create and edit predictions - **Predictions**: `create`, `edit` - **Analytics** > **Expressions**: `read` ### calculate, deactivate, and duplicate predictions **Predictions**: `create`, `edit` ### clone a prediction to another workspace In the source and target workspace, you need: - **Cloning**: `create` - all permissions for the cloned prediction and all nested objects that will also be cloned in the process. To learn more about cloning, see [Cloning objects to other workspaces](/docs/settings/workspace/cloning-objects). # Tracking Codes A tracking code is the fundament of operations users can perform in Synerise. When implemented, the tracking code monitors the behavior and activity of the users on the website you indicate. To learn how to implement the code in your pages, see [Getting started](/developers/web/installation-and-configuration) in the Developer Guide. # Creating a workspace group
This feature is in a [public preview](/glossary/#public-preview) mode.
A workspace group is a collection of workspaces created to synchronize profile information across them. This is a part of the Co-Brand Decisioning Layer feature, designed for businesses operating multiple brands under a single entity. By grouping workspaces, you can synchronize segmentation results across workspaces from the group, converting these results into membership attribute values (which are boolean — true or false). The synchronization process can be scheduled either every 6 hours or once a day. For detailed understanding of Co-Brand Decisioning Layer and the feature logic, refer to [What is Co-Brand Decisioning Layer?](/docs/settings/workspace/multibrand-workspaces/about) ## Prerequisites --- - To create and manage workspace groups, you must be an [organization user](/docs/settings/organizations) with an administrator role. - All workspaces intended to be grouped must use the same unique [profile identifier attribute](/docs/settings/configuration/non-unique-emails), (either `email` or `customID`), to properly synchronize profiles. - Review and understand the [limits](/docs/settings/workspace/multibrand-workspaces/limits-and-constraints) regarding the number of workspaces that can be included in a group. ## Procedure --- To create a workspace group: 1. Log in to the Synerise platform; on the list of workspaces, navigate to the organization section and select the organization in which you will group workspaces. **Result**: You are redirected to the list of workspaces assigned to the organization. 3. On the left panel, click **Add group**. **Result**: A pop-up appears. 4. In the **Group name** field, enter a meaningful name for the group to which you will add workspaces. 5. In the **Assigned workspaces** section, select workspaces to include in the group. - This way, later in the process, you can select workspaces from this group to share data. Become familiar with [the limits on the number of workspaces](/docs/settings/workspace/multibrand-workspaces/limits-and-constraints). - After saving this group, adding workspaces won’t be possible. Make sure your selection is final before proceeding. 6. Confirm by clicking **Apply**. 7. In the **Shared profile identifier** dropdown list, verify or select the profile attribute that uniquely identifies profiles in all selected workspaces. - This attribute is used to match the same profile across different workspaces. - The system automatically detects and selects one of available unique profile identifiers (email or customID) in all workspaces from the group. - You can review which profile identifier is currently configured in a workspace by logging into that workspace and going to **Settings > Identities**. If your workspace: - uses unique emails, this means that a profile is recognized based on email and customID - uses non-unique emails, this means that a profile is recognized based on customID only.
If you want to change the unique profile identifier in a workspace, consider it carefully, as it can potentially cause significant issues. You can manage the unique profile identifier under **Settings > Identities** within the workspace. The documentation on profile identifiers is available at [Identifiers](/docs/settings/configuration/non-unique-emails).
8. Confirm your choice by clicking **Apply**. ## Managing workspace groups --- After creating the group: - You can edit the group name. - You can remove workspaces from the group, but the group must always include at least two workspaces after any removals. ## What's next? --- Once you created your workspace group, you can [start sharing segmentation results to the group](/docs/settings/workspace/multibrand-workspaces/sharing-segmentation-results). # Identity & Access Management This section allows you to add new members to a workspace and grant specific user permissions. These permissions define the scope of actions users can perform and areas in the application they are allowed to access. # Common authentication settings The settings in the **Access Management** section can be shared by multiple registration and authentication methods.
Configuration of settings for account registration
General authentication and registration settings
## General 1. Go to Settings icon **Settings > Authentication for mobile apps**. 1. Open the general settings by clicking **Show** in the **General** section. 4. Configure the settings as described below and to save them, click **Apply**. ### Loyalty card assignment
After you enable this option: - don't implement any mechanisms that change the custom ID of a profile. - don't enable the **Identification based on OAuth response** option in [OAuth settings](/docs/settings/tool/iam-for-apps/oauth).
You can use this option to assign loyalty card numbers as `customId` to profiles. This happens when the profile is registered or authenticated for the first time. 1. Create a [voucher pool](/docs/assets/code-pools#creating-a-code-pool) that contains the values you want to use as loyalty card IDs. 2. To enable assigning codes to profiles, select the voucher pool from the **Loyalty card assignment** dropdown list. ### JWT lifetime In the **JWT lifetime** field, you can define the validity period of JSON Web Tokens (JWTs). By default, this period is set to 604800 seconds (one week). We strongly recommend setting the value of JWT lifetime to match the session lifetime in a mobile application. If you're not using authentication, set the JWT lifetime to a longer duration, such as 30 to 45 days. To change the setting, enter a new value in the **JWT lifetime** field and select a unit of time. ### Custom ID overwriting This option is related to [Loyalty card assignment](#loyalty-card-assignment). If you already have a database of customers (for example, after an import), their profiles may include the `customId` parameter. To overwrite existing `customId`'s with codes from the loyalty card pool, change the toggle to **enabled**. ### Allow forcing custom ID at registration This option is only available when **Loyalty card assignment** is enabled. If your Profiles receive custom IDs from a voucher pool during registration, you can enable this option to allow overriding it by sending a custom ID in the registration request. If no custom ID is sent in the registration request, a value is selected from the pool as usual. ### External ID overwriting External ID is a unique identifier assigned to a customer in the external identity providers services. This external ID can be saved in Synerise as an attribute. - When this option is enabled, you can overwrite a customer's external ID saved in Synerise with the external ID received from identity providers (such as Facebook, Google, OAuth). For example, when a Facebook account of a customer is deleted and then a new account is created on Facebook with the same email address, the account ID in Facebook changes. When a customer tries to log in to your application with this new account, the external ID is overwritten in Synerise and the customer is logged into the existing Synerise account that uses this email. - When this option is disabled, the log-in attempts in situations presented in the previous paragraph will be blocked because the external ID provided in the log-in attempt is different from the external ID saved in Synerise. ### Email address change Enabling this option allows a customer change their email address by clicking a link sent in a message. - When enabled, customers can request an email change by using methods from the [Mobile SDK](/developers/mobile-sdk/method-reference) or the [API](https://hub.synerise.com/api-reference/profile-management#operation/changeEmailRequestUsingPOST). - When disabled, email change is only possible through an API call that updates the profile, for example `POST /v4/clients/{clientId}` (see [API reference](https://hub.synerise.com/api-reference/data-management#operation/UpdateAClient)). ## Templates In the common settings, you can set templates for email change confirmation and email change notification. To let customers request and confirm email changes, you need to use dedicated methods from the [Mobile SDK](/developers/mobile-sdk/method-reference) or the [API](https://hub.synerise.com/api-reference/profile-management#operation/changeEmailRequestUsingPOST). If you skip this section without selecting or creating templates, default templates are used. 1. Go to Settings icon **Settings > Authentication for mobile apps**. 1. In the **Templates** section, click **Show**. 2. In the upper part, configure the email that the customer receives for confirming the address change: 1. Enter a subject. 4. Expand the dropdown and select a template or [create a new one](/docs/campaign/e-mail/creating-email-templates) by clicking **Create new template**. 3. In the lower part, configure the email sent to the customer after the address changes: 1. Enter a subject. 4. Expand the dropdown and select a template or [create a new one](/docs/campaign/e-mail/creating-email-templates) by clicking **Create new template**. 4. Click **Apply**. ### Jinjava for email change templates In email change templates, you can use Jinjava described in [Inserts](/developers/inserts) and inserts specific to email changes: | Insert | Description | | --- | --- | | `{{client_email_change_url}}` | Provides a generic Synerise link for an email change process, for example: `https://api.synerise.com/sauth/clients/email-change/form/_profile_hash_/{{client_email_change_token}}` | | `{{client_email_change_token}}` | Provides a confirmation token that can be used when you want to pass a confirmation token through the API/SDK or through your own website when you want Universal Links to be captured by a mobile application. | | `{{new_email}}` | Inserts the new email that was provided in the email change request. | ### Example email change templates You can use the examples to base your own templates on them.
Example email change confirmation template
Email change request template
Email change confirmation template
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <style type="text/css"> /* Outlines the grid, remove when sending */ table td { /* border: 1px solid cyan; */ } /* CLIENT-SPECIFIC STYLES */ body, table, td, a { -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; } table, td { mso-table-lspace: 0pt; mso-table-rspace: 0pt; } img { -ms-interpolation-mode: bicubic; } /* RESET STYLES */ img { border: 0; outline: none; text-decoration: none; } table { border-collapse: collapse !important; } body { margin: 0 !important; padding: 0 !important; width: 100% !important; } /* iOS BLUE LINKS */ a[x-apple-data-detectors] { color: inherit !important; text-decoration: none !important; font-size: inherit !important; font-family: Arial, sans-serif !important; font-weight: inherit !important; line-height: inherit !important; } /* ANDROID CENTER FIX */ div[style*="margin: 16px 0;"] { margin: 0 !important; } </style> </head> <body style="margin:0; padding:0; background-color:#fff;"> <center> <div style="background-color:#fff; max-width: 600px; margin: auto;"> <!--[if mso]> <table role="presentation" width="600" cellspacing="0" cellpadding="0" border="0" align="center"> <tr> <td> <![endif]--> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="center" valign="middle" style="padding:10px;"></td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td width="200" align="left" valign="middle" style="padding:10px;"> <img alt="Synerise" src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/030d47ff7f497bf302d3248641a216ad.png" style="width: 140px;"> </td> <td width="200" align="center" valign="middle" style="padding:10px;"></td> <td width="200" align="center" valign="middle" style="padding:10px;"></td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td width="400" align="left" valign="middle" style="padding:10px; font-weight: bold; font-size: 28px; font-family: Arial, sans-serif; color:#384350"> Hi, {% user firstname %} </td> <td width="200" align="center" valign="middle" style="padding:10px;"> <img width="91" src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/38937e17f860105ccfea3df81558734b.png" alt="Synerise logo" /> </td> </tr> <tr> <td width="400" align="left" valign="middle" style="padding:10px; font-weight: bold; font-size: 22px; font-family: Arial, sans-serif; color:#384350"> We heard you need to change e-mail address of your account</td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px"> <a style="background-color: #0c68ff;border-color: #0c68ff;color: #ffffff;cursor: pointer;display: inline-block;font-size: 14px;font-weight: 500;margin: 0;padding: 12px 25px;text-decoration: none;text-transform: capitalize; border: solid 1px #0c68ff;border-radius: 3px;box-sizing: border-box;font-family: Arial, sans-serif;" href="{{client_email_change_url}}" target="_blank">Confirm e-mail change</a> </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> Once you confirm e-mail change you may sign-in with your updated credentials. </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> If you haven't initiated e-mail change please do not confirm that process and contact with our Support Team immediately through e-mail: <a href="mailto:support@synerise.com" style="color: #0c68ff; font-weight: bold;">support@synerise.com</a> </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> Have a good day,<br /> The Synerise Team </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="center" valign="middle" style="padding:10px;"> <hr style="border: 1px solid #e5e5e5;" /> </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px; font-size: 14px;font-family: Arial, sans-serif; color:#b6bdc4;line-height: 22px;"> Have questions? The Synerise Team is here to help.<br /> Please contact <a href="support@synerise.com" style="color: #0c68ff; font-weight: bold;">support@synerise.com</a> </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td width="25" align="center" valign="middle" style="padding:10px;"> <a href="https://www.facebook.com/synerise"><img src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/778ed84375be209b05f2fb333f7bbb16.png" width="20" style="margin:0; padding:0; border:none; display:block;" border="0" class="img" alt="Synerise on Facebook"></a> </td> <td width="25" align="center" valign="middle" style="padding:10px;"> <a href="https://www.youtube.com/c/Synerise/"><img src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/eadde6165d2421eb5f98d9654006d9ee.png" width="20" style="margin:0; padding:0; border:none; display:block;" border="0" class="img" alt="Synerise on YouTube"></a> </td> <td width="25" align="center" valign="middle" style="padding:10px;"> <a href="https://www.linkedin.com/company/synerise/"><img src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/42126cc8dfb468a79dc4b37c45082b78.png" width="20" style="margin:0; padding:0; border:none; display:block;" border="0" class="img" alt="Synerise on LinkedIn"></a> </td> <td width="25" align="center" valign="middle" style="padding:10px;"> <a href="https://twitter.com/synerise"><img src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/f2512acc01435e5cd10edfc0e419908b.png" width="20" style="margin:0; padding:0; border:none; display:block;" border="0" class="img" alt="Synerise on Twitter"></a> </td> <td width="500" align="center" valign="middle" style="padding:10px;"></td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px; font-size: 10px;font-family: Arial, sans-serif; color:#b6bdc4;line-height: 16px;">The administrator of your personal data is SYNERISE S.A. with its registered office at ul. Lubostroń 1, 30-383 Kraków,entered into the Register of Entrepreneurs of the National Court Register by the District Court for Kraków-Śródmieście in Kraków, 11th Commercial Division of the National Court Register under the number: 0000468034. You can contact the Administrator regarding the protection of personal data by email at the followingaddress: <a target="_blank" href="mailto:iod@synerise.com">iod@synerise.com</a>, or by traditional mail sent to the address of the Administrator's seat, i.e. SYNERISE S.A. ul. Lubostroń 1.30-383 Kraków. </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="center" valign="middle" style="padding:10px;"></td> </tr> </table> </td> </tr> </table> <!--[if mso]> </td> </tr> </table> <![endif]--> </div> </center> </body> </html>
Example email change notification template
Selecting system email templates
Email change notification template
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <style type="text/css"> /* Outlines the grid, remove when sending */ table td { /* border: 1px solid cyan; */ } /* CLIENT-SPECIFIC STYLES */ body, table, td, a { -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; } table, td { mso-table-lspace: 0pt; mso-table-rspace: 0pt; } img { -ms-interpolation-mode: bicubic; } /* RESET STYLES */ img { border: 0; outline: none; text-decoration: none; } table { border-collapse: collapse !important; } body { margin: 0 !important; padding: 0 !important; width: 100% !important; } /* iOS BLUE LINKS */ a[x-apple-data-detectors] { color: inherit !important; text-decoration: none !important; font-size: inherit !important; font-family: Arial, sans-serif !important; font-weight: inherit !important; line-height: inherit !important; } /* ANDROID CENTER FIX */ div[style*="margin: 16px 0;"] { margin: 0 !important; } </style> </head> <body style="margin:0; padding:0; background-color:#fff;"> <center> <div style="background-color:#fff; max-width: 600px; margin: auto;"> <!--[if mso]> <table role="presentation" width="600" cellspacing="0" cellpadding="0" border="0" align="center"> <tr> <td> <![endif]--> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="center" valign="middle" style="padding:10px;"></td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td width="200" align="left" valign="middle" style="padding:10px;"> <img alt="Synerise" src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/030d47ff7f497bf302d3248641a216ad.png" style="width: 140px;"> </td> <td width="200" align="center" valign="middle" style="padding:10px;"></td> <td width="200" align="center" valign="middle" style="padding:10px;"></td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td width="400" align="left" valign="middle" style="padding:10px; font-weight: bold; font-size: 28px; font-family: Arial, sans-serif; color:#384350"> Hi, {% user firstname %} </td> <td width="200" align="center" valign="middle" style="padding:10px;"> <img width="91" src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/38937e17f860105ccfea3df81558734b.png" alt="Synerise logo" /> </td> </tr> <tr> <td width="400" align="left" valign="middle" style="padding:10px; font-weight: bold; font-size: 22px; font-family: Arial, sans-serif; color:#384350"> We have changed your e-mail address</td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> E-mail address associated with your account has been successfully changed per your request. Your new e-mail address: {{new_email}}</td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> If you haven't initiated e-mail change please contact with our Support Team immediately through e-mail: <a href="mailto:support@synerise.com" style="color: #0c68ff; font-weight: bold;">support@synerise.com</a> </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> Have a good day,<br /> The Synerise Team </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="center" valign="middle" style="padding:10px;"> <hr style="border: 1px solid #e5e5e5;" /> </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px; font-size: 14px;font-family: Arial, sans-serif; color:#b6bdc4;line-height: 22px;"> Have questions? The Synerise Team is here to help.<br /> Please contact <a href="support@synerise.com" style="color: #0c68ff; font-weight: bold;">support@synerise.com</a> </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td width="25" align="center" valign="middle" style="padding:10px;"> <a href="https://www.facebook.com/synerise"><img src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/778ed84375be209b05f2fb333f7bbb16.png" width="20" style="margin:0; padding:0; border:none; display:block;" border="0" class="img" alt="Synerise on Facebook"></a> </td> <td width="25" align="center" valign="middle" style="padding:10px;"> <a href="https://www.youtube.com/c/Synerise/"><img src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/eadde6165d2421eb5f98d9654006d9ee.png" width="20" style="margin:0; padding:0; border:none; display:block;" border="0" class="img" alt="Synerise on YouTube"></a> </td> <td width="25" align="center" valign="middle" style="padding:10px;"> <a href="https://www.linkedin.com/company/synerise/"><img src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/42126cc8dfb468a79dc4b37c45082b78.png" width="20" style="margin:0; padding:0; border:none; display:block;" border="0" class="img" alt="Synerise on LinkedIn"></a> </td> <td width="25" align="center" valign="middle" style="padding:10px;"> <a href="https://twitter.com/synerise"><img src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/f2512acc01435e5cd10edfc0e419908b.png" width="20" style="margin:0; padding:0; border:none; display:block;" border="0" class="img" alt="Synerise on Twitter"></a> </td> <td width="500" align="center" valign="middle" style="padding:10px;"></td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px; font-size: 10px;font-family: Arial, sans-serif; color:#b6bdc4;line-height: 16px;">The administrator of your personal data is SYNERISE S.A. with its registered office at ul. Lubostroń 1, 30-383 Kraków,entered into the Register of Entrepreneurs of the National Court Register by the District Court for Kraków-Śródmieście in Kraków, 11th Commercial Division of the National Court Register under the number: 0000468034. You can contact the Administrator regarding the protection of personal data by email at the followingaddress: <a target="_blank" href="mailto:iod@synerise.com">iod@synerise.com</a>, or by traditional mail sent to the address of the Administrator's seat, i.e. SYNERISE S.A. ul. Lubostroń 1.30-383 Kraków. </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="center" valign="middle" style="padding:10px;"></td> </tr> </table> </td> </tr> </table> <!--[if mso]> </td> </tr> </table> <![endif]--> </div> </center> </body> </html>
# Enabling the SMSBIZ integration In this article, you will find out how to enable the SMSBIZ integration in Synerise and how to create an SMS sender account in Synerise which will allow you to send text messages to your profiles (for example, customers). ## Prerequisites --- - Create an account in SMSBIZ. - In the SMSBIZ documentation, check the text message limits imposed by SMSBIZ. While planning SMS campaigns and sending SMS batches, take these limits into consideration. ## Enabling the integration --- 1. Go to Settings icon**Settings > Apps & Services**. 2. In the list of integrations, find SMSBIZ and next to the integration name, click **Show**. - If there is a connection, you may proceed to [Creating SMSBIZ SMS account in Synerise](#creating-smsbiz-sms-account-in-synerise) - If there is no connection or you want a new one, proceed with the integration settings. 3. Click **Add connection**. **Result**: A pop-up appears. 4. On the pop-up, switch the **Enable integration** toggle. 5. In the **Username** field, enter the login or email address based on which your SMSBIZ account is created. 3. In the **Password** field, enter the password to your SMSBIZ account. 4. Click **Next**. 5. In the **Connection name** field, enter the name of the connection which will be visible on the list of SMSBIZ integrations in Synerise in **Settings > Apps & Services**. 6. Click **Apply** and confirm by clicking **Yes**. 7. Proceed to [creating a sender account](#creating-smsbiz-sms-account-in-synerise). ## Creating SMSBIZ SMS account in Synerise --- After enabling the connection, you need to create a sender account in Synerise, which can be used in communication. 6. Go to **Settings > SMS > Add account**. 7. In the **Account name** field, enter the name of your SMS account. It's used only on the list of SMS accounts in Synerise. 8. In the **From name (SenderId)** field, enter the telephone number or alias (if supported by your plan) which will be shown to the recipients. 9. From the SMS provider list, select **SMSBIZ**. 10. From the **SMSBIZ integration** dropdown list, select the connection you created in [the previous part of the process](#enabling-the-integration). 10. Finish by clicking **Apply**. **Result**: You can now use this sender when configuring SMS communication. # Configure AI engine for AI Search Before you can use [AI Search](/docs/ai-hub/ai-search), you must prepare an item catalog which will be the source of items. During the configuration of the AI engine for the search, you must go through the following steps: 1. [Adding product feed](#adding-item-feed) 2. [Selecting a product feed](#selecting-item-feed) 3. [Selecting attributes for preview](/docs/settings/configuration/ai-engine-configuration/engine-configuration-for-search#selecting-attributes-for-preview) 4. [Grouping feed attributes](#grouping-feed-attributes) 5. [Enabling AI Search](#enabling-ai-search-for-the-feed)
You may use the same item catalog for configuring AI Search, Propensity, and Recommendations. As a result, all these features will use the same source of items.
## Adding item feed --- The first step is selecting the feed from which items will be sourced. You can either select a catalog that contains a feed or use Google Merchant Feed. Make sure, the item feed includes the following attributes: - `title` - The name of the item - `category` - The category of the item You can read about requirements for item feed: - [uploaded to a catalog](/docs/ai-hub/item-feed/item-feed-in-catalog) - [pulled from an URL](/docs/ai-hub/item-feed/google-merchant-feed) Grouping feed attributes is available for this feed type. If you previously configured a feed which you want to use now, you can omit this step.
- We recommend using Google Merchant XML instead of XML files due to the size limits (an XML file cannot exceed 10 MB). - If you're enabling AI engine for visual similarity recommendation model, select the item feed which contains less than 1,000,000 items.
1. Go to **Settings > AI engine configuration**. 2. Click **Add feed**. **Result**: A pop-up appears.
A pop-up with feed type selection
A pop-up with feed type selection
3. Select the product feed you want to use. - **Catalog** 1. On the pop-up, select the type of catalog: - Data catalog - [Metadata catalog](/docs/ai-hub/item-feed/metadata-catalog) 2. From the dropdown list, select a catalog.
A pop-up with catalog type selection
A pop-up with catalog type selection
3. Confirm by clicking **Apply**. **Result**: An item feed based on the contents of the selected catalog appears on the list in **Settings > AI Engine configuration**. - **Google Merchant**
Include the [Last-Modified](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified) header to enable detection of whether the product feed import is necessary, this will help you reduce data transmission costs.
1. Provide the following information: - the link to the Google Merchant feed (**Feed link**), - the name of the field (**Feed name**), this name will be visible on the list of item feeds in Synerise in **Settings > AI Engine Configuration** - the frequency of pulling updates from the feed to Synerise (**Interval**), - authentication type (**Authentication type**), - username and password (**Basic** authentication type) - username, password, token type, URL (**Bearer** authentication type)
A pop-up with configuration of pulling data from Google Merchant Feed
A pop-up with configuration of pulling data from Google Merchant Feed
2. Proceed to the next step by clicking **Next**. 3. If you want to group feed attributes, enable the toggle. Further [grouping settings are defined](#grouping-feed-attributes) after adding the feed. Grouping feed attributes refers to organizing the attributes or fields within an item feed into logical groups. Instead of treating each product variant — such as different sizes or colors — as a separate item in the feed, all variants of a product are combined and grouped into a single item.
A pop-up with enabling grouping feed attributes
A pop-up with enabling grouping feed attributes
This action is irreversible after applying.
4. Confirm by clicking **Apply**. **Result**: The feed appears on the list in **Settings > AI Engine configuration**. ## Selecting item feed --- 1. In **Settings > AI Engine Configuration**, on the list of feeds, click the feed you added according to the [Adding item feed](#adding-item-feed) procedure. The configuration form opens. In the **Item catalog** section, the feed you are configuring is selected automatically and you can proceed to the next part of the configuration.
Blank model configuration form
Blank model configuration form
[Supplemental catalogs](/docs/ai-hub/item-feed/supplemental-catalog) are used exclusively for recommendations. When you [add a supplemental catalog and connect it to an item feed](/docs/ai-hub/item-feed/supplemental-catalog#create-a-supplemental-catalog-feed-linked-to-your-catalog), the attributes from the supplemental catalog become available as [Supplemental attributes](/docs/ai-hub/item-feed/supplemental-catalog#supplemental-attributes) in the [recommendation filters](/docs/ai-hub/recommendations-v2/recommendation-filters).
## Selecting attributes for preview --- Define attributes whose values will appear in the [preview of AI Search results](/docs/ai-hub/ai-search/previewing-search-engine-results) when you test the search settings. Without this, the AI search isn't available. 1. On the **Attributes for preview** tab, click **Show**. 2. In the **Response attribute** column, from the lists select the attributes that contain the data in the **Item attributes** column. **Example**: If the data source stores the item title in the `itemTitle` attribute, choose `itemTitle`: on the right, select the `itemTitle` attribute as the pair for `Title` from the left column. **Result**: Values for the attributes that are chosen in the **Response attribute** column will be shown for products when previewing them in the Synerise platform.
Attributes for preview tab
Attributes for preview tab
This setting is shared by the Recommendations previews and the AI Search Engine previews.
## Grouping feed attributes ---
This option is available only for feeds from Google Merchant XML files.
Grouping feed attributes organizes attributes or fields within an item feed into logical groups. Instead of treating each product variant — such as different sizes or colors — as a separate item in the feed, all variants of a product are combined and grouped into a single item. During this grouping process, a "base" product is selected as representative. This is done by first gathering all products that share the same `itemGroupId`, then grouping them by category, and finally selecting the first product from the largest category group to serve as the base.
Null values and empty attribute values are not handled and will not appear in the grouped results.
When adding such a feed to Synerise, you must enable the grouping of feed attributes. Please note that enabling grouping is irreversible. 1. In the **Grouping feed attributes** section, click **Show**. **Result**: Grouping rules are shown. The system automatically prepares grouping rules. 2. Verify the proposed grouping rules. When configuring the grouping of feed attributes, you must map source fields to target fields using one of the following aggregators. Each aggregator determines how values from multiple items are combined: | Aggregator | Description | Example | Aggregated Result | |----------------|--------------------------------------------------------------------------------------------------|------------------------------------------------------|----------------------------| | **or** | Performs a logical OR on boolean values. Returns `true` if any value is `true`, otherwise `false`. | `true, false, false` | `true` | | **arrayDistinct** | Aggregates unique, non-null values into an array, removing duplicates. | `"41", "42", "41", "42"` | `["41", "42"]` | | **arrayFlatten** | Flattens nested arrays into a single array combining all elements. | `["123", "456"], ["456", "789"]` | `["123", "456", "456", "789"]` | | **array** | Aggregates values into an array, preserving order. | `"41", "42"` | `["41", "42"]` | | **single** | Selects the first non-null value from the list. For the `availability` attribute, the aggregated result will be a boolean value. | `"PROD123", "PROD124"` | `["PROD123"]` | 3. To add your own rule, click **Add rule**. 1. In the **Source filed** dropdown, select an item attribute from the feed pulled from Google Merchant. 2. From the **Aggregator** dropdown list, select the aggregator based on which attribute values will be combined. 3. In the **Target field** dropdown list, select the attribute which will hold the aggregated values. You can create an attribute. 4. Confirm by clicking **Apply**. ## Enabling AI Search for the feed --- Enable the AI Search for the selected catalog or Google Merchant Feed. 1. On the **Applied search engines** tab, click **Show**. 2. Switch the **Search engines** toggle on. 3. Confirm by clicking **Apply**. After that, proceed to [AI Search](/docs/ai-hub/ai-search), and proceed to [the configuration](/docs/ai-hub/ai-search/introduction-to-ai-search#configuring-ai-search) ## Removing item feed --- You can remove item feeds from the list. While removing item feeds, any Synerise objects that rely on the feed as a source of information (such as predictions, recommendations, AI search) will be automatically disabled. Prior to confirming the removal operation, you will be presented with a list of objects that are currently using the feed to be removed. The feed will be removed after 7 days from confirming the action. During this transitional period, the feed and the objects associated with it will remain active. In the case of a feed within a catalog, the contents of the catalog will be deleted, while the catalog itself will be retained. 1. Go to **Settings > AI engine configuration**. 2. Next to the name of the feed you want to remove, click Three dot icon 3. From the dropdown list, select **Delete**. **Result**: A pop-up appears with the list of objects that are currently using the feed. 4. To confirm the operation, click **Yes, delete feed**. # Single sign-on with Microsoft Entra ID This is a guide to the integration between Synerise and Microsoft Entra ID (formerly Microsoft Azure Active Directory (Azure AD)), which enables your users to authorize with their Microsoft Entra ID accounts. The integration with Microsoft Entra ID is offered through the SAML 2.0 protocol. ## Benefits --- - **Centralized user management** - With Microsoft Entra ID, you get to administer users from one central place in your organization. - **Increased security** - The benefit of a single user account in many applications helps to maintain a single identity and credentials, so users don’t have to remember too many credentials. Authentication takes place only with Microsoft Entra ID, with a single set of security-related policies regardless of the application. - **Improved user experience** - Your users only need to sign in once to use multiple applications. This approach ensures faster authentication, saves time and relieves users from remembering multiple credentials. ## Prerequisites --- To get started, you need the following items: - An Microsoft Entra ID subscription with permission to create applications - At least one [verified domain](/docs/settings/identity-access-management/access-control/managed-domains) - User permissions to access Settings and perform Identity provider configuration in Synerise ## Configuring SAML application in Microsoft Entra ID --- The first step is to add the Synerise application to your Microsoft Entra ID account. 1. Log in to [Microsoft Azure Portal](https://portal.azure.com/). 2. Go to **Microsoft Entra ID > Manage > Enterprise Applications**. 3. Select **All applications** and then click **New application**. 4. In the **Add from the gallery** section, in the search box type `Synerise AI Growth Operating System`. 5. From the results, select **Synerise AI Growth Operating System** and add the application. **Result**: Your application is added. 7. On the Synerise AI Growth Operating System application integration page, go to **Manage > Single sign-on**.
Microsoft Azure portal showing SAML single sign-on configuration for Synerise application
Configuration in the Microsoft Azure portal
8. In the **Basic SAML Configuration** section, on the right side, click the **Edit** button. 9. Obtain the value of the **Service Provider Redirect URI** field (you can find it in Synerise, go to Settings icon **Settings > Access Control > Identity Providers**), and enter this value in the following fields in Azure MD: - **Reply URL (Assertion Consumer Service URL)** - **Sign on URL** 10. In the **SAML Signing Certificate** section, download **Certificate (Base64)**. 11. From the **Set up Synerise AI Growth Cloud** section, note down the value of the **Login URL** field (it's required in the further part of the integration process). 12. From the **Set up Synerise AI Growth Cloud** section, note down the value of the **Azure AD Identifier** field (it's required in the further part of the integration process). ## Configuring user assignment to the application --- You can assign users to the Synerise application in several ways within Microsoft Entra ID depending on your needs. The configuration settings allow you to let all your users use Synerise or only the selected user groups/individuals. 1. Log in to [Microsoft Azure Portal](https://portal.azure.com/). 2. Go to **Microsoft Entra ID > Manage > Enterprise Applications**. 3. Select the **Synerise** application. 4. Go to the **Manage > Properties** section. - If you want to require assigning users to the app (unassigned users won’t be able to use the application, regardless of any further configuration), set **Assignment required?** to **Yes**.
Further procedure when you select Yes
  1. Go to Users and groups and click Add user.
  2. Select individual users or groups who will be granted access to the Synerise application.
  3. Confirm the selection by clicking Assign.
- If you don’t want to assign users to the app, set the **Assignment required?** to **No**.
Results when you set No
  • All users and groups have access to the application.
  • If you want to grant access to specific user groups, you can map those user groups in Dynamic group assignment in Synerise.
  • If there was no role assignment mapping, whenever a user accesses the Synerise app, this user receives information about the lack of access and a request to contact Organization admin.
## Configuring application access based on Microsoft Entra ID security groups ---
Perform this procedure only if you set the **User assignment required** to **No** in the [Configuring user application assignment procedure](/docs/settings/identity-access-management/single-sign-on-tutorials/setup-sso-entra-id#configuring-user-assignment-to-the-application). Otherwise, omit it.
1. Log in to [Microsoft Azure Portal](https://portal.azure.com/). 2. Go to **Microsoft Entra ID > Manage > Groups**. 3. Select the security groups you want to enable access for. 4. Note down the **Object Ids** of the security groups for which you want to enable access to Synerise. In this example, access will be granted for three security groups:
Microsoft Entra ID security groups list for Synerise application access configuration
Example groups
- `SYN_ADMIN` with **Object Id**: `9338ee1f-f662-48df-b286-7b93c9816e38`) where we want to assign the PROFILE_ADMIN role in Synerise - `SYN_MANAGER` with **Object Id**: `1826c186-ec0d-4ac0-a939-53d964b0e157` where we want to assign the PROFILE_MANAGER role in Synerise - `SYN_USER` with **Object Id**: `731e7b07-604a-4ce5-b26e-e1a73c4e440f` where we want to assign the PROFILE_USER role in Synerise
These are just example **Object Ids**. While performing the procedure, replace them with the actual IDs for your security groups.
6. After noting down the IDs, go to Synerise (Settings icon **Settings > Access Control > Identity Providers** ) to the **Just-in-Time provisioning** section. 1. Switch the **Dynamic role assignment** option on. 2. Follow the instructions described [here](/docs/settings/identity-access-management/access-control/single-sign-on#define-permissions-for-users-who-authorize-by-identity-provider). ## Configuring application access based on Synerise SAML app assignment ---
Perform this procedure only if you set the **User assignment required** to **Yes** in the [Configuring user application assignment procedure](/docs/settings/identity-access-management/single-sign-on-tutorials/setup-sso-entra-id#configuring-user-assignment-to-the-application). Otherwise, omit it.
1. Log in to [Microsoft Azure Portal](https://portal.azure.com/). 2. Go to **Microsoft Entra ID > Manage > Enterprise Applications**. 3. Select the **Synerise** application (which was created in the [Configuring SAML application in Microsoft Azure](#configuring-user-assignment-to-the-application) section). 4. In the **Overview** section (which you're currently in), select **1. Assign users and groups**. 5. Select **Add user > Users and groups** and select the groups you want to assign to the Synerise application. 6. After assigning all users or groups, to confirm selection, click the **Assign** button. 7. Continue the set up within Synerise as described in [this step](#mapping-step) in [Configuring Microsoft Entra ID as an Identity Provider in Synerise](#configuring-microsoft-entra-id-as-an-identity-provider-in-synerise). ## Configuring group claims --- In order to pass role or group claims within Microsoft Azure, you must: 1. Log in to [Microsoft Azure Portal](https://portal.azure.com/). 2. Go to **Microsoft Entra ID > Manage > App registrations**. 3. Select the **Synerise** application (which was created in the [Configuring SAML application in Microsoft Azure](#configuring-user-assignment-to-the-application) section). 4. Go to **Token configuration** section. 5. Click **Add groups claim**. - If you want to enable access to the application based on Active Directory security group assignment for users, click **Security groups**. - If you want to enable access to the application based only on groups assigned to the Synerise application, click **Groups assigned to the application**. 6. Optionally, go to the **SAML** section and select **Emit groups as role claims**. - If you select it, the claim will use the following attribute name: `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/role` - If you leave this checkbox unselected, the SAML integration will use the following attribute name: `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/groups` or `http://schemas.microsoft.com/ws/2008/06/identity/claims/groups` 7. Continue the configuration depending on your selection in [step 5](#step5): - If you selected **Security groups**, continue to [this procedure](#configuring-application-access-based-on-microsoft-entra-id-security-groups). - If you selected **Groups assigned to the application**, continue to [this procedure](#configuring-microsoft-entra-id-as-an-identity-provider-in-synerise). ## Configuring Microsoft Entra ID as an Identity Provider in Synerise --- 1. Log in to Synerise. 2. Select the workspace you want to configure single sign-on for. 3. Go to Settings icon **Settings > Access Control > Single Sign-On (SSO)**. 4. In the **General settings** section: 1. From the **Authentication methods** dropdown list, select the authentication method to the value of your choice. Read more information about it the [Make log-in screen modifications](/docs/settings/identity-access-management/access-control/single-sign-on#make-log-in-screen-modifications) section.
At the beginning, we suggest setting it to **Both methods** unless you have a separate account that’s in different domain than you will be setting up SSO for.
2. In the **Sign-in button text** field, type the name that is displayed on the sign-in button, for example `Sign in with Microsoft Entra ID`. 5. In the **Authentication settings** section: 1. From the **Managed domains**, select the domains you want to use for your SSO. 2. Enable **Attribute containing email address**. **Result**: The **URL of the email attribute** text field appears. 3. In the **URL of the email attribute**, enter the email attribute name: `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress` (use it only for Microsoft Entra ID integration).
Synerise SSO Authentication settings configured with Microsoft Entra ID email attribute
The result
6. In the **Just-in-Time provisioning** section, follow the procedure described [here](/docs/settings/identity-access-management/access-control/single-sign-on#define-permissions-for-users-who-authorize-by-identity-provider). - If you kept the default role assignment:
Synerise SSO Just-in-Time provisioning default role assignment settings
Filled in dynamic assignment settings
**Result**: In this model, every authenticated person has a role (or roles) assigned according to the settings defined here regardless of any configuration on Identity Provider side and depending on setup in the **Update user roles while signing in** field. - If you selected dynamic role assignment:
Synerise SSO Just-in-Time provisioning dynamic role assignment settings
Filled in dynamic assignment settings
**Result**: Every authenticated person has a role (or roles) assigned based on group/role mapping between Microsoft Entra ID and Synerise depending on setup in the **Update user roles while signing in** field. 7. In the **SAML protocol settings** section: 1. In the **Issuer** and **SSO endpoint** fields, enter the Login URL obtained from the Microsoft Azure Portal (you copied the URL while performing [step 10](#login-url) in the [Configuring SAML application in Microsoft Azure](#configuring-saml-application-in-microsoft-entra-id) procedure). 2. In the **Identity Provider application ID** field, paste the value you obtained from **Azure AD Identifier** from Microsoft Azure Portal (you copied the URL while performing [step 11](#app-id) in the [Configuring SAML application in Microsoft Azure procedure](#configuring-saml-application-in-microsoft-entra-id)). 3. The **Service Provider redirect URI** is filled in by default (you used it in [step 8](#redirect-uri) in the [Configuring SAML application in Microsoft Azure procedure](#configuring-saml-application-in-microsoft-entra-id)). 3. In **Request binding**, select the method of communication between the requestors and responders. 5. In **Response signature verification**, select where the SAML signature is available. 4. In **Response validation method**, select **Static**. 4. In **Identity Provider Signature Certificate**, upload certificate downloaded from Microsoft Azure Portal (you downloaded it in [step 9](#download-certificate) in the [Configuring SAML application in Microsoft Azure procedure](#configuring-saml-application-in-microsoft-entra-id)). 5. Optionally, set the **Max clock skew** to 10 seconds. **Result**:
Synerise SSO SAML protocol settings configured for Microsoft Entra ID integration
The result of configuring SAML settings in Synerise
8. Next to the **Single Sign-On (SSO)** headline, click **Apply**. ## Test SSO --- After completing the Microsoft Entra ID setup, test the integration. 1. If you are logged in to Synerise, log out. 2. Go [the Synerise portal](https://app.synerise.com/spa/login). 3. Enter your email address. 4. Click **Continue**. 5. Click the **Sign in with Microsoft Entra ID** (the text on the button depends on the value you entered in [this step](#button-name)). **Result**: You will be redirected to Microsoft where you will be authenticated immediately if there is an active session or you will be asked to authenticate and as a result you'll be redirected back to Synerise.
In case you can't authenticate
  • In the Synerise application, review the SAML setup for any typos or errors in the Just-In-Time provisioning configuration.

  • In Microsoft Entra ID portal:

    1. Click Test this application.
      Result: You are automatically signed in to the Atlassian Cloud for which you can configure SSO.
      Microsoft Entra ID Test this application button for verifying SSO configuration in Azure portal
      The result of configuring SAML settings in Synerise
  • Alternatively, Synerise is available in https://myapplications.microsoft.com/ if you didn't set the Visible to users? option to No in the Enterprise application setup.

Congratulation! You signed in through Microsoft Entra ID.
When the process works as expected, you can switch the **Authentication Mode** setting, so only the SSO authentication method is allowed, excluding the option of authorizing through email and password.
# Account Details This section contains information about a Synerise user. Users can: - find their own user ID - check their own user status (for example, active, inactive) - select language - check and assign (if user permission allows) a user role in the workspace - integrate your inbox with Synerise to collect responses from customers in the Synerise application ## Providing user details ---
Account details section
Account details section
1. Go to Settings icon **Settings > Account Details**. 2. In the **Basic info** section, to fill in information, click **Add info**. 1. In the **Phone** field, enter a phone number (all formats allowed). 2. In the **Language** field, from the dropdown list, select a language (this setting is valid only for a user account, not a workspace). 3. In the **Roles** field, if the [user permissions](/docs/settings/identity-access-management/permissions) allow, define a user's role in the workspace. 4. Confirm by clicking **Apply**. 3. To describe your role in the company, in the **Messenger team** section, click **Add info** (currently unused). 5. To finish editing the user's profile, in the upper right side of the screen, click **Save**. ## Integrating mailbox --- This option allows to collect responses from customers to emails. When a customer sends a response to an email, the `message.receive` event appears on the activity list on the card of this customer (Profiles). The event parameters include the `email title`, `email contents`, `from`, `to`, and `cc`. 1. To begin integrating a mailbox, in the **Email integration** section, click **Add info**. 2. Select the type of your email account. 2. For **Google/Gmail**: 1. Enter the email address you want to integrate. 2. Enter the password to your inbox. 3. Select the SMTP type. 4. To select the date from which the inbox will be synchronized, click the **Sync from** field. **Result**: A calendar appears. 5. Select the date. 6. To confirm, click **Apply**. 3. For the **Other type** of an email account: 1. Provide information in: **IMAP server**, **IMAP type** and **Port** fields. 2. Provide information in: **SMTP server**, **SMTP type** and **Port** fields. 3. In the **Sync from**, to select the date from which the inbox will be synchronized, click the field. 4. Confirm by clicking **Apply**. 5. To finish editing the user's profile, in the upper right side of the screen, click **Save**. # Introduction to cloning Cloning objects allows you to copy a Synerise object (such as an expression, segmentation) to other workspaces you are using. The cloning extends to all elements the object contains such as other analysis nested in the object (for example, when a segmentation includes an expression). This is meant to save your time so you don't have to create these objects from scratch or clone them separately in every workspace you work on. Objects you can clone: - Analyses: - funnels, - segmentations, - metrics, - histograms, - reports, - trends, - Sankey diagrams, - aggregates, - expressions - AI recommendations - Predictions - Communication-related objects: - emails, - SMS, - web push notifications - mobile push notifications - dynamic content - in-app messages - message templates The process of cloning involves: 1. Selecting an object for cloning. 2. Resolving potential conflicts - a conflict occurs when the system detects the object of the same type and with the same name on the workspace where you want to clone the object. For example, if you clone the "Unnamed segmentation" to the target workspace and there already is a segmentation with identical name, a conflict occurs. During this step, you will be redirected to a wizard and you must define what will happen with the object in the target workspace or workspaces: - overwrite the object in the target workspaces with the object version from the source workspace, - don't overwrite (skip cloning) - create a copy of the object version from the source workspace in the target workspaces. 3. Mapping events/event parameters/attributes/item attributes between the source workspace and target workspace. In this step, you indicate the equivalents of these elements in the target workspaces. For example, if the object you clone contains the `shoeSize` attribute, but this attribute exists in the target space under a different name - `size_of_shoe`, you can map these two parameters together. # Workspace Details In the Workspace Details section, you can: - set the company's address - set the preferred language for your account in the workspace - manage workspace information and define additional security authorization: - edit workspace name, - edit workspace subdomain (deprecated) - define timezone for the workspace - encrypt JWT payload
Profile details
Workspace settings
Become familiar with the [event parameters which are denylisted](/docs/assets/events/introduction-to-events#denylist-of-event-parameters) by default for every workspace. These parameters are still available on the Raw data tab [in event details](/docs/crm/crm-profile#activity-list), if the data is available.
## Managing workspace information --- 1. Go to Settings icon **Settings > Workspace details**. 2. In the **Basic info** section, to edit information, click **Show**. 1. To change the workspace avatar, click **Upload photo**. 2. To change the name of the workspace, enter a new name in the **Workspace name** field.
If [Co-Brand Decisioning Layer](/docs/settings/workspace/multibrand-workspaces) is enabled for your workspace, change of workspace name will cause inconsistencies in [membership attribute](/docs/crm/customer-properties#managing-membership-attributes) names.
3. To change the workspace subdomain, enter a new subdomain in the **Workspace subdomain** field. If you create a [landing page](/docs/campaign/landing-page/creating-landing-page) on the Synerise domain, the value you enter here will be used as a part of the landing page URL. 4. Confirm the information by clicking **Apply**. ## Setting company address --- 3. In the **Company Address** section, to fill in information about your company (name, address, telephone number, email address, and so on), click **Show**. 1. In the fields of the form, enter information about the company (each field is optional). 2. To confirm the information, click **Apply**. ## Setting language and timezone --- 4. In the **Preferences** section, to change a setting, click **Show**. 1. From the **Language** dropdown list, select language of the workspace (currently inactive).
When a user logs in to a workspace, the language of the workspace is consistent with the language selected in the [user's account](/docs/settings/your-account/account) settings.
2. From the **Timezone** dropddown list, select the timezone for the workspace. 3. Confirm the changes by clicking **Apply**. ## Encrypting JWT payload --- Synerise uses JSON Web Token (JWT) as the authorization method. The token is generated by the authentication endpoints. Encrypting the payload ensures security in scenarios where the JWT may be intercepted. By default, encrypting JWT payload is disabled for the workspace. The encryption feature works in [authorization endpoints](https://hub.synerise.com/api-reference/identity-and-access-management#tag/Authorization) for Profiles in version 3 (`/sauth/v3/auth/`) and Workspaces. 1. In the **JSON Web Token Payload Encryption** section, click **Show**.
If you decode JWTs for sourcing information, encryption will break integrations that do so.
2. Switch the **Enable payload encryption** toggle. 3. Confirm settings by clicking **Apply**. # Password settings This section provides a possibility to define the password policy for a workspace. The policy defined in this section is used the Change password section in the [Account Security](/docs/settings/your-account/account-security) section. If a user belongs to more than one workspace, the system selects here the strongest password policy among the workspaces a user is assigned to.
Password policy
Example of a password policy
1. Go to Settings icon **Settings > Access Control**. 2. In the **Password settings** section, click **Show**. 3. In the **Length** section, to define the minimum and maximum number of characters in a password, use the slider. 4. In the **Characters** section: 1. To require uppercase character in a password, enable the **Uppercases (A-Z)** option and enter the number. 2. To require lowercase characters in a password, enable the **Lowercases (a-z)** option and enter the number. 3. To require numbers in a password, enable the **Numbers (0-9)** option and enter the number. 4. To require special characters in a password, enable the **Symbols (0-9)** option and enter the number. The allowed special characters are: `!"#$%&'()*+,-./:;<=>?@[\]^_{|}~` 5. In the **Login and validity rules**: 1. To define if and when a password expires, enable the **Password expires after** option and enter the number of days after which the password expires. 2. To define when an account is blocked due to the password expiration, enable the **Account block after days** option and enter the number of days. When an account is blocked due to this setting, the user must reset a password. 1. To force variety of passwords, enable the **The password must be different from the lass** option and enter the number of previous passwords that cannot be used as a new password. 2. To define the number of unsuccessful logins that temporarily blocks an account, enable the **Number of login attempts** option and enter the number. 3. To define the time after which an inactive user is logged out, enable the **Logout when the user is idle after** option and enter the number of seconds. 6. Confirm the changes by clicking **Apply** in the upper-right corner of the section (you may need to scroll up). # Roles and permissions A user is a person with access to a workspace and its features. However, due to security reasons, each Synerise feature is only accessible to users who are assigned with a particular user role. Synerise has a role-based permission system, which means that you can assign roles to users and set permissions for roles. ## Roles --- You can create roles by combining permission groups, and then assign specific sets of permission groups to each role. Each workspace contains 2 default role groups with predefined roles and permissions that you can use: - [Basic roles](#basic-roles) that can be assigned to people in your organization. - [Predefined Synerise roles](#predefined-synerise-roles) that can be assigned to Synerise employees who need access to your workspace.
A list of default user roles in a workspace
A list of default user groups and roles in a workspace
### Basic roles --- Users assigned with these roles can invite other users to a workspace. | Role | Scope of permissions | |------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | PROFILE_ADMIN | This role has all permissions. Admins have access to every hub and feature within the hub. They have possibility to preview, create, edit, delete, and execute all actions in the application. | | PROFILE_MANAGER | This role grants the access to all modules, however, advanced workflow configuration settings are not accessible. Managers can create, edit and preview some communication channels types, execute all analytic types, have access to Behavioral Data Hub, and Data Modeling Hub. | ### Predefined Synerise roles --- By default, each workspace includes a predefined role group specifically designed for Synerise employees who can only [access your workspace through invitation](/docs/settings/identity-access-management/users#inviting-users-to-the-workspace). When inviting Synerise employees, you can assign one of the default roles within this group as well as access duration. Users assigned with these roles cannot invite other users to a workspace. These default roles have fixed permissions that cannot be changed; however, you can preview the scope of permissions assigned to them. Also, you can add custom roles to this group. | Role name | Description | |------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | SYNERISE_PRODUCT_OWNER | This role is assigned to the Synerise product owners. Users with this role can create and delete analyses and have read-only access to most other features, including API keys. | | SYNERISE_FRONTEND_DEVELOPER | This role is assigned to Synerise frontend developers responsible for campaigns such as email and dynamic content. Users with this role have restricted access to the workspace, read-only access to API keys, and they can't manage roles and permissions nor access the **Access Control** section in **Settings**. | | SYNERISE_DEVELOPER | This role is assigned to third-line support members. Users with this role have read-only access to every feature (including API keys) within the workspace. They can create and delete analyses. | | SYNERISE_SERVICE_DESK_ADMIN | This role is assigned to the market leaders, service desk leaders, and project managers and it provides access to all features with extensive permissions. Users with this role can manage roles and permissions as well as create, edit, and delete API keys. | | SYNERISE_SERVICE_DESK_MEMBER | This role is granted to service desk members and second-line support members. Users with this role have access to most features, but they can't manage roles and permissions or access the **Access Control** section in **Settings**. They are granted read-only access to API keys. | | SYNERISE_READ_ONLY | This role is designated for Synerise employees who need occasional access to specific solutions and use cases for review. It provides read-only access to all modules except for the list of profiles, workspace users, API keys, data export, and audit log. | ## Permissions --- Permission list is divided into hubs (for example, Decision Hub, Experience Hub or Behavioral Hub) and each hub is divided into features (for example, Emails, Landing page or Tags ). Due to this arrangement, you can grant access to particular features or whole modules and define the scope of actions possible to take for a specific role.
A part of the permission list
A part of the permission list
## Creating role groups --- You can create your own custom role groups to which you can [add roles](#adding-roles-and-assigning-permissions) for your own purposes. 1. Go to Settings icon **Settings > Roles**. 2. Click the **Add group** button. **Result**: A pop-up appears. 3. On the pop-up, in the **Name** field, enter the name of the group. 4. Optionally, in the **Description** field, write a short description to let other users know the purpose of the group. 5. Confirm by clicking **Apply**. **Result**: The group is created and you can [assign permissions](#adding-roles-and-assigning-permissions) to it. ## Adding roles and assigning permissions --- You can add a role or roles to a default user group or your own custom role group. Later, you can assign roles to users when [adding them](/docs/settings/identity-access-management/users) to a workspace.
When a new role is assigned to a user, they must either log out and log back in or switch workspaces for the changes to take effect. If an existing role assigned to a user is updated, no action is required - the new settings will be applied automatically.
3. On the role group to which you want add a role, click **Add role**. **Result**: A pop-up appears. 2. On the pop-up, in the **Name** field, enter the name of the role. 3. Leave the value in the **Group** field at default. 4. Optionally, in the **Description** field, provide a brief role explanation which will help your team understand the purpose of the role and how it will be used. 5. Confirm by clicking **Create & define permissions**. 7. To add or edit permissions for a particular role, hover the mouse cursor over the role on the list and click the **Permissions** button. 8. The list of permissions is divided into features and you can define the scope of actions for each feature by ticking the box under the appropriate action. 9. To complete the process, click the **Save** button. ## Which permissions do I need? The other articles in this section list a number of scenarios and the permissions you need to perform them. The scenarios are sorted into modules, but a scenario may require permissions from a few modules. For example - multiple features use analysis results and require access to Analytics. - [General access](/docs/settings/identity-access-management/permissions/general-permissions) - [Behavioral Data Hub](/docs/settings/identity-access-management/permissions/profiles-permissions) - [Experience Hub](/docs/settings/identity-access-management/permissions/campaigns-permissions) - [Automation Hub](/docs/settings/identity-access-management/permissions/automation-permissions) - [Decision Hub](/docs/settings/identity-access-management/permissions/analytics-permissions) - [AI Hub](/docs/settings/identity-access-management/permissions/ai-hub-permissions) - [Data Modeling Hub](/docs/settings/identity-access-management/permissions/data-management-permissions) - [Settings](/docs/settings/identity-access-management/permissions/settings-permissions) # Account Security In Synerise, your account is protected by: - your password, which must comply with the password policy set by your workspace administrator. - two-factor authentication (2FA), which is mandatory for all Synerise users. You can also log on with Security Assertion Markup Language (SAML) if your organization allows it. A SAML log-on is treated as a successful 2FA log-on. ## Changing password ---
Blank password change section
A blank password change section
1. Go to Settings icon **Settings > Account Security**. 2. In the **Current password** field, enter a password you used so far. 3. In the **New password** field, enter a password that meets the requirements listed under the fields.
These requirements are sourced from the Password policy section. If a user belongs to more than one workspace, the system selects here the strongest password policy among the workspaces a user is assigned to.
4. In the **Confirm password** field, enter the new password. 5. Confirm the change of the password by clicking **Save**. ## Two-factor authentication ---
After completing the following procedures, you will be logged out of all devices!
If you're not using SAML, you must select a method of two-factor authentication (2FA) individually for your account to verify your identity while logging in (apart from the password). You can choose to verify your identity while logging in by: - an authenticator app on your smartphone - email with code - Synerise sends an email with a security code to the user
Log-in view when 2FA is enabled
Log-in view with a default 2FA method, when both methods are enabled, users can switch between them
If you haven't enabled any method yet or you [disabled all two factor authentication methods](#disabling-2fa-methods-for-individual-account) and you're not using SAML, you won't be able to enter any workspace. In such case, you must go to **My account** and perform the instructions from [step 2 in Enabling 2FA methods for individual account](#show-2fa-settings).
Workspace list view
Workspace list view
### Enabling 2FA methods for individual account 1. Go to Settings icon **Settings > Account Security**. 2. In the **Two-factor authentication** section, click **Show**. 3. From the **Add method** dropdown list, select a method or methods by means of which you will have to additionally verify your identity while logging in: - **Authenticator application** - You will have to download any Time-Based One Time Password (TOTP) application to your mobile device and provide the code the application generates while logging in to Synerise.
Example applications: Microsoft Authenticator, Google Authenticator. - If you're not sure which authenticator app you should use, consult the security department in your company. - Make sure that the date and time in your phone are correct. They should be fetched from a time server.
- **Email with code** - when logging in, you will need to enter a code from an email. 4. If you select multiple authentication methods, use the **Default method** dropdown list to define which method will be selected by default on the log-in screen. 5. By default, you must enter an authentication code during each log-in attempt on the same device. If you would like to customize the frequency of authentication code requests, you can enable the **Change frequency of 2FA authentication** option and in the **Expiration time** field, provide a value that specifies the duration after which a new authentication code will be required.
Two-factor authentication configuration form
Two-factor authentication configuration form
6. In the upper-right corner of the **Two-factor authentication** section, click **Apply** and continue depending on the selected method:
We highly recommend choosing the Authenticator application method as it is the most secure option available.
A QR code is displayed. 1. With the authenticator app, scan the QR code that corresponds to the operating system of your mobile device. 4. Click **Next**. 5. In the mobile application, locate the account you added. 6. In Synerise, in the **Verification code** field, enter the 6-digit code from the application. **Result**: A backup code is displayed.
This is the last time the backup code is shown to you.
7. Store the backup code securely. The code is needed to recover an account when you lose access to the authenticator app or to disable 2FA. 8. Click **Close & Logout**.
The **Send email with verification code** pop-up appears. 1. Click **Send email**. **Result**: An email with the verification code is sent to your email. 2. On the pop-up, in the **Verification code** field, enter the code you received in the message. 3. Click **Close & Logout**.
**Result**: - When logging in, in addition to password, you must provide the 6-digit code from the application or from the email. - The backup code which is generated when you select the **Authenticator app** method can be used to: - Recover your account if you lose access to the authentication app. - Disable 2FA on your account. ## Disabling 2FA methods for individual account If you're not using SAML, once you [disable all two factor authentication methods](#disabling-2fa-methods-for-individual-account), you won't be able to access any workspace. In such case, you must go to **My account** and perform the instructions from [step 2 in Enabling 2FA methods for individual account](#show-2fa-settings).
Workspace list view
Workspace list view
1. To disable a 2FA method, go to Settings icon **Settings > Account Security**. 2. In the **Two-factor authentication** section, click **Show**. 3. If you want to: - disable The Authenticator application method, on the pop-up, in the **Backup code** field, enter the code you received after enabling this method. Confirm by clicking **Disable & Logout** - disable The Email with code method, on the pop-up, request a code for disabling the method. Enter the code you receive through email and click **Disable & Logout**. # Newsletter sign-up To be able to communicate with customers through an email channel, you need their consent to receive emails. You can use Automation Hub to prepare workflows that facilitate the single and double opt-in scenarios. This article contains instructions how to do that. The **single opt in** process saves the marketing agreement (email channel) without a user email confirmation. When a profile sends a newsletter submission form, the agreement is confirmed in their profile card without requiring an email confirmation. The **double opt-in** process is also started when a customer submits the form, but the agreement is not saved to the profile until they click the confirmation link received by email. The workflow described further in this article is designed to work with the implementation described in [the developer guide](/developers/web/newsletter-agreements). In this setup, you cannot use the single-opt in and double opt-in mechanisms simultaneously in different subscription forms. ## Requirements --- - Implement a tracking code into your website (instructions: [here](/docs/settings/tool/tracking_codes) and [here](/developers/web/installation-and-configuration)). - Configure an email account ([instructions](/docs/campaign/e-mail/configuring-email-account)). - Go to [**Data Modeling Hub > Profile attributes**](https://app.synerise.com/assets/profile-attributes) and verify that a `newsletter_agreement_enabled` attribute exists. If it does not, create it. For instructions, see [this section](/docs/crm/customer-properties#adding-profile-attributes-in-the-synerise-portal). - Prepare email confirmation/notification templates, depending on the solution you want to use: - Notification for single opt-in (the notification is optional) - Confirmation email for double opt-in (confirmation is required) - Reminder for double opt-in (the reminder is optional)
If you are not familiar with Automation Hub, you can find all information about it [here](/docs/automation).
## Creating the automation trigger 1. Go to Automation Hub icon **Automation Hub > Workflows > New workflow**. 2. Enter the name of the workflow. 3. On the dashboard, click **Add trigger**. 4. Select the **Data Changed** node. 5. Open the configuration window by clicking the node. 6. From the **Choose value** dropdown list, select **Attributes > newsletter_agreement_enabled**. 7. From the **Choose operator** dropdown list, select **Equal (String)**. 8. In the text field, enter `enabled`. 9. Click **Apply**. 10. On the **Data Changed** node, click **THEN**. 11. From the list, add a **Delay** node. 12. Open the configuration window by clicking the added node. 13. Change the delay to 60 seconds and click **Apply**. 14. If you want to only include customers who have not agreed to a newsletter before, add a filter node: 1. On the **Delay** node, click **THEN**. 2. From the dropdown list, select the **Profile Filter** node. 3. Open the configuration window by clicking the added node. 4. From the **Choose filter** dropdown list, select **Clients > Attributes > newsletter_agreement** (you can use the search field). - If you use email address as a unique profile identifier, select **Clients > Attributes > newsletter_agreement**. - If you [configured emails as non-unique](/docs/settings/configuration/non-unique-emails), select **Clients > Attributes** and then the attribute you configured as the email agreement indicator. 5. From the **Choose operator** dropdown list, select **Equal**. **Result**: A text field appears. 6. In the text field, enter `enabled`. 7. Confirm by clicking **Apply**. 8. On the filter node, click **MATCHED**. 9. From the dropdown list, select the **End** node. **Result**: If a profile already has newsletter subscription enabled, the journey ends at this point. 15. Continue configuring the automation depending on the scenario you need: - [Enable agreement immediately (single opt-in)](#single-opt-in) - [Enable agreement after confirmation (double opt-in)](#double-opt-in) ## Single opt-in 1. On the last node you added: - If you added the optional filter for profiles who previously agreed to newsletters, click **NOT MATCHED** on the filter node. - If you didn't add that filter, click **THEN** on the **Delay** node. 2. Select the **Update Profile** node. 3. Open the configuration window by clicking the new node. 4. From the left dropdown list, select the attribute: - If you use email address as a unique profile identifier, select **Attributes > newsletter_agreement**. - If you [configured emails as non-unique](/docs/settings/configuration/non-unique-emails), select **Attributes** and then the attribute you configured as the email agreement indicator. 5. From the right dropdown list, select **Change**. 6. In the text field that appears, enter `enabled`. 7. Click **Apply**. 8. If you want to send a notification, add a notification node: 1. On the **Update Profile** node, click **THEN**. 2. From the dropdown list, select the **Send Email** node. 3. Open the configuration window by clicking the new node. 4. In the **Sender details** section: 1. In the **From email address** field, select the email address from which the email is sent. 2. In the **From name** field, enter the name of the sender that displays in the customer mailbox. 3. In the **"Reply to" email address** field, select the email customers can reply to. 4. In the **"Reply to" name** field, enter the name of the sender. 5. Select the **Send without marketing agreement** checkbox. 5. In the **Content** section: 1. In the **Subject** field, enter the subject of the email (shown in the customer's mailbox). 2. In the **Template** field, select the template of the notification email. 6. In the **UTM and URL parameters** section, click **Skip step** and **Yes**. 7. In the **Additional parameters** section, click **Skip step** and **Yes**. 8. Click **Apply**. 9. On the last added node, click **THEN**. 10. From the dropdown list, select the **End** node. **Result**: The workflow looks similar to this:
Single-opt in workflow with filter and notification
Single-opt in workflow with filter and notification
11. To save the workflow: - as a draft, click **Save**. - and launch it, click **Save&Run**. ## Double opt-in For your reading convenience, this section is divided into sub-sections for each node. ### Send a confirmation email 1. On the last node you added: - If you added the optional filter for profiles who previously agreed to newsletters, click **NOT MATCHED** on the filter node. - If you didn't add that filter, click **THEN** on the **Delay** node. 2. From the dropdown list, select the **Send Email** node. 3. Open the configuration window by clicking the new node. 1. In the **Sender details** section: 1. In the **From email address** field, select the email address from which the email is sent. 2. In the **From name** field, enter the name of the sender that displays in the customer mailbox. 3. In the **"Reply to" email address** field, select the email customers can reply to. 4. In the **"Reply to" name** field, enter the name of the sender. 5. Select the **Send without marketing agreement** checkbox. 2. In the **Content** section: 1. In the **Subject** field, enter the subject of the email (shown in the customer's mailbox). 2. In the **Template** field, select the template of the confirmation email. 3. In the **UTM and URL parameters**, click **Skip step** and **Yes**. 4. Click **Apply**. ### Wait for confirmation 1. On the **Send email** confirmation node, click **THEN**. 2. From the dropdown list, select **Event Filter**. 3. Open the configuration window by clicking the new node. 4. In the **Check** drop-down list, select **without limits** (default). 5. From the **Choose event** dropdown list, select `newsletter.click`. 6. Click the **+ where** button. 7. From the **Choose parameters** dropdown list, select `url`. 8. As the logical operator, select **Contain**. **Result**: A text field appears. 1. In the text field, enter the agreement confirmation URL. 2. Confirm by clicking **Apply**. ### Update newsletter agreement 1. On the **Event Filter** node, click **THEN** or **MATCHED**. 2. From the dropdown list, select the **Update Profile** node. 3. Open the configuration window by clicking the new node. 4. From the left dropdown list, select the attribute: - If you use email address as a unique profile identifier, select **Attributes > newsletter_agreement**. - If you [configured emails as non-unique](/docs/settings/configuration/non-unique-emails), select **Attributes** and then the attribute you configured as the email agreement indicator. 5. From the right dropdown list, select **Change**. 6. In the text field that appears, enter `enabled`. 7. Click **Apply**. 8. On the **Update Profile** node, click **THEN**. 9. From the dropdown list, select the **End** node. **Result**: The workflow looks similar to this:
Double opt-in configuration
Double opt-in configuration
1. Save the automation or add a reminder: - If you want to add an email confirmation reminder, continue to [Adding the confirmation reminder node](#optional-add-confirmation-reminder). - If you want to save the workflow as a draft, click **Save**. - If you want to save and launch the workflow, click **Save&Run**. ### Optional: add confirmation reminder In the double opt-in scenario, you can add an email reminder. 1. Click the **Event Filter** node. 2. In the **Check** drop-down list, select **for period of time**. 3. In the **Time range** section that appears, set the period after which the reminder will be sent. 4. Click **Apply**. 5. On the **Send Email** node, click the three dots icon (it appears when you hover your cursor over the node) and select **Duplicate**. 6. **Optional**: Change the email template used in the duplicate **Send Email** node. 7. From **NOT MATCHED** on the **Event Filter** node, drag a path to the duplicate **Send Email** node. 5. On the **Event Filter** node, click the three dots icon (it appears when you hover your cursor over the node) and select **Duplicate**. 9. Click the duplicate **Event Filter** node. 10. In the **Check** drop-down list, select **without limits**. 11. Click **Apply**. 12. From **THEN** on the **Send Email** node, drag a path to the duplicate **Event Filter** node. 5. On the **Update Profile** node, click the three dots icon (it appears when you hover your cursor over the node) and select **Duplicate**. 6. From **MATCHED** on the duplicate **Event Filter** node, drag a path to the duplicate **Update Profile** node. 7. On the duplicate **Update Profile** node, click **THEN**. 8. From the dropdown list, select the **End** node. **Result**: The workflow looks similar to this:
Double opt-in configuration with reminder
Double opt-in configuration with reminder
1. To save the workflow: - as a draft, click **Save**. - and launch it, click **Save&Run**. # Authentication for mobile apps When integrating Synerise, you can use a variety of registration and authentication types for the customers. The configuration in the **Settings > Authentication for mobile apps** menu applies to: - Mobile SDK requests - API requests with profile (formerly "client") authentication # Configure AI Engine for Predictions [Propensity](/docs/ai-hub/predictions/propensity), [Best Fit](/docs/ai-hub/predictions/bestfit) and [Lookalikes](/docs/ai-hub/predictions/lookalikes) prediction models require configuration of AI engine. The Lookalikes model will be ready to use as soon as you select the item feed, however, for the Propensity and Best Fit models you must additionally. There is no option to enable Propensity and Best Fit separately. To configure AI engine, you must perform the following steps in a given order: 1. [Adding item feed](#adding-item-feed) 2. [Selecting an item feed](#selecting-item-feed) 3. [Grouping feed attributes](#grouping-feed-attributes) 1. [Selecting filterable attributes](#selecting-filters) 2. [Enabling propensity and best fit predictions](#enabling-propensity-and-best-fit-predictions)
You can use the same item catalog for lookalikes, propensity, and best fit predictions, AI Search, and recommendations.
## Adding item feed --- The first step is selecting the feed from which items will be sourced. You can either select a catalog that contains a feed or use Google Merchant Feed. Make sure, the item feed includes the following attributes: - `title` - The name of the item - `category` - The category of the item You can read about requirements for item feed: - [uploaded to a catalog](/docs/ai-hub/item-feed/item-feed-in-catalog) - [pulled from an URL](/docs/ai-hub/item-feed/google-merchant-feed) Grouping feed attributes is available for this feed type. If you previously configured a feed which you want to use now, you can omit this step.
- We recommend using Google Merchant XML instead of XML files due to the size limits (an XML file cannot exceed 10 MB). - If you're enabling AI engine for visual similarity recommendation model, select the item feed which contains less than 1,000,000 items.
1. Go to **Settings > AI engine configuration**. 2. Click **Add feed**. **Result**: A pop-up appears.
A pop-up with feed type selection
A pop-up with feed type selection
3. Select the product feed you want to use. - **Catalog** 1. On the pop-up, select the type of catalog: - Data catalog - [Metadata catalog](/docs/ai-hub/item-feed/metadata-catalog) 2. From the dropdown list, select a catalog.
A pop-up with catalog type selection
A pop-up with catalog type selection
3. Confirm by clicking **Apply**. **Result**: An item feed based on the contents of the selected catalog appears on the list in **Settings > AI Engine configuration**. - **Google Merchant**
Include the [Last-Modified](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified) header to enable detection of whether the product feed import is necessary, this will help you reduce data transmission costs.
1. Provide the following information: - the link to the Google Merchant feed (**Feed link**), - the name of the field (**Feed name**), this name will be visible on the list of item feeds in Synerise in **Settings > AI Engine Configuration** - the frequency of pulling updates from the feed to Synerise (**Interval**), - authentication type (**Authentication type**), - username and password (**Basic** authentication type) - username, password, token type, URL (**Bearer** authentication type)
A pop-up with configuration of pulling data from Google Merchant Feed
A pop-up with configuration of pulling data from Google Merchant Feed
2. Proceed to the next step by clicking **Next**. 3. If you want to group feed attributes, enable the toggle. Further [grouping settings are defined](#grouping-feed-attributes) after adding the feed. Grouping feed attributes refers to organizing the attributes or fields within an item feed into logical groups. Instead of treating each product variant — such as different sizes or colors — as a separate item in the feed, all variants of a product are combined and grouped into a single item.
A pop-up with enabling grouping feed attributes
A pop-up with enabling grouping feed attributes
This action is irreversible after applying.
4. Confirm by clicking **Apply**. **Result**: The feed appears on the list in **Settings > AI Engine configuration**. ## Selecting item feed --- 1. In **Settings > AI Engine Configuration**, on the list of feeds, click the feed you added according to the [Adding item feed](#adding-item-feed) procedure. The configuration form opens. In the **Item catalog** section, the feed you are configuring is selected automatically and you can proceed to the next part of the configuration.
Blank model configuration form
Blank model configuration form
[Supplemental catalogs](/docs/ai-hub/item-feed/supplemental-catalog) are used exclusively for recommendations. When you [add a supplemental catalog and connect it to an item feed](/docs/ai-hub/item-feed/supplemental-catalog#create-a-supplemental-catalog-feed-linked-to-your-catalog), the attributes from the supplemental catalog become available as [Supplemental attributes](/docs/ai-hub/item-feed/supplemental-catalog#supplemental-attributes) in the [recommendation filters](/docs/ai-hub/recommendations-v2/recommendation-filters).
## Grouping feed attributes ---
This option is available only for feeds from Google Merchant XML files.
Grouping feed attributes organizes attributes or fields within an item feed into logical groups. Instead of treating each product variant — such as different sizes or colors — as a separate item in the feed, all variants of a product are combined and grouped into a single item. During this grouping process, a "base" product is selected as representative. This is done by first gathering all products that share the same `itemGroupId`, then grouping them by category, and finally selecting the first product from the largest category group to serve as the base.
Null values and empty attribute values are not handled and will not appear in the grouped results.
When adding such a feed to Synerise, you must enable the grouping of feed attributes. Please note that enabling grouping is irreversible. 1. In the **Grouping feed attributes** section, click **Show**. **Result**: Grouping rules are shown. The system automatically prepares grouping rules. 2. Verify the proposed grouping rules. When configuring the grouping of feed attributes, you must map source fields to target fields using one of the following aggregators. Each aggregator determines how values from multiple items are combined: | Aggregator | Description | Example | Aggregated Result | |----------------|--------------------------------------------------------------------------------------------------|------------------------------------------------------|----------------------------| | **or** | Performs a logical OR on boolean values. Returns `true` if any value is `true`, otherwise `false`. | `true, false, false` | `true` | | **arrayDistinct** | Aggregates unique, non-null values into an array, removing duplicates. | `"41", "42", "41", "42"` | `["41", "42"]` | | **arrayFlatten** | Flattens nested arrays into a single array combining all elements. | `["123", "456"], ["456", "789"]` | `["123", "456", "456", "789"]` | | **array** | Aggregates values into an array, preserving order. | `"41", "42"` | `["41", "42"]` | | **single** | Selects the first non-null value from the list. For the `availability` attribute, the aggregated result will be a boolean value. | `"PROD123", "PROD124"` | `["PROD123"]` | 3. To add your own rule, click **Add rule**. 1. In the **Source filed** dropdown, select an item attribute from the feed pulled from Google Merchant. 2. From the **Aggregator** dropdown list, select the aggregator based on which attribute values will be combined. 3. In the **Target field** dropdown list, select the attribute which will hold the aggregated values. You can create an attribute. 4. Confirm by clicking **Apply**. ## Selecting filters --- In this part of the process, you will define the attributes for filtering items. Attributes selected in this section become available for use in filters in the Propensity predictions settings and are also accessible in **Decision Hub**.
Every day, attributes added to **Filterable attributes** are automatically deleted if they fulfill all of the following conditions: - They were added to filterable attributes more than 10 days ago. - They are not used in any search or suggestion index configuration. - They are not set as filters or boosting rules in any recommendation campaign. - They are not set as a default filter in any recommendation configuration. - They are not used as additional filters in any recommendation API/SDK request.
1. On the **Filterable attributes** tab, click **Show**. 2. Click **Select attributes**. 3. Select the checkboxes next to the attributes which you want to use for filtering the recommendation results. **Recommended**: Don't use `title` or `description` as filterable attributes. Using these attributes as filterable has a negative impact on performance. 4. Confirm by clicking **Apply**. **Result**: You will be able to filter the items by the attributes you have just added.
Item filter section in the settings of the Propensity prediction
Item filter section in the settings of the Propensity prediction
## Enabling propensity and best fit predictions --- In this part of the process, you will enable the usage of items from the product feed for preparing the Propensity and Best Fit predictions. To be able to filter the items for predictions, make sure you [selected attributes which will be available for filtering](#selecting-filters). 1. In the **Propensity and Best Fit** tab, click **Show**. 2. Set the toggle to **Enabled**. ## Removing item feed --- You can remove item feeds from the list. While removing item feeds, any Synerise objects that rely on the feed as a source of information (such as predictions, recommendations, AI search) will be automatically disabled. Prior to confirming the removal operation, you will be presented with a list of objects that are currently using the feed to be removed. The feed will be removed after 7 days from confirming the action. During this transitional period, the feed and the objects associated with it will remain active. In the case of a feed within a catalog, the contents of the catalog will be deleted, while the catalog itself will be retained. 1. Go to **Settings > AI engine configuration**. 2. Next to the name of the feed you want to remove, click Three dot icon 3. From the dropdown list, select **Delete**. **Result**: A pop-up appears with the list of objects that are currently using the feed. 4. To confirm the operation, click **Yes, delete feed**. # Apps & Integration Apps & Integration section in Settings is a place, where you can integrate Synerise with well known applications and platforms which you use every day in your business. # Communication limits In this section, you can set limits on how many messages (emails, SMS, mobile, and web push notifications) are sent to a **single profile** within a specified time period. Limits can be set in several ways: either per communication channel—with separate rules for messages sent from the Experience or Automation Hubs — or per tag. - **Experience Hub** – Limits are applied per profile for messages sent through Experience Hub within each specific channel. - **Automation Hub** – Limits are applied per profile for messages sent through Automation Hub within each specific channel. More details are provided later in this article. - **Tags** – Limits are enforced per profile regardless of the communication channel, combining all tagged messages. - This means the limit counts all tagged messages, whether they come from email, SMS, push notifications, or whether they were sent through Experience or Automation Hubs. - For example, you can set different limits for tags such as "personalization" and "newsletter," enabling you to customize sending limits based on the communication’s purpose rather than the channel used. - If a message has multiple tags and the limit for any one of them is exceeded, the message will not be sent. ## Communication limit events When messages cannot be sent due to capping the following events appear on the profile's card: - [`newsletter.capping`](/docs/assets/events/event-reference/email#newslettercapping) - [`push.capping`](/docs/assets/events/event-reference/mobile-push#pushcapping) - [`sms.capping`](/docs/assets/events/event-reference/sms#smscapping) - [`webpush.capping`](/docs/assets/events/event-reference/webpush#webpushcapping)
Example SMS capping event
Example SMS capping event; this event contains information about the tag limit exhausion and the ID of the tag whose limit is exceeded
## What happens to blocked messages? Mass messages sent via Experience Hub that exceed these limits are blocked and not queued for later sending. You can monitor the number of blocked messages in the message list and choose to resend them manually if needed. For automated workflows, blocked messages are only retried if the profile once again meets the workflow’s defined conditions.
When a message fails to send (triggering a *.notSent event with error details), the attempt still counts toward your communication limits.
## Defining limits ---
Changes made to communication limit settings may take up to approximately 5 minutes to take effect due to system caching. Please allow this time before expecting the updated limits to apply.
The main view of the communication limit in Settings > Communication Limit
The main view of the communication limit in Settings > Communication Limit
### For Communication and/or Automation 1. Go to Settings icon **Settings > Communication Limits**. 2. On the section for the dedicated channel (email, SMS, mobile push, or web push), click **Show**. **Result**: The following toggles appear:
The main view of the communication limit in Settings > Communication Limit
The main view of the communication limit in Settings > Communication Limit
3. To: - impose limit on messages sent through Experience Hub, enable the **Automation limits** toggle. - impose limit on messages sent through Experience Hub, enable the **Communication limits** toggle. 3. In the **Limit** section, enter the maximum number of messages you want to send to a profile within time unit specified in the **Period** field. 4. In the **Period** field, enter the time unit of the limit (number and unit, for example, 1 day)
Example configurations
Exemplary communication limit config
5 emails per one day
In the above configuration, a profile can receive up to 5 mass emails per day. Before sending an email, the system checks how many of them a profile received during last 24 hours.
Exemplary communication limit config
25 emails per 30 days
In the above configuration, a profile can receive up to 25 mass emails per 30 days. Before sending an email, the system checks how many of them a profile received during last 30 days.
1. Repeat step 3 and 4 for preferable message types in Experience and Automation Hubs. 2. Confirm settings by clicking **Apply**. **Result**: When a limit is exceeded, a capping event is generated in the activity list of the profile that was supposed to receive the message but didn’t due to the limit being reached. This event includes information about the capping type (`cappingType`). If the limit was exceeded in Automation Hub, the ID of the workflow is included.
Example email capping event
Example email capping event
### For tags
The instructions on how to apply tags to campaigns is available in [Tagging campaigns](/docs/campaign/tagging-campaigns)
1. Go to Settings icon **Settings > Communication Limits**. 2. On the **Tags** section, click **Show**. 3. Click **Add tag**. **Result**: A dropdown list appears. The list contains tags only from the predefined **campaigns** folder. 4. Select the tags from the list. 5. For each tag you select, define a limit: 1. In the **Limit** field, enter the maximum number of messages you want to send to a profile within time unit specified in the **Period** field. 2. In the **Period** field, specify the duration of the limit using a number and a time unit (for example, “1 day”). **EXAMPLE**: Defining a limit to 1 message, 1 day means that a profile can receive a campaign with a specific tag only once a day. 6. Confirm the settings by clicking **Apply**. **Result**: When a tag limit is exceeded, a capping event is generated in the activity list of the profile that was supposed to receive the message but didn’t due to the limit being reached. This event includes information about the capping type (`cappingType`) and the ID of the tag (`cappedTagIds`) for which the limit was exceeded.
Example SMS capping event
Example SMS capping event
## Granular workflow limits vs global automation limits --- Automation Hub defines its own limits: - how many times a workflow can be triggered in a specific time unit - how many times a trigger can be activated in a workflow - how many times an action can be repeated in a workflow
You can read about automation limits in [Limits](/docs/automation/automation-capping).
While defining the limits in the **Settings > Communication Limits** menu, remember about the limits for workflows in Automation Hub and the other way round. Otherwise conflicts may occur between them. **Suggestions**: - Keep track of the active workflows and carefully estimate the number of sent messages through them (in your calculations include both marketing messages and system emails such as transaction summary, discount coupon emails, if you use Automation Hub to send such emails). - Pay attention to workflows triggered by frequently occurring profile activities, which contain actions that sent messages to profiles. - Consult each modification of limit of action nodes (Send Email, Send SMS, Send Web Push) with the global limits. ## Ignoring limits ### Automation Hub --- If your workflows send system messages such as transaction confirmations, information about shipping, notifications about delay of the order delivery, and so on, you may want to make exceptions to such kind of the messages. For such circumstances, in the action nodes: [Send Email](/docs/automation/actions/send-email), [Send Web Push](/docs/automation/actions/send-webpush-node), [Send Mobile Push](/docs/automation/actions/send-mobile-push), and [Send SMS](/docs/automation/actions/send-sms-node), you may enable the **Ignore limits** option, which causes sending the message even if the the global limits for messages sent to a profile per day defined in **Settings > Communication Limits** are exceeded.
Ignore limits option in Send SMS node
Enabled Ignore limits option in Send SMS node
### Experience Hub If you would like to ignore limits on the message you send through Experience Hub, you can use the **Ignore limits** option in the **Audience** settings.
Ignore limits option in the Audience section while creating a message
Ignore limits option in the Audience section while creating a message
# Configuration Once you configure your workspace in the configuration section on the Synerise platform, you can easily manage items related to contact with clients -- it makes using messenger, web push, sending SMS and dynamic content templates much easier. Thanks to this you will save time and work on re-gaining and filling in data - they will be updated and saved by the Synerise system. # Integrating email providers # Configure AI engine for Recommendations Before you can use [AI recommendations](/docs/ai-hub/recommendations-v2), you must [prepare an item feed](/docs/ai-hub/recommendations-v2/item-feed-requirements) which will be the source of items. The process consists of the following steps: 1. [Adding product feed](#adding-item-feed) 2. [Selecting a product feed](#selecting-item-feed) 3. [Connecting feed with supplemental catalog](#connecting-feed-with-supplemental-catalog) (optional) 3. [Selecting attributes for preview](#selecting-attributes-for-preview) 3. [Grouping feed attributes](#grouping-feed-attributes) 4. [Selecting a recommendation type](#selecting-recommendation-types-and-default-filters) 5. [Selecting response attributes](#selecting-response-attributes) 6. [Selecting filterable attributes](#selecting-filterable-attributes) 7. [Defining the item link](#defining-the-item-link) 8. [Selecting training attributes](#selecting-training-attributes) 9. [Selecting attributes increasing the item variety](#selecting-attributes-to-increase-item-variety) After the configuration and the model training, you can [monitor the status](/docs/settings/configuration/ai-engine-configuration/model-status). When the model is active, you can create a [recommendation](/docs/ai-hub/recommendations-v2).
You can use the same item catalog for Propensity Predictions, AI Search, and Recommendations.
## Adding item feed --- The first step is selecting the feed from which items will be sourced. You can either select a catalog that contains a feed or use Google Merchant Feed. Make sure, the item feed includes the following attributes: - `title` - The name of the item - `category` - The category of the item You can read about requirements for item feed: - [uploaded to a catalog](/docs/ai-hub/item-feed/item-feed-in-catalog) - [pulled from an URL](/docs/ai-hub/item-feed/google-merchant-feed#requirements) If you previously configured a feed which you want to use now, you can omit this step.
- We recommend using Google Merchant XML instead of XML files due to the size limits (an XML file cannot exceed 10 MB). - If you're enabling AI engine for visual similarity recommendation model, select the item feed which contains less than 1,000,000 items.
1. Go to **Settings > AI engine configuration**. 2. Click **Add feed**. **Result**: A pop-up appears. 3. Select the type of item feed you want to create: - **Metadata catalog** - A supplementary feed; it cannot operate as a standalone item feed and must be used alongside a main item feed. It's used only for the following recommendation models: - [section page](/docs/ai-hub/recommendations-v2/recommendation-types#section-page) - [attribute recommendations](/docs/ai-hub/recommendations-v2/recommendation-types#attribute) Full information on this feed type is available in the ["Metadata catalog" section](/docs/ai-hub/item-feed/metadata-catalog). - **Supplemental catalog** - A feed designed to store price and availability attributes for items across different stores or sales channels. It cannot operate as a standalone item feed and must be used alongside a main item feed that contains the complete item information. Full instructions on implementing this type of feed are available in the ["Supplemental catalog" section](/docs/ai-hub/item-feed/supplemental-catalog). - **Item feed** - A main source of item information. You can create a feed from the following sources: - **Data catalog** - If you upload and update a file with product information in **Data Management > Catalogs**, select this option and then select the catalog in which you store product information. - **Google Merchant** - If you store product information in Google Merchant, select this option. Then provide the following information: - the link to the Google Merchant feed (the **Feed link** field), - the name of the field (the **Feed name** field), - the frequency of pulling updates from the feed to Synerise (the **Interval** field), - authentication type (none, basic, or bearer) - authentication credentials (when you selected authentication type other than none)
Include the [Last-Modified](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified) header to enable detection of whether the product feed import is necessary, this will help you reduce data transmission costs.
2. Confirm by clicking **Apply**. **Result**: The feed appears on the list in **Settings > AI Engine configuration**. ## Selecting item feed --- 1. In **Settings > AI Engine Configuration**, on the list of feeds, click the feed you added according to the [Adding item feed](#adding-item-feed) procedure. The configuration form opens. In the **Item catalog** section, the feed you are configuring is selected automatically and you can proceed to the next part of the configuration.
Blank model configuration form
Blank model configuration form
## Connecting feed with supplemental catalog --- If you want to connect a [supplemental catalog](/docs/ai-hub/item-feed/supplemental-catalog) which stores `price` and `availability` attributes for stores/sales channels to your item feed then: 1. In the **Supplemental catalog** section, click **Show**.
Selecting a supplemental catalog in the configuration of the main item feed
Selecting a supplemental catalog in the configuration of the main item feed
2. Click **Add catalog**. 3. From the dropdown list, select supplemental catalogs you want to connect to your item feed. The list contains only feeds of the supplemental catalog type, the instructions on creating them are available in the ["Implementing supplemental catalogs" section](/docs/ai-hub/item-feed/supplemental-catalog#implementing-supplemental-catalogs). 4. Confirm by clicking **Apply**. **Result**: As a result, the [supplemental attributes](/docs/ai-hub/item-feed/supplemental-catalog#supplemental-attributes) type will be available for use in the [recommendation filters](/docs/ai-hub/recommendations-v2/recommendation-filters) and you can select this catalog in the [preview of the recommendations](/docs/ai-hub/recommendations-v2/previewing-recommendations#previewing-recommendation-supplemental-catalog-context) based on this item feed. ## Selecting attributes for preview --- You can define attributes whose values will appear in the Synerise platform preview when you test the recommendation or the search settings.
Attribute for preview section
Attribute for preview section
1. On the **Attributes for preview** tab, click **Show**. 2. In the **Response attribute** column, from the lists select the attributes that contain the data in the **Item attributes** column. **Example**: If the data source stores the item title in the `itemTitle` attribute, choose `itemTitle`: on the right, select the `itemTitle` attribute as the pair for `Title` from the left column. **Result**: Values for the attributes that are chosen in the **Response attribute** column will be shown for products when previewing them in the Synerise platform.
This setting is shared by the Recommendations previews and the AI Search Engine previews.
## Grouping feed attributes ---
This option is available only for feeds from Google Merchant XML files.
Grouping feed attributes organizes attributes or fields within an item feed into logical groups. Instead of treating each product variant — such as different sizes or colors — as a separate item in the feed, all variants of a product are combined and grouped into a single item. During this grouping process, a "base" product is selected as representative. This is done by first gathering all products that share the same `itemGroupId`, then grouping them by category, and finally selecting the first product from the largest category group to serve as the base.
Null values and empty attribute values are not handled and will not appear in the grouped results.
When adding such a feed to Synerise, you must enable the grouping of feed attributes. Please note that enabling grouping is irreversible. 1. In the **Grouping feed attributes** section, click **Show**. **Result**: Grouping rules are shown. The system automatically prepares grouping rules. 2. Verify the proposed grouping rules. When configuring the grouping of feed attributes, you must map source fields to target fields using one of the following aggregators. Each aggregator determines how values from multiple items are combined: | Aggregator | Description | Example | Aggregated Result | |----------------|--------------------------------------------------------------------------------------------------|------------------------------------------------------|----------------------------| | **or** | Performs a logical OR on boolean values. Returns `true` if any value is `true`, otherwise `false`. | `true, false, false` | `true` | | **arrayDistinct** | Aggregates unique, non-null values into an array, removing duplicates. | `"41", "42", "41", "42"` | `["41", "42"]` | | **arrayFlatten** | Flattens nested arrays into a single array combining all elements. | `["123", "456"], ["456", "789"]` | `["123", "456", "456", "789"]` | | **array** | Aggregates values into an array, preserving order. | `"41", "42"` | `["41", "42"]` | | **single** | Selects the first non-null value from the list. For the `availability` attribute, the aggregated result will be a boolean value. | `"PROD123", "PROD124"` | `["PROD123"]` | 3. To add your own rule, click **Add rule**. 1. In the **Source filed** dropdown, select an item attribute from the feed pulled from Google Merchant. 2. From the **Aggregator** dropdown list, select the aggregator based on which attribute values will be combined. 3. In the **Target field** dropdown list, select the attribute which will hold the aggregated values. You can create an attribute. 4. Confirm by clicking **Apply**. ## Selecting recommendation types and default filters --- Select the recommendation models you want to enable for the selected item feed. Optionally, you can define **default filters** (global item and distinct filters) for the recommendations created based on the recommendation model for a specific item feed. These filters include:
>The preview of the Top item recommendation model in AI engine configuration
The preview of the Top item recommendation model in AI engine configuration
- **Item filter** - This is a global item filter whose conditions an item must meet to be included in the recommendation of a specific type. - You can enable this filter in the settings of a recommendation campaign through the **Apply Items Global Filters** toggle while [adding slots](/docs/ai-hub/recommendations-v2/creating-recommendation-campaign#adding-slots). The filter will then work together with the filters in the recommendation slot. - If you change the filter settings, the changes will be applied automatically to all recommendations based on the specific recommendation model for which the **Apply Items Global Filters** option is enabled. - **Distinct filters** - This is a global distinct filter which helps increase the variety of items in the recommendation of a specific type. Applying this filter limits the number of items with the same value of an attribute (such as, brand, color, shape, category). - The choice of attributes for selection in this filter is defined in the **Attributes for distinct filters** section in **AI Engine Configuration**. - You can enable this filter in the settings of a recommendation campaign through the **Apply Global Distinct Filters** toggle while [adding slots](/docs/ai-hub/recommendations-v2/creating-recommendation-campaign#adding-slots). When you apply it there, it will override the distinct filter for a slot. - If you change the filter settings, the changes will be applied automatically to all recommendations based on the specific recommendation model for which the **Apply Global Distinct Filters** option is enabled. - For all recommendation types except for **Last seen**, the engine considers up to 1000 items with the highest score that match the recommendation type. For example, if you selected the **Cross-sell** type, the engine analyzes up to 1000 items that match the cross-sell recommendation type, and then selects the number of items you chose to include in the slot. - For the **Last seen** recommendation type, the engine considers the last 100 page visit events. Based on the data from these events, the engine selects the number of items you chose to include in the slot.
Learn more about [recommendation types](/docs/ai-hub/recommendations-v2/recommendation-types).
In the **Recommendation models** section: 1. On the recommendation model you want to enable, click **Show**. 2. Switch the **Model enabled** toggle on. 3. Optionally, define default filters for the recommendation model. These are filters which are automatically applied to the recommendation, in the **Default Filters** section: 1. In **Item filter**, click **Add**. 1. From the dropdown list, select an item attribute. 2. Use a logical operator. 3. Enter or select a value of the item attribute. 4. To add more conditions, click **Add another** and repeat steps I-IV. 5. Confirm by clicking **Apply**. 2. In **Distinct filters**, click **Add**.
You can read how to build conditions in the distinct filters for the `category` attribute [here](/docs/ai-hub/recommendations-v2/recommendation-filters#the-category-attribute).
An empty pop-up for configuring distinct filter conditions
An empty pop-up for configuring distinct filter conditions
1. In the pop-up header, enter the name of the filter. 2. In the **Show me only** field, enter the number of items whose attribute values can be the same. 3. From the **Choose attribute** dropdown list, select the attribute. You can use each attribute only once. This means that if you add multiple filters, any attribute that has already been used will no longer be available for selection. 4. Confirm by clicking **Apply**. 5. To add the next distinct filter, click **Add** and repeat the steps. 6. If you want the distinct filter to supplement the slot with non-matching items in case not enough matching items are found, enable the **Mark filter as elastic** option. 5. Repeat steps 1 to 4 for other recommendation models you want to select. 4. Confirm by clicking **Apply**. **Result**: The AI model is trained. The Default Filters are disabled in the settings of a recommendation campaign by default. ## Selecting response attributes --- A response attribute is an attribute of the item that is returned in the response to a recommendation request. 1. In the **Response attributes** tab, click **Show**. 2. Click **Select attributes**. 3. Select the checkboxes next to the attributes which you want to include in the response to a recommendation request. There are two types of attributes: - **Textual attributes**: String-type attributes, for example, a color, an item name, a brand name, fabric, pattern, and so on. - **Range attributes**: Attributes that can have numerical values within a selected range, such as size, price, width, length, and so on.
To limit the volume of data sent to your applications and sites, you should only select the attributes which you plan to use.
4. Confirm by clicking **Apply**. ## Selecting filterable attributes --- You can define the attributes which you can use later to filter recommendations results as well as allow you to filter items in the settings of the Propensity predictions. The attributes also become available in the **Decision Hub**. 1. On the **Filterable attributes** tab, click **Show**. 2. Click **Select attributes**. 3. Tick the checkboxes next to the attributes which you want to use for filtering the recommendation results. **Recommended**: Don't use `title` or `description` as filterable attributes. Using these attributes as filterable has a negative impact on performance. 4. Confirm by clicking **Apply**.
Every day, attributes added to **Filterable attributes** are automatically deleted if they fulfill all of the following conditions: - They were added to filterable attributes more than 10 days ago. - They are not used in a search or suggestion index configuration. - They are not set as filters or boosting rules in a recommendation campaign. - They are not set as a default filter in a recommendation configuration. - They are not used as additional filters in a recommendation API/SDK request.
## Defining the item link --- An item link is an attribute of an item to which Synerise's UTM parameters are added. 1. On the **Definition of item link** tab, click **Show**. 2. From the **Attribute** dropdown list, select an attribute that is the item link. You can select more than one attribute.
When you use one workspace for multiple language versions, you can select several attributes as an item link. This lets you analyze the statistics such as item clicks or visits across various website language versions.
3. Confirm by clicking **Apply**. **Result**: The`snrai`, `snr_content`, and `snr_id` parameters are added to the URL of the item. For example: `https://www.exemplary-shop.com./winter-shoes-camelbrown.html?snrai_campaign=QWERTY[…]e=&snrai_content=&snrai_id=123456789010305` ## Selecting training attributes --- Select the attributes which will be used for training for the Similar items and Visual similarity models, so they can produce relevant results. - For the Similar items and Item comparison models, the title attribute is set at default. - For the Visual similarity model, the default attributes are: image link, additional image links, and availability. These attributes are necessary as the location of the data and images are required. We recommend selecting short attributes such as title, color, brand. 1. On the **Training attributes** tab, click **Show**. 2. Click **Select attributes**. 3. Tick the checkboxes next to the attributes which you want to display to the customers.
There are two types of attributes: - **Textual attributes**: String-type attributes, for example, a color, an item name, a brand name, fabric, pattern, and so on. - **Range attributes**: These are all attributes that can have numerical values within a selected range, such as size, price, width, length, and so on.
4. Confirm by clicking **Apply**. ## Selecting attributes to increase item variety --- By using distinct filters, you can define the number of items with the same value of an attribute (for example, a brand) that can be displayed in the recommendation frame. 1. On the **Attributes for distinct filters** tab, click **Show**. 2. Click **Select attributes**. 3. On the pop up, from the list, choose up to 5 attributes. 4. Click **Apply**. 5. Confirm the settings of the tab by clicking **Apply**. **Result**: These attributes are available in the **Distinct filter** [while creating a campaign](/docs/ai-hub/recommendations-v2/creating-recommendation-campaign#distinct-filter) and in the **Item attributes** dropdown in the [the slot configuration for the Section recommendations](/docs/ai-hub/recommendations-v2/creating-section-recommendations#configure-item-settings) and the [Attribute recommendations](/docs/ai-hub/recommendations-v2/creating-attribute-recommendations#configure-item-settings). After the configuration, you can [monitor the status](/docs/settings/configuration/ai-engine-configuration/model-status). When the model is active, you can create a [recommendation](/docs/ai-hub/recommendations-v2).
You can additionally select [custom events for model training](/docs/settings/configuration/ai-engine-configuration/custom-model-training).
## Removing item feed --- You can remove item feeds from the list. While removing item feeds, any Synerise objects that rely on the feed as a source of information (such as predictions, recommendations, AI search) will be automatically disabled. Prior to confirming the removal operation, you will be presented with a list of objects that are currently using the feed to be removed. The feed will be removed after 7 days from confirming the action. During this transitional period, the feed and the objects associated with it will remain active. In the case of a feed within a catalog, the contents of the catalog will be deleted, while the catalog itself will be retained. 1. Go to **Settings > AI engine configuration**. 2. Next to the name of the feed you want to remove, click Three dot icon 3. From the dropdown list, select **Delete**. **Result**: A pop-up appears with the list of objects that are currently using the feed. 4. To confirm the operation, click **Yes, delete feed**. # SMS By creating an SMS account you can start sending text messages (SMS) to your customers. This opens up a possibility to communicate with your customers through a new channel and analyze its effectiveness. To learn about creating an SMS account in Synerise and requirements for that, see [Integrating SMS gateway](/docs/campaign/SMS/configuring-sms-gateway). # Enabling the Vonage integration In this article, you will find out how to enable Vonage integration in Synerise and how to create an SMS sender account in Synerise which will allow you to send text messages to your profiles (for example, customers). ## Prerequisites --- - Create a [Vonage account](https://dashboard.nexmo.com/). - Become familiar with the text message limits imposed by Vonage in the Vonage documentation. While planning SMS campaigns and sending SMS batches, take these limits into consideration. ## Enabling the integration --- 1. Go to Settings icon**Settings > Apps & Services**. 2. In the list of integrations, find Vonage and next to the integration name, click **Show**. - If there is a connection, you may proceed to [Creating Vonage SMS account in Synerise](#creating-vonage-sms-account-in-synerise) - If there is no connection or you want a new one, proceed with the integration settings. 3. Click **Add connection**. **Result**: A pop-up appears. 4. On the pop-up, switch the **Enable integration** toggle. 3. In the **API Key** field, enter the API Key available in **Vonage API Dashboard**.
Vonage API Dashboard
Vonage API Dashboard
4. In the **API Secret** field, enter the API Secret available in **Vonage API Dashboard**. 4. Click **Next**. 5. In the **Connection name** field, enter the name of the connection which will be visible on the list of Vonage integrations in Synerise in **Settings > Apps & Services**. 6. Click **Apply** and confirm by clicking **Yes**. 7. Proceed to [creating a sender account](#creating-vonage-sms-account-in-synerise). ## Creating Vonage SMS account in Synerise --- After enabling the connection, you need to create a sender account in Synerise, which can be used in communication. 6. Go to **Settings > SMS**. 7. In the **Account name** field, enter the name of your SMS account. It's used only on the list of SMS accounts in Synerise. 8. In the **From name (SenderId)** field, enter the name or number the message will be sent from, configured in the Vonage panel. 9. From the SMS provider list, select **Vonage**. 10. From the **Vonage integration** dropdown list, select the connection you created in [the previous part of the process](#enabling-the-integration). 10. Finish by clicking **Apply**. **Result**: You can now use this sender when configuring SMS communication. # Enabling the SendGrid integration In this article, you will find out how to enable the SendGrid integration in Synerise which will let you send text messages to your profiles (for example, customers). ## Prerequisites --- - Create an account in SendGrid. - In the SendGrid documentation, check the message limits imposed by SendGrid. While planning email campaigns and sending email batches, take these limits into consideration. ## Enabling integration --- 1. Go to Settings icon**Settings > Apps & Services**. 2. In the list of integrations, find **Sendgrid** and next to the integration name, click **Show**. - If there is a connection, you may proceed to [configuring a sender account](/docs/campaign/e-mail/configuring-email-account#configure-a-sender-account) - If there is no connection or you want a new one, proceed to the next step. 3. Click **Add connection**. **Result**: A pop-up appears. 4. From the **Security** dropdown list, select one of the following options: - **No security** - **SSL** - **TSL** 5. In the **Port** field, enter the port number you'll use. If you're not sure which port you use, refer to the [SendGrid documentation](https://docs.sendgrid.com/for-developers/sending-email/integrating-with-the-smtp-api#smtp-ports). 5. In the **Password** field, enter the password to your SendGrid account. 4. Click **Apply**. 6. Proceed to [configuring a sender account](/docs/campaign/e-mail/configuring-email-account#configure-a-sender-account) ## Tracking bounce events --- Follow the instructions below to start collecting the following events in Synerise: - [`newsletter.dropped`](/docs/assets/events/event-reference/email#newsletterdropped), - [`newsletter.hardbounce`](/docs/assets/events/event-reference/email#newsletterhardbounce), - [`newsletter.spambounce`](/docs/assets/events/event-reference/email#newsletterspambounce); 1. In your SendGrid account, perform the [Enable the Signed Event Webhook procedure](https://docs.sendgrid.com/for-developers/tracking-events/getting-started-event-webhook-security-features#enable-the-signed-event-webhook). 2. Provide the key to the Synerise support. 3. In your SendGrid account, proceed to Settings > Mail Settings > Event webhook. 4. In the **HTTP POST URL** field, enter `https://{SYNERISE_API_BASE_PATH}/webhook-handler/sendgrid.` Depending on the cloud where your workspace is hosted, replace `{SYNERISE_API_BASE_PATH}` with: - `https://api.synerise.com` for Microsoft Azure - `https://api.geb.synerise.com` for Google Cloud Platform 5. Select **Event notifications**. 6. Select dropped, bounced, and spam reports. These are the only possible options. 7. Save the settings. # Consumption reports You can monitor: - the number of events your organization stores in the database. - the number of events created in a selected period. - the number of API calls made in a selected period. This data is available as graphs or as a detailed XLSX report. # IP allow-listing IP allow-listing lets users define the IP addresses allowed to access a workspace in Synerise. Next to [two factor authentication](/docs/settings/your-account/account-security) and [password policy](/docs/settings/identity-access-management/access-control/password-settings), it's an option that strengthens security of the workspace and restricts the access to those users whose credentials are executed from the approved location. Within this option, the users can define: 1. The list of allowed IP addresses 2. Access to a workspace for Synerise subnets
Configuration of IP allow-listing
Configuration of IP allow-listing
1. Go to Settings icon **Settings > Access Control**. 2. In the **Security** section, next to **IP allow-listing**, click **Show**. 3. In **Give access to selected IP addresses** section, the **Allow selected IP** toggle is off by default (users can access a workspace from various IP addresses). To define the list of IP addresses only from which users can access the workspace, switch the toggle on. **Result**: A text field appears. 4. In the text field enter an IP address. 5. Confirm by clicking **Add address**. 6. To add more addresses, repeat steps 4 and 5. 7. Optionally, you can manage access to your workspace by Synerise subnets for support reasons. This option is on by default.
Remember that after confirming the list of allowed IP addresses, the users who access the workspace from other addresses than specified will lose access.
8. To confirm all settings, click **Apply**. # Enabling the Infobip integration In this article, you will find out how to enable the Infobip integration in Synerise which will let you send emails to your profiles (for example, customers). Become familiar with [the events this integration generates](#tracking-bounce-events) for hardbounces, spambounces, and softbounces. ## Prerequisites --- - Create an account in Infobip. - In the Infobip documentation, check the message limits imposed by Infobip. While planning email campaigns and sending email batches, take these limits into consideration. ## Enabling integration --- 1. Go to Settings icon**Settings > Apps & Services**. 2. In the list of integrations, find **Infobip (Email)** and next to the integration name, click **Show**. - If there is a connection, you may proceed to [configuring a sender account](/docs/campaign/e-mail/configuring-email-account#configure-a-sender-account) - If there is no connection or you want to create a new one, proceed to the next step. 3. Click **Add connection**. **Result**: A pop-up appears. 4. In the **API Key** field, enter [the API key generated in Infobip platform](https://www.infobip.com/docs/essentials/api-authentication#api-key-header). The key must have the following access scopes assigned: `email:manage`, `email:message:send`, `message:send`. 5. In the **Base URL endpoint** field, enter the full base URL for API requests. To get your base URL, log in to the [Infobip API Resource](https://dev.infobip.com/) hub with your Infobip credentials. Once logged in, the URL is in the following format: `https://xxxxx.api.infobip.com`. Learn more about the base URL [in the Infobip documentation](https://www.infobip.com/docs/essentials/base-url). 6. In the **Application ID** field, enter the Application ID associated with the API key. This field is optional. Learn more about this property [in the provider's documentation](https://www.infobip.com/docs/cpaas-x/application-and-entity-management). 7. In the **Entity ID** field, enter the Entity ID associated with the API key. This field is optional. Learn more about this property [in the provider's documentation](https://www.infobip.com/docs/cpaas-x/application-and-entity-management). 8. Click **Apply**. 9. Proceed to [configuring a sender account](/docs/campaign/e-mail/configuring-email-account#configure-a-sender-account). ## Tracking bounce events --- The tables below illustrate the mapping between Infobip errors and Synerise events. The mapping depends on the **Group ID** and **Group Name** values that Infobip includes in its notification, as well as the specific error code.
The tables list only the error codes that affect event mapping. For a complete list of Infobip error codes, see the [Infobip documentation](https://www.infobip.com/docs/essentials/api-essentials/response-status-and-error-codes#email-error-codes).
The events will be generated in Synerise and will be available in the activity list on a profile card. You can [create a segmentation](/docs/analytics/segmentations/creating-segmentations) based on the events listed in the tables to obtain the list of profiles for whom the events were generated. **Group ID 1** | Error in Infobip | Group name | Event in Synerise | |------------------|------------|-------------------| | `EC_SPAM_DETECTED` | DROPPED | [`newsletter.spambounce`](/docs/assets/events/event-reference/email#newsletterspambounce) | | `EC_SUPPRESSED_SPAM_COMPLAINT` | DROPPED | [`newsletter.spambounce`](/docs/assets/events/event-reference/email#newsletterspambounce) | | `EC_SUPPRESSED_BOUNCE` | DROPPED | [`newsletter.spambounce`](/docs/assets/events/event-reference/email#newsletterspambounce) | | Any other error name | DROPPED | [`newsletter.dropped`](/docs/assets/events/event-reference/email#newsletterdropped) | | Any error name | HANDSET_ERRORS | [`newsletter.hardbounce`](/docs/assets/events/event-reference/email#newsletterhardbounce) | **Group ID 2** | Error in Infobip | Group name | Event in Synerise | |------------------|------------|-------------------| | `EC_SENDER_IP_BLACKLISTED` | BOUNCED | [`newsletter.spambounce`](/docs/assets/events/event-reference/email#newsletterspambounce) | | `EC_BLOCKED_AS_SPAM` | BOUNCED | [`newsletter.spambounce`](/docs/assets/events/event-reference/email#newsletterspambounce) | | `EC_SPAM_REVERTED` | BOUNCED | [`newsletter.spambounce`](/docs/assets/events/event-reference/email#newsletterspambounce) | | `EC_RECIPIENT_INBOX_FULL` | BOUNCED | [`newsletter.softbounce`](/docs/assets/events/event-reference/email#newslettersoftbounce) | | `EC_SOFT_BOUNCE` | BOUNCED | [`newsletter.softbounce`](/docs/assets/events/event-reference/email#newslettersoftbounce) | | Any other error name | BOUNCED | [`newsletter.hardbounce`](/docs/assets/events/event-reference/email#newsletterhardbounce) | | Any error name | USER_ERRORS | [`newsletter.hardbounce`](/docs/assets/events/event-reference/email#newsletterhardbounce) | **Group ID 3** | Error in Infobip | Group name | Event in Synerise | |------------------|------------|-------------------| | Any error name | OPERATOR_ERRORS | [`newsletter.hardbounce`](/docs/assets/events/event-reference/email#newsletterhardbounce) | # Customizing model training By default, the [Personalized](/docs/ai-hub/recommendations-v2/recommendation-types#personalized), [Next interaction](/docs/ai-hub/recommendations-v2/recommendation-types#next-interaction), [Section page](/docs/ai-hub/recommendations-v2/recommendation-types#section-page), and [Attribute](/docs/ai-hub/recommendations-v2/recommendation-types#attribute) recommendation models are trained on standard events, as described in [requirements for recommendations](/docs/ai-hub/recommendations-v2/introduction-to-recommendation-campaigns#requirements). On the **Training data** tab, you can additionally select up to 5 [custom events](/glossary#custom-events) which contain an item identifier (by default, the `SKU` value) to be used for training and retraining these models alongside the standard events.
For the frequency of model retraining, see [model status](/docs/settings/configuration/ai-engine-configuration/model-status#training-frequency).
## Enabling custom events for training --- 1. Go to **Settings > AI Engine Configuration > Training data**. 2. Switch the **Use custom events** toggle on. **Result**: The events table appears, where you can add up to 5 custom events.
Training data tab in AI engine configuration with the Use custom events toggle enabled and an empty events table
Enabling custom events on the Training data tab
## Adding a custom event --- 1. On the **Training data** tab, click **Add event**. **Result**: A pop-up appears.
Add event pop-up with the Event dropdown list, the Input, Target, Split, and Multi-item role checkboxes, and the Use custom attribute toggle
Adding an event on the Training data tab
2. From the **Event** dropdown list, select the event you want to use for training. The list only includes [custom events](/glossary#custom-events) that you defined in Synerise - it doesn't include [default events](/docs/assets/events/event-reference).
If the event you want to use isn't listed yet, you must first add it, either as a [custom event definition](/docs/assets/events/event-definitions#in-the-web-application) in the web application, or by sending it through the [Custom event](https://hub.synerise.com/api-reference/data-management#operation/CustomEvent) API method, which creates the event definition automatically.
3. Select one or more roles for the event: - **Input** - The event is used as an input to the model, both during training and serving. By default, [page.visit](/docs/assets/events/event-reference/web-and-app#pagevisit) and [transaction.charge](/docs/assets/events/event-reference/items#transactioncharge) are used as input. - **Target** - The model learns to predict interactions with the items included in this event. - **Split** - Use this role to mark where a session splits into input and target data. Your other custom events with the **Input** role count as input when they happen before the split event, and your custom events with the **Target** role count as target when they happen after it. In most cases, a random split within the session gives the best results, so use this role only if you have a specific reason to define a custom split point. - **Multi-item** - Use this role for events which carry information about more than one item, for example, an event that reports the status of a cart. You can't select this role on its own—combine it with at least one of **Input**, **Target**, or **Split**. 4. If the item identifier in the event is stored in a parameter other than `SKU`, switch the **Use custom attribute** toggle on and select the parameter which contains the item identifier. 5. Confirm by clicking **Add event**. **Result**: The event appears on the list on the **Training data** tab. 6. Click **Save**. ## Excluding periods from training --- Optionally, you can exclude one or more time periods from training the [Personalized](/docs/ai-hub/recommendations-v2/recommendation-types#personalized), [Next interaction](/docs/ai-hub/recommendations-v2/recommendation-types#next-interaction), [Section page](/docs/ai-hub/recommendations-v2/recommendation-types#section-page), and [Attribute](/docs/ai-hub/recommendations-v2/recommendation-types#attribute) recommendation models. Events collected during an excluded period are not used for training or retraining. This is not required for the models to work, but it can be useful if the data collected during a specific period does not represent normal customer behavior, for example: - You duplicated events during a specific period (for example, to avoid deduplicating data afterwards) and you want to exclude that period instead of cleaning up the duplicated events. - You ran aggressive promotions during a specific period, which led customers to buy items they would not normally buy outside of the promotion, and you don't want the model to treat this behavior as standard. ### Enabling period exclusion 1. Go to **Settings > AI Engine Configuration > Training data**. 2. Switch the **Enable period exclusion** toggle on. **Result**: The periods table appears, where you can add the periods you want to exclude.
Training data tab in AI engine configuration with the Enable period exclusion toggle enabled and an empty periods table
Enabling period exclusion on the Training data tab
### Adding an excluded period 1. On the **Training data** tab, click **Add period**. **Result**: A row for the period appears in the table.
Periods table on the Training data tab with a new row containing the Description field and the Start date - End date period selector
A new period added to the periods table
2. Optionally, in the **Description** field, add a description of the period, for example, the reason for the exclusion. 3. In the **Period** field, select the **Start date** and **End date** of the period you want to exclude. Click **Now** to select the entire current day; you cannot select individual hours.
You don't have to add periods in chronological order.
4. Confirm by clicking **Apply**. **Result**: The period appears on the list on the **Training data** tab. To remove a period from the list, click the trash icon next to it. 5. Click **Save**. # Sharing segmentation results to a workspace group
This feature is in a [public preview](/glossary/#public-preview) mode.
This article explains how to mark the same profiles across a workspace group. If you want to save segmentation results to an attribute assigned to profiles and keep record of segmentation result changes within one workspace, see [Sharing segmentation results](/docs/analytics/segmentations/share-segmentation-results).
Sharing segmentations lets you save the results of segmentations as [membership attributes](/docs/crm/customer-properties#managing-membership-attributes) — a true or false value — in a group of workspaces. When you share segmentation results across a group of workspaces, a membership attribute is created, and the same profiles from the segmentation are tagged with this attribute in every workspace within the group. This is useful if one profile interacts with different brands in your workspace group. You can use this to make your campaigns more efficient and avoid contacting the same profile multiple times. Besides creating the membership attribute, the system updates the attribute on a set schedule—either every 6 hours or once a day. During each update, it checks the source segmentation(s) for any changes and only updates the profiles that have changed since the last run. This way, the process runs regularly but only works on profiles that need updating. ## Generated events and attributes - [Membership attributes](/docs/crm/customer-properties#managing-membership-attributes) - One for each segmentation selected. The attribute is created during the first synchronization and then regularly updated. These are visible on the profile card, and you can find all membership attributes in your workspace under **Behavioral Data Hub > Attributes**. - [`profile.updated`](/docs/assets/events/event-reference/profiles#profileupdated) events: - Generated on both the source and target workspaces. - Occur once per synchronization process. - For every profile update: - On the first run, all profiles that are members of at least one shared segmentation are updated. - On subsequent runs, only profiles with changes in membership for at least one shared segmentation are updated. - If multiple membership attributes for a profile are updated, these are batched together and a single event is generated. - [`profile.MembershipAttributeUpdated`](/docs/assets/events/event-reference/profiles#profilemembershipattributeupdated) events: - Every change or creation of membership attribute generates the event on the current workspace or target workspace(s). - On the first synchronization run, all profiles that are members of at least one shared segmentation will be generated the events. - On subsequent runs, an event is generated for every change in membership attributes for profiles in at least one shared segmentation. These attributes and events help you keep your segmentation data accurate and up to date, making it easier to target your profiles well. They also let you analyze how often profiles are added or removed from a shared segmentation. ## Prerequisites - You must be assigned have a user role which lets you [share segmentations](/docs/settings/identity-access-management/permissions/analytics-permissions#share-segmentation-results-and-access-synchronization-logs). - Review and understand the [limits](/docs/settings/workspace/multibrand-workspaces/limits-and-constraints). ## Sharing modes You can share segmentations to the following locations: - Single Workspace Sync - The [segmentation results will be saved to an attribute (on the currently used workspace) which will be assigned to the profiles who meet segmentation conditions](/docs/analytics/segmentations/share-segmentation-results). The value of this attribute will be updated through the synchronization process. This can help you keep record of segmentation result changes within one workspace. - Multi Workspace Sync - The segmentation results will be saved to an attribute which will be assigned to the profiles across the [group of workspaces](/docs/settings/workspace/multibrand-workspaces). This is a way of marking the same profiles in the workspace group. ### Synchronization frequency The synchronization process can be scheduled differently depending on the scope. | Synchronization Type | Frequency | Time Window | Synchronization location | Effect | |-------------------------|-----------------|-----------------------|---------------------------|----------------------------------------------------------------------------------------------| | Workspace Sync - 1h | Every hour | Every hour | Current workspace | Membership attributes created from selected segmentations are updated every hour. The first synchronization is performed immediately after activating the process. | | Workspace Sync - 6h | Every 6 hours | Every 6 hours | Current workspace | Membership attributes created from selected segmentations are updated every 6 hours. The first synchronization is performed immediately after activating the process. | | Workspace Sync - daily | Daily | Once a day at a random time between 4 A.M. and 6 A.M. | Current workspace | Membership attributes created from selected segmentations are updated once a day. | | Group Sync - 1h | Every hour | Every hour | Workspace group | Membership attributes created from selected segmentations are updated every hour across all workspaces in a group. The first synchronization is performed immediately after activating the process. | | Group Sync - 6h | Every 6 hours | Every 6 hours | Workspace group | Membership attributes created from selected segmentations are updated every 6 hours across all workspaces in a group. The first synchronization is performed immediately after activating the process. | | Group Sync - daily | Daily | Once a day at a random time between 4 A.M. and 6 A.M. | Workspace group | Membership attributes created from selected segmentations are updated once a day across all workspaces in a group. | ## Start sharing and synchronizing --- 1. Go to Decision Hub icon **Decision Hub > Segmentations**. 2. On the top bar on the segmentation list, click **Share as**. **Result**: A pop-up appears. 3. On the pop-up, click **Multi Workspace Sync**. 4. From the **Process frequency** dropdown list, select how often membership attributes will be synchronized. - **Daily** - The process will start once a day at a random time between 4 A.M. and 6 A.M. - **Every 6 hours** - The process will start every 6 hours. 5. Click **Go to sharing process**. 6. On the pop-up, select the segmentations whose results will be shared and synchronized to a workspace group. The results will be saved as membership attributes. 7. Become familiar with the summary of the configured process: - The number of unique profiles that meet the criteria of at least one selected segmentation and have the specified profile ID. Each profile is counted only once, even if it appears in multiple segmentations. Become familiar with [limits](/docs/settings/workspace/multibrand-workspaces/limits-and-constraints). - The list of attributes which will be created and/or synchronized. - The workspace group in which the membership attributes with the segmentation results will be created and updated. 8. To start the process, click **Apply**. 9. Confirm by clicking **Yes, start**. **Result**: If you selected the 6-hour frequency, then the first synchronization job starts immediately. Otherwise, the synchronization will occur according to the schedule. ## What's next ### Checking synchronization status Sharing segmentation results (to [one workspace](/docs/analytics/segmentations/share-segmentation-results) and [multiple workspaces](/docs/settings/workspace/multibrand-workspaces/sharing-segmentation-results)) is an ongoing process that not only creates membership attributes but also updates their values at the frequency set during the sharing process. The synchronization status and logs can be accessed in Behavioral Data Hub icon **Behavioral Data Hub > Membership Attributes Sync**
The Membership Attribute Sync section contains logs for sharing processes initiated from the workspace you are currently logged in to - there is no central location to view all synchronizations across workspaces. It's especially important for users who use [multibrand workspaces](/docs/settings/workspace/multibrand-workspaces).
**Example** Suppose there are three workspaces—Workspace A, Workspace B, and Workspace C—grouped together in a workspace group. You create a segmentation called "VIP Customers" in Workspace A and share its segmentation results across the workspace group. Membership attributes with true/false values will be created in all workspaces of the group based on this segmentation. If you are logged into Workspace B and want to view the logs of this sharing process, you need to access them in Workspace A, the source workspace where the segmentation "VIP Customers" was originally created. Logs for the sharing process will not be available in Workspace B or Workspace C. To find the source workspace, open the details of the membership attribute. This information will include the workspace from which the synchronization for the attribute was started.
Preview of membership attribute details shared across a workspace group
Preview of membership attribute details shared across a workspace group
#### Job stages Regardless of the synchronization mode (to [one workspace](/docs/analytics/segmentations/share-segmentation-results) or [many workspaces](/docs/settings/workspace/multibrand-workspaces/sharing-segmentation-results)) synchronization takes three steps: - Fetching segmentations - Collecting groups of data based on specific criteria. - Attribute mapping - Linking data fields from the source to the correct fields in the destination - Queueing for materialization - Adding tasks to a waiting list to be processed and finalized. #### Job statuses You can monitor synchronization job statuses for each step and download job files for debugging purposes. Job statuses include: - **Success** – Job completed successfully. - **Processing** – Job is currently in progress. - **Warning** – Job completed with partial success, some issues may need attention. - **Failed** – Job ended with failure. ### Managing synchronization processes You can only add or remove segmentations from active processes. Other changes require creating a synchronization process. 1. Go to Behavioral Data Hub icon **Behavioral Data Hub > Membership Attributes Sync**. 2. Select the **Processes** tabs. 3. Open the details of a synchronization process. 4. Add or remove segmentations from the process. 5. Confirm changes by clicking **Apply**. **Result**: The synchronization process with the change is launched immediately. Other jobs will be performed as scheduled through the **Process frequency** option. ### I want to edit a synchronization process - **Frequency and location cannot be edited for existing processes** To change the frequency or sharing location, you must create a new synchronization process. - **Segmentations can be added or removed from existing processes** Changes will take effect: - immediately for synchronizations scheduled every 6 hours - subsequent runs will be performed according to the schedule. - on the next scheduled run for daily synchronizations. - **Stopping synchronizations** To stop synchronizing, remove segmentations from the process. ### I want to manage membership attributes in a workspace - [Previewing attribute details](/docs/crm/customer-properties#viewing-attribute-details) - [Changing display name and attribute description](/docs/crm/customer-properties#changing-display-name-and-description) - [Changing attribute visibility across filters](/docs/crm/customer-properties#changing-membership-attribute-visibility) ### How do I know if my segmentation based on membership attributes is fresh? Go to the [details of the membership attribute](/docs/crm/customer-properties#viewing-attribute-details) based on which your segmentation is created, open its details, and check **Last synchronization jobs**. ### I want to analyze how profiles joined and left segmentations The analysis will be based on the `profile.updated` event, which captures changes to membership attributes. Since the state of a membership attribute indicates whether a profile belongs to the segmentation it was created from, analyzing the `profile.updated` event ensures reliable results. 1. Create a formula metric which will deduct the count of `profile.updated` events with the membership attribute value set to true from the count of `profile.updated` events with the membership attribute value set to false. 1. Go to Decision Hub icon **Decision Hub > Metrics > New metric**. 2. Select **Formula metric**. 3. Select **Event**. 4. Select `profile.updated`. 5. Click **+ where**. 6. From the dropdown list, select the attribute with the name of a membership attribute. 7. Set the condition to `is true`.
The first part of the formula
The first part of the formula - a profile.updated event with the parameter that signifies a membership attribute set to true
2. Create the second part of the operation:
The first part of the formula
The first part of the formula - a profile.updated event with the parameter that signifies a membership attribute set to false
3. Save the metric. 2. Create a histogram on the basis of the metric you created. 1. Go to Decision Hub icon **Decision Hub > Histograms > New histogram**. 2. Select the metric you created in the previous step. 3. Save the histogram. 3. Create a dashboard which displays the histogram results. 1. Go to Decision Hub icon **Decision Hub > Dashboards > Add dashboard**. 2. Click the Histogram icon icon on the dashboard. 3. Select the histogram you created in the previous step. 4. Click the histogram widget which has been added to the dashboard. 5. On the right panel, select the **Style** tab. 6. Select the following visualization type:
The Style tab of the histogram widget in the settings of the dashboard
The Style tab of the histogram widget in the settings of the dashboard
# OAuth This feature lets you configure authentication through your existing IT systems that have RESTful APIs, allowing you to authenticate a profile through an HTTP call to an endpoint (checking if the provided token is valid and returning a response with the user's data).
OAuth diagram
OAuth process diagram
Example response from the OAuth server:
{
    "Response": {
        "PersonQCCode": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
        "LoyaltyQCCode": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
        "Email": "example.email@example.com",
        "CardNumber": "0000000000000",
        "Role": 8,
        "IsBusiness": false,
        "firstname": "john",
        "lastname": "doe"
    },
    "Success": true,
    "Errors": null
}
## Configuration 1. Go to Settings icon **Settings > Authentication for mobile apps**. 2. In the **OAuth** section, click **Show**. 3. Enable the **Sign-in with OAuth** toggle. **Result**: The OAuth settings appear. 3. In the **Endpoint Configuration** section, in the **Endpoint name** field, enter the name. You can enter any name - depending on further settings, it may be used to name the attribute which stores the profile identifier provided by your OAuth server. 4. From the **Authentication method** dropdown, select how you want to confirm customer credentials: - **SERVER** - A request with a token is sent to the external identity provider to confirm user credentials. - **JWT_TOKEN** - Use JSON Web Token (JWT) verified by a JSON Web Key (JWK). 4. Enter the URI: - for **SERVER**: URI of the OAuth endpoint (GET method) - for **JWT_TOKEN**: URI of the JWK 5. **SERVER method only**: In the **Headers** section, enter all headers required by the endpoint you entered in the previous step. If you want to inject a JWT from Synerise in the headers, enter the following value: `Bearer {{_snrs_access_token}}` 6. In the **Identification based on OAuth response data** section, you can: - Leave the setting at default (enabled) - the identifier from OAuth is saved in the Profile as the `-oauthId` attribute. This identifier is used in subsequent requests to your OAuth server. 1. In the **OAuth unique identifier key** field, enter the name of the profile's unique identifier attribute in the OAuth response. - Disable the setting - when logging in, the user is identified by `customId` sent in the authentication request. The profile must have a `customId`. 7. In the **Additional attributes** section, from the dropdown list, select the attributes to be passed to Synerise from the OAuth response after the authorization. To retrieve data from the response, use the following pattern: `Response.AttributeName`. On the left, enter the name of the attribute saved in Synerise. On the right, enter the name of the attribute in the OAuth response.
Example additional attributes
Example additional attributes
2. In the **Claims** section, add claims that will be added to the JWT payload. This lets you differentiate between JWTs generated from the same JWK. 8. In the **Data synchronization while logging in** section, you can enable data synchronization with the OAuth server every time a customer logs in. When this option is disabled, the data from the OAuth server is saved to Synerise only during the first log-in. ## Implementation After you configure OAuth, you can implement it in your applications with: - [Mobile SDK methods](/developers/mobile-sdk/user-identification-and-authorization/oauth#authentication-methods) - API methods ([`/v3/auth/login/client`](https://hub.synerise.com/api-reference/identity-and-access-management#operation/authenticateUsingPOST_v3) and [`/v3/auth/login/client/conditional`](https://hub.synerise.com/api-reference/identity-and-access-management#operation/authenticateConditionalUsingPOSTv3)) # Cloning analyses to other workspaces You can clone the following analyses between workspaces: - funnels, - segmentations, - metrics, - histograms, - reports, - trends, - Sankey diagrams, - aggregates, - expressions, - dashboards To learn the basics of cloning, read the [Introduction to cloning](/docs/settings/workspace/cloning-objects/introduction-to-cloning) article. ## Prerequisites --- To clone objects between workspaces you must be assigned a user role that has the following permissions in the source and target workspaces: - The Cloning module set to **Read** and **Create** - In the Analytics module, set the permission for each component which you plan to clone to other workspaces to **Read**, **Create**, and **Update**. ## Cloning objects --- 1. To clone an object, click Decision Hub icon and select the analysis type. 2. On the list of analyses, find the analysis you want to clone. 3. To the right side of the analysis author information, click Three-dot icon. 4. From the context menu, select **Clone to workspace**. **Result**: The **Choose destination** pop-up appears. 5. On the pop-up, select the workspace or workspaces to which you want to clone your analysis.
A pop-up with selection of workspaces
A pop-up with selection of workspaces
You can select up to 5 target workspaces at the same time.
6. Confirm your choice by clicking **Next**. **Result**: You are directed to the mapping wizard. ### Cloning an object that doesn't exist in the target workspace The procedure of cloning an object that doesn't exist in the target workspaces involves only mapping the events and/or parameters included in the cloned analysis with the events and/or parameters existing in the target workspace. If events or parameters from the cloned objects exist in the target workspaces, in the **Mapping events** section, the text on the button says **Change solutions**. Optionally, you can change the mapping settings by following the instruction below:
Clone an analysis that contains compatible events
  1. In the mapping section, click Change solutions.
  2. Next to the target workspace name, click the downward arrow icon.
  3. Verify that the system mapped the events correctly. The system automatically mapped the events because in both workspaces there is an event with the same action name.
  4. Optionally, from the dropdown list under the name of the target workspace, select a different event to map in the target workspace than the one selected by the system.
    Mapping events compatible in the source and target workspaces
    Mapping events compatible in the source and target workspaces
  5. If applicable, repeat steps 2-4 for other workspaces.
  6. When all events and their parameters (if there are any) are mapped, confirm the mapping settings by clicking Apply.
  7. In the upper right corner, click Clone.
If events or parameters from the cloned objects don't exist in the target workspaces, in the **Mapping events** section, the text on the button says **Solve issues**. Map the parameters by following the instruction below:
Clone an analysis that contains incompatible events/event parameters
  1. In the mapping section, click Solve issues.
  2. Next to the target workspace name, click the downward arrow icon.
  3. On the dropdown list, perform one of the following actions:
    • Create the missing parameter in the target workspace by clicking Create `[parameter name]`.
    • Select an existing parameter in the target workspace under which the values of the parameter from the source workspace will be saved in the cloned object.
    Mapping event parameters that don't exist in the target workspace
    Mapping event parameters that don't exist in the target workspace
  4. If applicable, repeat steps 2 and 3 for other workspaces.
  5. When all events and parameters are mapped, confirm the mapping settings by clicking Apply.
  6. In the upper right corner, click Clone.
### Cloning an object that exists in the target workspace When you clone an object and an object with the same name exists, you need to resolve the conflict. Remember that objects may be named identically by coincidence. Before you decide to use the "overwrite" option, make sure that you're not overwriting something that should not be overwritten. 1. In the **Objects to clone** section, click **Solve issues**. 2. Next to the target workspace name, click the downward arrow icon. **Result**: The list displays the analysis to be cloned which also exists in the target workspace. If the analysis contains other analyses which are also present in the target workspace, the list includes them. 3. You can perform one of the following actions for each conflicting object: - To overwrite the object in the target workspace with the object from the source workspace, click **Update**. - To skip cloning the object to the target workspace, click **Don't update**. - To create a copy of the object from the source workspace in the target workspace, click **Create a copy**. The word `copy` will be added to the name of the cloned object in the target workspace.
Resolving conflicts
Resolving conflicts
5. If applicable, repeat steps 2 and 3 for other workspaces. 4. Confirm the settings by clicking **Apply**. 5. In the **Mapping events** section, click **Change solutions** (or **Solve issues**, the text on the button depends on whether the events and/or attributes in cloned objects are compatible). 6. If the events and attributes are not compatible, under the name of the target workspace, on the dropdown list: - Create the missing parameter in the target workspace by clicking **Create `[parameter name]`**. - Select an existing parameter in the target workspace under which the values of the parameter from the source workspace will be saved in the cloned object. 7. If the system automatically mapped the events and attributes, you can either confirm the mapping or you can select the events and parameters. 8. When all events and their parameters (if there are any) are mapped, confirm the mapping settings by clicking **Apply**. 9. In the upper right corner, click **Clone**. ### Events and attributes created while cloning #### Events Events and their parameters created while cloning will be available in the target workspace in **Data Modeling Hub > Events**.
These events/parameters will only have `name` and `display name` defined. The remaining metadata are empty and the JWT authorization settings for the event are disabled.
#### Profile attributes Profile attributes created while cloning will be available in the target workspace in **Data Modeling Hub > Profile attributes**. The attributes will only have the following metadata: - `source name` - `label` - the type (string)
The attribute created while cloning is always a string, even if it was a different data type in the original workspace.
### Cloning logs To check whether the objects were successfully cloned, go to **Settings > Cloning logs**. # Integrating SMS gateways ## Contents # Behavioral Data Hub permissions This article describes the [permissions](/docs/settings/identity-access-management/permissions) needed to use the [Behavioral Data Hub](/docs/crm). To set the permissions, you need to create a user role or edit an existing one and open the Permissions matrix. In the matrix, the permissions are collected into groups. Some of these groups can be expanded to set more granular permissions. ## How to read this list In this article, each heading describes an action. The permissions for that action are described in the form of breadcrumbs. **For example**, if the required permissions are: - **Profiles** > **Client list**: `read` - **Search engine**: `create`, `edit` The permission matrix needs to look like this:
Permission matrix in Synerise Settings showing Profiles with read access on Client list and Search engine with create and edit permissions
Permission example, see description above figure.
The `read` permission is not explicitly listed when any higher permission is required - the portal enables it automatically. ## I want to... ### access Profiles - **Profiles** > **Client management**: `read` - **Profiles** > **Client list**: `read` ### filter the list with an analysis **Profiles** > **Client list**: `create` ### view a profile card **Profiles** > **Client details** > **Client info**: `read` ### see more details of a profile - **Profiles** > **Client details** > **_data type_**: `read` - The settings here allow access to various elements of the profile card. - **Analytics preview** - required to see results of analyses with the **Show on profile card** setting. Analytics permissions are not required. - **Client activities** - allows filtering the activity list. - **Client tasks** - deprecated ### see screen views whose audience includes this profile **Assets** > **Documents**: `read` ### edit profile details - **Profiles** > **Client management**: `edit` - **Profiles** > **Client details** > **_data type_**: `create`, `edit` Some personal details (for example, birthday) are always read-only in this view, regardless of the permissions. ### see and edit a profile's tags - **Assets** > **Tags**: `execute`, `create`, `edit` - **Profiles** > **Client tags**: `execute`, `create`, `edit` ### add events to a profile **Profiles** > **Clients details** > **Client activities**: `create` ### see the Statistics tab on the profile card - **Profiles** > **Client details** > **Client stats**: `read` - **Analytics** (all): `read` ### see and add notes in a profile **Profiles** > **Client details** > **Client notes**: `create`, `edit` ### send messages to a profile - **Settings** > **Integrations**: `read` - **Profiles** > **Client details** > **Client messages**: `execute`, `create`, `edit` ### create a profile - **Profiles** > **Client management**: `create` - **Profiles** > **Client details** (all): `create` ### delete a profile - **Profiles** > **Client management**: `delete` - **Profiles** > **Client details** (all): `delete` ### import profiles - **Profiles** > **Client management**: `create` - **Profiles** > **Client details** > **Client info**: `create` - For local file imports: **Simple imports**: `create`, `execute` - For imports with automation: See [Automation Hub permissions](/docs/settings/identity-access-management/permissions/automation-permissions) ### import events and transactions - **Profiles** > **Clients details** > **Client activities**: `create` - For local file imports: **Simple imports**: `create`, `execute` - For imports with automation: See [Automation Hub permissions](/docs/settings/identity-access-management/permissions/automation-permissions) ### export profiles - **Profiles** > **Client details** (all): `read` - **Settings** > **Export**: - `read` - to see the list of exports and download data - `create` - to create an export ### view aggregates and expressions **Analytics** > **_analysis type_**: `read` ### edit aggregates and expressions #### expressions - **Analytics** > **Expressions**: `edit`, `execute` #### aggregates - **Analytics** > **Aggregates**: `edit` - **Assets** > **Attributes**: `read` - **Analytics** > **Segmentations**: `edit` ### create aggregates and expressions #### expressions - **Analytics** > **Expressions**: `create`, `execute` #### aggregates - **Analytics** > **Aggregates**: `create` - **Analytics** > **Segmentations**: `create` - **Assets** > **Attributes**: `read` ### duplicate aggregates and expressions **Analytics** > **_analysis type_**: `create` ### delete aggregates and expressions **Analytics** > **_analysis type_**: `delete` ### preview results of aggregates and expressions - **Analytics** > **_analysis type_**: `read` - **Profiles** > **Client list**: `read` This is required to choose the profile context for the preview. ### clone aggregates and expressions to another workspace In the source and target workspace, you need: - **Cloning**: `create` - `create` and `edit` permissions for the cloned analysis type and all nested objects that will also be cloned in the process. To learn more about cloning, see [Cloning objects to other workspaces](/docs/settings/workspace/cloning-objects). ### manage profile attributes **Assets** > **Attributes**: - `read` - to see attributes - `create`, `edit` - to add and modify attributes ### work with profile tags #### see profile tags - **Assets** > **Tags**: `read` - **Profiles** > **Client tags**: `read` ### access profile batch operations - **Profiles** > **Client details** (all): `read` - **Profiles**: `delete` - **Settings** > **Export**: - `read` - to see the list of exports and download data - `create` - to create an export ### work with membership attributes #### access synchronization logs **Assets > Membership attribute sync**: `read` # Event consumption graphs
Delays in data flow from various sources can contribute to discrepancies in the reported quantities. It is important to acknowledge that the final quantity of event consumption listed on the invoice may differ from the quantities shown in the statistics and reports. The definitive data for invoicing purposes will be determined at the end of the month, taking into account any updates or corrections that may arise during this period.
Consumption graphs and reports let you monitor your usage. You can view graphs made with: - the "New events" calculation method. - the "Retention events" calculation method. Alternatively, you can download a [comprehensive report](/docs/settings/organizations/consumption/report) ## Calculation methods Synerise offers two modes of event calculation for consumption metrics: - [New events](#new-events) - events that are added to the database every day. - [Retention events](#retention-events) - the average number of events already saved in the database every day. The events are stored in the database according to their retention period, which differs between event types and may differ between workspaces. In both methods, UTC time is used to determine what day an event belongs to. ### New events The "New events" chart counts each event that is processed by Synerise, including events generated automatically by the SDKs and backend. Events are counted according to the time they were added to the database. For example, if an item was sold at an offline cash register on September 30 and the `transaction.charge` event was imported to Synerise on October 1 when the cash register came online, the event is counted towards October.
If you use `eventSalt` to overwrite events, each time the event is sent counts towards the "new events" metrics.
### Retention events The "Retention events" chart counts the average daily number of events stored in the database, including events generated automatically by the SDKs and backend. The events are counted in the following way: 1. Every day at midnight (UTC), Synerise checks the number of events in the database. This may include events from earlier months, according to their retention period. Events overwritten with `eventSalt` are treated as one event, unless the original event was already deleted due to retention. 2. The number of events is added to the monthly total. 3. At the end of the month, the monthly total is divided by the number of days in the month. The result is the average daily number of events in the database. The [Consumption report](/docs/settings/organizations/consumption/report) shows the retention of each event, in days. `-1` means the events are stored infinitely.
If you change the retention of an event, the change is immediate. For example, if an event’s retention is 30 days, and you change it to 20 days, events older than 20 days are deleted from the database.
## Graph You can view event consumption as a graph, which can be filtered by event type, date, and workspace. 1. Sign in to Synerise. 2. Enter an organization. If you can't see any organizations next to the workspace list, it means you don't have access to an organization. 3. Go to Organization statistics icon **Statistics**. 4. In the **Filter events** section, choose the data to show. By default, the graph shows all event types, from all workspaces, according to the "New events" calculation method, from the first day of the current month until today.
Graph settings
Graph settings
If you want to change the data scope, you can: - Narrow down the workspace selection with the **Workspaces** list. - Narrow down the event type selection with the **Event** list. - Change the calculation method between [New events](#new-events) and [Retention events](#retention-events). - Set a different date range.
Event graph, default view
Event graph, default view
In the graph, each column (default view) is one day. If you change the date range to be more than a month, the view changes to monthly. Under the graph, the legend informs which color denotes which event. By hovering your cursor over a column, you can view the exact numbers. The table below the graph shows a part of the data. To see the full table, you can use the **Download XLSX** option, and for a more detailed report, see [Comprehensive consumption reports](/docs/settings/organizations/consumption/report). # Model status When you enable the model for the first time, it starts being trained. When the training ends, it receives the **Active** status which means you can use it. From time to time, the model is retrained, so it can work on the up-to-date data. This way, your recommendations are more relevant. The status of the model is displayed in its settings and the table below contains all possible statuses a model can have. | Status | Description | |-----------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | **Active** | The model is enabled, trained, up to date, and ready for use. | | **Disabled** | The model is turned off. | | **Model queued for training** | The model is in queue for training. This status precedes the **Training in progress** status. | | **Training in progress** | Training or retraining (which occurs on a periodic basis). While retraining, the model still works and responds, but it might use outdated data. | | **Error** | There are two reasons for this status:
1. The model requires more data to be trained.
2. An unexpected error occurred while training the model - in such case contact the service desk to receive more information. | | **Disabled due to inactivity** | When the model is not used for 60 days in any way it is automatically turned off (the model is used when a recommendation based on this model is created and used in a dynamic content, or when an API request is sent to the campaign that uses the recommendation or directly to the model). You can turn the model back on by switching the **Enable model** toggle on. | | **Training paused due to inactivity** | When the model is not used for 30 days in any way the retraining is paused (the model is used when a recommendation based on this model is created and used in a dynamic content, or when an API request is sent to the campaign that uses the recommendation or directly to the model). If there is a request that uses the model (campaigns that use the model, or API requests to the model), the model retraining is re-enabled. The model still generates items in recommendations, but they are only up to date with the last model retraining. | | **Training paused** | Training or retraining of the model was paused manually (it's possible only after a contact with the service desk). If it is trained for the first time, and the training is paused, the model will not respond. If the retraining of the model is paused, the model still generates items in recommendations but they are only up to date with the last model retraining. | ## Training frequency The frequency of re-training depends on model type. | Model type | Frequency | | ---------------------------------------------------------------------------| --------------------------------------------------------------------| | Search indexes | Every 3 hours and after item feed updates | | Propensity predictions | Depends on prediction settings | | Personalized, Next interaction, Section page, and Attribute recommendations | Every 10 days, or every 2 days if the model isn't ready yet | | Cross-sell and cart recommendations | Every 10 days | | Similar item and Item comparison recommendations | Weekly by default; configurable to hourly, daily, weekly, or monthly | | Visual similarity recommendations | Every 10 days | # AI Engine Configuration Before you can use [AI recommendations](/docs/ai-hub/recommendations-v2), [AI Search](/docs/ai-hub/ai-search) and [Propensity model](/docs/ai-hub/predictions/propensity) in [Predictions](/docs/ai-hub/predictions), you must prepare an item catalog which will be the source of items. You can use the same item catalog for these three features or you can configure an item catalog for each feature separately. Below you can find a list of articles that describe the configuration process of AI engine for each AI-powered feature. After the configuration, you can [monitor the model status](/docs/settings/configuration/ai-engine-configuration/model-status). When the model is trained and active, you can create a [recommendation](/docs/ai-hub/recommendations-v2). # Single sign-on with Auth0 This is a guide to the integration between Synerise and Auth0, which lets your users authorize with their Auth0 accounts. ## Benefits --- - **Centralized user management** - With Auth0, you get to administer users from one central place in your organization. - **Increased security** - The benefit of a single user account in many applications helps to maintain a single identity and credentials, so users don’t have to remember too many credentials. Authentication takes place only with Auth0, with a single set of security-related policies regardless of the application. - **Improved user experience** - Your users only need to sign in once to use multiple applications. This approach ensures faster authentication, saves time and relieves users from remembering multiple credentials. ## Prerequisites --- - You must have an account with an Auth0 identity provider service and create a SAML application within that account. - You must [verify your domain](/docs/settings/identity-access-management/access-control/managed-domains) or more, if needed. - You must be granted a user role that allows access to Settings and perform Identity provider configuration in Synerise. ## Configuring Auth0 as an Identity Provider in Synerise --- 1. Log in to Synerise. 2. Select the workspace you want to configure single sign-on for. 3. Go to Settings icon **Settings > Access Control > Single Sign-On (SSO)**. 4. In the **General settings** section: 1. From the **Authentication methods** dropdown list, select the authentication method to the value of your choice. Learn more about it in ["Make log-in screen modifications" section](/docs/settings/identity-access-management/access-control/single-sign-on#make-log-in-screen-modifications).
At the beginning, we suggest setting it to **Both methods** unless you have a separate account that’s in different domain than you will be setting up SSO for.
2. In the **Sign-in button text** field, type the name that is displayed on the sign-in button, for example `Sign in with Auth0`.
General settings
General settings
5. In the **Authentication settings** section: 1. From the **Managed domains**, select the domains you want to use for your SSO. 2. Enable **Attribute containing email address**. **Result**: The **URL of the email attribute** text field appears.
General settings
Authentication settings
3. In **URL of the email attribute**, enter the value of the `email` attribute which is available in the settings in your Auth0 account.
The email attribute
The email attribute which is available in the settings on Auth0 account
6. In the **Just-in-Time provisioning** section, follow the procedure described ["Define permissions for users who authorize by identity provider"](/docs/settings/identity-access-management/access-control/single-sign-on#define-permissions-for-users-who-authorize-by-identity-provider) section. - If you kept the default role assignment:
Synerise SSO Just-in-Time provisioning default role assignment settings
Filled in dynamic assignment settings
**Result**: In this model, every authenticated person has a role (or roles) assigned according to the settings defined here regardless of any configuration on Auth0 side and depending on setup in the **Update user roles while signing in** field. - If you selected dynamic role assignment:
Synerise SSO Just-in-Time provisioning dynamic role assignment settings
Filled in dynamic assignment settings
**Result**: Every authenticated person has a role (or roles) assigned based on group/role mapping between Auth0 and Synerise depending on setup in the **Update user roles while signing in** field. 7. For the **SAML protocol settings** section, you must retrieve the values from the settings of the SAML application on the account of your provider:
Blank SAML settings form
Blank SAML settings form
1. In the **Issuer** field, enter the value of the **Issuer** field, which can be either URL or URN (we recommend this for security reasons).
The value for the Identity Provider Entity ID in Auth0
The value for the Identity Provider Entity ID in Auth0
2. In the **SSO endpoint** fields, enter the value from the **Identity Provider Login URL**.
The value for the SSO endpoint (https) in Auth0
The value for the SSO endpoint (https) in Auth0
2. In the **Identity Provider application ID** field, enter the value of the **Client ID** field.
The value for Identity Provider application ID in Auth0
The value for Identity Provider application ID in Auth0
3. The **Service Provider redirect URI** is filled in by default, copy this link and paste it to **Application Callback URL** in Auth0. A user who authenticates will be redirected to this URL.
The value for Application Callback URL which must be provided in Auth0
The value for Application Callback URL which must be provided in Auth0
3. In **Request binding**, select the method of communication between the requestors and responders. 5. In **Response signature verification**, select where the SAML signature is available. 4. In **Response validation method**, select **Static**. 4. In the **Identity Provider signature certificate** field, upload the certificate from your Identity Provider account.
Certificate in Auth0
Certificate in Auth0
7. Optionally, you can configure the rest of the fields in the configuration form. See the reference of [configuration parameters](/docs/settings/identity-access-management/access-control/single-sign-on#configuration-parameters-explanation). 8. Next to the **Identity Providers** headline, click **Apply**. ## Test SSO --- After completing the setup, test the integration. 1. If you are logged in to Synerise, log out. 2. Go [the Synerise portal](https://app.synerise.com/spa/login). 3. Enter your email address. 4. Click **Continue**. 5. Click the **Sign in with Auth0** (the text on the button depends on the value you entered in [this step](#button-name)). **Result**: You will be redirected to Auth0 Identity Provider where you will be authenticated immediately if there is an active session or you will be asked to authenticate and as a result you'll be redirected back to Synerise.
When the process works as expected, you can switch the **Authentication Mode** setting, so only the SSO authentication method is allowed, excluding the option of authorizing through email and password.
# Enabling the Twilio integration In this article, you will find out how to enable Twilio integration in Synerise and how to create an SMS sender account in Synerise which will allow you to send text messages to your profiles (for example, customers). ## Prerequisites --- - Create an account in Twilio. - Become familiar with the text message limits imposed by Twilio in the Twilio documentation. While planning SMS campaigns and sending SMS batches, take these limits into consideration. ## Enabling the integration --- 1. Go to Settings icon**Settings > Apps & Services**. 2. In the list of integrations, find Twilio and next to the integration name, click **Show**. - If there is a connection, you may proceed to [Creating Twilio SMS account in Synerise](#creating-twilio-sms-account-in-synerise) - If there is no connection or you want a new one, proceed with the integration settings. 3. Click **Add connection**. **Result**: A pop-up appears. 4. On the pop-up, switch the **Enable integration** toggle. 3. In the **Account SID** field, enter your unique identifier for a TwiML App. You can find it in the Twilio Console in the **Account Info** section. 4. In the **Account Secret** field, enter the API key you can find in the Twilio Console. 4. Click **Next**. 5. In the **Connection name** field, enter the name of the connection which will be visible on the list of Twilio integrations in Synerise in **Settings > Apps & Services**. 6. Click **Apply** and confirm by clicking **Yes**. 7. Proceed to [creating a sender account](#creating-twilio-sms-account-in-synerise). ## Creating Twilio SMS account in Synerise --- After enabling the connection, you need to create a sender account in Synerise, which can be used in communication. 6. Go to **Settings > SMS**. 7. In the **Account name** field, enter the name of your SMS account. It's used only on the list of SMS accounts in Synerise. 8. In the **From name (SenderId)** field, enter the telephone number or alias (if supported by your plan) which will be shown to the recipients.
You can find more information about the number from which you will send messages [here](https://www.twilio.com/docs/api/errors/21606).
9. From the SMS provider list, select **Twilio**. 10. From the **Twilio integration** dropdown list, select the connection you created in [the previous part of the process](#enabling-the-integration). 10. Finish by clicking **Apply**. **Result**: You can now use this sender when configuring SMS communication. # Access Control Access Control settings section enables you to configure security related aspects of Identity and Access Management. In this article, you can find instructions on: - [Password settings](/docs/settings/identity-access-management/access-control/password-settings) - To define the strength of user's passwords - [IP allow-listing](/docs/settings/identity-access-management/access-control/ip-allow-listing) - To define the list of IP addresses from which users can log in to your workspace - [Domain management](/docs/settings/identity-access-management/access-control/managed-domains) - It is required if you want to have greater capabilities to manage users (registered within the verified domain) in your workspace - [Single sign-on](/docs/settings/identity-access-management/access-control/single-sign-on) - To allow users to authenticate once with your IdP and then access Synerise or other enabled Service Providers, without the necessity to authenticate with each of those applications separately.
List of access control features
List of the Access Control features
## Prerequisites --- - You must be granted a set of permissions that allow access to Settings and editing within this hub. - **For Managed domains**: You must have access to domain management or to the root folder in the hosting behind the domain. - **For Single Sign-on**: - You must [verify the ownership](/docs/settings/identity-access-management/access-control/managed-domains) of at least one domain (could be more if needed). - Create a backup user that won't be using the same email address in the Identity Provider account. This is not required if you start with the **Both methods** authentication mode (explained in the ["Configuration parameters explanation"](/docs/settings/identity-access-management/access-control/single-sign-on#configuration-parameters-explanation) section). - You must be granted user permissions to access Settings and configure Identity provider. - You must have access to Identity Provider's admin panel to configure SAML application.

You will need the data from the Identity Provider. For details on using the Identity Provider's application, refer to the Identity Provider's documentation
# System Templates Email templates is a place where you can create and manage email design sent to your clients. It's an especially important part of your communication strategy. In the upper right corner of the section view you will see the number of currently prepared email templates. You can also search for any chosen template using the search box marked with a magnifying glass placed in the up right section corner or sort already existing templates by creation date. In order to configure mail template, go to **Settings > System Templates** --- ### Create an email template Before you start sending emails, your email template should be configured in Synerise Newsletter and Senders section. Below you'll find a description of the steps to be taken to do this.
Screenshot presenting creating email template button view in the Synerise platform
Screenshot presenting creating email template button view in the Synerise platform
1. In system email templates you can sow list of default templates. 2. You can also find custom templates. 3. Click on **Create email template** button placed in the right up page corner. After  clicking you will find email creator drag & drop. --- ### Edit email template After you'll create an email template on the platform, you can edit it in Synerise Newsletters and Senders section any time you want. Below you'll find a description of the steps to be taken to do this. **Choose the email template** you'd like to edit. You can do it manually from the list of templates or use the search box (magnifying glass in the upper right corner of the page)
You can edit only custom templates.
Screenshot presenting existing email template editing button in the Synerise platform
Screenshot presenting existing email template editing button in the Synerise platform
1. Click on the **checkbox** located next to the name of the chosen email. On the right side of the template, you can see 3 options after moving the mouse over three dots: click **edit**.
Note, that **default template section** can be just duplicated -- you can not edit it or remove it.
--- ### Duplicate template After you'll create an email template on the platform, you can duplicate it in Synerise Newsletter and Senders section. Below you'll find a description of the steps to be taken to do this. **Choose the email template** you'd like to duplicate. You can do it manually from the list of templates or use the search box (magnifying glass in the upper right corner of the page)
Screenshot presenting existing email template duplicating button in the Synerise platform
Screenshot presenting existing email template duplicating button in the Synerise platform
1. Click on the **checkbox** located next to the name of the chosen template. On the right side of the template, you can see 3 options after moving the mouse over three dots; click **duplicate**.
Note, that **default template section** can be just duplicated -- you can not edit it or remove it.
--- ### Remove email template After you'll create an email template on the platform, you can remove it in Synerise Newsletter and Senders section any time you want. Below you'll find a description of the steps to be taken to do this. **Choose the email template** you'd like to edit. You can do it manually from the list of templates or use the search box (magnifying glass in the upper right corner of the page).
Screenshot presenting existing email template removing button in the Synerise platform
Screenshot presenting existing email template removing button in the Synerise platform
1. Click on the **checkbox** located next to the name of the chosen template. On the right side of the template, you can see 3 options after moving the mouse over three dots; click **remove**. # Limits and constraints The Co-Brand Decisioning Layer feature is subject to the following limits: ### Workspaces - You can create a group of 5 workspaces. - A workspace can belong to one group only. ### Synchronization frequency Membership attributes will be refreshed every six hours or once per day.​ ### Segmentations You can synchronize up to 15 segmentations in one process and the total number of profiles in all selected segmentations cannot exceed 2,000,000 profiles. # Cloning AI recommendations to other workspaces Before cloning AI recommendations between workspaces, we recommend reading the [Introduction to cloning](/docs/settings/workspace/cloning-objects/introduction-to-cloning) article. ## Prerequisites --- - To clone objects between workspaces, you must be assigned a user role that has the following permissions in the source and target workspaces: - The Cloning module set to **Read** and **Create**. - In the Communication module, enable the permission to **Read**, **Create**, and **Update** recommendations. - In the target workspace, enable [models for the types of recommendations you want to clone to the workspace](/docs/settings/configuration/ai-engine-configuration/engine-configuration-for-recommendations) and configure the recommendation attributes while configuring the AI engine. - Make sure item feeds in the source and target workspaces have equivalent attributes.
If the source workspace uses [co-brand personalization](/docs/settings/workspace/multibrand-workspaces/ai-recommendations), this setting may require reconfiguration after cloning to a workspace that belongs to a different group or doesn't belong to any group.
## Select recommendation to clone --- 1. Go to **AI Hub** AI Hub icon > **(AI Recommendations) Models**. 2. On the list of recommendations, find the recommendation you want to clone. 3. To the right side of the recommendation author information, click Three-dot icon. 4. From the context menu, select **Clone to workspace**. **Result**: The **Choose destination** pop-up appears. 5. On the pop-up, select up to 5 workspaces to which you want to clone your recommendation.
A pop-up with selection of workspaces
A pop-up with selection of workspaces
6. Confirm your choice by clicking **Next**. **Result**: You are directed to the mapping wizard. ## Cloning a recommendation --- The procedure of cloning a recommendation takes place in the mapping wizard and involves: - selecting [an item feed](/docs/ai-hub/recommendations-v2/configure-item-feed-ai-recommendations) in the target workspace based on which you will map recommendation elements (such as filters, metrics, and so on) - mapping the elements of the recommendations (see the full list below)
You can't add new item attributes to the item feed in the target workspace while mapping. Make sure item feeds in the source and target workspaces have equivalent attributes.
| Element name | Description | Available for recommendation types | |-------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------| | Mapping IQL variables | It involves mapping the item attributes used in the filters of the cloned recommendations with the attributes of the selected item feed in the target workspace. | All recommendation types | | Mapping IQL context variables | Is required only if the filters of the cloned recommendation include the condition for filtering items according to the value of the attribute of currently displayed item.
Context used in a filter
Context used in a filter
It involves mapping item attributes used in the recommendation filters with the attributes of the selected item feed in the target workspace. | All recommendation types | | Mapping distinct attributes | Is required only if the cloned recommendation has conditions defined in the Distinct filter. It involves mapping attributes used in the filters with the attributes of the selected item feed in the target workspace.
The distinct filter
The distinct filter
| All recommendation types, except for the Attribute recommendations | | Mapping metrics | Is required only if the cloned recommendation uses metrics for boosting or sorting items. Those metrics must be mapped with their equivalents in the target workspace. | All recommendation types except for the Section page and Attribute recommendations | | Mapping metadata feeds | It involves mapping the attributes stored in the [metadata catalog](/docs/ai-hub/item-feed/metadata-catalog) with their equivalents in the target workspace. | Section page, Attribute | | Mapping item attributes | It involves mapping the attributes selected in the **Item attribute** field with their equivalent in the target workspace.
The item attribute field
The item attribute field
| Section page, Attribute | | Mapping display attributes | It involves mapping the comparison attributes selected in the settings of the cloned recommendation with their equivalents in the target workspace. | Item comparison | | Mapping events | It involves mapping the event or events of the aggregate selected in the settings of the cloned recommendation with their equivalents in the target workspace. | Recent interactions | | Mapping parameter | It involves mapping the event parameters of the aggregate selected in the settings of the cloned recommendation with their equivalents in the target workspace. | Recent interactions | | Mapping tags | It involves mapping tags used in the filter conditions with their equivalents in the target workspace. | All recommendation types | ### Procedure 1. In the **Mapping product feed** section, click **Solve issues**. 2. From the dropdown list, for the target workspace, select the item feed based on which you will map the elements from the cloned recommendation with their equivalents in the target workspace. 3. If: - the button on the **Objects to clone** section says **Change solution**, this means the recommendation with this name does not exist in the target workspace. Then, follow [this procedure](#a-recommendation-does-not-exist-yet-in-the-target-workspace). - the button on the **Objects to clone** section says **Solve issues**, the recommendation with this name already exists in the target workspace. In such case, follow [this procedure](#a-recommendation-already-exists-in-the-target-workspace). ### A recommendation does not exist yet in the target workspace 1. After you select the item feed in the target workspace, map the recommendation settings with their equivalents in the target workspace by clicking **Solve conflicts** in each section and selecting the equivalent attributes/metrics/events/tags.
Mapping attributes used in the recommendation filter
Mapping attributes used in the recommendation filter
2. Confirm the settings in each section by clicking **Apply**. 3. Before cloning, at the bottom of the page, you may preview the summary of mapping by clicking **Summary**. 4. When you complete mapping, in the upper right corner, to clone the recommendation to the target workspace, click **Clone**. ### A recommendation already exists in the target workspace When you clone a recommendation and the recommendation with the same name and of the same type exists, you need to resolve the conflict. 1. In the **Objects to clone** section, click **Solve issues**. 2. Next to the target workspace name, click the downward arrow icon. **Result**: The list displays the recommendation to be cloned which also exists in the target workspace. 3. You can perform one of the following actions for each conflicting object: - To overwrite the object in the target workspace with the object from the source workspace, click **Update**.
Remember that recommendations may be named identically by coincidence. Before you decide to use the "update" option, make sure that you're not overwriting something that should not be overwritten.
- To skip cloning the object to the target workspace, click **Don't update**. - To create a copy of the object from the source workspace in the target workspace, click **Create a copy**. The word `copy` will be added to the name of the cloned object in the target workspace.
Resolving conflicts
Resolving conflicts
5. If applicable, repeat steps 2 and 3 for other workspaces. 4. Confirm the settings by clicking **Apply**. 5. In the remaining sections in **Cloning details**, map the recommendation settings with their equivalents in the target workspace by clicking **Solve conflicts** in each section and selecting the equivalent attributes/metrics/events/tags. Confirm the settings in each section by clicking **Apply**.
Mapping attributes used in the recommendation filter
Mapping attributes used in the recommendation filter
3. Before cloning, at the bottom of the page, you may preview the summary of mapping by clicking **Summary**. 4. When you complete mapping, in the upper right corner, to clone the recommendation to the target workspace, click **Clone**. ## Events and tags created while cloning ### Events Events and their parameters created while cloning will be available in the target workspace in **Data Modeling Hub > Events**.
These events/parameters will only have `name` and `display name` defined. The remaining metadata are empty and the JWT authorization settings for the event are disabled.
### Tags Tags created while cloning will be available in the target workspace in **Data Modeling Hub > Tags**. ## Cloning logs To check whether the recommendations were successfully cloned, go to **Settings > Cloning logs**. # Experience Hub permissions This article describes the [permissions](/docs/settings/identity-access-management/permissions) needed to use the [Experience Hub](/docs/campaign). To set the permissions, you need to create a user role or edit an existing one and open the Permissions matrix. In the matrix, the permissions are collected into groups. Some of these groups can be expanded to set more granular permissions. ## How to read this list In this article, each heading describes an action. The permissions for that action are described in the form of breadcrumbs. **For example**, if the required permissions are: - **Profiles** > **Client list**: `read` - **Search engine**: `create`, `edit` The permission matrix needs to look like this:
Permission matrix in Synerise Settings showing Profiles with read access on Client list and Search engine with create and edit permissions
Permission example, see description above figure.
The `read` permission is not explicitly listed when any higher permission is required - the portal enables it automatically. ## I want to... ### see, create, and edit communication templates - **Templates**: `create`, `edit` - **Communications** > **_communication type_**: `create`, `edit` ### delete templates **Templates**: `delete` ### see and create campaign directories **Communications** > **_communication type_**: `create`, `edit` ### delete campaign directories **Communications** > **_communication type_**: `delete` ### see and create campaign tags **Assets** > **Tags**: `read` This includes seeing the tags assigned to a campaign. ### see the communication calendar **Settings** > **Calendar**: `read` ### work with: Email, SMS, Web Push, Mobile Push, Dynamic Content, In-App Messages or Landing Pages #### see the campaigns - **Communications** > **_campaign type_**: `read` #### see campaign statistics **Analytics** (all): `read` #### create, edit or edit a campaign - **Communications** > **_campaign type_**: `create`, `edit` - **Settings** > **Global Control Group**: `read` - **Templates**: `execute`, `create`, `edit` - **Email only**: - **Settings** > **Integrations**: `read` - To add attachments: **File explorer**: `create` - To see if a test recipient is an existing profile: **Profiles** > **Client details**: `read` - To use an existing segmentation as the audience: **Analytics** > **Segmentations**: `read` - To define a new audience: **Analytics** > **Segmentations**, **Expressions**, **Aggregates**: `read` - To see suggestions in audience filter values: **Profiles** > **Client list**: `read`
When defining audience conditions, if you have `create` access to any campaign type, you can view the list of profile attribute names (without values) through the attribute selector. This does not require **Assets** > **Attributes**: `read` permission. This behavior is intentional: it allows you to build audiences and configure conditions without requiring separate attribute management access.
#### duplicate or move a campaign - **Communications** > **_campaign type_**: `create`, `edit` - **Settings** > **Global Control Group**: `read` - **Templates**: `execute`, `create`, `edit` #### preview a Landing Page **Communications** > **Landing Page**: `create`, `edit` #### launch, pause, or stop a campaign **Communications** > **_campaign type_**: `execute` #### delete a campaign **Communications** > **_campaign type_**: `delete` #### clone a campaign In the source and target workspace, you need: - **Cloning**: `create` - `create` and `edit` permissions for the cloned campaign and all nested objects that will also be cloned in the process To learn more about cloning, see [Cloning objects to other workspaces](/docs/settings/workspace/cloning-objects). ### work with Screen Views #### see Screen Views - **Assets** > **Documents**: `read` - **Communications** (any): `read` - required to see Experience Hub #### create and update Screen Views - **Assets** > **Documents**: `create`, `edit` - To use audiences other than ALL: **Analytics** > **Segmentations**, **Expressions**, **Aggregates**: `read` #### activate, pause, and finish Screen Views **Assets** > **Documents**: `create`, `edit` #### duplicate and move Screen Views **Assets** > **Documents**: `create`, `edit` #### delete screen views **Assets** > **Documents**: `delete` # Synerise authentication Synerise authentication is a mechanism in which only Synerise is used to register and authenticate profiles. No third-party services or additional integrations are required.
This feature used to be called "Registration-as-a-Service (RaaS)".
## Configuration 1. Go to Settings icon **Settings > Authentication for mobile apps**. 2. In the **Synerise authentication** section, click **Show**. 3. Enable the **Sign-in with Synerise authentication** toggle. **Result**: The Synerise authentication settings appear. 4. Configure the settings as described below and to save them, click **Apply**. ### Registration mode Select one of the registration modes: - **Automatic account activation** After successful registration, an account is activated automatically and no email confirmation is sent. The customer can log in and use their account immediately. - **Email confirmation required** After successful registration, an account is activated automatically and an email is sent to confirm ownership of the email address. The customer can log in immediately, but they need to confirm email ownership to unlock all functionalities. - **Account activation required** After successful registration, an activation email is sent. The customer must use the activation link before they can log in. If you want to redirect customers to a website after an account is confirmed, enter the address in the **Account confirmation redirect link** field. - **PIN code activation required** Upon successful registration, an email with a PIN is sent. The customer must use the PIN code before they can log in. The PIN must be entered from the same device that was used to request it. In the **PIN configuration** section that appears after selecting this mode: 1. Select confirmation requirements: - **Required for every account registration**: accounts must always be confirmed. - **Required only when an account registered with a third-party service with the email address already exists**: accounts must be confirmed only if an account with the same email is already registered by using a third-party service. 2. In **PIN lifetime**, enter the time (in minutes) before the PIN expires. 3. In **PIN length**, enter the number of digits in the PIN. 4. Select an option for **Allow requesting a new PIN from another device**: - **Disabled** (default): Once a PIN is requested, a new one can only be requested from the same device. - **Enabled**: A new PIN can be requested from a different device. Only the most recent PIN can be used. ### Email templates You can select a template for the emails sent in connection to the selected registration mode. To let customers request a password reset, you must use an [API](https://hub.synerise.com/api-reference/profile-management#operation/RequestClientPasswordReset) or [SDK](/developers/mobile-sdk/method-reference) method.
Jinjava for the templates
Insert Description Available for
{% customer PARAM %} Inserts a profile's parameter or attribute, for example `{% customer firstName %}`; `{% customer attributes.customAttribute %}` All templates
`{{client_confirmation_link}}` Provides a link for confirming the account Email activation/confirmation
`{{client_confirmation_token}}` Provides a token for confirming the account. You can append the token to Universal Links for a mobile application Email activation/confirmation
`{{password_reset_url}}` Provides a link for resetting a password Password reset
`{{password_reset_token}}` Provides a token for resetting a password. You can append the token to Universal Links for a mobile application Password reset
`{{pin_code}}` Provides the PIN for confirming the account. PIN activation
`{{ip}}` The IP address where the PIN was requested PIN activation
`{{country_code}}` The country (based on IP) where the PIN was requested PIN activation
Example account confirmation template
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <style type="text/css"> /* Outlines the grid, remove when sending */ table td { /* border: 1px solid cyan; */ } /* CLIENT-SPECIFIC STYLES */ body, table, td, a { -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; } table, td { mso-table-lspace: 0pt; mso-table-rspace: 0pt; } img { -ms-interpolation-mode: bicubic; } /* RESET STYLES */ img { border: 0; outline: none; text-decoration: none; } table { border-collapse: collapse !important; } body { margin: 0 !important; padding: 0 !important; width: 100% !important; } /* iOS BLUE LINKS */ a[x-apple-data-detectors] { color: inherit !important; text-decoration: none !important; font-size: inherit !important; font-family: Arial, sans-serif !important; font-weight: inherit !important; line-height: inherit !important; } /* ANDROID CENTER FIX */ div[style*="margin: 16px 0;"] { margin: 0 !important; } </style> </head> <body style="margin:0; padding:0; background-color:#fff;"> <center> <div style="background-color:#fff; max-width: 600px; margin: auto;"> <!--[if mso]> <table role="presentation" width="600" cellspacing="0" cellpadding="0" border="0" align="center"> <tr> <td> <![endif]--> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="center" valign="middle" style="padding:10px;"></td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td width="200" align="left" valign="middle" style="padding:10px;"> <img alt="Synerise" src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/030d47ff7f497bf302d3248641a216ad.png" style="width: 140px;"> </td> <td width="200" align="center" valign="middle" style="padding:10px;"></td> <td width="200" align="center" valign="middle" style="padding:10px;"></td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td width="400" align="left" valign="middle" style="padding:10px; font-weight: bold; font-size: 28px; font-family: Arial, sans-serif; color:#384350"> Hi, {% user firstname %} </td> <td width="200" align="center" valign="middle" style="padding:10px;"> <img width="91" src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/38937e17f860105ccfea3df81558734b.png" alt="Synerise logo" /> </td> </tr> <tr> <td width="400" align="left" valign="middle" style="padding:10px; font-weight: bold; font-size: 22px; font-family: Arial, sans-serif; color:#384350"> Please confirm your account to start working with Synerise </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td width="400" align="left" valign="middle" style="padding:10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> Thank you for choosing Synerise. Before you can start your adventure with us, you need to confirm your account. </td> <td width="200" align="center" valign="middle" style="padding:10px;"></td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px"> <a style="background-color: #0c68ff;border-color: #0c68ff;color: #ffffff;cursor: pointer;display: inline-block;font-size: 14px;font-weight: 500;margin: 0;padding: 12px 25px;text-decoration: none;text-transform: capitalize; border: solid 1px #0c68ff;border-radius: 3px;box-sizing: border-box;font-family: Arial, sans-serif;" href="{{ client_confirmation_link }}" target="_blank">Confirm account</a> </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> Once you confirm your account, you will be able to sign-in to <a href="#" style="color: #0c68ff; font-weight: bold;">app.synerise.com</a> </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> Have a good day,<br /> The Synerise Team </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="center" valign="middle" style="padding:10px;"> <hr style="border: 1px solid #e5e5e5;" /> </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px; font-size: 14px;font-family: Arial, sans-serif; color:#b6bdc4;line-height: 22px;"> Have questions? The Synerise Team is here to help.<br /> Please contact <a href="support@synerise.com" style="color: #0c68ff; font-weight: bold;">support@synerise.com</a> </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td width="25" align="center" valign="middle" style="padding:10px;"> <a href="https://www.facebook.com/synerise"><img src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/778ed84375be209b05f2fb333f7bbb16.png" width="20" style="margin:0; padding:0; border:none; display:block;" border="0" class="img" alt="Synerise on Facebook"></a> </td> <td width="25" align="center" valign="middle" style="padding:10px;"> <a href="https://www.youtube.com/c/Synerise/"><img src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/eadde6165d2421eb5f98d9654006d9ee.png" width="20" style="margin:0; padding:0; border:none; display:block;" border="0" class="img" alt="Synerise on YouTube"></a> </td> <td width="25" align="center" valign="middle" style="padding:10px;"> <a href="https://www.linkedin.com/company/synerise/"><img src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/42126cc8dfb468a79dc4b37c45082b78.png" width="20" style="margin:0; padding:0; border:none; display:block;" border="0" class="img" alt="Synerise on LinkedIn"></a> </td> <td width="25" align="center" valign="middle" style="padding:10px;"> <a href="https://twitter.com/synerise"><img src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/f2512acc01435e5cd10edfc0e419908b.png" width="20" style="margin:0; padding:0; border:none; display:block;" border="0" class="img" alt="Synerise on Twitter"></a> </td> <td width="500" align="center" valign="middle" style="padding:10px;"></td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px; font-size: 10px;font-family: Arial, sans-serif; color:#b6bdc4;line-height: 16px;">The administrator of your personal data is SYNERISE S.A. with its registered office at ul. Lubostroń 1, 30-383 Kraków,entered into the Register of Entrepreneurs of the National Court Register by the District Court for Kraków-Śródmieście in Kraków, 11th Commercial Division of the National Court Register under the number: 0000468034. You can contact the Administrator regarding the protection of personal data by email at the followingaddress: <a target="_blank" href="mailto:iod@synerise.com">iod@synerise.com</a>, or by traditional mail sent to the address of the Administrator's seat, i.e. SYNERISE S.A. ul. Lubostroń 1.30-383 Kraków. </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="center" valign="middle" style="padding:10px;"></td> </tr> </table> </td> </tr> </table> <!--[if mso]> </td> </tr> </table> <![endif]--> </div> </center> </body> </html>
| Template | Applies to: | | --- | --- | | Password reset | All registration modes | | Account confirmation | Confirmation required, activation required, PIN activation | | PIN confirmation | PIN activation | If you don't select a template, a default one is used. 1. For each email type: 1. In the text field, enter the email subject. 4. Set up the template: - To use a default template, don't select any template. - To use an existing template, expand the dropdown and select it. - To create a template, expand the dropdown and click **Create new template**. Proceed as described in [Email template documentation](/docs/campaign/e-mail/creating-email-templates). ### Password policy This section lets you define a password policy for your application. A user's password must comply with the policy.
Password policy
Default password policy
3. Use the slider to define the minimum and maximum number of characters in a password. 4. In the **Password complexity** section: 1. To require an uppercase character in a password, switch the **Uppercases (A-Z)** toggle on. 2. To require a lowercase character in a password, switch the **Lowercases (a-z)** toggle on. 3. To require a number in a password, switch the **Numbers (0-9)** toggle on. 4. To require a special character in a password, switch the **Symbols (#)** toggle on. The allowed special characters are: `!"#$%&'()*+,-./:;<=>?@[\]^_{|}~` # Integrating Magento with Synerise # Implementing Synerise AI Search and AI recommendations The Synerise [AI Search](/docs/ai-hub/ai-search) and [AI recommendation](/docs/ai-hub/recommendations-v2) features are available from the Magento plugin version `3.3.2` and higher. We highly recommend to always update the plugin to the latest version. You can use the Synerise AI Search engine to enhance product listings on category pages and improve the quick search functionality throughout your Magento store. Additionally, Synerise AI Recommendations can be integrated into various blocks on your website to deliver personalized product suggestions and boost user engagement. This allows you to: - Personalize search results - [Enable query suggestions](#query-suggestions) and [analyze their statistics](#monitoring-query-suggestions-performance) - [Enable recommendations on a zero search stage](#zero-search-recommendations) - [Enable recommendations for no result search](#no-results-view) - [Insert Synerise AI recommendations in any place](#injecting-synerise-recommendations-into-blocks) - Analyze [search statistics](#monitoring-synerise-ai-search-performance) based on [search events](/docs/assets/events/event-reference/search) and analyze [AI recommendations statistics](#monitoring-synerise-ai-recommendations-performance) based on [recommendation events](/docs/assets/events/event-reference/recommendations) which will be available in a profile's event history in Synerise ## Prerequisites --- - [Integrate Synerise with Magento](/docs/settings/tool/magento/magento-integration-multistore-support). - Make sure your [API key has the following permissions](/docs/settings/tool/magento/magento-integration-multistore-support#create-an-api-key): - ITEMS_SEARCH_CONFIG_SEARCH_CREATE, - ITEMS_SEARCH_CONFIG_SEARCH_UPDATE, - ITEMS_SEARCH_CONFIG_SEARCH_READ, - ITEMS_SEARCH_SEARCH_READ, - ITEMS_SEARCH_RECENT_SEARCH_CREATE, - ITEMS_SEARCH_RECENT_SEARCH_READ, - API_MATERIALIZER_V2_RECOMMEND_CAMPAIGNS_RECOMMENDATIONS_READ - If you want to enable [query suggestions](/docs/ai-hub/ai-search/query-suggestions), [create an index of suggestions](/docs/ai-hub/ai-search/query-suggestions#configuration) in Synerise. - In the Magento panel (**Stores > Attributes > Product**), review attributes which will be available for selection as searchable, filterable, and sortable attributes, and decide if you want to add some or remove them (after these actions always save the index configuration). You will always manage these attributes in Magento settings, and the plugin automatically transfers those settings to Synerise. During and after completing the integration, you should not change these settings in the Synerise search index used with your Magento shop. | Option name | Value | Result | |----------------------------------------------|-------|----------------------------------------------------------------| | **Use in Search** | Yes | An attribute is available on the list of searchable attributes | | **Use in Layered Navigation** | Yes | An attribute is available on the list of filterable (facetable) attributes | | **Use in Search Results Layered Navigation** | Yes | An attribute is available on the list of filterable (facetable) attributes | | **Used for Sorting in Product Listing** | Yes | An attribute is available on the list of sortable attributes |
Assigning an attrtibute to be available on the list of searchable, filterable, and sortable attributes
Assigning an attribute to be available on the list of searchable, filterable, and sortable attributes
## Procedure --- The following steps must be performed in the given order: 1. [Enable search item attribute synchronization](#enable-search-item-attribute-synchronization) (Magento) 2. [Check if the catalog with Magento data exists in Synerise](#check-if-the-catalog-with-magento-data-exists-in-synerise) (Synerise) 2. [Configure AI engine for the catalog](#configure-ai-engine-for-the-catalog) (Synerise) 3. [Prepare a search index](#prepare-search-index-in-magento) (Magento) 4. [Select attributes for the search index](#select-attributes-for-the-search-index) (Magento) 5. [Select the search engine](#select-search-engine) (Magento) Optionally, you can: - [Define the settings for autocomplete search and query suggestions](#define-the-settings-for-autocomplete-search) - [Inject Synerise recommendations into blocks](#injecting-synerise-recommendations-into-blocks) - Monitor performance of: - [AI Search](#monitoring-synerise-ai-search-performance) - [AI Recommendations](#monitoring-synerise-ai-recommendations-performance) - [Query suggestions](#monitoring-query-suggestions-performance) ### Enable search item attribute synchronization --- In this part of the process, you will enable synchronization of item attributes used in search. These attributes will be available in Synerise in **Data Modeling Hub > Catalogs**, in a catalog named `store-{id}`, where `{id}` is the ID of the store. 1. In the Magento platform, go to **Marketing > (Synerise) Configuration > Data**. 2. Scroll to the **Products** section. 3. **Recommended**: Set the value of **Include attributes used in search** to **Yes**. This way all attributes used for searching (attributes selected as searchable, filterable, sortable in the configuration in Magento as a part of [prerequisites](#prerequisites)) will be sent to Synerise catalog. We strongly recommend selecting this option when using Synerise AI Search. 4. Set **Selectable attribute value** to **ID & Label**. You can choose from two variants of this option: - **Label & ID (array)** - The attributes will be sent as an array. - **Label & ID (attributes)** - This setting allows you to send both the labels (for example, "red", "shoes", "XYZ brand") and IDs of the attribute options (`attribute_id`). Selecting this option lets search users search and sort results using the labels.
Configuration of the Products section in Magento
Configuration of the Products section in Magento
5. To confirm the settings, click **Save Config**. 6. Clear configuration cache in **System > Cache Management** by performing the following steps: 1. Select the checkbox next to **Configuration** cache type. 2. Set the option above the table to **Refresh**. 3. Confirm the action by clicking **Submit**.
Cache management section in Magento
Cache management section in Magento
7. [Schedule full synchronization of data](/docs/settings/tool/magento/synchronizing-data-between-synerise-and-magento#scheduling-full-synchronization) for the **Product** model to reflect the changes you made to the configuration. ### Check if the catalog with Magento data exists in Synerise --- The contents of the catalog will be synchronized with data from Magento. You can find it in **Data Modeling Hub > Catalogs** under the name in the following format: `store-{id}`, where `{id}` is the ID of the store. This catalog will be used in the next steps to [create an item feed and configure AI engine for it](#configure-ai-engine-for-the-catalog). 1. In Synerise, go to Data Modeling Hub icon **Data Modeling Hub > Catalogs**. 2. Check the list for the catalog named `store-{id}` (where `{id}` is the ID of the store). 3. If: - you find it, check whether its structure is consistent with the changes you made in ["Enable search item attribute synchronization"](#enable-search-item-attribute-synchronization). If not, wait until the catalog is updated. - the catalog isn't created yet, wait until it appears on the list. The duration of creating a catalog depends on the data load. ### Configure AI engine for the catalog --- In this part of the process, you will create an item feed in Synerise based on the [Synerise catalog](#check-if-the-catalog-with-magento-data-exists-in-synerise) and configure the AI engine for this feed (this lets you use AI Search and AI Recommendations). 1. To check if the item feed exists and the AI engine is configured, in Synerise, go to **Settings > AI Engine Configuration**.
Creating multiple feeds from the same catalogs is impossible.
2. Find the item feed on the list (its name will be in the following format: `store-{id}`). If it doesn't exist, proceed to ["I need to create an item feedn and configure the AI engine" section](#i-need-to-create-an-item-feed-and-configure-the-ai-engine). 3. Enter the details of the item feed. 4. Proceed to ["The item feed is already created"](#the-item-feed-is-already-created). #### The item feed is already created If you already created a feed from the `store-{id}` catalog, make sure that: - the search engine is enabled for the existing feed in its configuration (see the **Applied search engines** section) - recommendation models you want to use are enabled (only if you plan to use Synerise AI recommendations)
You can find information about available recommendation models in [Recommendation types](/docs/ai-hub/recommendations-v2/recommendation-types). Recommendation types work based on the recommendation models with the same names as recommendation types.
#### I need to create an item feed and configure the AI engine 1. Go to Settings icon **Settings > Configuration > AI Engine Configuration**. 2. In the upper right corner, click **Add feed**. **Result**: A pop-up appears. 3. On the pop-up, select **Catalog**. 4. As the catalog type, select **Data catalog**.
Selecting a catalog and its type
Selecting a catalog and its type
5. From the list of catalogs, select the catalog that receives synchronized data from Magento. The catalog's name is `store-{id}`, where `{id}` is the ID of the store. If the catalog isn't in the list, make sure that it's not already used in another feed. 6. Confirm by clicking **Apply**. **Result**: The feed is created and added to the list. 6. On the list, find the feed you have just created and click the Three dot icon icon and then **Edit**. 7. On the **Applied search engines** section, click **Show**. 8. Enable the **Search engines** toggle. **Result**:
Enabling Synerise search
Enabling Synerise search
9. If you want to inject Synerise recommendations in your store: 1. Enable [the recommendation types you want to use](/docs/settings/configuration/ai-engine-configuration/engine-configuration-for-recommendations#selecting-recommendation-types-and-default-filters). 2. Wait for the recommendation model to finish training before creating recommendations. Instructions how to check the training status is available in [Model status](/docs/settings/configuration/ai-engine-configuration/model-status). 3. [Create recommendations](/docs/ai-hub/recommendations-v2/creating-recommendation-campaign) and save their IDs, which you will need later. 10. Confirm the changes by clicking **Apply**. ### Prepare search index in Magento --- In this part of the process, you will create and/or select a Synerise search index for a store view. If you don't have any indexes, creating one in the Magento plugin settings will also create it in Synerise, as described below. 1. Go to **Marketing > (Synerise) Search Indexes**. 2. Click **Assign Search Index**. 3. Select the store view for which the search will be applied. 4. To: - assign an existing index to the store view: 1. Set **Create** to **No**. 2. From **Select**, choose the index. The list contains the indexes from the Synerise platform (AI Hub icon **AI Hub > Indexes**)
Selecting a search index
Selecting a search index
- create a new index: 1. Set **Create** to **Yes**. 2. In **Name**, enter the name of the index.
Creating a search index
Creating a search index
**Result**: The index will also be available in the Synerise platform in AI Hub icon **AI Hub > Indexes**. ### Select attributes for the search index --- In this part of the process, you will select searchable, filterable (facetable), and sortable attributes that will be available for use in search. This is the primary location for managing filterable, searchable, facetable, and sortable attributes. The scope of attributes available for selection is determined by the setup you defined as a part of the [prerequisites](#prerequisites). 1. Go to **Marketing > (Synerise) Search Indexes**. 2. Find the search index for which you want to select attributes.
List of search indexes in Magento
List of search indexes in Magento
3. For that index, from the **Action** column, click **Setup**. 4. Select searchable, filterable (facetable), and sortable attributes.
List of attributes in Magento
List of attributes in Magento
### Select search engine --- In this part of the process, you will select the Synerise search engine in the configuration of the Magento platform. 1. In Magento, go to **Stores > Configuration > Catalog > Catalog Search**. 2. In **Search Engine**, select **Synerise AI Search**. 3. Optionally, set **Disable "Catalog Search" index** to **Yes**. Such configuration removes unused search engine indexes from the reindex list.
Selecting search engine
Selecting search engine
### Define the settings for autocomplete search Autocomplete search suggests possible queries or products while users type, helping them find what they’re looking for faster. By predicting and displaying options in real-time, it streamlines the search process and improves user experience. 1. In the Magento administrator panel, go to **Stores > Configuration**. 2. Select the scope, for example **Default Store View**. 3. On the left panel, select **Catalog > Catalog**. 4. In the **Catalog Search** section, to define the length of the query after which search results show, in **Minimal Query Length** enter the number of characters of the query which triggers a search response.
The configuration of the Catalog Search section in the Magento admin panel
The configuration of the Catalog Search section in the Magento admin panel
5. Click **Save Config**. #### Query suggestions Suggestions are recommended options or predictions that appear while a user types a search query in the form of text strings. Displaying suggestions enhances the search experience by helping users find what they need faster. Enabling query suggestions will cause generation of the following events in the Synerise platform on the profile card of a user who uses search: - [`suggestion.search` event](/docs/assets/events/event-reference/search#suggestionsearch) - [`suggestion.search.click` event](/docs/assets/events/event-reference/search#suggestionsearchclick) Before enabling this feature in Magento, you must [create an index of suggestions](/docs/ai-hub/ai-search/query-suggestions#configuration) in Synerise. After creating the index, it will be available for selection in the Magento panel. 1. In the Magento administrator panel, go to **Marketing > Synerise > Configuration**. 2. Select the scope, for example **Default Store View**. 3. On the left panel, select **Synerise > AI Search**. 4. In the **Autocomplete** section: 1. To enable query suggestions, set **Suggestion Enabled** to **Yes**. 2. To define the header of query suggestions in search results dropdown, in **Suggestions Header**, enter a value. 3. Select the query suggestion index from **Suggestions index** 4. To define the number of returned suggestion, in **Suggestions Count**, enter the number.
The configuration of query suggestions in the Magento admin panel
The configuration of query suggestions in the Magento admin panel
5. In the upper-left corner, click **Save Config**. **Result**:
Query suggestions show with search results as a search query is being typed
Query suggestions show with search results as a search query is being typed
#### Zero search recommendations Zero search is the stage in the search journey when a user activates the search box but hasn’t typed a query yet. You can use this moment to promote products and enhance the search experience by: - displaying product recommendations - showing the user’s recent searches - displaying top searches (most popular search queries) To use product recommendations, you must first [run a recommendation campaign](/docs/ai-hub/recommendations-v2/creating-recommendation-campaign) in Synerise. 1. In the Magento administrator panel, go to **Marketing > Synerise > Configuration**. 2. Select the scope, for example **Default Store View**. 3. On the left panel, select **Synerise > AI Search**. 4. In the **Autocomplete zero-state** section: 1. To enable recommendations and/or top searches, and/or recent searches when a user clicks the search box but before they type a query, set **Zero-state enabled** to **Yes**. 2. To enable top searches, set **Top searches enabled** to **Yes**. 3. To enable display of recently searched phrases, set **Recent searches enabled**, to **Yes**. 3. To define the recommendation whose results will be displayed in the recommended products section in search box, in **Campaign Id**, enter the ID of the Synerise AI recommendation. To get the ID of the Synerise AI Recommendation, in Synerise, go to **AI Hub > (AI Recommendations) Models**. On the list, find the recommendation you want to use, click Three dot icon **> Copy ID**. 4. To define the header of the section with recommended products, in **Campaign title**, enter the header.
Example zero search stage configuration
Example zero search stage configuration
5. In the upper-left corner, click **Save Config**. **Result**:
A zero search stage with product recommendations and recent searches
A zero search stage with product recommendations and recent searches
#### No results view In the search journey, the no results view appears when a query returns no matches. Instead of showing an empty list, users can enable product recommendations, display top searches, and recently searched queries to keep visitors engaged and guide them to relevant content. 1. In the Magento administrator panel, go to **Marketing > Synerise > Configuration**. 2. Select the scope, for example **Default Store View**. 3. On the left panel, select **Synerise > AI Search**. 4. In the **Autocomplete no-results** section: 1. To enable recommendations and/or top searches, and/or recent searches when a users query produces no results, set **No-results enabled** to **Yes**. 2. To enable top searches, set **Top searches enabled** to **Yes**. 3. To enable display of recently searched phrases, set **Recent searches enabled**, to **Yes**. 3. To define the recommendation whose results will be displayed in the recommended products section in search box, in **Campaign Id**, enter the ID of the Synerise AI recommendation. To get the ID of the Synerise AI Recommendation, in Synerise, go to **AI Hub > (AI Recommendations) Models**. On the list, find the recommendation you want to use, click Three dot icon **> Copy ID**. 4. To define the header of the section with recommended products, in **Campaign title**, enter the header.
Example no results search stage configuration
Example no results search stage configuration
5. In the upper-left corner, click **Save Config**. **Result**:
A zero search stage with product recommendations and recent searches
A no results search with product recommendations and top searches
If you want to display AI recommendations on the no results page, you can [inject Synerise recommendations into blocks](#injecting-synerise-recommendations-into-blocks) which you can use on the no results page. ### Injecting Synerise recommendations into blocks You can display Synerise AI recommendations at any place in your store. In this part of the process, you will create a block in the Magento admin panel which contains a Synerise product recommendation widget type. Then, you will insert this block in an existing page configuration. 1. In the Magento admin panel, go to **Content > Blocks > Add New Block**. **Result**:
Form for creating a block
Form for creating a block
2. Fill out the following fields: **Block Title** and **Identifier**. 3. Select the store view for which the block will be available. 4. In the bottom-right corner, click **Edit with Page Builder**. **Result**:
Editor
Editor
5. On the left panel, expand **Elements** and select **HTML Code**. 6. Hover the cursor over the HTML code widget you added. 7. Click **HTML Code**. **Result**:
diting the HTML code widget
Editing the HTML code widget
8. Click **Insert Widget**. 9. From the **Widget Type** dropdown list, select **Synerise Product Recommendations**. **Result**: **Widget Options** configuration appears.
Editing the HTML code widget
Editing the HTML code widget
10. In the **Campaign index** field, enter the ID of the recommendation. 11. Confirm by clicking **Insert widget** in the upper-right corner. 12. Confirm by clicking **Save** in upper-right corner. 13. Confirm by clicking **Save as Template**. 14. Confirm by clicking **Save** in upper-right corner. 13. Go to **Content > Pages**. 14. Find the page where you want to inject recommendation, go to its editing mode.
Action selection on the list of pages
Action selection on the list of pages
15. Expand the **Content** section. **Result**:
The expanded Content section in the page settings
The expanded Content section in the page settings
16. Click **Edit with Page Builder**. 17. On the left panel, go to **Add Content > Block**. 18. Drag and drop a block on the canvas. 19. Go to the settings of the block and select the block with the recommendation you created. 20. Save the changes. ### Defining advanced AI search settings in the Synerise platform This part of the process is optional. To define advanced options which let you optimize search engine performance: 1. In Synerise, go to AI Hub icon **AI Hub > Indexes**. 2. Find the search index you selected in ["Prepare a search index in Magento"](#prepare-search-index-in-magento). 3. Open the details of the search index by clicking its name on the list. 4. You can edit or define the following options: - [Item ranking for sorting search results](/docs/ai-hub/ai-search/define-item-ranking) - [Management of typos and missing words](/docs/ai-hub/ai-search/define-typos-handling) - [Response, filterable, facetable, and sortable attributes](/docs/ai-hub/ai-search/define-attributes)
The primary location for managing filterable, searchable, facetable, and sortable attributes is the Magento panel. While deleting these attributes in Synerise will take immediate effect, any additions of new attributes must be done through the Magento panel. To ensure compatibility, it is important to maintain the same scope of attributes on both platforms when managing them in the Magento panel and Synerise.
The following attributes are **required**: - Response attributes: - `entity_id` - Searchable attributes: - `name` - Filterable attributes - `entity_id` - `is_salable` - `visibility` - `deleted` - Facetable attributes - `category_ids` - `entity_id` - `is_salable` - `visibility` - `deleted` - [Rules](/docs/ai-hub/ai-search/query-rules) - [Search language](/docs/ai-hub/ai-search/define-language-and-separators) - [Search method, searchable attributes, and search relevance](/docs/ai-hub/ai-search/define-search-method-and-ranking) - [Synonyms](/docs/ai-hub/ai-search/add-synonyms) - [A/B testing](/docs/ai-hub/ai-search/configuring-ab-test) ### Monitoring Synerise AI Search performance You can monitor the performance of AI Search, you can find out about the metrics and how to get to them in [AI Search Engine statistics](/docs/ai-hub/ai-search/ai-search-statistics). ### Monitoring query suggestions performance If you enabled query suggestions for the search, you can monitor their statistics. You can find out about the metrics and how to get to them in [Query suggestion statistics](/docs/ai-hub/ai-search/query-suggestions-statistics). ### Monitoring Synerise AI Recommendations performance You can monitor the performance of the AI recommendations used on your store, you can find out about the metrics and how to get to them in [Recommendation statistics](/docs/ai-hub/recommendations-v2/recommendation-statistics). # Enabling the custom SMTP server integration In this article, you will find out how to enable integration with your custom SMTP server in Synerise which will let you send text messages to your profiles (for example, customers). ## Prerequisites --- You must have your custom SMTP server configured. ## Enabling integration --- 1. Go to Settings icon**Settings > Apps & Services**. 2. In the list of integrations, find **SMTP Servers** and next to the integration name, click **Show**. - If there is a connection, you may proceed to [configuring a sender account](/docs/campaign/e-mail/configuring-email-account#configure-a-sender-account) - If there is no connection or you want a new one, proceed to the next step. 1. Click **Add connection**. **Result**: A pop-up appears. 3. In the **My server** field, enter the name of the server. 4. In the **Host** field, enter the address of the host. 5. From the **Security** dropdown list, select the security level. - If you use an Email Labs sub-account, select **TSL** and enter `587` as the port number. - If you use any other provider, select **SSL**. 6. Fill in the fields: **Port**, **User**, and **Password**, and **Security** with data obtained in one of the following ways: - If you use an Email Labs sub-account, contact Synerise Support. - If you use any other provider, find the data in the provider's administration panel. For details, refer to the provider's documentation. 7. Proceed to [configuring a sender account](/docs/campaign/e-mail/configuring-email-account#configure-a-sender-account) section. ## Tracking hardbounces and softbounces --- Check the SMTP provider's documentation, as the procedure and credentials required may differ for each provider. # Google Firebase Google Firebase is used for notifications in mobile apps and websites.
From May 15, 2024, tokens which are inactive for 270 days become expired. More information is available in [Google Firebase documentation](https://firebase.google.com/docs/cloud-messaging/manage-tokens#stale-and-expired-tokens).
## Requirements --- - Create a Firebase project. - Enable [FCM Registration API](https://console.cloud.google.com/apis/library/fcmregistrations.googleapis.com?) for your project. - If you want to use push encryption, you must implement decryption in your mobile applications. Client apps without decryption implemented will not receive push messages at all. See the following articles: - [iOS SDK](/developers/mobile-sdk/configuring-push-notifications/ios#configure-notification-encryption) - [Android SDK](/developers/mobile-sdk/configuring-push-notifications/android#configure-notification-encryption) - [React Native SDK](/developers/mobile-sdk/configuring-push-notifications/react-native#configure-notification-encryption) ## Collecting integration parameters from Firebase --- 1. Go to Firebase Console website. 3. Go to **Project Settings**. **Result**: You are redirected to the **General** tab. 4. Copy the value of **Project ID** and save it in a text editor. 5. If you want to use web push: 1. On the **General** tab, scroll down to the **Your apps** section. 5. If you don't have a Web app, create one: 1. Click **Add app** and then **** 2. Enter a name for your app. 3. Leave **Also set up Firebase Hosting for this app** unselected (default). Synerise doesn't require Firebase Hosting. You can enable it if your other integrations require that. 4. Click **Register App** and wait until the app is registered. **Result**: The app is created. You don't need to integrate the displayed SDK code. Synerise handles the integration after you configure the integration, as described in the next steps. 5. Click **Continue to console**. 6. Click the Web app. 7. From the code snippet shown in **SDK set up and configuration**, copy the following values into a text editor: - `apiKey` - `appId`
The values to copy
The values to copy
5. Go to the **Cloud Messaging** tab. 1. Copy the value of **Sender ID** and save it in a text editor. 2. Go to the **Service accounts** tab. 1. Click **Generate new private key**. 3. Confirm with **Generate key** and wait a few seconds. 4. Save the key. Depending on your browser and settings, the key may open in a window or be saved as a JSON file. Save the entire contents (all properties). 10. Proceed to [Enabling Firebase in Synerise](/docs/settings/tool/firebase#enabling-firebase-in-synerise). ## Enabling Firebase in Synerise --- 1. [Collect integration parameters from Firebase](Collecting integration parameters from Firebase). 1. Go to Settings icon**Settings > Apps & Services**. 2. In the list of integrations, next to **Firebase**, click **Show**. **Result**: A list of existing Firebase connections opens. 3. Click **Add connection**. 4. Under **Connection with Firebase**, switch the toggle on. 5. In the **Connection name** field, enter the name of the connection. It will be available only on the list of Firebase connections in Synerise. 4. Select the channel for which you are enabling integration:
2. Fill in the following fields, using the data you retrieved in [Collecting integration parameters from Firebase](#collecting-integration-parameters-from-firebase): - **Sender ID** This field is required. - **Project ID** This is required to send notifications. If you haven’t copied it earlier in the process, you can find it in your Firebase Console project settings on the **General** tab. - **Private key** Private key is required to create authentication tokens. In this field , you must paste **the entire JSON file** you downloaded when [Collecting integration parameters from Firebase](#collecting-integration-parameters-from-firebase). 1. Click **Apply**.
2. Fill in the following fields, using the data you retrieved in [Collecting integration parameters from Firebase](#collecting-integration-parameters-from-firebase): - **Sender ID** Filling out this field is required to implement web push mechanism into your website. - **Project ID** This is required to send notifications. If you haven’t copied it earlier in the process, you can find it in your Firebase Console project settings on the **General** tab. - **App ID** If you haven’t copied it earlier in the process, you can find it in your Firebase Console project settings on the **General** tab. - **Web API key** If you haven't copied it earlier in the process, you can find it in your Firebase Console project settings on the **General** tab. - **Private key** Private key is required to create authentication tokens. In this field , you must paste **the entire JSON file** you downloaded when [Collecting integration parameters from Firebase](#collecting-integration-parameters-from-firebase). 1. Click **Apply**.
## Enabling push encryption
- When you enable encryption, web push agreements of all Profiles are changed to `false`. You must collect new web push agreements. - When push encryption is enabled, it becomes active both for web push and mobile push. You must enable [decryption is in your mobile application](/developers/mobile-sdk/configuring-push-notifications).
1. **Web push only**: 1. In Firebase Console, open the project settings. 5. Go to the **Cloud Messaging** tab. 3. Retrieve the encryption keys: 1. Scroll down to **Web configuration**. 4. In **Web Push certificates**, create or retrieve a key pair. To access the private key, you may need the Owner role in the Firebase project.
Cloud Messaging section
Cloud Messaging section
5. Save the key pair in a text editor.
In Synerise, these keys are called **VAPID keys**.
1. In Synerise, go to Settings icon**Settings > Apps & Services**. 2. In the list of integrations, next to **Firebase**, click **Show**. **Result**: A list of existing Firebase connections opens. 3. On the connection you want to update, click **Three dots icon > Edit**. 3. Perform the following actions:
The setting applies both to mobile and web push. You must [implement mobile push decryption](/developers/mobile-sdk/configuring-push-notifications)!
1. Switch on the **Push encryption** toggle. 2. **Web push only**: Fill in the following fields:
If you do not provide the keys, web push messages won't be sent at all.
1. **Public VAPID key** If you haven’t copied it earlier in the process, you can find it in your Firebase account settings, on the **Cloud Messaging** tab, under **Web push certificates**. To access the private key, you may need the Owner role in the Firebase project. 2. **Private VAPID key** If you haven’t copied it earlier in the process, you can find it in your Firebase account settings, on the **Cloud Messaging** tab, under **Web push certificates**. To access the private key, you may need the Owner role in the Firebase project. 4. Click **Apply**. # Organization workspaces An organization may include multiple workspaces
- Being an organization user does NOT grant access to workspaces in the organization. - Being a workspace user does NOT grant access to the organization that manages it.
## Viewing workspaces In the list of workspaces, you can see their name, number of users, creation date, and the creator's name. 1. Sign in to Synerise. 2. Enter an organization. If you can't see any organizations next to the workspace list, it means you don't have access to an organization. **Result**: The list of workspaces in the organization opens. 3. To access the list from another page, go to Workspaces icon **Organization workspaces**. 4. If you are a member of a workspace, you can access it by clicking Three dots icon to the right from its name and clicking **Go to workspace**. ## Creating workspaces As an organization administrator, you can create workspaces. 1. To the upper-right of the workspace list, click **Add new workspace**. 2. Enter the workspace name. 3. Select a timezone. 4. Select the language. 5. Click **Continue**. **Result**: The workspace is created. As the creator, you automatically receive administrator access to the workspace.
Become familiar with the [event parameters which are denylisted](/docs/assets/events/introduction-to-events#denylist-of-event-parameters) by default for every workspace. These parameters are still available on the Raw data tab [in event details](/docs/crm/crm-profile#activity-list), if the data is available.
## Deleting workspaces To delete a workspace, contact your Synerise Partner or Support representative. ## Creating workspace groups As an organization administrator, you can create a group of workspaces. It is a part of the [Co-Brand Decisioning Layer](/docs/settings/workspace/multibrand-workspaces). Full instructions are available in [Creating a workspace group](/docs/settings/workspace/multibrand-workspaces/create-workspace-group). # Managed domains The Managed domains feature facilitates the process of domain verification, which is necessary to prove ownership of a given domain and user accounts that are or will be registered with that domain. After a successful domain verification, Synerise will assign that domain to your workspace, automatically link the user accounts under that domain with your workspace and, as a result of the process, enable central management of user accounts in your workspace.
You may verify more than one domain, if required.
**Example** Let's assume you are the owner of `example.org` domain and your users have accounts such as `john.doe@example.org` and `jane.doe@example.org`. After you verify the ownership of the `example.com` domain, all users with the email addresses within the @example.org domain will be managed in your workspace and you will have full rights to manage their accounts (see [Benefits](/docs/settings/identity-access-management/access-control/managed-domains#benefits) below for details). Users from other domains can be invited to the workspace as Guests and you will be able to remove their access to the workspace, but nothing else. However, the Guest accounts will still be forced to: - have [two factor authentication](/docs/settings/your-account/account-security) enabled (if such configuration is enforced by the workspace) - have their IP access added to [IP allow-listing](/docs/settings/identity-access-management/access-control/ip-allow-listing) (if configured for the workspace) The domain verification can be done in two ways: 1. [Verifying a domain through adding a TXT entry to the DNS](/docs/settings/identity-access-management/access-control/managed-domains#verifying-domains-by-adding-a-txt-entry-to-the-dns) 2. [Verifying a domain through uploading an HTML file to your web server (HTTPS)](/docs/settings/identity-access-management/access-control/managed-domains#verifying-domains-by-uploading-an-html-file-to-your-web-server-https) ## Benefits --- Once verified, a managed domain will let you perform the following actions on accounts from that domain: - [reset a user's two factor authentication configuration](/docs/settings/identity-access-management/users#resetting-2fa) - [revoke access to a workspace](/docs/settings/identity-access-management/users#revoking-access) - [delete user's account](/docs/settings/identity-access-management/users#deleting-accounts), in addition to revoking access to your workspace - [set up Single Sign-On through SAML based Identity Provider](/docs/settings/identity-access-management/access-control/single-sign-on) ## Prerequisites --- - You must be granted a set of permissions that allow access to Settings and editing within this hub. - You must have access to domain management or to the root folder in the hosting behind the domain. ### Verifying domains by adding a TXT entry to the DNS This verification method involves copying a TXT record and adding it to your DNS. After a positive domain verification, your DNS host will be checked for the added TXT record. If it's missing, you will be notified about the detected lack of the TXT record. As a consequence, the domain will remain unverified and wait for you to verify the ownership.
DNS entry verification
DNS entry verification
In order to verify your domain ownership through a DNS entry: 1. Go to Settings icon **Settings > Access Control**. 2. In the **Manage domain** section, click **Show**. 3. Click **Verify domain**. **Result**: A pop-up appears. 4. On the pop-up, select **DNS**. 5. Copy the verification code. 6. Go to your DNS host and add a new TXT record with the previously copied code (exemplary code: `synerise-domain-verification=d0b010a9-01de-4cba-af05-dffcf5c6beb3`): - Record type: TXT - Alias/Host/Name: leave it blank or enter `@` (depending on your provider) - Time to live: leave it at default 7. In the **Domain name** field, enter the name of the domain, for example, `synerise.com`, `test.com`, and so on. 8. Confirm by clicking **Verify**.
DNS changes may take up to 24 hours to update depending on your DNS host. You may need to wait before your domains are verified.
**Result**: Your domain is verified. User accounts with the verified domain become manageable in the workspace in Settings icon **Settings > Users**.
Verified domain
A verified domain
### Verifying domains by uploading an HTML file to your web server (HTTPS) This method involves uploading an HTML file (which you can download from Synerise) to your web server. For security reasons, the system periodically checks the file. If it's not in the root folder, the domain will not maintain its verified status. Before you use this method, make sure that: - You use HTTPS protocol (this is mandatory). - You have an SSL certificate, as self-signed certificates won't work.
HTTPS entry verification
HTTPS entry verification
In order to verify your domain ownership by using an HTML file: 1. Go to Settings icon **Settings > Access Control**. 2. In the **Manage domain** section, click **Show**. 3. Click **Verify domain**. **Result**: A pop-up appears. 4. On the pop-up, select **HTTPS**. 5. Download the verification file. 6. Upload it to the root folder of your domain's website. 7. In the **Domain name** field, enter the name of the domain, for example, `synerise.com`, `test.com`, and so on. 8. Confirm by clicking **Verify**. **Result**: Your domain is verified. User accounts with the verified domain become manageable in the workspace in Settings icon **Settings > Users**.
Verified domain
A verified domain
### Deleting a verified domain To remove a verified domain, click **Remove** next to the domain and verify that you want to remove it. When you remove a domain from your list of verified domains, the users with that domain can no longer be managed. # Automation Hub permissions This article describes the [permissions](/docs/settings/identity-access-management/permissions) needed to use the [Automation Hub](/docs/automation). To set the permissions, you need to create a user role or edit an existing one and open the Permissions matrix. In the matrix, the permissions are collected into groups. Some of these groups can be expanded to set more granular permissions. ## How to read this list In this article, each heading describes an action. The permissions for that action are described in the form of breadcrumbs. **For example**, if the required permissions are: - **Profiles** > **Client list**: `read` - **Search engine**: `create`, `edit` The permission matrix needs to look like this:
Permission matrix in Synerise Settings showing Profiles with read access on Client list and Search engine with create and edit permissions
Permission example, see description above figure.
The `read` permission is not explicitly listed when any higher permission is required - the portal enables it automatically. ## I want to... ### access the Automation Hub **Automation** (any): `read` ### see workflows **Automation** > **Journeys**: `read` ### see Control Center - **Automation** (any): `read` - **Audit Log**: `read` ### see workflow details - **Assets** > **Tags**: `read` - **Communication** > **_communication type_**: `read` - to see the statistics of a communication type used in the workflow - `read` permissions to other Synerise elements, depending on the node - see the list in ["Create and edit workflows"](#create-and-edit-workflows). ### create and edit workflows - **Automation** > **Journeys**: `create`, `edit` - To view notes added to nodes in a workflow: **Automation > Notes**: `preview` - To add notes to nodes and/or edit notes: **Automation > Notes**: `create`, `edit` - To use incoming/outgoing integration nodes: **Automation** > **Custom blocks**: `read` - To use Email Alert/SMS Alert Nodes: - **Automation** > **Email Alert/SMS Alert**: `create`, `edit` - **Templates**: `read` - **Settings** > **Integrations**: `read` - **Profiles** > **Client list**: `read` - Permissions to other Synerise elements, depending on the node: - **Analytics** > **Segmentations**, **Expressions**, **Aggregates**: `read` - to use profile filters - **Analytics** > **_analysis type_**: `read` - for other analyses used in nodes - **Profiles** > **Client list**: `read` - to see client attribute suggestions when entering a filter value - **Profiles** > **Client details** > **Client activities**: `read` - to see event attribute suggestions when entering a filter value - **Assets** > **Catalogs**: `read` - to access catalog lists - **Assets** > **Voucher pools**: `read` - to access voucher pool lists - **Settings** > **Connections** - `read` (to use existing connections), `create` and `edit` (to create new connections) - **Settings** > **API key**: `read` - to access the list of API keys in connections which require them - **Data export** > **_data type_**: `create`, `edit`. The data types are: - **Data export list** - required to see export jobs and download files - **Export analytics report** - "Get Analytics Report" node - **Export brickworks** - "Get Brickworks Schema Records" node - **Export campaign statistics** - "Get Statistics" node - **Export catalog data** - "Get Catalog Data" node - **Export metrics result** - "Get Metrics" node - **Export profiles** - "Get Profiles" node - **Save file** - "Save file" node - **Templates**: `read` - for nodes which require a template - **Settings** > **Integrations**: `read` - to access providers in communication nodes - **Settings** > **Global Control Group**: `read` - to see data in communication nodes
When configuring profile filters or conditions in workflows, if you have `create` and `edit` access to workflows, you can view the list of profile attribute names (without values) through the attribute selector. This does not require **Assets** > **Attributes**: `read` permission. This behavior is intentional: it allows you to configure workflow conditions without requiring separate attribute management access.
### start, pause, resume, and stop workflows - **Automation** > **Journeys**: `execute` - Additional permissions are required when the Automation contains any of the following nodes: - Email Alert node: **Automation** > **Email Alert**: `execute` - SMS Alert node: **Automation** > **SMS Alert**: `execute` - Nodes which require a permission from the **Data export** category: require the `execute` permission in that category to change the workflow status (see node list in ["Create and edit workflows"](#create-and-edit-workflows)) ### save changes in an active workflow - **Automation** > **Journeys**: `execute` ### delete workflows - **Automation** > **Journeys**: `delete` ### clone workflows to another workspace In the source and target workspace, you need: - **Cloning**: `create` - `create` and `edit` permissions for the cloned workflow and all nested objects that will also be cloned in the process To learn more about cloning, see [Cloning objects to other workspaces](/docs/settings/workspace/cloning-objects). ### see Data Transformation rules **Automation** > **Journeys**: `read` ### create, edit, publish, and unpublish data transformation rules - **Automation** > **Journeys**: `execute`, `create`, `edit` ### delete data transformation rules - **Automation** > **Journeys**: `delete` ### see incoming/outgoing integrations - **Automation** > **Journeys**: `read` - **Automation** > **Custom blocks**: `read` ### create and edit incoming/outgoing integrations - **Automation** > **Custom blocks**: `create`, `edit` - **Assets** > **File explorer**: `create` - to upload an icon - **Outgoing only**: - **Assets** > **Schema builder**: `read` - **Settings** > **Connections**: `create`, `edit` ### publish incoming/outgoing integrations **Automation** > **Custom blocks**: `execute` ### delete incoming/outgoing integrations **Automation** > **Custom blocks**: `delete` # Synerise monitoring alerts You can subscribe to automatic monitoring email alerts for your workspace from the Synerise Team. The email will be sent to subscribed workspace members in case of significant changes in critical [events](/docs/assets/events/event-definitions) in the workspace.
Example of an alert email
Example of an alert email
Below you can find a detailed description of the alerts. ## Why subscribe? --- Monitoring the changes in your company's workspace increases effectiveness of the actions you initiate and makes you aware of what is happening in your workspace. We want you to be informed as much as possible about the changes that happen in your workspace so you can react quickly to critical indicators that require immediate action. ## How to subscribe? --- You can become a subscriber in one of the following ways: - Contact the Synerise Support Team through the Service desk and indicate the workspace for which you want to subscribe to the email alerts. - If you log in often, Synerise will add you to the list automatically. ## How many people can subscribe? Up to 5 members of a Workspace can subscribe to the alerts. ## What is in the alert? --- The email alert consists of two parts: - [Report on message related events](#report-on-the-message-related-events) - [Report on other events](#report-on-the-other-events) #### Report on the message related events An email contains a report on the ratio of unsent messages to all launched (the total of sent and unsent) messages from the day before. For example: - Number of launched messages - 1000 - Number of unsent messages - 250 The report shows `25%/250` unsent messages. The following events are included in the report: - `message.send` - `message.notSent` - `webpush.send` - `webpush.notSent` - `sms.send` - `sms.notSent` - `push.send` - `push.notSent` #### Report on the other events An email alert includes a report that compares the number of events in a particular day to the median of the event quantity from the last 30 days. For example: - Number of the `page.visit` event from the previous day: 100 - Median of the `page.visit` event from the last 30 days: 1000 The report shows a `-90%` decrease. The following events are included in the report: - `page.visit` - `screen.view` - `transaction.charge` - `item.search` - `recommendation.view` - `dynamicContent.show` - `form.submit` - `marketingAgreement.turnOn` - `inApp.show` ## How to interpret the title of email alert? --- The title consists of three parts: - The icon - Email alert unsent icon - The alert concerns the metric connected with unsent messages - Email alert increase icon - The alert concerns the increase in one or more metrics by 150% - Email alert decrease icon - The alert concerns the decrease in one or more metrics by 80% - The name of the workspace - Event name the email alert is concerned with In the case when the anomaly is detected in more than one metric (for example, there is a decrease in the number of `transaction.charge` and `page.visit` events), the title includes only the name of one metric anyway. In such case, the name of the metric in the title is selected according to the following hierarchy: 1. `page.visit` 2. `screen.view` 3. `transaction.charge` 4. `item.search` 5. `recommendation.view` 6. `dynamicContent.show` 7. `inApp.show` 7. `form.submit` 8. `marketingAgreement.turnOn` 9. `sms.notSent` 10. `push.notSent` 11. `webpush.notSent` 12. `message.notSent` ## When is an email alert sent? --- The email alert is sent when the number of critical events decreases or increases by a specific value: - For `page.visit`, `screen.view`, and `transaction.charge` events the email alert is sent when: - A `80%` decrease is detected - A `150%` increase is detected - For `dynamicContent.show`, `inApp.show`, `form.submit`, `marketingAgreement.turnOn`, `item.search`, and `recommendation.view` events the email alert is sent when a `80%` decrease is detected - For `message.notSent`, `webpush.notSent`, `push.notSent`, and `sms.notSent` events the email alert is sent when the unsent messages count for `20%` or more triggered messages from the day before or when the number of unsent messages is higher than 20 000 ## How often is the email alert sent? --- The email alert on non-message related events is sent only if an anomaly is detected, once per given anomaly. It means that when a given anomaly is detected (for example, sharp decrease in the `page.visit` event is detected), you receive the email alert about this particular anomaly only once. After the issue is fixed, the email alert is sent if the anomaly concerning the same event happens again. **EXAMPLE** You received an alert on the 9th of January, 2023 about decrease in the `page.visit` event. The issue is fixed on the 11th of January. And between these two dates, the alert about decrease from the 9th of January isn't resent. The email alert on message-related events can be delivered on a daily basis. If it's too frequently, you can contact the Synerise Support team and disable particular metrics. ## What does "below limit" mean? --- #### Message related events --- For message related events, "below limit" means that the number of unsent messages from the day before didn't exceed the threshold that triggers the email alert. The threshold is counted based on the metrics that calculate the number of **unsent messages** the day before. Below you can find the limits that must be exceeded in order to trigger the alert: - `message.notSent` - number is greater than 200 - `webpush.notSent` - number is greater than 200 - `push.notSent` - median is greater than 200 - `sms.notSent`- median is greater than 200 #### Other events --- For other events, "below limit" means that the number of events from the day before didn't exceed the threshold that triggers the email alert. The threshold is counted based on the metrics that calculate the median of the event number from the last 30 days. Below you can find the limits that must be exceeded in order to trigger the alert: - `page.visit` - median is greater than 200 - `screen.view` - median is greater than 200 - `transaction.charge` - median is greater than 20 - `dynamicContent.show` - median is greater than 200 - `marketingAgreement.turnOn`- median is greater than 10 - `form.submit` - median is greater than 50 - `item.search` - median is greater than 10 - `recommendation.view` - median is greater than 100 - `inApp.show` - median is greater than 200 ## What does "disabled" status mean? --- The "disabled" status means that the metric has been excluded manually from the alert. The metric can be included again any time by contacting the Synerise Support Team through the service desk. ## Can I select metrics in the alert? --- By default, we include a complete set of metrics in the email alert. In some cases, we can exclude a metric for unsent messages (email, sms, web push or push). To do so, contact the Synerise Support Team through the service desk.
As a result, all users subscribed to the email alert will receive an email alert without the excluded metric (exclusion of metrics works per wokrspace).
## Can I add my metrics to the alert? --- No, you can't. The alert informs about the anomalies in the most common events. If you want to create a custom alert, you can do it in Automation Hub.
Check out a [use case that describes the process of sending metric results to a Slack channel](/use-cases/slack-integration).
## Can I add or remove subscribers? --- Yes, you can. To do so, contact the Synerise Support Team. ## Can I be removed from the subscriber list? --- Yes. Subscriber lists are reviewed monthly. If a subscriber has not logged in to the workspace within the last 30 days, they are automatically removed to ensure that alerts reach only active workspace members. If this happens to you, you can rejoin in one of the following ways: - Contact the Synerise Support Team through the service desk. - Log in to the workspace regularly — the system will add you back automatically once your activity is detected. Keep in mind that the 5-subscriber limit per workspace applies. ## How do data imports impact the alerts? --- Data imports can trigger the email alert. For example, the transaction import can trigger an alert about the increase of the `transaction.charge` events. In such case, the date of import is treated as the date of event occurrence. This may cause inconsistency in data between the workspace and the alert. Because while importing transactional data from the last 30 days, for example, these data will be distributed among profiles according to the date when a transaction was made. However, the monitoring system treats it as if the transaction happened within one day. Below, you can compare the alert metric and the metric on workspace on transactions:
Each peak in the chart is import
Data import from the perspective of alert metric
Each peak in the chart is import
Data import from the perspective of a metric in a workspace
## Does the email alert exclude the periodical anomalies? --- Yes, the email alert excludes the periodical anomalies if the monitoring system finds a repetitive pattern of anomalies. For example, each Sunday the number of `transaction.charge` events drops by more than 80%. If such a situation occurs for 3 weeks in a row, the alert will not be sent anymore in the event of this particular anomaly. If the periodical anomaly is disrupted (for example, the anomaly doesn't occur in the expected period), the system is reset, and the email alert is sent again when the first occurrence of the periodical anomaly happens again after the reset. ## Data from the alert are inconsistent with the data in workspace --- Data incoherence between the alert and the workspace may be caused by import of data or event retention. - **Data import** - While importing events, they are distributed among profiles in the workspace according to the date occurrence, however, the monitoring system treats it as if all the events occurred in one day. - **Date ranges** - The alert system always uses data from the last 30 days. If you prepare your own dashboards and reports in analytics which use a different time filter, or your workspace operates on short event retention, for example, 7 days, your results (such as event occurrence median) may differ. The 30-day data range for alerts isn't affected by the event retention settings of your profile Below, you can compare the alert metric and the metric on workspace on transactions:
Each peak in the chart is import
Data import from the perspective of alert metric
Each peak in the chart is import
Data import from the perspective of a metric in a workspace
## I receive too many alerts --- You can consider excluding single metrics from the alert, for example, a metric connected with the number of unsent messages. If it still too much, you can consider unsubscribing and providing feedback by contacting the Synerise Support Team through the service desk. # Cloning campaigns and campaign templates to other workspaces
Cloning campaign and templates - demo
Before cloning messages between workspaces, we recommend reading [Introduction to cloning](/docs/settings/workspace/cloning-objects/introduction-to-cloning). This article presents how to clone the following objects to another workspace: - email - in-app - web push - mobile push - SMS - dynamic content - campaign templates (cloned in the same way as campaigns) You can clone the whole campaign or just the template. - When you clone a campaign, the campaign is cloned together with the content and settings (template used in the campaign isn't cloned). - The "Schedule" section of the campaign isn't cloned. - Each campaign is cloned in the "Draft" status. - When you clone the template of the campaign separately, the cloned template is saved in **Experience Hub > Templates > Default**. ### Cloned campaign elements Together with the campaign or template, you can clone the objects it contains: - AI Recommendation campaigns included in the content (together with the objects it contains, such as expressions, aggregates, metrics, and so on) - Audience of the message (segmentation/s, aggregates, expressions) - Analyses included in the template content (aggregates, expressions, metrics, segmentations) There are some message elements which are cloned but they are transparent during the cloning process: - Email attachments - The attachment is cloned and available in a target workspace in the **Data Modeling Hub > Files**. - Triggers (for example, occurrence of specific events for in-app messages) and display settings such as priority, frequency are cloned. - UTM & URL parameters are cloned. - Additional parameters are cloned. - The type of the builder in which the content/template was created - If you will edit the content/template in the target workspace, you will do it in the same type of editor that the original template was created in. ### Not cloned elements In the process of cloning your object, you map the elements contained in it which are not copied, but have an equivalent in the target workspace. Some of them must be created before cloning, others can be created as part of the cloning process.
Dynamic content is the only campaign type that allows using references to AI Search. If your dynamic content template contains it, AI Search will not be cloned nor detected during the cloning process. You must launch it manually in the target workspace and modify the AI Search references (such as the index ID, and so on) in the content on the target workspace.
| Object | Can be created while cloning? For more details, see [Prerequisites](#prerequisites) | Where does this object occur in the campaign? | |---------------------|-------------------------------|----------------------------------------------------------| | Catalog | No | Content (as an insert) | | Customer attributes | Yes | Content (as an insert), Audience filters, trigger conditions (in-app messages)| | Email/SMS account | No | Campaign settings | | Events | Yes, but these events will only have `name` and `display name` defined. The remaining metadata are empty and the JWT authorization settings for the event are disabled. | Conditions of the campaign audience, elements included in other objects used in the content (aggregates, expressions, metrics) or trigger conditions (in-app messages) | | Event parameters | Yes, but these parameters will only have `name` and `display name` defined. The remaining metadata are empty and the JWT authorization settings for the event are disabled. | Conditions of the campaign audience, elements included in other objects used in the content (aggregates, expressions, metrics) or trigger conditions (in-app messages) | | Product feed | No | Content (as an AI recommendation insert) | | Promotions | No | Content (as an insert) | | Tags | Yes | Content (as an insert) or filters of analyses used in content (aggregates, expressions, metrics) | | Vouchers | No | Content (as an insert) | ## Prerequisites --- To clone objects between workspaces: - You must be assigned a user role (**Settings > Roles**) that has all possible permissions in the source and target workspaces. - In the target workspace, if you want to clone an email or SMS, you must configure an [email](/docs/campaign/e-mail/configuring-email-account)/[SMS](/docs/campaign/SMS/configuring-sms-gateway) account. Other campaign types don't require sender accounts. - If the campaign/template you clone contains AI recommendations: - In the target workspace, enable [models for the types of recommendations you want to clone to the workspace](/docs/settings/configuration/ai-engine-configuration/engine-configuration-for-recommendations) and configure the recommendation attributes while configuring the AI engine. - Make sure the item attribute names (feed catalog columns) and value types in the item feeds in the source and target workspaces are the same. - If you refer in a message to: - a catalog - make sure you have a catalog with corresponding data and structure (column names and types of values) in the target workspace. - If the catalog on the source and target workspaces have the same structure (column names and value types), you don't have to do anything **after cloning is complete**. - If the catalog on the source and target workspaces have different structure (column names and value types), **after the cloning is complete**, the cloned message/template includes references to the columns and values from the catalog from the source workspace. You must replace them with the target workspace's catalog. - a voucher pool - make sure you have a voucher pool in the target workspace - promotions - make sure you have a corresponding promotion in the target workspace. - customer attributes - make sure you have equivalent customer attributes in the target workspace. - If your campaign includes AI search: **After the cloning is complete**, the cloned message/template includes references to the search index from the source workspace. You must replace them with the target workspace's search index. ## Select a campaign/template to clone --- 1. Go to Experience Hub icon **Experience Hub** and select the message type. - If you want to clone a campaign: 1. On the list of campaigns, find the campaign you want to clone. 2. To the right side of the campaign author information, click Three-dot icon. - If you want to clone a template: 1. On the left pane, click **Templates**. 2. Select the folder where the template is saved. 3. On the template you want to clone, click Three-dot icon. 4. From the context menu, select **Clone to workspace**. **Result**: The **Choose destination** pop-up appears. 5. On the pop-up, select up to 5 workspaces to which you want to clone your message.
A pop-up with selection of workspaces
A pop-up with selection of workspaces
6. Confirm your choice by clicking **Next**. **Result**: The mapping wizard opens. ## Cloning --- The procedure of cloning a campaign/template takes place in the mapping wizard and involves: | Action/Section name | Description | Section is available for | |--------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------| | Objects to clone | This section contains a summary of objects (such as the whole campaign configuration, analyses, recommendations) which will be cloned to a target workspace.
- If there are no conflicts, no action is needed in this section. The listed objects will be cloned to the target workspace with the same names as in the source workspace.
- If there are conflicts (the same object types with the same names exist in the target workspace), you must [define the method of resolving the conflict](#resolving-cloning-issues). | All campaign types | | Mapping events | In this section, map events from analyses used in the message. If the system finds events with the same name in the target workspace, they are mapped automatically. | All campaign types that contain analyses | | Mapping parameters | In this section, map the attributes (for example, customer's name, size, email) which you used to personalize the message. If the system finds the attributes with the same name in the target workspace, they are mapped automatically. | All campaign types that contain references to customer attributes | | Mapping customer tags | In this section, map customer tags which you used in the settings of the message. If the system finds tags with the same name in the target workspace, they are mapped automatically. | All campaign types that contain references to customer tags | | Mapping product feed | In this section, map the product feed and item attributes used in the message. | Any campaign which contains recommendations | | Mapping settings/objects | In this section, map a sender account, voucher pools, promotions, and catalogs to which there is a reference in a message.
Voucher pools, sender accounts, promotions, and catalogs are not cloned. You can only indicate their equivalent in a target workspace.
| - Sender account is available for email and SMS.
- Catalogs are available for all campaigns with references to catalogs.
- Vouchers are available for all campaigns with references to vouchers.
- Promotions are available for email and dynamic content with references to promotions. | ## Cloning campaigns with AI Search references ---
Available only for cloning dynamic content.
While cloning a campaign that contains reference to AI Search, it will not be detected. This means, you won't be able to map the AI search from source workspace with AI search from target workspace. In such case, after cloning is complete, open the content of the cloned campaign and modify the reference with the AI search parameters from the target workspace. ## Resolving cloning issues --- An issue occurs when: - An object of the same type with the same name already exists in the target workspace - The system could not find the equivalent events, attributes, tags, item feed, item attributes, sender account, catalog, promotion, or voucher pool To resolve a problem, go to the details of each section whose button says **Solve issues**.
Conflict while cloning objects
Conflict while cloning objects
| Section name | Solution | |--------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Objects to clone | You can select one of the following conflict solutions:
- Update - overwrite the object in the target workspaces with the object version from the source workspace
- Don't update - don’t overwrite (skip cloning)
- Create a copy - create a copy of the object version from the source workspace in the target workspaces, the copied object inherits the objects name from the source workspace.
Conflict while cloning objects
Conflict while cloning objects
| | Mapping events | From the dropdown list, select an equivalent event. If there is no equivalent event, you can create one by clicking **Create [event name]** on the top of the dropdown list. | | Mapping parameters | From the dropdown list, select an equivalent customer attribute. There is no possibility of adding a new customer while cloning. | | Mapping tags | From the dropdown list, select an equivalent tag. If there is no equivalent tag, you can create one by clicking **Create [tag name]** on the top of the dropdown list. | | Mapping product feed | From the dropdown list, select an equivalent item feed. If there is no equivalent item feed, you must go to the target workspace and [create one](/docs/settings/configuration/ai-engine-configuration/engine-configuration-for-recommendations#adding-item-feed). | | Mapping settings/objects | In this section, you can resolve conflicts connected with sender account, voucher pool, promotion, and/or a catalog by selecting their equivalents from a dropdown list. If equivalents don't exist, go to the target workspace and create them.
- [Creating email account](/docs/campaign/e-mail/configuring-email-account)
- [Creating SMS account](/docs/campaign/SMS/configuring-sms-gateway)
- [Creating voucher pool](/docs/assets/code-pools)
- [Creating a promotion](/docs/ai-hub/promotions)
- [Creating a catalog](/docs/assets/catalogs/creating-catalogs)
| ## Objects created during cloning --- The elements created during cloning are available in their respective modules on target workspace, for example events are added in **Data Modeling Hub > Events**. ## Jinjava-related issues --- The mapping of objects such as catalogs, voucher pools, promotions is available only when the campaign template contains Jinjava code referencing these objects. When it comes to Jinjava references to AI recommendations, aggregates, and other analysis types, mapping isn't necessary, because these objects are cloned automatically to the target workspace. Possible issues in detecting dependencies: - If the Jinjava is incorrect (for example, missing `endif`), the dependency may not be detected. - If you clone a campaign that doesn't support a particular Jinjava tag (for example, the `socialproof` tag in email template) and the campaign contains the reference to such a tag, the dependency will not be detected. See [inserts documentation](/developers/inserts) for detailed info. - If the Jinjava code is inserted in the comment snippet `{# commentary #}`, the dependency to such Jinjava will not be detected. - If you used a variable in the content replacing an element of Jinjava code with a dependency, the dependency will not be detected. For example, if you used a [Synerise insert select](/docs/campaign/e-mail/creating-email-templates/email-code-editor#adding-a-variable), after cloning, you must open the content of the cloned campaign in the target workspace and select the insert manually in the content. - If you used a Jinjava variable instead of directly using the ID of the object being the subject of dependency, the dependency will not be detected. You must open the cloned campaign content or template in the target workspace and replace the object ID manually. See the example below:
{% set dynamic_object = {'Reco id': 'xyz'} %}

      {% macro withParam(param)%}
          {{ dynamic_object.get(param) }}
      {% endmacro %}

      {% recommendations3 campaignId={{ withParam('Reco id') }} %}
          // logic of displaying the recommendation
      {% endrecommendations3 %}
# Third-party registration and authentication services These methods let you use other services to register and authenticate. ## Google When this method is enabled, customers can use their Google accounts to authenticate. 1. Go to **Settings > Authentication for mobile apps**. 2. Scroll down to **Authentication methods**. 3. In the **Google authentication** section, click **Show**. 4. Enable the toggle. 5. Click **Apply**. 6. Implement the authentication methods as described in the: - [Mobile SDK documentation](/developers/mobile-sdk/user-identification-and-authorization/authenticate-external-providers) - [API authentication how-to guide](/developers/api/api-authorization/client-login) - [Authentication API reference](https://hub.synerise.com/api-reference/identity-and-access-management#tag/Authorization) ## Facebook When this method is enabled, customers can use their Facebook accounts to authenticate. 1. Go to **Settings > Authentication for mobile apps**. 2. Scroll down to **Authentication methods**. 3. In the **Facebook authentication** section, click **Show**. 4. Enable the toggle. 5. Click **Apply**. 6. Implement the authentication methods as described in the: - [Mobile SDK documentation](/developers/mobile-sdk/user-identification-and-authorization/authenticate-external-providers#facebook-login) - [API authentication how-to guide](/developers/api/api-authorization/client-login) - [Authentication API reference](https://hub.synerise.com/api-reference/identity-and-access-management#tag/Authorization) ## Apple When this method is enabled, customers can use their iCloud accounts to authenticate. 1. Go to **Settings > Authentication for mobile apps**. 2. Scroll down to **Authentication methods**. 3. In the **Apple authentication** section, click **Show**. 4. Enable the toggle. 5. In the field that appears, enter the app bundle identifier. For details, see [Apple Developer Documentation](https://developer.apple.com/documentation/appstoreconnectapi/bundle_ids). 5. Click **Apply**. 6. Implement the authentication methods as described in the: - [Mobile SDK documentation](/developers/mobile-sdk/user-identification-and-authorization/authenticate-external-providers#sign-in-with-apple) - [API authentication how-to guide](/developers/api/api-authorization/client-login) - [Authentication API reference](https://hub.synerise.com/api-reference/identity-and-access-management#tag/Authorization) # Message Queues logic The Integration module uses [Magento’s Message Queue Framework (MQF)](https://developer.adobe.com/commerce/php/development/components/message-queues/) to send data to Synerise system. This solution is meant to use RabbitMQ as a message broker, but also provides a MySQL implementation. The Integration plugin will use RabbitMQ (if available) or fall back to MySQL based on general application configuration. It’s highly recommended to set up aqmp for better performance. ## AMQP Configuration To install and set up RabbitMQ, refer to Magento Documentation ([cloud deployments](https://experienceleague.adobe.com/en/docs/commerce-on-cloud/user-guide/configure/service/rabbitmq#),[self-hosted](https://experienceleague.adobe.com/en/docs/commerce-operations/installation-guide/prerequisites/message-brokers/rabbitmq#)). Additionally, from `2.4.3` Magento version, Amazon offers cloud service for [AWS MQ](https://experienceleague.adobe.com/en/docs/commerce-operations/configuration-guide/message-queues/aws-mq). ## Queues The Integration module will setup a set of general queues as well as some specific to configured data models and enabled stores. Queues based on configuration are generated by running the `bin/magento setup:upgrade` command. | Type | Topic | Description | |--------------------------------|---------------------------------------------|------------------------------------------------------------------------------------------------------------------------| | Events | synerise.queue.events | Responsible mostly for sending customer events, but also processes data deletions. | | Continuous synchronization | synerise.queue.data.item | Responsible for single data creation/update operations. Triggered by save events. | | Full synchronization scheduler | synerise.queue.data.scheduler | Responsible for preparing full synchronization queues. Triggered by full synchronization requests. | | Full synchronization | synerise.queue.data.all.{model}.{storeId} | Responsible for processing full synchronization. Triggered by Full synchronization scheduler. | | Batch synchronization | synerise.queue.data.batch.{model}.{storeId} | Responsible for processing batch synchronization. Triggered by grid action requests, data imports, and stock change. |
Example of queues view in RabbitMQ dashboard
Example of queue view in RabbitMQ dashboard
## Consumers definition Consumers are generated dynamically based on your configuration of enabled stores and models. Changing those options requires running the `bin/magento setup:upgrade` command afterwards. To verify the list of consumers, run the `bin/magento queue:consumers:list` command. ## Optional setup for consumers Magento allows an additional, optional configuration of consumers to be run. If you defined a custom consumer array to be run, as in documentation, please make sure to add Synerise consumers to the list. To learn more, refer to [Magento documetation](https://experienceleague.adobe.com/en/docs/commerce-operations/configuration-guide/message-queues/manage-message-queues#specific-configuration ). ## Starting consumers Consumers can be started from the command line. By default, the process is started by [cron](https://experienceleague.adobe.com/en/docs/commerce-operations/configuration-guide/message-queues/manage-message-queues). Refer to [Magento Documentation](https://experienceleague.adobe.com/en/docs/commerce-operations/configuration-guide/cli/start-message-queues) to learn more about possible options. ## Debugging In case of issues with event or data processing, you can try to follow the logic behind the queues to check if all of their stages are executed properly. 1. In case of events, check if queues are enabled (more information [here](https://experienceleague.adobe.com/en/docs/commerce-operations/configuration-guide/cli/start-message-queues)). 2. To enable triggering customer events, enable tracking. 3. Make sure that synchronization is enabled for [the models and stores that are to be synchronized](/docs/settings/tool/magento/synchronizing-data-between-synerise-and-magento#changing-scope-of-synchronized-data) 4. Temporarily enable [request logging](/docs/settings/tool/magento/magento-integration-multistore-support/#enable-request-logging ) to see if requests are sent. 5. For debugging, it's recommended to disable crons and start consumers manually. 6. Trigger an action that will populate the appropriate queue with a message to be processed: - Perform an action that produces an event (for example, adding an item to the cart) - [Continuous synchronization](/docs/settings/tool/magento/synchronizing-data-between-synerise-and-magento#enabling-continuous-synchronization) - [Full synchronization](/docs/settings/tool/magento/synchronizing-data-between-synerise-and-magento#scheduling-full-synchronization) - In this case, there is an intermediate queue (synerise.queue.data.scheduler) that schedules synchronization. - [Batch synchronization](/docs/settings/tool/magento/synchronizing-data-between-synerise-and-magento#scheduling-batch-synchronization) ## Debugging RabbitMQ setup 1. Log in to the RabbitMQ website. 2. Go to the **Queues** tab. 3. Find a queue of the topic you want to debug topic (refer to the table in [the Queues section](#queues) of this article) and see if the number of messages ready to process has risen. If the consumer is running in background, the message might be processed almost immediately. 5. For debugging, it's recommended to disable crons and start consumers manually. 6. When a consumer picks a message from the queue, a log with the request and response is produced and the number of ready message decreases. 7. In Synerise, on the profile of a test user, check if the event was generated or if data from other modules (products, orders, subscriptions, and so on) are available in Synerise. ## Debugging MySQL setup 1. Log in to your MySQL interface. 2. Check if the `queue_message` and `queue_message_status` tables get populated with messages. 3. When a consumer picks a message from the queue, a log with the request and response is produced and if the message status is set to `4`, this means successful processing. 4. In Synerise, on the profile of a test user, check if the event was generated or if data from other modules (products, orders, subscriptions, and so on) are available in Synerise. # API consumption Monitoring the number of API calls made in your organization is helpful for optimizing and troubleshooting your integrations. It also provides you with clear visibility into their API usage and consumption. The statistics include API calls made by the following API consumers: - [workspace](/developers/api/api-authorization/workspace-login) - [profile (all types)](/developers/api/api-authorization/client-login) - [tracker key](/developers/api/recommendations/request#authentication) - AI API key (legacy) ## Viewing API call statistics You can view the data as: - a graph - a CSV report (same data as the graph) - a [comprehensive report](/docs/settings/organizations/consumption/report) 1. Sign in to Synerise. 2. Enter an organization. If you can't see any organizations next to the workspace list, it means you don't have access to an organization. 3. Go to Organization statistics icon **Statistics**. 4. Click the **API calls** tab. 5. If you don't want to set any filters, view the [graph](#graph) or the [CSV report](#csv-report). 6. If you want to set filters, see [Setting the filters](#setting-the-filters). ### Setting the filters The filters apply to the graph and to the CSV report. 1. In the **Filter API Calls** section, choose the data to show. By default, the report shows all API calls from all workspaces in the current month.
Filters for the API consumption report and graph
Filters for the API consumption report and graph
You can narrow down the data by using the following filters: - **Workspace** - Filters by workspaces. - **Auth Keys** - Filters by API keys and tracker keys. - **Permissions** - Filter by permission names. Some permissions allow multiple endpoints. - **Endpoints** - Filters by endpoints (paths). - **Call type** - Filters by HTTP methods. - **HTTP Status** - Filters by HTTP response statuses. 2. Adjust the time range and calculation method: - **Show as**: - **Count** - Shows the data separately for each period. - **Incremental** - Shows the total for each period including the count from earlier periods. - **Date range** - Sets the start and end date of the query. By default, the data is from the current month. 3. Adjust the data grouping options: - **Group by** - Groups the data in the graph by a facet. By default, the data is grouped by date. - **Interval** - Changes the columns in the graph to show the data by days (default) or months. 4. See the [graph](#graph) or download a [CSV report](#csv-report). ### Graph
API consumption graph
API consumption graph
In the graph: - **Selection** is the number of calls that met the filters. - **Total** is the number of all calls in the selected period. - Each column is one unit of time (day or month, depending on the **Interval** setting). - The columns illustrate API calls according to the **Group by** setting. - You can hover over a column to see the details. - In the legend under the graph, you can select and deselect values from the graph. The value type depends on the **Group by** setting. - You can see a brief summary of the data in the table under the legend. ### CSV report 1. Under the filters, click **Download CSV**. 2. Save the report on your computer and open it. Each report in the row corresponds to a resource (for example: endpoint, workspace) according to the **Group by** setting. The columns are: - **date**: the day or month that the row describes. - **periodCount**: the total number of API calls to show in the graph for the period (count or incremental, according to the **Show as** setting). - **periodTransferSize**: the total number of bytes transferred in the period in all API calls (count or incremental). - **label**: the name of the resource (for example: endpoint path, workspace name) that the row describes. - **count**: the number of API calls associated with the resource in the graph (count or incremental). - **transferSize**: the number of bytes transferred in this period in API calls associated with the resource requests to this endpoint (count or incremental). # Enabling the TideMobile integration In this article, you will find out how to enable the TideMobile and/or TideMobile Premium integration in Synerise and how to create an SMS sender account in Synerise which will let you send text messages to your profiles (for example, customers).
TideMobile Premium serves as an extension of the existing TideMobile integration by adding support for API v2, referred to as the premium connection. While the legacy integration remains operational, clients who have received the package for the API v2 can integrate using TideMobile premium. The selection of the connection type and the associated package is determined through direct negotiation between you and TideMobile.
## Prerequisites --- - Create an account in TideMobile. - In the TideMobile documentation, check the text message limits imposed by TideMobile. While planning SMS campaigns and sending SMS batches, take these limits into consideration. ## Enabling the integration --- 1. Go to Settings icon**Settings > Apps & Services**.
TideMobile integrations on the list of integrations in Settings > Apps & Services
TideMobile integrations on the list of integrations in Settings > Apps & Services
2. In the list of integrations, find TideMobile or TideMobile Premium, and next to the integration name, click **Show**. - If there is a connection, you may proceed to [Creating TideMobile account in Synerise](#creating-tidemobile-sms-account-in-synerise) - If there is no connection or you want a new one, proceed with the integration settings.
3. Click **Add connection**. **Result**: A pop-up appears. 4. On the pop-up, switch the **Enable integration** toggle. 5. In the **Client ID** field, provide the OAuth client ID. 3. In the **Client secret** field, provide the OAuth client secret.
To learn more, visit [TideMobile documentation](https://smsgateway.tideplatformgate.com/docs#tag/Authentication/operation/client_credentials).
4. Click **Next**.
3. Click **Add connection**. **Result**: A pop-up appears. 4. On the pop-up, switch the **Enable integration** toggle. 5. In the **User ID** field, provide the ID of the TideMobile user account. 3. In the **Password** field, enter the password to the TideMobile user account. 4. In the **Customer ID** field, provide the ID of the customer. You can access it in the TideMobile platform. 4. Click **Next**.
5. In the **Connection name** field, enter the name of the connection which will be visible on the list of TideMobile integrations in Synerise in **Settings > Apps & Services**. 6. Click **Apply** and confirm by clicking **Yes**. 7. Proceed to [creating a sender account](#creating-tidemobile-sms-account-in-synerise). ## Creating TideMobile SMS account in Synerise --- After enabling the connection, you need to create a sender account in Synerise, which can be used in communication. 6. Go to **Settings > SMS > Add account**. 7. In the **Account name** field, enter the name of your SMS account. It's used only on the list of SMS accounts in Synerise. 8. In the **From name (SenderId)** field, enter the telephone number or alias (if supported by your plan) which will be shown to the recipients. 9. From the SMS provider list, select **TideMobile**. 10. From the **TideMobile integration** dropdown list, select the connection you created in [the previous part of the process](#enabling-the-integration). 10. Finish by clicking **Apply**. **Result**: You can now use this sender when configuring SMS communication. # Simple Profile Authentication In **Settings > Authentication for mobile apps > Simple Profile Authentication**, you can see which API keys allow Simple Profile Authentication. Simple Profile Authentication is automatically marked as **enabled** if at least one such key exists. To learn how to enable this type of authentication for an API key and then implement is see ["Simple Profile Authentication" in the Developer Guide](/developers/mobile-sdk/user-identification-and-authorization/simple-authentication). From the **Authentication for mobile apps view**, you can: - Click a key to open its details in a new window. - Click **Manage API keys** to go to API key settings, where you can create or edit keys. # Decision Hub permissions This article describes the [permissions](/docs/settings/identity-access-management/permissions) needed to use the [Decision Hub](/docs/analytics). To set the permissions, you need to create a user role or edit an existing one and open the Permissions matrix. In the matrix, the permissions are collected into groups. Some of these groups can be expanded to set more granular permissions. ## How to read this list In this article, each heading describes an action. The permissions for that action are described in the form of breadcrumbs. **For example**, if the required permissions are: - **Profiles** > **Client list**: `read` - **Search engine**: `create`, `edit` The permission matrix needs to look like this:
Permission matrix in Synerise Settings showing Profiles with read access on Client list and Search engine with create and edit permissions
Permission example, see description above figure.
The `read` permission is not explicitly listed when any higher permission is required - the portal enables it automatically. ## I want to... ### access the Decision Hub You need any `read` permission from the **Analytics** category. ### work with dashboards **Analytics** (all): - `read` - to see dashboards - `create` - to create dashboards - `edit` - to update dashboards - `delete` - to delete dashboards ### view analyses **Analytics** > **_analysis type_**: `read` ### edit analyses **Analytics** > **_analysis type_**: `edit` ### create analyses **Analytics** > **_analysis type_**: `create`
When creating analyses, you can view the list of profile attribute names (without values) through the attribute selector. This does not require **Assets** > **Attributes**: `read` permission. This behavior is intentional: it allows you to build analyses and configure conditions without requiring separate attribute management access.
### duplicate analyses **Analytics** > **_analysis type_**: `create` ### delete analyses **Analytics** > **_analysis type_**: `delete` ### preview results - **Analytics** > **_analysis type_**: `read` - To select a profile context for preview: - **Profiles**: `read` - to search or select from the list of all profiles - **Analytics** > **Segmentations**: `read` - to select a profile from a segmentation ### clone an analysis to another workspace In the source and target workspace, you need: - **Cloning**: `create` - `create` and `edit` permissions for the cloned analysis type and all nested objects that will also be cloned in the process. To learn more about cloning, see [Cloning objects to other workspaces](/docs/settings/workspace/cloning-objects). ### share segmentation results and access synchronization logs - **Analytics > Segmentations**: `read`, `execute`, `create`, `edit` - **Assets > Membership attribute sync**: `read`, `execute`, `create`, `edit` # Enabling the Materna integration In this article, you will find out how to enable the Materna integration in Synerise and how to create an SMS sender account in Synerise which will allow you to send text messages to your profiles (for example, customers). ## Prerequisites --- - Create an account in Materna. - In the Materna documentation, check the text message limits imposed by Materna in the Materna documentation. While planning SMS campaigns and sending SMS batches, take these limits into consideration. ## Enabling the integration --- 1. Go to Settings icon**Settings > Apps & Services**. 2. In the list of integrations, find Materna and next to the integration name, click **Show**. - If there is a connection, you may proceed to [Creating Materna account in Synerise](#creating-materna-sms-account-in-synerise) - If there is no connection or you want a new one, proceed with the integration settings. 3. Click **Add connection**. **Result**: A pop-up appears. 4. On the pop-up, switch the **Enable integration** toggle. 5. In the **Login** field, enter the login of your Materna account. 3. In the **Provider** field, enter the ID of your configuration. You can access it in your Materna account. 4. Click **Next**. 5. In the **Connection name** field, enter the name of the connection which will be visible on the list of Materna integrations in Synerise in **Settings > Apps & Services**. 6. Click **Apply** and confirm by clicking **Yes**. 7. Proceed to [creating a sender account](#creating-materna-sms-account-in-synerise). ## Creating Materna SMS account in Synerise --- After enabling the connection, you need to create a sender account in Synerise, which can be used in communication. 6. Go to **Settings > SMS > Add account**. 7. In the **Account name** field, enter the name of your SMS account. It's used only on the list of SMS accounts in Synerise. 8. In the **From name (SenderId)** field, enter the telephone number or alias (if supported by your plan) which will be shown to the recipients. 9. From the SMS provider list, select **Materna**. 10. From the **Materna integration** dropdown list, select the connection you created in [the previous part of the process](#enabling-the-integration). 10. Finish by clicking **Apply**. **Result**: You can now use this sender when configuring SMS communication. # Single sign-on The Single Sign-On feature allows you to integrate a third party identity provider and enable single sign-on (SSO). SSO allows a user to authenticate once with your identity provider and then access Synerise or other enabled service providers, without the necessity to authenticate with each of those applications separately. Synerise provides Security Assertion Markup Language (SAML) based single sign-on where you can integrate with any identity provider that uses SAML 2.0 protocol, which is a widely-accepted standard for exchanging authentication and authorization data between Synerise and Identity Providers such as Microsoft Azure, Google Workspaces, Okta, and more.
We prepared an instruction for implementing single sign-on with Entra ID. Read more in ["Single sign-on with Microsoft Entra ID"](/docs/settings/identity-access-management/single-sign-on-tutorials/setup-sso-entra-id).
## Understanding SAML-based SSO --- In order to understand how SAML-based single sign-on works, take a look at the diagram below.
Diagram of SAML-based SSO authentication flow between identity provider and Synerise
SAML-based SSO
**Step 1**. As a user, you attempt to access app.synerise.com (service provider) that normally requires login credentials to access it. Assuming you have configured SAML for your profile, it leads you to the identity provider (Step 2). **Step 2**. Based on the provided user ID (email), the service provider redirects the user to identity provider's SSO Endpoint with a SAML authentication request (that has been built based on the configuration set for your identity provider in app.synerise.com). **Step 3**. Identity provider validates SAML authentication request received from the service provider and presents a user with the identity provider's login form (please note that it may be a password-less authentication for some identity providers, like for example Microsoft Entra ID)
The user may not be presented with the login form if there was already a valid session established previously, and the user is redirected to the application immediately (for example, with a different application using that identity provider).
**Step 4**. The identity provider generates a SAML response. **Step 5**. The SAML response is passed from the user's browser to the service provider's redirect URI. **Step 6**. The service provider validates the authenticity and integrity of the response and upon success, it issues access token/cookie, and as a result, the user is signed in to app.synerise.com ## Benefits --- - **Centralized user management** - With the identity provider, you get to administer users from one central place in your organization. - **Increased security** - The benefit of a single user account in many applications helps to maintain a single identity and credentials, so users don’t have to remember too many credentials. Authentication takes place only with the identity provider, with a single set of security-related policies regardless of the application. - **Improved user experience** - Your users only need to sign in once to use multiple applications. This approach ensures faster authentication, saves time and relieves users from remembering multiple credentials. ## Good practices --- - Remember to have a strong password policy, two-factor authentication, and other security policies configured with your identity provider as the ones available in Synerise won’t apply to regular users. - Configure password requirements or two-factor authentication for your workspace in Synerise, as it will be enforced for the guest accounts (users that are not managed by you). ## Prerequisites --- - You must be granted user permissions to access Settings and configure identity provider. - You must [verify the ownership](/docs/settings/identity-access-management/access-control/managed-domains) of at least one domain (could be more if needed). - Create a backup user that won't be using the same email address in the identity provider account. This is not required if you start with the **Both methods** authentication mode (explained in the [Configuration parameters explanation](/docs/settings/identity-access-management/access-control/single-sign-on#configuration-parameters-explanation) section in this document). - You must have access to identity provider's admin panel to configure SAML application. ## Configuration parameters explanation ---
The nomenclature of inputs in Synerise and identity provider service or documentation may not overlap.
Configuration parameter Description

General settings

Authentication method There are three option to choose from:

- In-built account only - It allows to sign in only users who have account in Synerise (logging in with an email address and password).

- Identity Provider account only - It allows to sign in only those users who have account in the service of the identity provider. It disables signing in with the Synerise credentials and enforces authentication through your identity provider credentials and enforce authentication through your identity provider.

- Both methods - It allows to sign in through two methods simultaneously: either with Synerise credentials or through identity provider account.

In the beginning when you’re testing the identity provider authorization, we recommend to enable two options of authorization.
Sign-in button text
The text in this field is displayed on the button to your users.
Exemplary identity provider log in button
Exemplary identity provider log in button

Authentication settings

Managed domains In this field, select the domains (used in the user's accounts) for which the identity provider authorization is available. The list includes only verified domains (learn how to verify a domain). This option is available only to the verified domains for the security reasons.
Attribute containing email address Identity provider is required to pass the identity attribute of a user who wants to log in to Synerise. This identity attribute is an email address. Each identity provider chooses their own way of passing this attribute. If the identity provider passes a user's email address in other attribute than subject, enable this option.
URL of the email attribute Available when the Attribute containing email address toggle is switched on. Enter the URL of the email attribute. You can find information where to find it in the identity provider's documentation. An exemplary attribute which contains an email address, returned in an authorization response from the identity provider: <Attribute Name="http://example.com/identity/claims/emailaddress”> <AttributeValue>john.doe@example.org</AttributeValue>

Just-in-Time Provisioning

Update user roles while signing in Configure the method of updating user permissions (it's useful in situations when user permissions are modified between log-ins both in Synerise and identity provider portal):

- Full sync - This setting allows you to always enforce user roles based on group or role claims from SAML response provided by your identity provider. Whenever a user authenticates, Synerise overwrites the permissions with the ones sent by the identity provider. Consider that as "replace".

- Add missing - When this option is selected, user roles will only be added to the ones that are missing for a user's account, but it won't modify any extra roles that you might have added directly in Synerise.

- No - If you choose this option, authentication response won't overwrite user roles and they can only be assigned/modified directly in Synerise
Unblock users This option unblocks users (who blocked themselves by entering a wrong password several times, for example) after the authorization through identity provider. It's particularly useful for Allow signing in with both methods authentication mode.
Dynamic role assignment You can set different user roles for various user groups from the identity provider service. To do so, you must enter the URL of the group attribute, then enter the ID of the group and select a user role. The opposite method is the static role assignment (see next table row), which involves assigning the same user role for everyone authorizing through an identity provider.
Roles It must be selected, when the Dynamic role assignment is disabled. Select a user role assigned to every user who authorizes through an identity provider.

SAML protocol settings

Issuer You can find it in the identity provider's portal or documentation. Expected value type: URL or URN.
SSO endpoint You can find it in the identity provider's portal or documentation. It may be the same as in Issuer. Expected value type: URL.
Identity Provider application ID You can find it in the identity provider's portal. Expected value type: string.
Service Provider redirect URI This field is always filled in by default. It's useful while registering the Synerise application in your identity provider service.
Request binding Define how the requestors and responders communicate by exchanging messages.
Response signature verification You can define where the SAML signature is available.
Response validation method You can select the method of receiving the signature certificate from the identity provider which is required to validate the response.
- By selecting the Static option, you must provide a file with the signature certificate. Each time a certificate changes, you must upload it to the Identity Provider Signature Certificate field.
- By selecting the Manifest option (recommended), you must provide a URL which contains the signature certificate. When the certificate changes, no actions are required.

Scenario when the Static option is selected as Response validation method

Identity Provider Signature Certificate Upload the file that contains the identity provider certificate which is used to validate the response. It's available either in the identity provider's portal or in their documentation.
Maximum clock skew Define the acceptable time of discrepancy between issuing the authorization by the identity provider and receiving it by Synerise.

Scenario when the Manifest option is selected as Response validation method

Manifest URL with certificate Enter the URL from which the signature certificate can be downloaded.
Maximum clock skew Define the acceptable time of discrepancy between issuing the authorization by the identity provider and receiving it by Synerise.
## Make log-in screen modifications ---
Synerise SSO configuration showing the General settings section
The general settings section
1. Go to Settings icon **Settings > Access Control > Single Sign-on (SSO)**. 2. To define the available login methods and the text on the button: 1. From the **Authentication mode** dropdown list, select one of the available modes: - **In-built account only** - Users can only log in with an email address and password. - **Identity Provider account only** - User can only log in through the identity provider. - **Both methods** - Users can log in with those two methods. 2. In the **Sign-in button label** field, enter the text that is displayed on the button in the Synerise log-in window for the identity provider authentication method. ## Define authentication settings ---
Synerise SSO configuration showing the Authentication settings section
The authentication settings section
1. To define the domains for which this authentication method is enabled and how the email attribute is passed to Synerise, in the **Authentication settings** section: 1. In the **Managed domains** field, select verified domains for which this authentication method is available.
If you want to include all verified domains, you must select them all in the field - domain verification itself does not automatically enable this method of authentication.
2. If the identity provider passes a user's email address in other attribute than `subject`, switch the **UAttribute containing email address** toggle on. **Result**: An **Identity Provider email attribute** field appears. 3. In the **Identity Provider email attribute** field, enter the URL of the email attribute.
You can find it in the XML file generated while registering Synerise application in your identity provider portal or you can find it in the identity provider documentation.
## Define permissions for users who authorize by identity provider ---
Synerise SSO configuration showing the Just-in-Time provisioning section
The Just-in-Time provisioning section
1. To define user's permissions when they authenticate, in the **Just-in-Time provisioning** section: 1. From the **Update user roles while signing in** dropdown list, select the method of updating user roles (it's useful in situations when user permissions are modified between log-ins both in Synerise and identity provider portal):
Explanation of every option is available [in the Configuration parameters explanation table](/docs/settings/identity-access-management/access-control/single-sign-on#configuration-parameters-explanation).
- **Full sync** - **Add missing** - **No** 2. To enable unblocking Synerise users by identity provider authorization, switch the **Unblock users** toggle on. **Result**: If a user is blocked in Synerise, the identity provider authorization unblocks this user. 3. Define how you want to assign user permissions for users authorizing by Identity Provider:
To enable static role assignment (every user receives the same user permissions), from the **Role** dropdown list, select a Synerise user role.
1. To enable dynamic assignment of user permissions through SAML mapping, switch the **Dynamic role assignment** toggle on. **Result**: Three text fields appear. 1. In the **SAML Attribute name** field, enter the identity provider's group attribute.
You can find it in the identity provider portal or documentation.
2. In the **SAML Attribute value** field, enter the value of the attribute.
You can find it in the identity provider portal or documentation.
3. From the **Role** dropdown, select a user role for the attribute. 4. To add more attributes and assign roles to them, click **Add** and repeat steps **I-III**.
## Adjust SAML protocol settings ---
Synerise SSO configuration showing the SAML protocol settings section
The SAML protocol settings section
1. To set up SAML-based single sign-on, the identity provider and service provider must establish trust with each other. Proceed to the **SAML protocol settings** section. 1. In the **Issuer** field, enter the URL or URN (you can find it in the Identity provider's portal or in their documentation). 2. In the **SSO endpoint** and **Identity provider application ID** fields, provide data from the Identity provider portal.
You can refer to the Identity provider's documentation.
3. The **Service provider redirect URI** field is filled in by default. 4. From the **Request binding** dropdown list, select one method of exchanging authentication: - **HTTP POST** - **HTTP REDIRECT** 4. In **Response signature verification**, select where the SAML signature is available. 5. In **Response validation method**, select one of the following methods for providing a signature certificate from the identity provider: - **Static** - By choosing this option, you will be required to upload a file with the signature certificate in the **Identity Provider Signature Certificate** field. Each time the certificate changes, you are required to re-upload the file in the **Identity Provider Signature Certificate** field. - **Manifest** - By choosing this option, you will be required to provide the URL from which the signature certificate will be downloaded. No action is required when the certificate changes. *This option is recommended.* 6. To see further instructions, choose one of the following tabs depending on your choice of response validation method made in the previous step.
2. To add a certificate, you must: 1. Open the XML file received during registering the Synerise app in Identity provider's portal. 2. Copy the certificate path. 3. Paste it into a new file. 4. Save the file. 5. Upload the file to the **Identity Provider Signature Certificate** field.
1. In **Manifest URL with certificate**, enter the URL from which the signature certificate can be downloaded.
7. To define the maximum and acceptable time discrepancy between issuing authorization and receiving it in Synerise, in the **Max clock skew**, define the time period. 2. Confirm by clicking **Apply**. ## Test SSO --- After completing the setup, test the integration. 1. If you are logged in to Synerise, log out. 2. Go [here](https://app.synerise.com/spa/login). 3. Enter your email address. 4. Click **Continue**. 5. Click the **Sign in with Provider's name** (the text on the button depends on the value you entered in the **Sign-in button label** field. **Result**: You will be redirected to your Identity Provider's service where you will be authenticated immediately if there is an active session or you will be asked to authenticate and as a result you'll be redirected back to Synerise. Congratulation! You signed in through your Identity Provider.
When the process works as expected, you can switch the **Authentication Mode** setting, so only the SSO authentication method is allowed, excluding the option of authorizing through email and password.
# Comprehensive consumption reports Consumption reports are XLSX spreadsheets with: - Event consumption data made with both [calculation methods](/docs/settings/organizations/consumption/events#calculation-methods). - API call consumption details. ## Creating the report To download a report: 1. Sign in to Synerise. 2. Enter an organization. If you can't see any organizations next to the workspace list, it means you don't have access to an organization. 3. Go to Organization statistics icon **Statistics**. 4. On the **Events** tab, select a data filter for the report: 1. From the **Workspaces** dropdown list, select the workspaces to include. By default, all workspaces are selected. 2. From the **Event** dropdown list, select the events to include. By default, all events are selected. 5. On the **API calls** tab, from the **Workspaces** dropdown list, select **the same workspaces as on the Events tab**. If the selection differs, the report can't be generated. 6. Click **Generate report**. Generating the report may take some time, depending on the size of the dataset. **Result**: When the report is ready, your browser downloads it automatically or opens a dialog to confirm the download, depending on your settings. ## Reading the report To read the report, open it with spreadsheet software, such as Microsoft Excel. You can filter and/or sort the data in the tables in the report. The available options depend on the software you're using.
Slight discrepancies between the total average number of all retention events and the averages for individual event types or days may be caused by rounding. The number on the “Summary” sheet is more accurate.
### Summary sheet Basic information about the report, such as the list of included workspaces and the generation date. The table in this sheet shows the number of events and API calls in the entire organization for each month.
If your report includes only a part of a month (for example, Sep 1 - Sep 15), remember that: - New data points and API calls are calculated only for the days of the month that are included in the report. If your report is for only a part of the month, the number is usually lower than for a full month. - Retention events and their average number are calculated only for the days included in the report. If a report is only for a part of a month, the average daily value is usually similar to the daily average from a full month.
Report summary sheet
Report summary sheet
### All_data_YYYY-MM sheets These sheets are generated for each month included in the report. The tables show the number of events (both calculation methods) and API calls on each day of the month. Only workspaces and events/endpoints with at least 1 occurrence/daily average are listed. ### Monthly_summary_YYYY_MM sheets These sheets are generated for each month included in the report. The tables show the number of events and API calls summarized for the entire month. Only workspaces and events/endpoints with at least 1 occurrence/daily average are listed. ### All_data_workspace_YYYY_MM sheets These sheets are generated for each month included in the report. The tables show the number of events and API calls counted in each workspace in a given month. Only workspaces and events/endpoints with at least 1 occurrence/daily average are listed. # Organization users Organization users can access data and use features depending on their [role](#user-roles).
- Being an organization user does NOT grant access to workspaces in the organization. - Being a workspace user does NOT grant access to the organization that manages it.
## User roles A user can be an Administrator or a Member. The table lists the permissions of each role: | | Member | Administrator | | ------------------------------------------ | ----------------------------------------------------------------- | ----------------------------------------------------------------- | | View all workspaces1 | Green checkmark | Green checkmark | | Add workspaces | Red checkmark | Green checkmark | | Edit workspaces2 | Red checkmark | Red checkmark | | Delete workspaces3 | Red checkmark | Red checkmark | | View organization users | Green checkmark | Green checkmark | | Invite users | Red checkmark | Green checkmark | | Assign roles to users | Red checkmark | Green checkmark | | Set time limit for user access4 | Red checkmark | Green checkmark | | Edit user details | Red checkmark | Green checkmark | | Delete users | Red checkmark | Green checkmark | | View consumption reports | Green checkmark | Green checkmark | | Download consumption reports | Green checkmark | Green checkmark | | Create workspace groups | Red checkmark | Green checkmark | 1Including workspaces where the user doesn't have access 2Requires administrator access to the workspace 3Contact your Synerise Partner or Support representative 4This only affects access to the organization. The user can still access the Synerise Portal and workspaces. ## User list To see the user list: 1. Sign in to Synerise. 2. Enter an organization. If you can't see any organizations next to the workspace list, it means you don't have access to an organization. 3. Go to Organization users icon **Organization users**. **Result**: The user list opens.
Organization user list
Organization user list
4. To filter the list by status, select one of the statuses on the left: - **Active**: users who accepted the invitation and joined the organization. - **Expired**: users whose access period ended. - **Pending**: users who received an invitation and didn't react to it. - **Rejected**: users who rejected an invitation. 5. To sort the list, click a column name and select the sorting direction. 6. To search for users, click the magnifying glass in the upper-right corner of the list and type in a query. You can search by user names, last names, and emails. ## User details You can view and edit (as an admin) the details of users in the organization. 1. In the user list, click a user. **Result**: The user's details are displayed. In the **Details** section, you can check their personal data, status, and a list of workspaces they have access to.
Organization user details
Organization user details
2. If you are an Administrator, you can change the user's access level and period: 1. In the **Role & access** section, click **Change**. 4. From the **User role in organization** dropdown list, select a role. 5. In the **Access duration (optional)** field: - To set an expiration date, use the calendar and click **Apply**. - To remove an existing expiration date, hover your cursor over the field and click the red "Clear" button. 3. Click **Apply**. ## Adding users To add a user, you need to send them an invitation. 1. To the upper-right of the user list, click **Invite user**. 2. In the pop-up that opens: 1. Enter the user's email. 2. Select the user's role. 3. **Optional**: Set the user's access expiration date. 4. To invite multiple users, click **Add user**. 3. Click **Invite user**. **Result**: The user or users receive an invitation by email. They need to click the link in the email to accept it. Alternatively, after they sign in to Synerise, they can hover their cursor over the organization and accept or reject the invitation. ## Removing users You can remove a user from the organization. If that user is active, their access will end immediately. Removing a user from an organization DOES NOT change their access to the Synerise Portal or workspaces. 1. In the user list, to the right, click Three dots icon. 2. Click **Remove user**. 3. Confirm by clicking **Yes, remove** or deny by clicking **Keep user**. # Cloning workflows to other workspaces Before cloning workflows to other workspaces, we recommend reading the [Introduction to cloning](/docs/settings/workspace/cloning-objects/introduction-to-cloning) article. The scope of this article presents how to clone the following objects to a target workspace: - workflow with node settings - this option allows you to clone a workflow together with the configuration in each node (**Complete workflow**) - the structure of the workflow - this option allows you to clone only a structure of the workflow, without cloning the settings of nodes (**Nodes structure**) ## Cloned elements
This section concerns only cloning the workflow with **Complete workflow** option.
The following elements of the workflow are cloned (copied to the target workspace) automatically: - Workflow - Synerise objects included in the message content sent through a workflow, such as: AI Recommendation (together with the objects it contains such as expressions, aggregates, metrics), metrics, aggregates, expressions, segmentations - Metrics from the [Metric Filter node](/docs/automation/conditions/metric-filter-node) - Message templates - The templates will be available in the **Default** folder. There are some elements which are cloned but you will not see them listed in the cloning summary: - Workflow capping settings - the Ignore capping setting - Settings of the native external integrations, for example [Send File](/docs/automation/integration/amazon-s3-bucket/send-file-amazon-s3-bucket) to Amazon S3 Bucket, [Add Profiles to Custom Audience](/docs/automation/integration/facebook/send-custom-audience), [Upload Data to Spreadsheet](/docs/automation/integration/google-sheets/upload-data-to-spreadsheets), and so on; - Settings of the [ABx Test node](/docs/automation/conditions/abx-split-node) - Settings of the [Generate Event](/docs/automation/actions/send-client-event) nodes - event name, event description and the body of the event (including Jinjava inserts) - Settings of the [Outgoing Integration node](/docs/automation/actions/webhook-node) (**Custom webhook** version) - From message-sending nodes: - Email attachments - The attachment is cloned and available in a target workspace in the **Data Modeling Hub > Files**. - Files used in a message template from **Data Modeling Hub > Files** - The file is cloned and available in a target workspace in the Data Modeling Hub > Files. - Lifespan settings (web push notifications) - UTM & URL parameters - The message is cloned with the parameters added in the UTM & URL parameters section. - Additional parameters - The message is cloned with the parameters added in the Additional parameters section. - The context of the builder in which a message template has been created - This means that if you will edit the message template in the target workspace, you will do it in the editor the original template was created in. ### Not cloned elements
This section concerns only cloning the workflow with **Complete workflow** option.
There are some objects in the workflow which you cannot clone. In such case, you must point (map) its equivalent in the target workspace. For example, if a cloned workflow is triggered by display of a dynamic content (`dc.show`), you must point the name of the event on the target workspace which defines the same action. If the equivalent does not exist on the target workspace yet, you can either create it while mapping or you must go to the target workspace and create it there.
Mapping event
Mapping event
These objects will not be cloned nor mapped to a target workspace: - Files in a [Local File node](/docs/automation/operation/local-file-node). - Users selected in the settings of [Email Alert node](/docs/automation/actions/send-email-alert-node) and [SMS Alert node](/docs/automation/actions/sms-alert-node) - Public keys from [Get File node](/docs/automation/integration/sftp-integrations/sftp-get-file) and [Send File node](/docs/automation/integration/sftp-integrations/sftp-send-file)
| Object | Can be created while mapping? For more details, see [Prerequisites](#prerequisites) | Where this object occurs in the workflow? | |---------------------|-------------------------------|----------------------------------------------------------| | Catalog | No | Content (as an insert), the [Import to Catalog](/docs/automation/actions/synerise-integrations/import-to-catalog) node | | Customer attributes | Yes | Content (as an insert), filters in the following nodes: [Audience](/docs/automation/triggers/audience-node), [Data Changed](/docs/automation/triggers/client-update-node), [Profile Filter](/docs/automation/conditions/client-filter-node), [Update Profile](/docs/automation/actions/change-attribute-node)| | Email/SMS account | No | Settings of the following nodes: [Send Email](/docs/automation/actions/send-email) and [Send SMS](/docs/automation/actions/send-sms-node) nodes | | Events | Yes | Settings of the following nodes: [Audience](/docs/automation/triggers/audience-node), [Profile Event](/docs/automation/triggers/client-event-node), [Profile Filter](/docs/automation/conditions/client-filter-node), [Event Filter](/docs/automation/conditions/client-event-filter-node) | | Event parameters | Yes | Settings of the following nodes: [Audience](/docs/automation/triggers/audience-node), [Profile Event](/docs/automation/triggers/client-event-node), [Profile Filter](/docs/automation/conditions/client-filter-node), [Event Filter](/docs/automation/conditions/client-event-filter-node) | | Product feed | No | Content (as an AI recommendation insert) | | Promotion | No | Content (as an insert) | | Tags | Yes | Content (as an insert), filters of analyses used in the content (in aggregates, expressions, metrics), [Update Profile node](/docs/automation/actions/change-attribute-node) | | Voucher | No | Content (as an insert) | | Endpoints | No | [Business Event node](/docs/automation/triggers/businees-event-trigger) | | Transformation diagram | No | Settings of the [Data Transformation node](/docs/automation/operation/data-transformation-node) | | Model for time optimizer | No | [Optimize Time node](/docs/automation/flow-control/optimize-time) | | Connections/Integration credentials | No | Authorization settings of the [Integration](/docs/automation/integration) nodes | | IQL variables | No | Filters of AI Recommendations inserted in a message content | | Metrics | No, these are default metrics available on workspaces with enabled AI recommendations | Boosting settings of AI recommendations inserted in a message content | | Item attributes | No | Item attributes of [Attribute recommendations](/docs/ai-hub/recommendations-v2/creating-attribute-recommendations) inserted in a message content | | Product feed | No | Catalog selected as a source of items for AI recommendation inserted in a message content | | Metadata feed | No | [Metadata catalog](/docs/ai-hub/item-feed/metadata-catalog) selected in the settings of AI recommendation inserted in a message content | | Context | No | Attributes based on the profile/item context in the filters of AI recommendation inserted in a message content | | Display attributes | No | Attributes used in the [Item comparison recommendation](/docs/ai-hub/recommendations-v2/recommendation-types#item-comparison) inserted in a message content | | Outgoing Integration | No | Settings of the [Outgoing Integration node](/docs/automation/actions/webhook-node) (**Integrations** version)| ## Prerequisites --- To clone workflows to other workspaces: - You must be assigned a user role (**Settings > Roles**) that has all possible permissions in the source and target workspaces. - If the workflow contains the Optimize Time node, you must enable Time optimizer in the source workspace. - In the target workspace, if you want to clone a workflow with the node configuration and the workflow contains the nodes that send messages (email, SMS, web push, mobile push): - You must configure an [email](/docs/campaign/e-mail/configuring-email-account)/[SMS](/docs/campaign/SMS/configuring-sms-gateway) account. Other communication types don't require sender account. - If the email/SMS/web push/ mobile push template contains AI recommendation: - In the target workspace, enable [models for the types of recommendations included in the message template](/docs/settings/configuration/ai-engine-configuration/engine-configuration-for-recommendations) and configure the recommendation attributes while configuring the AI engine. - Make sure the item attribute names (feed catalog columns) and value types in the item feeds in the source and target workspaces are the same. - If you refer in a message to: - a catalog - make sure you have a catalog with corresponding data and structure (column names and types of values) in the target workspace. - If the catalog on the source and target workspaces have the same structure (column names and value types), you don’t have to do anything **after cloning is complete**. - If the catalog on the source and target workspaces have different structure (column names and value types), **after the cloning is complete**, the cloned message/template includes references to the columns and values from the catalog from the source workspace. You must replace them with the target workspace’s catalog. - a voucher pool - make sure you have a voucher pool in the target workspace. - promotions - make sure you have a corresponding promotion in the target workspace. - In the target workspace, if you want to clone a workflow with the node configuration and the workflow contains the [Integration](/docs/automation/integration) nodes (such as [Send file to Amazon S3 Bucket](/docs/automation/integration/amazon-s3-bucket/send-file-amazon-s3-bucket)), you must configure authorization connections. This can be done in the settings of the node. ## Select a workflow to clone --- 1. Go to Automation Hub icon **Automation Hub > Workflows**. 2. On the list of workflows, find the workflow you want to clone. 3. From the context menu, select **Clone to workspace**. - If you want to only clone a node structure, on the pop-up, select **Node structure**. - If you want to clone workflow with the node settings, select **Complete workflow**. **Result**: The **Choose destination** pop-up appears. 5. On the pop-up, select up to 5 workspaces to which you want to clone your message.
A pop-up with selection of workspaces
A pop-up with selection of workspaces
6. Confirm your choice by clicking **Next**. **Result**: You are directed to the mapping wizard. ## Cloning --- The procedure of cloning a workflow takes place in the mapping wizard and involves: | Action/Section name | Description | Section is available | |--------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------| | Objects to clone | This section contains a summary of objects (such as the whole workflow configuration, analyses, recommendations) which will be cloned to a target workspace.
- If there are no conflicts, no action is needed in this section. The listed objects will be cloned to the target workspace with the same names as in the source workspace.
- [If there are conflicts](#resolving-cloning-issues) (the same object types with the same names exist in the target workspace), you must define the method of resolving the conflict. | In every cloning process | | Mapping events | In this section, map events from a segmentation, expressions, aggregates, metrics, and other analyses which are nested in the node settings. In some cases, the events may be automatically mapped, when the system finds events with the same name in the target workspace. | If node settings in the workflow contain references to [analyses](/docs/analytics) | | Mapping parameters | In this section, map the attributes (for example, customer's name, size, email) which you used in the node settings in a workflow. In some cases, the attributes may be automatically mapped, when the system finds the attributes with the same name in the target workspace. | If node settings in a workflow contain customer-related attributes | | Mapping customer tags | In this section, map customer tags which you used in the node settings in the workflow. In some cases, the tags may be automatically mapped, when the system finds the tags with the same name in the target workspace. | If node settings in a workflow contain customer-related attributes | | Mapping product feed | In this section, map product feed and item attributes used in the AI recommendation with the product feed on your target workspace. | If a workflow contains a message content that contains a reference to AI Recommendation | | Mapping IQL variables | In this section, map item attributes used in the filters of AI recommendation with the item attributes from the product feed on your target workspace. | If a workflow contains a message content that contains a reference to AI Recommendation | | Mapping metrics | In this section, map boosting metrics used in the AI recommendation with the boosting metrics in the target workspace. | If a workflow contains a message content that contains a reference to AI Recommendation | | Mapping Item attributes | In this section, map item attributes used in Attribute recommendation settings with the item attributes from a product feed on your target workspace. | If a workflow contains a message content that contains a reference to AI Recommendation | | Mapping metadata feed | In this section, map the [metadata catalog](/docs/ai-hub/item-feed/metadata-catalog) used in the Attribute and/or Section recommendation with the metadata catalog on your target workspace. | If a workflow contains a message content that contains a reference to AI Recommendation | | Mapping context | In this section, map context item attributes used in the filters of AI recommendation with the item attributes from a product feed on your target workspace. | If a workflow contains a message content that contains a reference to AI Recommendation | | Mapping display attributes | In this section, map item attributes used in the Item comparison recommendation with the item attributes from the product feed on your target workspace. | If a workflow contains a message content that contains a reference to AI Recommendation | | Mapping settings/objects | In this section: map a sender account, voucher pools, promotions, catalogs, incoming integration, external integration authorization (connections), transformation diagram, time optimizer model with their equivalents in the target workspace
These objects are not cloned. You can only indicate their equivalent in a target workspace.
| - Sender account is available for: email and SMS
- Catalog mapping is available when a workflow contains a reference to a catalog,
- Voucher mapping is available when a workflow contains a reference to a voucher pool
- Promotion mapping is available when a workflow contains a reference to a promotion
- Incoming integration mapping is available when a workflow contains a [Business Event node](/docs/automation/triggers/businees-event-trigger)
- External integration authorization (connections) mapping is available if the workflow contains any [Integration node](/docs/automation/integration)
- Transformation diagram mapping is available if the workflow contains the [Data Transformation node](/docs/automation/operation/data-transformation-node),
- Time optimizer model mapping is available if the workflow contain the [Optimize Time node](/docs/automation/flow-control/optimize-time) | ## Resolving cloning issues --- An issue occurs when: An object of the same type with the same name already exists in the target workspace The system could not find the equivalent events, attributes, tags, item feed, item attributes, sender account, catalog, promotion, or voucher pool To resolve a problem, go to the details of each section whose button says **Solve issues**.
Issue while cloning objects
Issue while cloning objects
| Section name | Conflict solution | |--------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Objects to clone | You can select one of the following conflict solutions:
- Update - overwrite the object in the target workspaces with the object version from the source workspace
- Don't update - don’t overwrite (skip cloning)
- Create a copy - create a copy of the object version from the source workspace in the target workspaces, the copied object inherits the objects name from the source workspace.
Conflict while cloning objects
Conflict while cloning objects
| | Mapping events | From the dropdown list, select an equivalent event. If there is no equivalent event, you can create one by clicking **Create [event name]** on the top of the dropdown list. | | Mapping parameters | From the dropdown list, select an equivalent customer attribute. There is no possibility of adding a new customer while cloning. | | Mapping customer tags | From the dropdown list, select an equivalent tag. If there is no equivalent tag, you can create one by clicking **Create [tag name]** on the top of the dropdown list. | | Mapping IQL variables | From the dropdown list, select an equivalent item attribute. If there is no equivalent item attribute, you must go to the target workspace and [create one](/docs/settings/configuration/ai-engine-configuration/engine-configuration-for-recommendations). | If a workflow contains a message content that contains a reference to AI Recommendation | | Mapping metrics | From the dropdown list, select an equivalent metric. If there is no equivalent metric, you must go to the target workspace and create one. | If a workflow contains a message content that contains a reference to AI Recommendation | | Mapping Item attributes | From the dropdown list, select an equivalent item attribute. If there is no equivalent item attribute, you must go to the target workspace and [create one](/docs/settings/configuration/ai-engine-configuration/engine-configuration-for-recommendations). | If a workflow contains a message content that contains a reference to AI Recommendation | | Mapping metadata feed | From the dropdown list, select an equivalent metadata catalog. If there is no equivalent metadata catalog, you must go to the target workspace and [create one](/docs/ai-hub/item-feed/metadata-catalog). | If a workflow contains a message content that contains a reference to AI Recommendation | | Mapping context | From the dropdown list, select an equivalent item attribute. If there is no equivalent item attribute, you must go to the target workspace and [create one](/docs/settings/configuration/ai-engine-configuration/engine-configuration-for-recommendations). | If a workflow contains a message content that contains a reference to AI Recommendations | | Mapping display attributes | From the dropdown list, select an equivalent item attribute. If there is no equivalent item attribute, you must go to the target workspace and [create one](/docs/settings/configuration/ai-engine-configuration/engine-configuration-for-recommendations). | If a workflow contains a message content that contains a reference to AI Recommendation | | Mapping product feed | From the dropdown list, select an equivalent item feed. If there is no equivalent item feed, you must go to the target workspace and [create one](/docs/settings/configuration/ai-engine-configuration/engine-configuration-for-recommendations#adding-item-feed). | | Mapping settings/objects | In this section, you may resolve several conflicts at the same time connected with sender account, voucher pool, promotion, catalog, incoming integration, external integration authorization (connections), transformation diagram, time optimizer model. From the dropdown list, select equivalent objects in the target workspace. If there are any, go to the target workspace and create them.
- [Creating email account](/docs/campaign/e-mail/configuring-email-account)
- [Creating SMS account](/docs/campaign/SMS/configuring-sms-gateway)
- [Creating voucher pool](/docs/assets/code-pools)
- [Creating a promotion](/docs/ai-hub/promotions)
- [Creating a catalog](/docs/assets/catalogs/creating-catalogs)
- [Creating transformation diagram](/docs/automation/data-transformation-and-imports/creating-data-transformation)
- [Enable time optimizer](/docs/settings/configuration/time-optimizer)
- To enable connection for external integration, create a draft workspace with the selected integration node and in the settings of the create a connection. | ## Objects created as a result of cloning --- The elements created during cloning are available in their respective modules on target workspace, for example events are added in **Data Modeling Hub > Events**. ## Jinjava-related issues --- The mapping of such objects as catalogs, voucher pools, promotions is available only when the workflow contains Jinjava code referencing these objects. When it comes to Jinjava references to AI recommendations, aggregates, and other analysis types, mapping is not unnecessary because these objects are cloned automatically to the target workspace. The list below contains the cases which can cause issues in detecting dependencies: - If the Jinjava is incorrect (for example, missing `endif`), the dependency to such Jinjava will not be detected. - If you clone a worfklow with unsuported Jinjava (for example, the `socialproof` tag in email template), the dependency will not be detected. - If the Jinjava code is inserted in the comment snippet `{# commentary #}`, the dependency to such Jinjava will not be detected. - In case a message template in a workflow contains a variable replacing an element of Jinjava code with a dependency, the dependency may not be found. For example, if you used a [Synerise insert select](/docs/campaign/e-mail/creating-email-templates/email-code-editor#adding-a-variable), after cloning, you must open the content of the cloned content in the target workspace and add the insert manually to the content. # Enabling the Infobip integration In this article, you will find out how to enable the Infobip integration in Synerise and how to create an SMS sender account in Synerise which will let you send text messages to your profiles (for example, customers). ## Prerequisites --- - Create an account in Infobip. - In the Infobip documentation, check the text message limits imposed by Infobip. While planning SMS campaigns and sending SMS batches, take these limits into consideration. ## Enabling the integration --- 1. Go to Settings icon**Settings > Apps & Services**. 2. In the list of integrations, find **Infobip (SMS)** and next to the integration name, click **Show**. - If there is a connection, you may proceed to [Creating Infobip account in Synerise](#creating-infobip-sms-account-in-synerise) - If there is no connection or you want a new one, proceed with the integration settings. 3. Click **Add connection**. **Result**: A pop-up appears. 4. On the pop-up, switch the **Enable integration** toggle. 5. In the **Login** field, enter the login of your Infobip account. 3. In the **Password** field, enter the password to you Infobip account. 4. In the **From** field, enter the sender ID. You can access it in your Infobip account. 4. Click **Next**. 5. In the **Connection name** field, enter the name of the connection which will be visible on the list of Infobip integrations in Synerise in **Settings > Apps & Services**. 6. Click **Apply** and confirm by clicking **Yes**. 7. Proceed to [creating a sender account](#creating-infobip-sms-account-in-synerise). ## Creating Infobip SMS account in Synerise --- After enabling the connection, you need to create a sender account in Synerise, which can be used in communication. 6. Go to **Settings > SMS > Add account**. 7. In the **Account name** field, enter the name of your SMS account. It's used only on the list of SMS accounts in Synerise. 8. In the **From name (SenderId)** field, enter the telephone number or alias (if supported by your plan) which will be shown to the recipients. 9. From the SMS provider list, select **Infobip**. 10. From the **Infobip integration** dropdown list, select the connection you created in [the previous part of the process](#enabling-the-integration). 10. Finish by clicking **Apply**. **Result**: You can now use this sender when configuring SMS communication. # Device authorization and failed login settings You can configure the behavior of the system related to suspicious traffic or unknown devices trying to access a customers's account. The logic is based on: - IP address - deviceID - UUID - number of log-on attempts with wrong credentials Whenever we deal with unknown factors, it may trigger control mechanisms or the "Fail 2 ban" behavior. ## Untrusted traffic Regardless of the authorization method, Synerise filters and rejects traffic from hosts that are known to be used in hacking attacks around the world. This covers all TOR network traffic, public proxies, and more. ## Unknown device control
These settings only apply to [Synerise authentication](/docs/settings/tool/iam-for-apps/synerise).
Unknown device control lets you decide how the system reacts to log-in attempts from devices that the customer hasn't used before. By default, all devices are allowed. 1. Go to Settings icon **Settings > Authentication for mobile apps**. 1. In the **Unknown device control** section, click **Show**. 1. Select one of the modes: - **Turned off** (default setting) - Authentication is allowed even if a given device was never used before. - Customers are not notified when a new device is used. - **Approve logging from unknown devices through links in notifications** When a new device is used, the customer receives an email. They can only complete the log-in by clicking the link in the email. - **Receive notifications without the need to approve logging from unknown devices** When a new device is used, the log-in proceeds without any confirmation, but the customer receives an email notification. - **Conditional approval based on location** - If a log-in attempt from an unknown device is detected in the country selected as the default location, authentication is allowed. - If a log-in attempt from an unknown device is detected outside the country selected as the default location, authentication requires a confirmation by clicking a link in an email.
Control access based on devices
Settings for unknown device access
4. Configure the additional settings of the mode that you selected:
No additional settings are required.
1. **Optional**: Select a template and subject for the email. If you skip this part, a default template and subject are used. 1. Expand the dropdown and select a template or [create a new one](/docs/campaign/e-mail/creating-email-templates) by clicking **Create new template**. 1. Enter a subject. 2. **Optional**: Enter a URL where the customer will be redirected after authorizing the new device. 3. **Optional**: Enter a URL where the customer will be redirected if the link was clicked before and the device is already authorized.
1. **Optional**: Select the template and subject for the email. If you skip this part, the default template and subject are used. 1. Expand the dropdown and select a template or [create a new one](/docs/campaign/e-mail/creating-email-templates) by clicking **Create new template**. 1. Enter a subject.
1. Select the default location. 1. **Optional**: Select the templates and subjects for the emails. If you skip this part, default templates and subjects are used. 1. Expand the dropdown and select a template or [create a new one](/docs/campaign/e-mail/creating-email-templates) by clicking **Create new template**. 1. Enter a subject. 2. **Optional**: Enter a URL where the customer will be redirected after authorizing the new device. 3. **Optional**: Enter a URL where the customer will be redirected if the link was clicked before and the device is already authorized.


For more information about templates, click to expand:
Jinjava tags used in the templates
Data Insert Description
{% customer PARAM %} Inserts a profile's parameter or attribute, for example `{% customer firstName %}`; `{% customer attributes.customAttribute %}`
{{email}} Inserts the customer's email, the same that was used in the log-in attempt.
{{device_control_url}} Inserts the link that authorizes the device.
{{device_control_token}} Inserts the token that authorizes the device. Can be used to build your own URL for use with a mobile app.
{{country}} Inserts the country of the log-in attempt (based on IP geolocation).
{{ip}} Inserts the IP address of the device used in the log-in attempt.
{{login_time}} Inserts the time of the log-in attempt.
Example confirmation of sign in from unknown device template
Confirmation of sign in from unknown device template
Confirmation of sign in from unknown device template
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <style type="text/css"> /* Outlines the grid, remove when sending */ table td { /* border: 1px solid cyan; */ } /* CLIENT-SPECIFIC STYLES */ body, table, td, a { -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; } table, td { mso-table-lspace: 0pt; mso-table-rspace: 0pt; } img { -ms-interpolation-mode: bicubic; } /* RESET STYLES */ img { border: 0; outline: none; text-decoration: none; } table { border-collapse: collapse !important; } body { margin: 0 !important; padding: 0 !important; width: 100% !important; } /* iOS BLUE LINKS */ a[x-apple-data-detectors] { color: inherit !important; text-decoration: none !important; font-size: inherit !important; font-family: Arial, sans-serif !important; font-weight: inherit !important; line-height: inherit !important; } /* ANDROID CENTER FIX */ div[style*="margin: 16px 0;"] { margin: 0 !important; } </style> </head> <body style="margin:0; padding:0; background-color:#fff;"> <center> <div style="background-color:#fff; max-width: 600px; margin: auto;"> <!--[if mso]> <table role="presentation" width="600" cellspacing="0" cellpadding="0" border="0" align="center"> <tr> <td> <![endif]--> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="center" valign="middle" style="padding:10px;"></td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td width="200" align="left" valign="middle" style="padding:10px;"> <img alt="Synerise" src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/030d47ff7f497bf302d3248641a216ad.png" style="width: 140px;"> </td> <td width="200" align="center" valign="middle" style="padding:10px;"></td> <td width="200" align="center" valign="middle" style="padding:10px;"></td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td width="400" align="left" valign="middle" style="padding:10px; font-weight: bold; font-size: 28px; font-family: Arial, sans-serif; color:#384350"> Hi, {% user firstname %} </td> <td width="200" align="center" valign="middle" style="padding:10px;"> <img width="91" src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/38937e17f860105ccfea3df81558734b.png" alt="Synerise logo" /> </td> </tr> <tr> <td width="400" align="left" valign="middle" style="padding:10px; font-weight: bold; font-size: 22px; font-family: Arial, sans-serif; color:#384350"> There was a new sign-in attempt to your account. Was it you? </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td width="400" align="left" valign="middle" style="padding:10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> We have spotted a new sign in to your account <strong>{{ email }}</strong>. We want to make sure that it was you. Have a look at the details: <br><br></td> <td width="200" align="center" valign="middle" style="padding:10px;"></td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td width="50" align="left" valign="middle" style="padding:10px 10px 0px 10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> <strong>Country:</strong> </td> <td width="550" align="left" valign="middle" style="padding:10px 10px 0px 10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> {{ country }}</td> </tr> <tr> <td width="50" align="left" valign="middle" style="padding:10px 10px 0px 10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> <strong>IP address:</strong> </td> <td width="550" align="left" valign="middle" style="padding:10px 10px 0px 10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> {{ ip }}</td> </tr> <tr> <td width="50" align="left" valign="middle" style="padding:0px 10px 10px 10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> <strong>Time: </strong> </td> <td width="550" align="left" valign="middle" style="padding:0px 10px 10px 10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> {{ login_time }}</td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> If it was you and you recognize this sign-in attempt, please click the link below to confirm that device (this will enable it for sign-in to your account) </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="center" valign="middle" style="padding:10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> <a href="{{ device_control_url }}" style="color: #0c68ff; font-weight: bold;">Yes, it's me!</a> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> If you find results related to you on either of these sites, we strongly recommend to review your passwords across all online services you use. </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> <a href="#" style="color: #0c68ff; font-weight: bold;">haveibeenpwned.com</a><br /> <a href="#" style="color: #0c68ff; font-weight: bold;">monitor.firefox.com</a> </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> If you do not recognize this sign-in attempt, we recommend you to change your password directly in the app and also check if your email account is not a part of any known password leaks. You can do that at: </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="center" valign="middle" style="padding:10px;"></td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> Have a good day,<br /> The Synerise Team </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="center" valign="middle" style="padding:10px;"> <hr style="border: 1px solid #e5e5e5;" /> </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px; font-size: 14px;font-family: Arial, sans-serif; color:#b6bdc4;line-height: 22px;"> Have questions? The Synerise Team is here to help.<br /> Please contact <a href="support@synerise.com" style="color: #0c68ff; font-weight: bold;">support@synerise.com</a> </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td width="25" align="center" valign="middle" style="padding:10px;"> <a href="https://www.facebook.com/synerise"><img src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/778ed84375be209b05f2fb333f7bbb16.png" width="20" style="margin:0; padding:0; border:none; display:block;" border="0" class="img" alt="Synerise on Facebook"></a> </td> <td width="25" align="center" valign="middle" style="padding:10px;"> <a href="https://www.youtube.com/c/Synerise/"><img src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/eadde6165d2421eb5f98d9654006d9ee.png" width="20" style="margin:0; padding:0; border:none; display:block;" border="0" class="img" alt="Synerise on YouTube"></a> </td> <td width="25" align="center" valign="middle" style="padding:10px;"> <a href="https://www.linkedin.com/company/synerise/"><img src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/42126cc8dfb468a79dc4b37c45082b78.png" width="20" style="margin:0; padding:0; border:none; display:block;" border="0" class="img" alt="Synerise on LinkedIn"></a> </td> <td width="25" align="center" valign="middle" style="padding:10px;"> <a href="https://twitter.com/synerise"><img src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/f2512acc01435e5cd10edfc0e419908b.png" width="20" style="margin:0; padding:0; border:none; display:block;" border="0" class="img" alt="Synerise on Twitter"></a> </td> <td width="500" align="center" valign="middle" style="padding:10px;"></td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px; font-size: 10px;font-family: Arial, sans-serif; color:#b6bdc4;line-height: 16px;">The administrator of your personal data is SYNERISE S.A. with its registered office at ul. Lubostroń 1, 30-383 Kraków,entered into the Register of Entrepreneurs of the National Court Register by the District Court for Kraków-Śródmieście in Kraków, 11th Commercial Division of the National Court Register under the number: 0000468034. You can contact the Administrator regarding the protection of personal data by email at the followingaddress: <a target="_blank" href="mailto:iod@synerise.com">iod@synerise.com</a>, or by traditional mail sent to the address of the Administrator's seat, i.e. SYNERISE S.A. ul. Lubostroń 1.30-383 Kraków. </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="center" valign="middle" style="padding:10px;"></td> </tr> </table> </td> </tr> </table> <!--[if mso]> </td> </tr> </table> <![endif]--> </div> </center> </body> </html>
Example information about sign in from unknown device template
Template for email with information about sign in from unknown device
Template for email with information about sign in from unknown device
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <style type="text/css"> /* Outlines the grid, remove when sending */ table td { /* border: 1px solid cyan; */ } /* CLIENT-SPECIFIC STYLES */ body, table, td, a { -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; } table, td { mso-table-lspace: 0pt; mso-table-rspace: 0pt; } img { -ms-interpolation-mode: bicubic; } /* RESET STYLES */ img { border: 0; outline: none; text-decoration: none; } table { border-collapse: collapse !important; } body { margin: 0 !important; padding: 0 !important; width: 100% !important; } /* iOS BLUE LINKS */ a[x-apple-data-detectors] { color: inherit !important; text-decoration: none !important; font-size: inherit !important; font-family: Arial, sans-serif !important; font-weight: inherit !important; line-height: inherit !important; } /* ANDROID CENTER FIX */ div[style*="margin: 16px 0;"] { margin: 0 !important; } </style> </head> <body style="margin:0; padding:0; background-color:#fff;"> <center> <div style="background-color:#fff; max-width: 600px; margin: auto;"> <!--[if mso]> <table role="presentation" width="600" cellspacing="0" cellpadding="0" border="0" align="center"> <tr> <td> <![endif]--> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="center" valign="middle" style="padding:10px;"></td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td width="200" align="left" valign="middle" style="padding:10px;"> <img alt="Synerise" src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/030d47ff7f497bf302d3248641a216ad.png" style="width: 140px;"> </td> <td width="200" align="center" valign="middle" style="padding:10px;"></td> <td width="200" align="center" valign="middle" style="padding:10px;"></td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td width="400" align="left" valign="middle" style="padding:10px; font-weight: bold; font-size: 28px; font-family: Arial, sans-serif; color:#384350"> Hi, {% user firstname %} </td> <td width="200" align="center" valign="middle" style="padding:10px;"> <img width="91" src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/38937e17f860105ccfea3df81558734b.png" alt="Synerise logo" /> </td> </tr> <tr> <td width="400" align="left" valign="middle" style="padding:10px; font-weight: bold; font-size: 22px; font-family: Arial, sans-serif; color:#384350"> There was a new sign-in to your account. Was it you? </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td width="400" align="left" valign="middle" style="padding:10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> We have spotted a new sign in to your account <strong>{{ email }}</strong>. We want to make sure that it was you. <br><br>Have a look at the details: </td> <td width="200" align="center" valign="middle" style="padding:10px;"></td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td width="50" align="left" valign="middle" style="padding:10px 10px 0px 10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> <strong>Country:</strong> </td> <td width="550" align="left" valign="middle" style="padding:10px 10px 0px 10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> {{ country }}</td> </tr> <tr> <td width="50" align="left" valign="middle" style="padding:10px 10px 0px 10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> <strong>IP address:</strong> </td> <td width="550" align="left" valign="middle" style="padding:10px 10px 0px 10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> {{ ip }}</td> </tr> <tr> <td width="50" align="left" valign="middle" style="padding:0px 10px 10px 10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> <strong>Time: </strong> </td> <td width="550" align="left" valign="middle" style="padding:0px 10px 10px 10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> {{ login_time }}</td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> If you do not recognize this sign-in attempt, we recommend you to change your password directly in the app and also check if your email account is not a part of any known password leaks. You can do that at: </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> <a href="#" style="color: #0c68ff; font-weight: bold;">haveibeenpwned.com</a><br /> <a href="#" style="color: #0c68ff; font-weight: bold;">monitor.firefox.com</a> </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> If you find results related to you on either of these sites, we strongly recommend to review your passwords across all online services you use. </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="center" valign="middle" style="padding:10px;"></td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px; font-size: 14px;font-family: Arial, sans-serif; color:#384350;line-height: 22px;"> Have a good day,<br /> The Synerise Team </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="center" valign="middle" style="padding:10px;"> <hr style="border: 1px solid #e5e5e5;" /> </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px; font-size: 14px;font-family: Arial, sans-serif; color:#b6bdc4;line-height: 22px;"> Have questions? The Synerise Team is here to help.<br /> Please contact <a href="support@synerise.com" style="color: #0c68ff; font-weight: bold;">support@synerise.com</a> </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td width="25" align="center" valign="middle" style="padding:10px;"> <a href="https://www.facebook.com/synerise"><img src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/778ed84375be209b05f2fb333f7bbb16.png" width="20" style="margin:0; padding:0; border:none; display:block;" border="0" class="img" alt="Synerise on Facebook"></a> </td> <td width="25" align="center" valign="middle" style="padding:10px;"> <a href="https://www.youtube.com/c/Synerise/"><img src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/eadde6165d2421eb5f98d9654006d9ee.png" width="20" style="margin:0; padding:0; border:none; display:block;" border="0" class="img" alt="Synerise on YouTube"></a> </td> <td width="25" align="center" valign="middle" style="padding:10px;"> <a href="https://www.linkedin.com/company/synerise/"><img src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/42126cc8dfb468a79dc4b37c45082b78.png" width="20" style="margin:0; padding:0; border:none; display:block;" border="0" class="img" alt="Synerise on LinkedIn"></a> </td> <td width="25" align="center" valign="middle" style="padding:10px;"> <a href="https://twitter.com/synerise"><img src="https://upload.snrcdn.net/9bbb7035ecf3565cceed63d321d7d9b31236850d/default/origin/f2512acc01435e5cd10edfc0e419908b.png" width="20" style="margin:0; padding:0; border:none; display:block;" border="0" class="img" alt="Synerise on Twitter"></a> </td> <td width="500" align="center" valign="middle" style="padding:10px;"></td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="left" valign="middle" style="padding:10px; font-size: 10px;font-family: Arial, sans-serif; color:#b6bdc4;line-height: 16px;">The administrator of your personal data is SYNERISE S.A. with its registered office at ul. Lubostroń 1, 30-383 Kraków,entered into the Register of Entrepreneurs of the National Court Register by the District Court for Kraków-Śródmieście in Kraków, 11th Commercial Division of the National Court Register under the number: 0000468034. You can contact the Administrator regarding the protection of personal data by email at the followingaddress: <a target="_blank" href="mailto:iod@synerise.com">iod@synerise.com</a>, or by traditional mail sent to the address of the Administrator's seat, i.e. SYNERISE S.A. ul. Lubostroń 1.30-383 Kraków. </td> </tr> </table> </td> </tr> </table> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;" bgcolor="#FFFFFF"> <tr> <td align="center" valign="middle" style="padding:5px 10px;"> <table width="600" cellspacing="0" cellpadding="0" border="0" align="center" style="max-width:600px; width:100%;"> <tr> <td align="center" valign="middle" style="padding:10px;"></td> </tr> </table> </td> </tr> </table> <!--[if mso]> </td> </tr> </table> <![endif]--> </div> </center> </body> </html>
5. Confirm the settings by clicking **Apply**. ## Fail 2 ban settings
These settings only apply to [Synerise authentication](/docs/settings/tool/iam-for-apps/synerise).
The "Fail 2 ban" feature blocks access to an account after too many failed log-in attempts, which protects the account from brute-force attacks. By default, it's turned off. The lock is divided into 3 stages. You can set different attempt timers, ban durations, and number of allowed failed attempts for each stage. An account proceeds to a new stage when the ban from a previous stage expires and another unsuccessful log-in attempt is made. The stages are re-set after a successful log-in attempt.
Ban settings
Ban settings
1. Go to Settings icon **Settings > Authentication for mobile apps**. 2. In the **Fail 2 ban settings** section, click **Show**. 3. Define the settings for each stage of the ban: 1. In the **Failed attempts collection period**, enter the time during which the login attempts are tracked. It is counted from the first attempt of logging in. If the allowed number of failed attempts is exceeded in this period, the ban is applied. 2. In the **Ban duration**, enter the time during which a customer can't log in to the application. 3. In the **Max failed auth. attempts**, enter the number of failed attempts allowed in the selected period. **Example**:
Configuration of settings for account registration
Example: a customer is banned for 5 minutes after 10 failed log-in attempts in 120 seconds.
4. Confirm by clicking **Apply**. # Integrating VTEX IO with Synerise The VTEX platform provides various options for the storefront development, each with distinct characteristics to meet the needs of clients. The Synerise plugin supports Store Framework and FastStore solutions. If you are unsure which storefront solution you are using in your project, become familiar with the [VTEX documentation](https://developers.vtex.com/docs/guides/getting-started-with-storefront-solutions). # Enabling the MessageFlow integration In this article, you will find out how to enable MessageFlow integration in Synerise and how to create an SMS sender account in Synerise which will allow you to send text messages to your profiles (for example, customers). ## Prerequisites --- - Create an account in MessageFlow. - In the MessageFlow documentation, check the text message limits imposed by MessageFlow . While planning SMS campaigns and sending SMS batches, take these limits into consideration. ## Enabling the integration --- 1. Go to Settings icon**Settings > Apps & Services**. 2. In the list of integrations, find MessageFlow and next to the integration name, click **Show**. - If there is a connection, you may proceed to [Creating MessageFlow SMS account in Synerise](#creating-messageflow-sms-account-in-synerise) - If there is no connection or you want a new one, proceed with the integration settings. 3. Click **Add connection**. **Result**: A pop-up appears. 4. On the pop-up, switch the **Enable integration** toggle. 5. Optionally, if you want to use the MessageFlow-native option of shortening links, enable the **Short URL** toggle on.
Synerise allows [shortening links](/docs/campaign/SMS/creating-SMS-template#short-links) too.
3. From the **Host** dropdown list, select the host (depending on your agreement with MessageFlow): - `https://api.messageflow.com` is the default host. - `https://apicloud.messageflow.com` is the Azure cloud host. 3. In the **Authorization key** field, enter the API authorization key to your MessageFlow account. 4. Click **Next**. 5. In the **Connection name** field, enter the name of the connection which will be visible in the list of MessageFlow integrations in Synerise in **Settings > Apps & Services**. 8. Click **Apply** and confirm by clicking **Yes**. 9. Proceed to [creating a sender account](#creating-messageflow-sms-account-in-synerise). ## Creating MessageFlow SMS account in Synerise --- After enabling the connection, you need to create a sender account in Synerise, which can be used in communication. 6. Go to **Settings > SMS > Add account**. 7. In the **Account name** field, enter the name of your SMS account. It's used only on the list of SMS accounts in Synerise. 8. In the **From name (SenderId)** field, enter the telephone number or alias (if supported by your plan) which will be shown to the recipients.
You can find more information about the number from which you will send messages [here](https://docs.messageflow.com/technical-support-center/integrations/integration-with-synerise).
9. From the SMS provider list, select **MessageFlow**. 10. From the **MessageFlow integration** dropdown list, select the connection you created in [the previous part of the process](#enabling-the-integration). 10. Finish by clicking **Apply**. **Result**: You can now use this sender when configuring SMS communication. # Troubleshooting ## I can't authenticate - In the Synerise application, review the SAML setup for any typos or errors in the Just-In-Time provisioning configuration. - Check the SSO settings in your Identity Provider's portal. # Data Modeling Hub permissions This article describes the [permissions](/docs/settings/identity-access-management/permissions) needed to use the [Data Modeling Hub](/docs/assets). To set the permissions, you need to create a user role or edit an existing one and open the Permissions matrix. In the matrix, the permissions are collected into groups. Some of these groups can be expanded to set more granular permissions. ## How to read this list In this article, each heading describes an action. The permissions for that action are described in the form of breadcrumbs. **For example**, if the required permissions are: - **Profiles** > **Client list**: `read` - **Search engine**: `create`, `edit` The permission matrix needs to look like this:
Permission matrix in Synerise Settings showing Profiles with read access on Client list and Search engine with create and edit permissions
Permission example, see description above figure.
The `read` permission is not explicitly listed when any higher permission is required - the portal enables it automatically. ## I want to... ### work with catalogs #### see catalogs and items - **Assets** > **Catalogs**: `read` - If you want to filter the view, you need: - **Analytics** > **Segmentations**, **Aggregates**, **Expressions**: `read` - **Communications** (all): `read` #### create catalogs **Assets** > **Catalogs**: `create`, `edit` #### import data to catalogs - **From CSV**: **Assets** > Simple imports: `execute`, `create` - To preview the file: **Automation** > **Journeys**: `read` - **With automation**: **Automation** > **Workflows**: `execute`, `create`, `edit` #### export records from catalogs - **Assets** > **Catalogs**: `read` - **With simple export**: - **Data export** > **Data export list**: `read` - to access the list of exports - **Data export** > **Save file**: `execute` - **With automation**: **Automation** > **Workflows**: `execute`, `create`, `edit` #### change catalog settings This includes event enrichment and indexing. **Assets** > **Catalogs**: `create`, `edit` #### modify catalog items **Assets** > **Catalogs**: `create`, `edit` ### manage event definitions #### see event definitions and their JS SDK settings - **Assets** > **Events**: `read` - **Profiles** > Client details > Client activities: `read` - **Assets** > **Catalogs**: `read` #### create and edit event definitions and their JS SDK settings **Assets** > **Events** > create, edit ### manage event parameters #### see event parameters - **Assets** > **Events**: `read` - **Assets** > **Attributes**: `read` #### create event parameters - **Assets** > **Events**: `create`, `edit` - **Assets** > **Attributes**: `create`, `edit` ### work with asset tags **Assets** > **Tags**: - `read` - to see the list of tags and tag directories - `create`, `edit` - to add and edit tags and tag directories - `delete` - to delete tags #### create and edit profile tags - **Assets** > **Tags**: `create`, `edit` - **Profiles** > **Client tags**: `create`, `edit` ### use the File Explorer **Assets** > **File Explorer**: - `read` - to see the list of files and file details - `create`, `edit` - to upload files - `delete` - to delete files ### work with Brickworks #### see schemas - **Assets** > **Brickworks**: `read` #### create and edit schemas - **Assets** > **Brickworks**: `create` - To use audiences other than ALL: - **Analytics** > **Segmentations**, **Expressions**, **Aggregates**: `read` - to select an existing segmentation or create a new audience - **Analytics** > **Segmentations**: `create` - to save the configuration of new audience as a segmentation for later use #### see records - **Assets** > **Brickworks**: `read` - To select a profile context for preview: - **Profiles**: `read` - to search or select from the list of all profiles - **Analytics** > **Segmentations**: `read` - to select a profile from a segmentation #### create and edit records - **Assets** > **Brickworks**: `create` - To be able to select values in Synerise Object fields: - **Analytics** > **Expressions**: `read` - for expressions - **Analytics** > **Aggregates**: `read` - for aggregates - **Assets** > **Code pool**: `read` - for vouchers - **Assets** > **Attributes**: `read` - for profile attributes - **Communications** > **Recommendations**: `read` - for recommendations - **Assets** > **Catalogs**: `read` - for catalogs #### publish records - **Assets** > **Brickworks**: `execute` #### see external sources - **Assets** > **Brickworks**: `read` #### create external sources - **Assets** > **Brickworks**: `create` - **Settings** > **Connections**: `read` (to use existing connections), `create` and `edit` (to create new connections) - **Settings** > **API key**: `read` - to access the list of API keys in connections which require them ### manage documents #### see documents **Assets** > **Documents**: `read` #### create and edit documents - **Assets** > **Documents**: create - To use audiences other than ALL: - **Analytics** > **Segmentations**, **Expressions**, **Aggregates**: `read` - to select an existing segmentation or create a new audience - **Analytics** > **Segmentations**: `create` - to save the configuration of new audience as a segmentation for later use #### activate, pause, resume, and stop documents **Assets** > **Documents**: `create` #### duplicate and move documents **Assets** > **Documents**: `create` #### delete documents **Assets** > **Documents**: `delete` ### manage snippets #### see snippet list and details - **Templates**: `read` - **Assets** > **Documents**: `edit` #### add snippets **Templates**: `create`, `edit` #### delete snippets **Templates**: `delete` ### manage voucher pools #### see voucher pools and vouchers **Assets** > **Code pool**: `read` #### create and edit voucher pools, add vouchers **Assets** > **Code pool**: `create`, `edit` #### delete voucher pools **Assets** > **Code pool**: `delete` ### use Schema Builder #### see schemas - **Assets** > **Schema builder**: `read` - **Communications** (all): `read` #### edit schemas and records **Assets** > **Schema builder**: `edit` #### create schemas and records **Assets** > **Schema builder**: `create` #### change schema privacy settings **Settings** > **Object permissions**: `create` ### import data - **Assets** (any): `read` - to access the Data Management menu - **Automations** (all): `read` - **Simple Imports**: `read` #### from local file **Simple Imports**: `execute`, `create` #### with Automation - **Automations** (all): `create`, `edit` ### export data to downloadable files - **Data export** > **Data export list**: `read` - to access the list of exports - **Data export** > **Save file**: `execute` # Enabling the LINK Mobility integration
Product Update - LINK Mobility integration for SMS communication
In this article, you will learn how to enable the LINK Mobility integration in Synerise so you can send SMS messages to your customers. ## Prerequisites - Obtain the following API access data from LINK Mobility support: - username - password - subdomain - platform partner ID - platform ID - Make sure that the target audience for campaigns which will use LINK Mobility integration have phone numbers that start with the regional prefix (for example, `+1` for the USA). - Become familiar with limits (if any) in your LINK Mobility plan and plan your messaging accordingly. ## Enabling the integration 1. Go to Settings icon**Settings > Apps & Services**. 2. In the list of integrations, find **Link Mobility** and next to the name, click **Show**. - If there is a connection, you may proceed to [Creating Link Mobility SMS account in Synerise](#creating-link-mobility-sms-account-in-synerise) - If there is no connection or you want a new one, proceed to the next step. 3. Click **Add connection**. **Result:**: A pop-up appears. 4. On the pop-up, enable the **Enable integration** toggle. 5. Fill in the following fields with the parameters received from LINK Mobility support: - **Username** - **Password** - **Subdomain** - **Platform partner ID** - **Platform ID** 6. Click **Next**. 7. In the **Connection name** field, enter the name of the connection which will be visible in the list of LINK Mobility integrations in Synerise in **Settings > Apps & Services**. 8. Click **Apply** and confirm by clicking **Yes**. 9. Proceed to [creating a sender account](#creating-link-mobility-sms-account-in-synerise). ## Creating Link Mobility SMS account in Synerise After enabling the connection, you need to create a sender account in Synerise, which can be used in communication. 1. Go to **Settings > SMS > Add account**. 7. In the **Account name** field, enter the name of your SMS account. It's used only on the list of SMS accounts in Synerise. 8. In the **From name (SenderId)** field, enter the telephone number or alias (if supported by your plan) which will be shown to the recipients. 9. From the SMS provider list, select **Link Mobility**. 10. From the **Link Mobility integration** dropdown list, select the [connection you created earlier](#enabling-the-integration). 11. Finish by clicking **Apply**. **Result**: You can now use this sender when configuring SMS communication. # Organization settings On the **Organization settings** page, you can view and edit your organization details. All settings on this page are optional. 1. Sign in to Synerise. 2. Enter an organization. If you can't see any organizations next to the workspace list, it means you don't have access to an organization. 3. Go to Organization settings icon **Organization settings**. 4. In the **Basic info** section, click **Show**. 5. To change the organization name, enter the new name and click **Apply**. 6. In the **Company Address** section, click **Show**. 7. Enter the organization's address details and click **Apply**. # Settings permissions This article describes the [permissions](/docs/settings/identity-access-management/permissions) needed to access the [Settings](/docs/settings). To set the permissions, you need to create a user role or edit an existing one and open the Permissions matrix. In the matrix, the permissions are collected into groups. Some of these groups can be expanded to set more granular permissions. ## How to read this list In this article, each heading describes an action. The permissions for that action are described in the form of breadcrumbs. **For example**, if the required permissions are: - **Profiles** > **Client list**: `read` - **Search engine**: `create`, `edit` The permission matrix needs to look like this:
Permission matrix in Synerise Settings showing Profiles with read access on Client list and Search engine with create and edit permissions
Permission example, see description above figure.
The `read` permission is not explicitly listed when any higher permission is required - the portal enables it automatically. ## I want to... ### access the settings module No permissions are required, but you can only see your own account data. ### see and edit my own account (for example, password) No permissions are required. ### access workspace details **Settings** > **Business Profile**: `edit` - required to see and change the settings ### access the Audit Log **Audit Log**: `read` ### access the cloning logs **Settings** > **Cloning jobs**: `read` ### clone objects In the source and target workspace, you need: - **Cloning**: `create` - `create` and `edit` permissions for the cloned object and all nested objects that will also be cloned in the process To learn more about cloning, see [Cloning objects to other workspaces](/docs/settings/workspace/cloning-objects). ### see and accept approval requests - **Settings** > **Approval settings**: - `read`: to see the list of approval requests - `edit`: to approve templates - **Templates**: `read` - required to see the template - **Communication** > _campaign type_: `create` - required to see the template ### manage workspace users
Only users with the PROFILE_MANAGER or PROFILE_ADMIN role can invite new users and assign users to groups.
- **Settings** > **Business Profile** > Managed domains: `read` - **Settings** > **Users**: - `read` - to see the user list - `edit` - to change the expiration time of an existing user's access - `delete` - to revoke a user's access ### manage user roles and groups - **Settings** > **Users**: `read` - to see the user list when working with roles - **Settings** > **Roles**: - `read`- to see the roles - `create`, `edit` - to create and update roles and groups - **If [PII protection](/docs/settings/pii-protection) is enabled**: to see the PII settings for a role, you need **Settings** > **PII settings**: `read` ### manage access control - **Settings** > **User Access Management** > **_category_**: `create`, `edit` - required to see and change a setting - **Settings** > **Business Profile** > **Managed Domains**: `create` - required to open the Access Control menu - **Settings** > **Users**: `read` - required to open the Access Control menu - **Settings** > **Customers IAM** > **Password Policy**: `create`, `edit` - required to change password settings ### manage API keys - **Settings** > **API keys**: - `read` - to see the list and key details - `edit` - to update key settings - `create` - to create a key - `delete` - to delete a key - **If [PII protection](/docs/settings/pii-protection) is enabled**: to see the PII settings for the API key, you need **Settings** > **PII settings**: `read` ### manage connections Connections are used in [Automation Hub](/docs/automation). They are used in many nodes in the [Integration](/docs/automation/integration) section and described there. - **Settings** > **Connections**: - `read` - to see connections - `edit` - to update connections - `create` - to create connections - `delete` - to delete connections - **Settings** > **API key**: `read` - to access the list of API keys in connections which require them ### manage tracking codes **Settings** > **Tracker**: - `read` - to see the list of tracking codes and code details - `create` - to create and update tracking codes - `delete` - to delete tracking codes ### manage integrations in the Apps & Services menu **Settings** > **Integrations**: - `read` - to see the current settings - `create`, `edit` - to configure integrations - `delete` - to disable integrations ### manage authentication for mobile apps - **Settings** > **Business Profile**: `read` - required to access the settings - **Settings** > **Customer IAM** > - **Account confirmation**: - `read`- to see the settings - `edit` - to update the settings - **OAuth**: - `read` - to see settings in the **Authentication methods** section - `edit` - to change those settings - **Locking policy**: - `read` - to see settings in the **Access control** section - `edit` - to change those settings - **Templates**: - `read` - to see email templates and select them for use - `create` - to create new templates - **Assets** > **Code pools**: `read` - to select a code pool for loyalty card assignment - **Settings** > **API keys**: - `read` - to see keys in the **Simple authentication** section - `create`, `edit` - to create new keys ### manage Global Control Group - **Settings** > **Global Control Group**: - `read` - to see the settings - `edit` - to update the settings - **Analytics** > **Segmentations**: `read` - to see available segmentations and the control group size ### configure AI Engine You need these permissions to access the menu and see the item feeds: - **Settings** > **AI engine configuration**: `read` - **Assets** > **Catalogs**: `read` - **Search engine**: `read` Additionally: - To open item feed details: - **Communications** > **Recommendations**: `read` - To create and edit item feeds: - **Settings** > **AI engine configuration**: `create`, `edit` - To see Predictions configuration: - **Settings** > **Predictions**: `read` - **Predictions**: `read` - To update Predictions configuration: - **Settings** > **AI engine configuration**: `edit` - **Settings** > **Predictions**: `edit` - To configure Time Optimizer: - **Settings** > **AI engine configuration**: `edit` ### manage approval services These settings only manage services needed to set up approvals. The settings required to use the approvals are described in ["See and accept approval requests"](#see-and-accept-approval-requests). - **Settings** > Approval settings: - `read` - to see the service settings - `create`, `edit` - to create and edit services - `create`, `edit` - to delete a service - **Settings** > **Users**: `read` - to see the list of users required for the settings - **Analytics** (any): `create` - to create an approval service ### manage communication limits **Settings** > **Newsletter**: `edit` - to see and edit the limits ### manage email accounts - **Settings** > **Mail accounts**: `read` - **Settings** > **Integrations**: - `read` - to see the settings - `create`, `edit` - to add and edit accounts - `execute` - to send test emails - `delete` - to delete accounts ### manage SMS accounts **Settings** > **Integrations**: - `read` - to see the settings - `create`, `edit` - to add and edit accounts - `delete` - to delete accounts ### manage Web push accounts **Settings** > **Integrations**: - `read` - to see the settings - `create`, `edit` - to add and edit accounts - `delete` - to delete accounts ### manage calendars - **Settings** > **Calendar**: `create`, `edit` - **Settings** > **Calendars import**: `create`, `edit` ### manage identifiers - **Assets** > **Attributes**: `read` - **Settings** > **Identification and merging rules**: - `read` - to see the settings - `edit` - to update the settings ### export data - **Profiles** > **Client details** (all): `read` - **Settings** > **Export**: - `read` - to see the list of exports and download data - `create` - to create an export ### use encryption keys **Settings** > **Encryption keys**: - `read` - to see and use encryption keys - `edit`, `create` - to create encryption keys - `edit` - to revoke encryption keys To learn about encryption keys, see [Data exchange encryption](/docs/settings/data-exchange-encryption). # Organizations An organization is a group of workspaces, offering a centralized place for managing them and checking their event consumption. When you're the member of an organization, it's next to the list of workspaces after you sign in to Synerise:
The screen after logging in shows the available organizations and workspaces
The screen after logging in shows the available organizations and workspaces
Organizations are only visible to their users. If you need access, contact the person in your company who's responsible for managing the organization and ask them to invite you. Being a user in a workspace does NOT grant access to that workspace's organization. Your level of access to information and options in an organization depends on your membership type, as described in [Organization users](/docs/settings/organizations/users). # Legacy Magento Plugin
This document covers integration instructions for the deprecated v1.x plugin version. Support is available only for Magento versions 2.4.x and 2.3 (backward compatibility). Keep up-to-date with Magento's recommended updates. Documentation for the v2.x plugin version integration is available [here](/docs/settings/tool/magento/magento-integration-multistore-support).
The Synerise users can integrate their websites built on the Magento platform. The scope of integration involves the transmission of the following data from Magento to Synerise: - information about the customers (their activity, identification of a customer throughout the whole journey), - information about the transactions, - information about the items ## Prerequisites --- 1. You must be granted user permissions to access API key section and add the key in Synerise. 2. You must have access to admin panel in the Magento platform. ## Configuration in Synerise --- Log in to your workspace in Synerise and perform the steps described below: ### Create an API key --- 1. In Synerise, go to **Settings > API Keys > Add API key**. 2. On the pop-up: 1. Enter the name of the API key (it will be visible on the list of API keys). 2. Select **Workspace**. 3. Optionally, enter the description of the key (it will be visible on the list of API keys).
Adding a new API key for the Magento integration
Adding a new API key for the Magento integration
3. Confirm by clicking **Save**. 4. Find the key on the top of API key list and click **Permissions**. 5. On the pop-up, select the whole **EVENTS**, **CLIENT**, and **TRANSACTION** sections.
Permissions for the API key required by the Magento integration
Permissions for the API key required by the Magento integration
6. Confirm by clicking **Apply settings**. 7. On the list of API keys, double-click the key you created. 8. On the **General** section, click **Show**. 9. Copy the API key and paste to the notepad.
Details of the API key
Details of the API key
### Add the tracking code --- 1. In Synerise, go to **Settings > Tracking codes** and add a tracking code. Full instruction on adding tracking codes is available at the [link](/developers/web/installation-and-configuration).
You can select any feature configuration for the tracking code.
2. Copy the tracking code and save it in the notepad.
Synerise tracking code form in Settings for Magento integration setup
A blank tracking code form
## Configuration in the Magento panel --- Log in to your administration panel in Magento and perform the steps described below: ### Download the Synerise plugin --- To download the Synerise plugin in Magento, click [here](https://github.com/Synerise/magento2-integration) ### Configure the Synerise plugin --- 1. In your Magento administration panel, go to **Stores > Configuration > Synerise**. 2. In the **Synerise API** section, paste the API key from the [Create an API key](#create-an-api-key) procedure. The key is required to enable communication with the Synerise API. 3. To save full request and response from Synerise API, set the **Request logging** option to **Yes**.
It is recommended to enable this option only while debugging.
Magento Synerise plugin API key and request logging configuration
A blank tracking code form
3. Enable tracking of the events (in the next step, you will define the scope of tracked events). In the **Page tracking** section: 1. Set the **Enabled** option to **Yes**. 2. Paste the tracking code you added in the [Add the tracking code](#add-the-tracking-code) procedure. 3. **Recommended**: Set the **Open Graph** option to **Yes**. **Result**: Magento sends the following OG tags to Synerise: - `product:retailer_part_no` which is the SKU of the item, - `product:original_price:amount` which is the original price (before discounts, if any) - `product:price:amount` which is the current price of the item - `product:category` which is the category of the item
You can switch off this option, however if the page misses `product:retailer_part_no`, you won't be able to track visits to product pages.
Magento Synerise plugin Page tracking section with tracking code and Open Graph settings
A blank tracking code form
3. Select the scope of tracked events. In the **Event tracking** section: 1. Set the **Enabled** option to **Yes**. 2. Select the events (`command + click` or `ctrl + click`) that will be tracked by Synerise and available in the [customers' profiles](/docs/crm/crm-profile). You can choose from the following events:
We recommend selecting all the events.
| Event | Description | Event name in Synerise | |------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------| | Customer login | This event is generated when a customer logs in to
their account on your website. | client.login | | Customer logout | This event is generated when a customer logs out from
their account on your website. | client.logout | | Customer account edited | This event is generated when a customer makes changes to their account (for example, updates information about birthday, location, and so on). | client.updateData | | Customer registration | This event is generated when a customer creates an account on your website. | client.register | | Customer places order | This event is generated when a customer makes a purchase. | transaction.charge /
product.buy | | Customer adds product to cart | This event is generated when a customer adds an item
to the cart. | product.addToCart | | Customer removed product from cart | This event is generated when a customer removes
an item from the cart. | product.removeFromCart |
Magento Synerise plugin Event tracking section with list of trackable customer events
A blank tracking code form
4. Synchronize additional data apart from those which are sent to Synerise through customer actions (synchronization is triggered by cron jobs). Go to the **Synchronization** section.
Synchronization is disabled by default. Before enabling, verify the configuration of each item attribute to make sure it contains all data you want to include.
#### Data Synchronization This subsection allows you to synchronize the data collected prior to integration. On the first run, the last item ID of each data type (before the integration) is recorded to mark the end of the data sets that need to be synchronized. You can also reset last ID to current one manually from integration dashboard, using the **Send additional** option. This process is also responsible for resending the full data sets, which can be triggered through integration dashboard by using the **Resend all items** option in **Magento > Marketing > Synerise > Dashboard**. 1. In the **Data Synchronization** subsection, set the **Enabled** option to **Yes**. 2. In the **Cron expression** field, enter the time of the synchronization in the form of the cron expression. 3. In the **Page size** field, enter the size of a batch of items that will be sent in a single request.
Extending the default size might speed up synchronization process, but it also means heavier database usage.
Magento Synerise plugin Data Synchronization section with cron expression and page size settings
A blank tracking code form
#### Update Synchronization This subsection allows you to synchronize ongoing item updates. It is based on the item queues, which are built by data update events (such as `product.updated` event).
It is highly recommended to keep update synchronization process running, while the data synchronization can be disabled when unused.
1. Set the **Data synchronization** option to **Yes**. 2. In the **Cron expression** field, enter the time of the synchronization in the form of the cron expression. 3. In the **Page size** field, enter the size of a batch of items that will be sent in a single request.
Extending the default size might speed up synchronization process, but it also means heavier database usage.
Magento Synerise plugin Update Synchronization section with cron expression settings
A blank tracking code form
#### Products In this subsection, select the product attributes to be synchronized. Product attributes in Magento are qualities assigned to items. You can send to Synerise all attributes, including those which are custom. The list excludes the required attributes which are sent by default: - itemId (sku), - price, - productUrl, - parendId, - deleted, - category, - additionalCategories, - image,
Before enabling, verify the configuration of each item attribute to make sure you synchronize all necessary attributes for you.
1. Set the **Data synchronization** option to **Yes**. The frequency of sending data is predefined in the **Update Synchronization** subsection. 2. Select the attributes of items (`command + click` or `ctrl + click`) which will be imported to the [catalogs](/docs/assets/catalogs) in Synerise. **Result**: The catalog will be created automatically and it will be updated.
The changes of attribute selection will apply only for those items that haven't been sent to Synerise yet. To apply the changes to the whole item catalog, go to **Marketing > Synerise > Dashboard** and use **Resend all items** option.
Magento Synerise plugin Products synchronization section for selecting item attributes
A blank tracking code form
#### Customers In this subsection, select the customer attributes to be synchronized. Customer attributes in Magento are qualities assigned to customers. You can send to Synerise all attributes, including those which are custom. The list excludes required attributes which are sent by default: - email, - entity_id, - firstname, - lastname,
Before enabling, verify the configuration of each item attribute to make sure you synchronize all necessary attributes for you.
1. Set the **Data synchronization** option to **Yes**. The frequency of sending data is predefined in the **Update Synchronization** subsection. 2. Select the custom attributes of customers (`command + click` or `ctrl + click`) which will be imported to Synerise and available in [Profile attributes](/docs/crm/customer-properties).
The changes of attribute selection will apply only for customers who haven't been sent to Synerise yet. To apply the changes to all customers go to **Marketing > Synerise > Dashboard** and use **Resend all items** option.
Magento Synerise plugin Customers synchronization section for selecting customer attributes
A blank tracking code form
#### Orders In this subsection, you can enable or disable sending information about orders to Synerise. This information in Synerise is stored as `product.buy`/`transaction.charge` events on the profile of a customer who placed the order. 1. Set the **Data synchronization** option to **Yes**.
Magento Synerise plugin Orders synchronization section
A blank tracking code form
#### Subscribers In this subsection, you can enable or disable sending information about the value of the subscription attribute of a customer. This information in Synerise is stored on the profile of a customer. 1. Set the **Data synchronization** option to **Yes**.
Magento Synerise plugin Subscribers synchronization section
A blank tracking code form
# Integration for stores using Store Framework This guide contains instructions on integrating Synerise with the store built on the Store Framework. If you are unsure which framework is used in your project, become familiar with the [VTEX documentation](https://developers.vtex.com/docs/guides/getting-started-with-storefront-solutions). You can use the Synerise plugin in your eshop built on VTEX IO ecommerce platform to transmit the data from your website to Synerise, so you can utilize it for analyses and your business campaigns.
If there are no requests in 60 minutes, the service deactivates. The first request that re-activates the service after 60 minutes of inactivity is automatically lost.
### Plugin scope --- - Tracking transaction, cart, and customer activity events - Tracking the checkout page - Identifying customers after they filled out the form - Synchronizing data between Synerise and VTEX through webhooks: creating, updating, and removing accounts; marketing consent changes - Implementing a service worker for displaying web push notifications - Exporting historical data about customers and orders from VTEX to Synerise. ## Prerequisites --- 1. You must be granted user permissions to access API key section and add the key in Synerise. 2. In VTEX, create a workspace with products you want to display in your shop. ## Configuration in Synerise ### Generate the tracking code --- To enable tracking the customer activity on your website, create a tracking code which you will implement into your store later in the process. 1. In Synerise, go to **Settings > Tracking codes** and generate a tracking code dedicated to **VTEX**. Full instruction on generating tracking codes is available [here](/developers/web/installation-and-configuration).
Generating tracking code in Synerise
Generating tracking code in Synerise
**Result**: Synerise generates 2 tracking codes. 2. Copy the generated tracking codes and save them in the notepad. One of them will be needed for [Enabling data exchange between Synerise and VTEX](#enable-data-exchange-between-synerise-and-vtex) and the other will be needed for [Enabling Synerise Web SDK on the checkout page](#enable-synerise-web-sdk-on-the-checkout-page)
Tracking codes generated for VTEX domain
Tracking codes generated for VTEX domain
### Create an API key --- Create an API key with specific permissions (the list is available in the instruction below), which will enable authorization between Synerise and VTEX. 1. In Synerise, go to **Settings > API Keys > Add API key**. 2. On the pop-up: 1. Select **Workspace**. 2. Enter the name of the API key (it will be visible on the list of API keys). 3. Optionally, in the **Description** field, you can provide a brief explanation for the purpose of the key. This will help you and your team in identifying the key promptly on the API key list.
Adding a new API key for the Vtex integration
Adding a new API key for the VTEX integration
3. Confirm by clicking **Save**. 4. Find the key on the top of API key list and click **Permissions**. 5. On the pop-up, select all the permissions listed below to enable complete synchronization of data between Synerise and VTEX:
Click to expand the list of permissions
  • CATALOG:
    • CATALOGS_CATALOG_CREATE
    • CATALOGS_CATALOG_READ
    • CATALOGS_ITEM_BATCH_CATALOG_CREATE
  • CLIENT:
    • API_BATCH_CLIENT_CREATE
    • API_CLIENT_CREATE
  • EVENTS:
    • API_ADDED_TO_CART_EVENTS_CREATE
    • API_ADDED_TO_FAVORITES_EVENTS_CREATE
    • API_CUSTOM_EVENTS_CREATE
    • API_LOGGED_IN_EVENTS_CREATE
    • API_LOGGED_OUT_EVENTS_CREATE
    • API_REGISTERED_EVENTS_CREATE
    • API_REMOVED_FROM_CART_EVENTS_CREATE
  • INTEGRATIONS:
    • IMPORT_FEEDER_LOGS_INTEGRATIONS_CREATE
  • TRACKER
    • TRACKER_CREATE
  • TRANSACTION
    • API_BATCH_TRANSACTION_CREATE
    • API_TRANSACTION_CREATE
  • VTEX
    • IMPORT_FEEDER_INTEGRATION_VTEX_CREATE
    • IMPORT_FEEDER_INTEGRATION_VTEX_READ
    • IMPORT_FEEDER_INTEGRATION_VTEX_DELETE
    • IMPORT_FEEDER_INTEGRATION_VTEX_UPDATE
    • IMPORT_FEEDER_LOGS_INTEGRATIONS_CREATE
    • IMPORT_FEEDER_SYNCHRONIZATIONS_VTEX_READ
    • IMPORT_FEEDER_SYNCHRONIZATION_VTEX_CREATE
    • IMPORT_FEEDER_SYNCHRONIZATION_VTEX_DELETE
6. Confirm by clicking **Apply settings**. 5. Close the pop-up with permissions. 8. On the **General** section, click **Show**. 9. Copy the API key into the notepad.
Details of the API key
Details of the API key
### Enable updating profile information with specific events --- To prevent duplicating customers' accounts when they become identified, make it possible for specific events to update profile information without JWT authorization. 1. Go to **Data Modeling Hub > Events**. 2. Select the **JS SDK event settings** tab. 3. In the **Events without JWT allowed for updating profiles' information** section, click **Define**. 4. From the **Select events** dropdown list, select [form.submit](/docs/assets/events/event-reference/web-and-app#formsubmit) 5. Confirm by clicking **Add**.
Events without JWT section in Data Modeling Hub showing the form.submit event configured to allow profile updates without JWT authorization
Configuration of the section
6. Confirm the settings by clicking **Apply**. ### Prepare tracking events on the checkout page --- In this part of the process, you will use a ready-to-use [dynamic content](/docs/campaign/dynamiccontent/creating-dynamic-content) template available in the Synerise platform. This template includes JavaScript that's inserted into the checkout page to identify customers when they fill out a form and to track events on the checkout page. By default, the dynamic content from this template doesn't include any elements visible on the site.
This dynamic content starts working after you enable Synerise SDK on the checkout page. This is described later in this article.
1. Go to **Experience Hub > Dynamic Content > Create new**. 2. Enter the name of the dynamic content. 3. As the dynamic content type, select **Insert object**. 4. In the **Audience** section, select the **Everyone** tab. 5. In the **Content** section, set the **CSS Selector** option to **After**. 2. In the text field, enter `.snrs-modal-wrapper` This sets the dynamic content to be injected after one of the elements created when Synerise JS SDK is initialized. If you need to, you can set a different selector. 7. Click **Create message**. 8. Select **Script templates**. 9. From the Script templates library, select **VTEX - tracking events on checkout page**. The template is ready to be used, it contains all necessary scripts that track events and identify customers when they fill out the form. 10. If needed, you can make changes to the templates.
You can learn more how to edit a template in a dynamic content template builder [here](/docs/campaign/dynamiccontent/creating-dynamic-content-templates/dynamic-content-template-builder#editing-a-ready-made-template).
1. In the upper right corner, click **Use in communication**. 2. Confirm the settings in the **Content** section by clicking **Apply**. 3. In the **Schedule** section, select **Display immediately** and click **Apply**. If needed, you can [declare the date when the dynamic content will start and end being active](/docs/campaign/dynamiccontent/creating-dynamic-content/creating-dynamic-content#schedule-dynamic-content) 4. In the **Display settings** section: 1. Open **Advanced options**. 2. In **Page targeting**, click **Others**. 3. In **Display on pages**, click **Add rule**. 4. Select **Page with URL** and enter the URL of your checkout page. 5. Confirm the settings by clicking **Apply**. 5. Optionally, in the **UTM & URL parameters** section, [define these parameters](/docs/campaign/dynamiccontent/creating-dynamic-content/creating-dynamic-content#define-the-utm-parameters). 6. In the upper right corner, click **Activate**. ### Setting up web push notifications --- If you want to enable web push notifications: 1. [Configure web push notifications](/docs/campaign/Webpush/configuring-web-push). In the **Path to the service worker** field, if you will use only Synerise worker, enter `/synerise/snr-sw.js`. 2. [Configure two-step agreement form](/docs/campaign/Webpush/two-step-agreement-form). ## Configuration in VTEX ### Install the Synerise plugin --- Install the application through the VTEX console: 1. Download the VTEX console. 2. In the console, log on to your VTEX workspace. 3. Install the Synerise application with the following command: `vtex install synerisepartnerar.synerise-integration` **Result**: A native Synerise integration appears in the **Apps** section in the menu and you will be redirected to the **Configuration** section automatically.
Synerise integration in the menu in the VTEX panel
Synerise integration in the menu in the VTEX panel
### Select the Store Framework plugin configuration --- In this part of the process, depending on the framework you use, select the configuration scenario. 1. In VTEX, go to **Apps > (Synerise) Configuration**. 2. In the **Plugin configuration for Store Framework** section, click **Start configuration**.
Selection of the configuration scenario
Selection of the configuration scenario
### Enable data exchange between Synerise and VTEX --- This is the first part of the integration. To initiate the exchange of data between Synerise and VTEX, you will provide the workspace API key, paste the [tracking code you generated](#generate-the-tracking-code) and declare the scope of customer activities and attributes you want to send to Synerise.
Blank configuration form for enabling data exchange between Synerise and VTEX
Blank configuration form for enabling data exchange between Synerise and VTEX
1. In the **Synerise Workspace API key** field, enter the Synerise API key which you created in ["Creating an API Key](#create-an-api-key). 2. If you want to use basic authentication, in the **Synerise API GUID (Optional)** field, enter GUID which you can locate in Synerise **Settings > API keys > Basic workspace authentication**. Filling out this field results in setting GUID to be a password and Workspace API key a login for basic authentication.
Read more about [Basic authentication](/developers/api/api-authorization/workspace-login#basic-api-authentication-with-api-keys).
3. From the **Synerise API host** list, select the API host URL. Depending on the cloud where your Synerise workspace is hosted: - for `https://api.synerise.com`, use **Microsoft Azure** - for `https://api.geb.synerise.com`, use **Google Cloud Platform**
If you don't know where your workspace is hosted, you can check by looking at the link you're using to access the Synerise platform. - If it's `https://app.synerise.com/login`, the workspace is hosted on Microsoft Azure - If it's `https://app.azu.synerise.com/login`, the workspace is hosted on Microsoft Azure US - If it's `https://app.geb.synerise.com/login`, the workspace is hosted on Google Cloud Platform
4. Click **Next**. ### Enable Synerise Web SDK on the store's site --- In this part of the configuration, you will enable tracking the customer activity and using other Web SDK features in your store (excluding the checkout page) by pasting the **Tracking code for VTEX store page** you generated in ["Generating the tracking code"](#generate-the-tracking-code).
To find out how to enable tracking on the checkout page, read ["Enable Synerise Web SDK on the checkout page"](#enable-synerise-web-sdk-on-the-checkout-page).
Blank configuration form for enabling Synerise Web SDK on the store site
Blank configuration form for enabling Synerise Web SDK on the store site
2. In the **Tracker code** field, paste the **Tracking code for the VTEX store page** tracking code you created in [this part of the process](#generate-the-tracking-code).
Tracking codes generated for VTEX domain
Tracking codes generated for VTEX domain
1. Click **Next**. #### Define additional settings --- In this part of the configuration, you will: - [enable tracking of the events](#enabling-tracking-of-backend-events) related to customers and products - [select order statuses which will overwrite transaction information](#selecting-order-statuses-for-overwriting-transaction-events) - [select customer attributes to be added to the transaction event metadata](#selecting-customer-attributes-added-to-orders) - [select additional customer attributes to send to Synerise](#selecting-additional-customer-attributes) - [setting up web push notifications](#setting-up-web-push-notifications)
The example configuration in the Additional settings section
The example configuration in the Additional settings section
#### Enabling tracking of backend events --- - From **Customer/product tracking events**, select the events you want to track and send to Synerise. - If you want to send transaction updates to Synerise from [subaccounts](https://help.vtex.com/tutorial/managing-a-multistore) in which a transaction occurs, [enable sending transaction updates for sub-accounts](#enable-sending-transaction-updates-for-sub-accounts). - The events connected with creating, registering, and updating customers will be configured [later in the process](#enable-sending-customer-data). | Event name in VTEX | Description | Event in Synerise | |------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------| | Client login | This event is generated when a customer logs in to their account on your website. | client.login
See details in [Event reference](/docs/assets/events/event-reference/web-and-app#clientlogin) | | Client logout | This event is generated when a customer logs out from their account on your website. | client.logout
See details in [Event reference](/docs/assets/events/event-reference/web-and-app#clientlogout) | | Add to cart | This event is generated when a customer adds an item to the cart. | product.addToCart
See details in [Event reference](/docs/assets/events/event-reference/items#productaddtocart) | | Remove from cart | This event is generated when a customer removes an item from the cart. | product.removeFromCart
See details in [Event reference](/docs/assets/events/event-reference/items#productremovefromcart) | | Cart status | This event is generated when the customer changes the contents of the cart. | cart.status
See details in [Event reference](/docs/assets/events/event-reference/items#cartstatus) | | Newsletter subscription | This event is generated when a customer enables the email marketing agreement. | marketingAgreement.turnOn
See details in [Event reference](/docs/assets/events/event-reference/email#marketingagreementturnon) | | Add to favorite | This event is generated when a customer adds an item to wishlist. | product.addToFavorite
See details in [Event reference](/docs/assets/events/event-reference/items#productaddtofavorite) | | Remove from favorite | This event is generated when a customer removes an item from wishlist. | product.removeFromFavorite
See details in [Event reference](/docs/assets/events/event-reference/items#productremovefromfavorite) | | Page visit | This event is generated when a customer visits any page within the tracked domain. | page.visit
See details in [Event reference](/docs/assets/events/event-reference/web-and-app#pagevisit) | | Product review | This is a custom event; it is generated when a logged-in customer submits a product review.
If VTEX allows syncing reviews from anonymous customers, no events will be generated in Synerise due to the lack of customer identifiers needed to match reviews with customers.
| product.addReview
See details in [Event reference](/docs/assets/events/event-reference/items#productaddreview) | #### Selecting order statuses for overwriting transaction events ---
If you want to send transaction updates to Synerise from [subaccounts](https://help.vtex.com/tutorial/managing-a-multistore) in which a transaction occurs, [enable sending transaction updates for sub-accounts](#enable-sending-transaction-updates-for-sub-accounts).
From the **Order statuses for data updates** dropdown list, select the status or statuses that will update the transaction information in Synerise. As a result, the existing [transaction.charge](/docs/assets/events/event-reference/items#transactioncharge) and [product.buy](/docs/assets/events/event-reference/items#productbuy) events generated by that order will be updated. Refer to the tables below to see which parameters are overwritten: - product.buy | Event parameter | Explanation | |-----------------|----------------------------------------------------------------------------------------------| | `$quantity` | - When an item is removed, the value of the parameter is set to `0`.
- When the item quantity changes, the value changes accordingly. | | `canceled` | This parameter is added only when an item is removed. The value is set to `true`. | - transaction.charge | event parameter | description | |-----------------|------------------------------------------------------------------------------------------------------------------------------------| | `$revenue` | The total value of the transaction may change (for example, as a result of including promotions or removal of items from the order). | | `status` | Contains the name of the order status which triggered overwriting this event. | #### Selecting customer attributes added to orders --- In the **Customer attributes added to orders** field, you can add customer attributes which will be added to the metadata of the transaction events. #### Selecting additional customer attributes --- In the **Additional customer attributes** field, select the VTEX attributes which will be sent to the Synerise. These attributes will be saved in the customer's profile.
Customer attributes will be saved on the card of a customer in the customer information panel
Customer attributes will be saved on the card of a customer in the customer information panel in Synerise
#### Configuring web push notifications --- If you want to implement web push notifications in your shop, you must first configure them in Synerise. You can find instructions how to do it in ["Setting up web push notifications" section](#setting-up-web-push-notifications) in this document. If you already have done it, perform the steps below: 2. In the **Web push notification configuration**, enter the contents of the `snr-sw.js` file you downloaded [while setting up web push notifications in Synerise](#setting-up-web-push-notifications). 3. In the upper right corner, click **Save**. **Result**: You are redirected to the summary of the plugin configuration. #### Review summary of configuration At this stage, you are already tracking the activity of your customers on your website and these data are sent to Synerise, however tracking on the checkout page is still disabled. You can find instructions how enable it in ["Enable Synerise Web SDK on the checkout page" section](#enable-synerise-web-sdk-on-the-checkout-page) in this document.
After you enable tracking on the checkout page, the warning from the configuration summary will not disappear. You have to close it yourself.
Summary of the settings in the Configuration section
Summary of the settings in the Configuration section
### Synchronizing VTEX item feed with the Synerise item feed --- Synchronizing feeds lets you keep your product base up to date both in VTEX and Synerise. You can [synchronize VTEX item feed changes in Synerise](/docs/settings/tool/vtex/synchronizing-item-feed#synchronize-vtex-item-feed-changes-to-synerise-in-synerise). For all available synchronization methods, see [Synchronizing item feed](/docs/settings/tool/vtex/synchronizing-item-feed). ### Historical data synchronization If you want to export historical information about orders and customers from VTEX to Synerise, you can use the _Synchronization_ feature. It lets Synerise access the VTEX database and fetch data about customers and transactions. Some customer attributes are sent by default. You can add custom attributes. For details, see ["Attributes sent to Synerise"](#attributes-sent-to-synerise).
If the phone number or email are incorrect, the profile is not created or updated at all. If multiple profiles are created/updated as part synchronizing historical data, only the profiles with errors are skipped.

The phone number must match the following regular expression: ```regex (^\+[0-9 \-()/]{6,19}$)|(^[0-9 \-()/]{6,20}$) ``` The email must match the following regular expression: ```regex ^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$ ```
After exporting data to Synerise, you can use it to train AI models, build analytics, create communication campaigns, and more. Synchronization is a one-time transfer, usually used for historical data. Continuous connection (event tracking, transaction tracking, customer data updates) for exchanging new data is achieved by completing the integration as described in ["Pre-configuration in Synerise"](#configuration-in-synerise) and ["Configuration in VTEX"](#configuration-in-vtex). Each exported transaction is saved in Synerise as a [`transaction.charge` event](/docs/assets/events/event-reference/items#transactioncharge) and a number of related [`product.buy` events](/docs/assets/events/event-reference/items#productbuy). Exported customers are saved as profiles. If a transaction or profile already exists in Synerise and the synchronization contains new data, the transaction or profile is updated. #### Create a role You must first create a role which allows for sending historical data to Synerise. 1. In your VTEX workspace, create a role with a set of permissions required for historical imports: 1. Go to **Account settings > User roles > New role**. 2. Select the following permissions for **Product**: - **OMS** - Notify payment - Notify invoice - View order - Notify refund - Order feed subscription - View store sales stats - Feed v3 and Hook Admin - Feed v3 and Hook view only - Subscription view only - Subscription metrics and reports - List Orders - **Dynamic Storage** - Full access to all documents - Insert or update document (not remove) - List data entity - Create data entity - Remove data entity - View data entity details - **CMS** - CMS GraphQL API - **Pricing** - Read prices - Read trade policy configurations - **Search** - General Settings #### Schedule synchronization 1. In your VTEX workspace, go to **Apps > (Synerise) Access to VTEX**. 2. If this is the first time that you're accessing this feature, you are asked to allow Synerise access to VTEX API. To do so: 1. In a new browser tab, open your VTEX admin panel. 2. Generate an internal application key and token as described in [VTEX documentation](https://help.vtex.com/docs/tutorials/api-keys#generating-internal-application-keys).
When you generate the token, copy it immediately. It won't be accessible later.
3. Assign [the role you created](#create-a-role) to the VTEX API key. 4. Paste values from step 2 in **VTEX API key** and **VTEX app token**, respectively. 3. Return to the tab where you need to enter the app key and token in the Synerise plugin. 4. Paste the key and token into the corresponding fields. 5. Click **Save**. 3. If you want to synchronize marketing consents: 1. Enable the **marketing consent** toggle. This works in both directions; any changes in marketing consent in either Synerise or VTEX will be synchronized. 2. To create a new user who doesn't exist in VTEX database, but exists already in Synerise, select the **Adding new users while synchronizing marketing consents** checkbox. 4. Select the **Synchronization** tab. 3. Click **New synchronization**. There is a limit of 2 active synchronizations. 4. In the pop-up that opens: 1. Select the scope of data to be exported: - **Customer (Creation date)** - Exports data about customers whose accounts were created in a specific time range (you will select the dates in the next step). - **Customer (Last updated date)** - Exports data about customers whose accounts were updated in a specific time range (you will select the dates in the next step). - **Orders** - Exports data about transactions and creates/updates `transaction.charge` and `product.buy` events. 2. Select the date range for the export. For example, if in the previous step you selected **Customer (Creation date)**, the data of customers whose profiles were created within the chosen date range will be exported.
New synchronization dialog in the Synerise VTEX plugin showing data scope and date range fields for scheduling a historical data export to VTEX
Scheduling synchronization
3. Click **Save**. **Result**: The transfer starts. You can check its progress in the **Status** column on the list of synchronizations. ## Optional ### Enable sending transaction updates for sub-accounts --- If you use [multistore](https://help.vtex.com/docs/tutorials/managing-a-multistore) and you want to send transaction updates to Synerise from each subaccount, follow these instructions: 1. Go to the main VTEX account. 2. Go to **Apps > App Management**. 2. Search for **Orders Broadcast IO** and open its settings 4. Select the **Notify Subaccounts** checkbox. 5. Click **Save**. ### Enable sending customer data --- In this part of the process, you will: 1. [Configure the attributes to send (or leave them at default)](#attributes-sent-to-synerise). 2. Enable sending data to Synerise when a customer account is: 1. [created](#customer-created-an-account), 4. [updated](#customer-updated-the-account), 5. [deleted](#customer-account-has-been-deleted). This process involves creating webhooks.
If you store marketing agreements outside Synerise, it is necessary to configure a separate webhook for updating the status of these agreements in the database where you keep them.
#### Attributes sent to Synerise The following table lists the customer data that is sent to Synerise. The same data is sent when [synchronizing historical data](#historical-data-synchronization).
If the phone number or email are incorrect, the profile is not created or updated at all. If multiple profiles are created/updated as part synchronizing historical data, only the profiles with errors are skipped.

The phone number must match the following regular expression: ```regex (^\+[0-9 \-()/]{6,19}$)|(^[0-9 \-()/]{6,20}$) ``` The email must match the following regular expression: ```regex ^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$ ```
| Property in VTEX | Property in Synerise | | --- | --- | | `email` | `email` | | `firstName` | `firstName` | | `lastName` | `lastName` | | `userId` | `customId` | | 1. `businessPhone`
2. `phone`
3. `homePhone` | `phone`1 | | `isNewsletterOptIn` | `agreements.email` | | `birthDate` | `birthDate` | | `gender` | `sex` | | `profilePicture` | `avatarUrl` | | `country` | `countryCode` | | `state` | `province` | | `city` | `city` | | `postalCode` | `zipCode` | | `street` + `number` + `complement` | `address` | | other attributes | Additional attributes that you add. See ["Sending custom attributes"](#sending-custom-attributes) | 1The numbers are checked in the listed order. The first non-empty one is saved in Synerise. ##### Sending custom attributes If you want to send additional customer attributes: 1. In your VTEX workspace, go to **Stores > (Synerise) Settings**. 2. Open the **Data** tab. 3. In the **Customer attributes** selector, from the dropdown, select the additional attributes that you want to send to Synerise. 4. Click **Save settings**. #### Customer created an account 1. In the VTEX workspace, go to **Store Settings > Master Data**. You can find the **Master Data** section using the search box. 2. Click the **Advanced settings** tab. 3. On the left **Settings** menu, select **Data structure**. **Result**: You are redirected to the following URL: `https://{account}.ds.vtexcrm.com.br/`; account is replaced with the name of your store. 2. Select the method of authentication. 3. After you have been authenticated, select the **Trigger** tab. 1. From the **Action** dropdown list, select **Send an HTTP request**. 1. In the **Name** field, enter a meaningful name of the trigger (for example, "Create customer"). 2. From the **Data Entity** dropdown list, select **Customer**. 3. Set the **Status** option to **Enabled**. 4. In the **Rules** tab, from the **Trigger rule** dropdown list, select **A record is created**. 5. In the **Schedule** tab, select **Run ASAP**. 6. In the **If Positive** tab: 1. In the **URL** field, type the endpoint: `https://yourshopsubdomain.myvtex.com/_v/private/synerise/triggers/customer` Replace `yourshopsubdomain` with your shop's subdomain. 2. As the method, select **POST**. 3. In the headers, add `x-synerise-api-key` with your API key as the value. 4. In the request body, enter the following code:
{
          "id":"{!id}"
       }
where `{!id}` will automatically be replaced with the ID of the record. 7. Click **Save**. #### Customer updated the account 1. In the VTEX workspace, go to **Store Settings > Master Data**. You can find the **Master Data** section using the search box. 2. Click the **Advanced settings** tab. 3. On the left **Settings** menu, select **Data structure**. **Result**: You are redirected to the following URL: `https://{account}.ds.vtexcrm.com.br/`; account is replaced with the name of your store. 2. Select the method of authentication. 3. After you have been authenticated, select the **Trigger** tab. 1. From the **Action** dropdown list, select **Send an HTTP request**. 1. In the **Name** field, enter a meaningful name of the trigger (for example, "Update customer"). 2. From the **Data Entity** dropdown list, select **Customer**. 3. Set the **Status** option to **Enabled**. 4. In the **Rules** tab, from the **Trigger rule** dropdown list, select **A record is changed**. 5. In the **Schedule** tab, select **Run ASAP**. 6. In the **If Positive** tab: 1. In the **URL** field, type the endpoint: `https://yourshopsubdomain.myvtex.com/_v/private/synerise/triggers/customer` Replace `yourshopsubdomain` with your shop's subdomain. 2. As the method, select **PATCH**. 3. In the headers, enter the `x-synerise-api-key` parameters and as a value your API key. 4. In the request body, enter the following code:
{
          "id":"{!id}"
       }
where `{!id}` will automatically be replaced with the ID of the record. 7. Click **Save**. #### Customer account has been deleted 1. In the VTEX workspace, go to **Store Settings > Master Data**. You can find the **Master Data** section using the search box. 2. Click the **Advanced settings** tab. 3. On the left **Settings** menu, select **Data structure**. **Result**: You are redirected to the following URL: `https://{account}.ds.vtexcrm.com.br/`; account is replaced with the name of your store. 2. Select the method of authentication. 3. After you have been authenticated, select the **Trigger** tab. 1. From the **Action** dropdown list, select **Send an HTTP request**. 1. In the **Name** field, enter a meaningful name of the trigger (for example, "Delete customer"). 2. From the **Data Entity** dropdown list, select **Customer**. 3. Set the **Status** option to **Enabled**. 4. In the **Rules** tab, from the **Trigger rule** dropdown list, select **A record is deleted**. 5. In the **Schedule** tab, select **Run ASAP**. 6. In the **If Positive** tab: 1. In the **URL** field, type the endpoint: `https://yourshopsubdomain.myvtex.com/_v/private/synerise/triggers/customer` Replace `yourshopsubdomain` with your shop's subdomain. 2. As the method, select **DELETE**. 3. In the headers, enter the `x-synerise-api-key` parameters and as a value your API key. 4. In the request body, enter the following code:
{
          "email":"{!email}",
          "userId": "{!userId}"
       }
where `{!email}` and `{!userId}` will automatically be replaced with the email of the customer and the ID of a customer respectively. In Synerise, `userId` is the equivalent of `customId`. 7. Click **Save**. ### Enable Synerise Web SDK on the checkout page --- The checkout page in VTEX requires a custom script to enable Synerise tracker and SDK. You can implement it in ***one*** of the following ways (the choice of the method depends on your checkout page configuration in VTEX): - [Standard checkout configured in VTEX settings](#standard-checkout-configured-in-vtex-settings) - [Custom UI checkout](#custom-ui-checkout) - [Checkout UI Settings](#checkout-ui-settings) #### Standard checkout configured in VTEX settings 1. In your VTEX workspace, click the gear icon in the lower left corner and go to **Checkout**. 2. Next to the name of the store that you are configuring, click the gear icon. 3. On the page that opens, go to the **Code** tab. 4. From the **Files** list, open **checkout6-custom.js** 5. In the file, add the **Tracking code for the VTEX checkout page** tracking code you created in ["Generating the tracking code" section](#generate-the-tracking-code).
Don't add the `customPageVisit` and `dynamicContent` parameters in this tracking code!
Tracking code added to the checkout page scripts
Tracking code added to the checkout page scripts
6. Click **Save**. **Result**: Synerise SDK is added to the checkout page and the [dynamic content used to track events on the checkout page](#prepare-tracking-events-on-the-checkout-page) becomes enabled. #### Custom UI checkout 1. Follow the instructions in the [VTEX documentation](https://developers.vtex.com/docs/apps/vtex.checkout-ui-custom). 2. While performing the procedure described in the documentation, in the JavaScript tab, add the Synerise tracking code from ["Generating the tracking code" section](#generate-the-tracking-code). #### Checkout UI Settings 1. Follow the instructions in the [VTEX documentation](https://developers.vtex.com/docs/apps/vtex.checkout-ui-settings) described in the Configuration section. 2. While performing the procedure described in the documentation, in the `checkout-ui-custom` folder, create a `JS` file with the Synerise tracking code from ["Generating the tracking code" section](#generate-the-tracking-code). ## Uninstalling the Synerise plugin --- The process of uninstalling the Synerise plugin consists of the following steps: 1. [Uninstall the plugin](#uninstall-the-plugin) through administration panel or through the console. 2. Optionally, [remove the Synerise application](#remove-the-synerise-application-from-orderform) from the settings applied to [orderForm](https://developers.vtex.com/docs/guides/orderform-fields) through API. ### Uninstall the plugin You can do it in one of the following ways:
Through the administration panel - click to expand the instruction
  1. In the administration panel, select Apps > App Management.

  2. On the list of installed apps, locate the Synerise Integration plugin.
    Results:

    The list of installed apps in VTEX admin panel
    The list of installed apps in VTEX administration panel
  3. On the Synerise Integration plugin, click Settings.

    Settings of the plugin
    Settings of the Synerise Integration plugin
  4. Click Delete.
    Result: A pop-up appears.

  5. On the pop-up, confirm the action by clicking Delete.

Through the console - click to expand instruction
  1. Open the console through the VTEX Toolbelt.
  2. Execute the following command: vtex uninstall synerisepartnerar.synerise-integration
### Remove the Synerise application from orderForm Apart from removing the integration, you can edit the order form configuration to prevent sending data that won't be used anymore. 1. Get the current configuration with a GET API request to `https://{accountName}.vtexcommercestable.com.br/api/checkout/pvt/configuration/orderForm` - Replace `{account}` with the name of your account - `vtexcommercestable` is the name of the environment, leave it at default
You can check the documentation of this endpoint in [VTEX API reference](https://developers.vtex.com/docs/api-reference/checkout-api#get-/api/checkout/pvt/configuration/orderForm).
2. Copy the response into a text editor and delete the highlighted lines:
{
       "paymentConfiguration": {
           "requiresAuthenticationForPreAuthorizedPaymentOption": false,
           "allowInstallmentsMerge": null,
           "blockPaymentSession": null,
           "paymentSystemToCheckFirstInstallment": null,
           "defaultPaymentSystemToApplyOnUserOrderForm": null,
           "alwaysShowMarketplacePaymentSystems": false
       },
       "taxConfiguration": null,
       "minimumQuantityAccumulatedForItems": 1,
       "decimalDigitsPrecision": 2,
       "minimumValueAccumulated": null,
       "apps": [
           {
               "fields": [
                   "snrs_params",
                   "uuid",
                   "source"
               ],
               "id": "synerise",
               "major": 1
           },
           {
               "fields": [
                   "cartEtag"
               ],
               "id": "faststore",
               "major": 1
           }
       ],
       "allowMultipleDeliveries": true,
       "allowManualPrice": null,
       "savePersonalDataAsOptIn": false,
       "maxNumberOfWhiteLabelSellers": null,
       "recaptchaValidation": "vtexcriteria",
       "recaptchaMinScore": null,
       "recaptchaKeys": null,
       "maskStateOnAddress": true,
       "enableSecureCookies": true,
       "useOwnershipCookie": null,
       "ignoreProfileData": null,
       "useIndividualShippingEstimates": false
   }
3. Update the configuration by sending the edited response as the body of a POST request to the same URL: `https://{accountName}.vtexcommercestable.com.br/api/checkout/pvt/configuration/orderForm` # Huawei This article describes the process of integrating Synerise in your mobile application based on HarmonyOS (Huawei). This process contains the following stages: 1. [Enabling Huawei integration in Synerise](#enabling-huawei-integration-in-synerise) 2. [Implementing Synerise in the mobile app](#implementing-synerise-in-the-mobile-app) ## Requirements --- Obtain the following information from Huwawei Cloud Console and Huawei AppGallery Connect: | Value | What is it? | Where to find it? | |---------------|------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | App ID | The unique identifier of the app. | In Huawei AppGallery Connect, in the **My apps** section. | | Project ID | The ID of the cloud service resource collection assigned while creating a project in Huawei Cloud Console. | In Huawei AppGallery connect, in the **My Credentials** section. To access this section, hover over your username in the upper-right corner and from the dropdown list, select **My Credentials**. | | Client secret | The **OAuth 2.0** client secret. | In Huawei AppGallery Connect, in **My projects > General information** tab **> App information** section, under the Client ID. This is **NOT the same secret** as in the "Project information" section. | ## Enabling Huawei integration in Synerise --- As the first part of the process, enable Huawei integration in the Synerise platform. 1. Go to Settings icon**Settings > Apps & Services**. 2. In the list of integrations, click **Huawei**. **Result**: The Huawei settings expand. 3. Click **Add connection**. 4. Switch the **Enable integration** toggle on. 2. Fill in the following fields with the values from Huawei AppGallery connect: - in the **App ID** field, enter the application identifier. - in the **Project ID** field, enter the ID of the project. - in the **Client secret** field, enter the authorization key. ## Implementing Synerise in the mobile app --- As the next part of the process, integrate Synerise in your mobile application by performing the instructions described in ["Huawei integration for Android"](/developers/mobile-sdk/installation-and-configuration/huawei-integration). # Monitoring item feed status You can check the status of your item feed for item consistency with item-related events ([`page.visit`](/docs/assets/events/event-reference/default-events#website-and-app-interactions), [`product.view`](/docs/assets/events/event-reference/default-events#website-and-app-interactions), and [`transaction.charge`](/docs/assets/events/event-reference/default-events#transactions-cart-favorites)). This way, you can quickly detect the number of items that occur in events, but do not occur in the item feed and the other way round. Eliminating such discrepancies allows you to improve your item data and optimize your recommendations, which ultimately leads to improved customer satisfaction and increased revenue. ## Prerequisites --- [Configure an item feed](/docs/ai-hub/recommendations-v2/configure-item-feed-ai-recommendations). ## Monitoring feed status --- 1. Go to Settings icon **Settings > AI Engine configuration**. 2. On the list, find the feed whose status you want to check. 3. On the right side, click Three dot icon. 4. From the dropdown list, select **Feed status**. **Result**: The details of the status are displayed. ### Item consistency --- This section allows you to verify the consistency of items between the generated item-related events and the item feed. | Column name | Description | |-----------------------------|----------------------------------------------------------------------------------------------------------------------------| | Inconsistent item ratio | This is the ratio of the unique item IDs in the events which are not found in the item feed to the number of all items found in events. | | Items not found in the feed | This is the number of unique item IDs which occurred in events but were not found in the item feed. | | Items not found in events | This is the number of items which exist in the item feed, but were not found in events. | | Items in the feed | This is the number of items which exist in the item feed. | ### Import status --- This section is unavailable for those users who upload item feed to a Synerise catalog. This section is available only if you use your Google Merchant Feed. | Column name | Description | |----------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | XML file fetch | This is the status of fetching the `XML` file. The frequency is defined in the [feed settings](/docs/settings/configuration/ai-engine-configuration/engine-configuration-for-recommendations#adding-item-feed). This process can get the following statuses:
- **Success** - The file was fetched successfully. The next stage is processing the file.
- **No changes** - The file was fetched successfully, the fetched version is the same as the version before.
- **Failed** - An error occurred while fetching the file. | | Fetch date and time | The date and time of the most recent file fetch attempt. | | Import status | This column displays the status processing the fetched file in Synerise. It can end with one of the following statuses:
- **Success** - The `XML` file has been successfully processed.
- **Invalid** - The `XML` file has been processed but the file is not valid.
- **Failed** - An error occurred while processing the file.
- **Inactive** - The `XML` file has not been fetched for more than 3 days. | | Item import error | The number of errors that occurred during processing the file. | | Import date and time | The date and time of the most recent file processing. | # Settings Let us guide you through the options and tools you may find in Settings in the Synerise platform. ## Required user permissions See [Settings permissions](/docs/settings/identity-access-management/permissions/settings-permissions). # Integration for stores using FastStore framework This guide contains instructions on integrating Synerise with a store built on the FastStore framework. If you are unsure which framework is used in your project, refer to the [VTEX documentation](https://developers.vtex.com/docs/guides/getting-started-with-storefront-solutions). You can use the Synerise plugin in your eshop built on VTEX IO ecommerce platform to transmit the data from your website to Synerise, so you can utilize it for analyses and your business campaigns. The article is divided into three main parts, each of which contains procedures for specific platforms: 1. [Configuration in the Synerise platform](#configuration-in-synerise). 2. [Configuration in the VTEX platform](#configuration-in-vtex). 3. [Configuration in the application files](#configuration-in-your-application-files). The further parts of this article show how to: - [Enable historical synchronization](#historical-data-synchronization) - [Uninstall the Synerise plugin](#uninstall-the-plugin)
If there are no requests in 60 minutes, the service deactivates. The first request that re-activates the service after 60 minutes of inactivity is automatically lost.
## Plugin scope --- - Tracking transaction, cart, and customer activity events - Tracking the checkout page - Identifying customers after they fill out a form - Synchronizing data between Synerise and VTEX through webhooks: creating, updating, and removing accounts; marketing consent changes - Exporting historical data about customers and orders from VTEX to Synerise. ## Configuration in Synerise ### Generate the tracking code --- To enable tracking the customer activity on your website, create a tracking code which you will implement into your code files later in the process. 1. In Synerise, go to **Settings > Tracking codes** and generate a tracking code dedicated to **VTEX FastStore**. Full instruction on generating tracking codes is available [here](/developers/web/installation-and-configuration).
Generating tracking code in Synerise
Generating tracking code in Synerise
**Result**: Synerise generates 2 tracking codes. 2. Copy the generated tracking codes and save them in the notepad.
Tracking codes generated for VTEX domain
Tracking codes generated for VTEX domain
### Create an API key --- Create an API key with specific permissions (the list is available in the instruction below), which will enable authorization between Synerise and VTEX. 1. In Synerise, go to **Settings > API Keys > Add API key**. 2. On the pop-up: 1. Select **Workspace**. 2. Enter the name of the API key (it will be visible on the list of API keys). 3. Optionally, in the **Description** field, you can provide a brief explanation for the purpose of the key. This will help you and your team in identifying the key promptly on the API key list.
Adding a new API key for the Vtex integration
Adding a new API key for the VTEX integration
3. Confirm by clicking **Save**. 4. Find the key on the top of API key list and click **Permissions**. 5. On the pop-up, select all the permissions listed below to enable complete synchronization of data between Synerise and VTEX:
Click to expand the list of permissions
  • CATALOG:
    • CATALOGS_CATALOG_CREATE
    • CATALOGS_CATALOG_READ
    • CATALOGS_ITEM_BATCH_CATALOG_CREATE
  • CLIENT:
    • API_BATCH_CLIENT_CREATE
    • API_CLIENT_CREATE
  • EVENTS:
    • API_ADDED_TO_CART_EVENTS_CREATE
    • API_ADDED_TO_FAVORITES_EVENTS_CREATE
    • API_CUSTOM_EVENTS_CREATE
    • API_LOGGED_IN_EVENTS_CREATE
    • API_LOGGED_OUT_EVENTS_CREATE
    • API_REGISTERED_EVENTS_CREATE
    • API_REMOVED_FROM_CART_EVENTS_CREATE
  • INTEGRATIONS:
    • IMPORT_FEEDER_LOGS_INTEGRATIONS_CREATE
  • TRACKER
    • TRACKER_CREATE
  • TRANSACTION
    • API_BATCH_TRANSACTION_CREATE
    • API_TRANSACTION_CREATE
  • VTEX
    • IMPORT_FEEDER_INTEGRATION_VTEX_CREATE
    • IMPORT_FEEDER_INTEGRATION_VTEX_READ
    • IMPORT_FEEDER_INTEGRATION_VTEX_DELETE
    • IMPORT_FEEDER_INTEGRATION_VTEX_UPDATE
    • IMPORT_FEEDER_LOGS_INTEGRATIONS_CREATE
    • IMPORT_FEEDER_SYNCHRONIZATIONS_VTEX_READ
    • IMPORT_FEEDER_SYNCHRONIZATION_VTEX_CREATE
    • IMPORT_FEEDER_SYNCHRONIZATION_VTEX_DELETE
6. Confirm by clicking **Apply settings**. 5. Close the pop-up with permissions. 8. On the **General** section, click **Show**. 9. Copy the API key into the notepad.
Details of the API key
Details of the API key
### Enable updating profile information with specific events --- To prevent duplicating customers' accounts when they become identified, make it possible for specific events to update profile information without JWT authorization. 1. Go to **Data Modeling Hub > Events**. 2. Select the **JS SDK event settings** tab. 3. In the **Events without JWT allowed for updating profiles' information** section, click **Define**. 4. From the **Select events** dropdown list, select [form.submit](/docs/assets/events/event-reference/web-and-app#formsubmit) 5. Confirm by clicking **Add**.
Events without JWT section in Data Modeling Hub showing the form.submit event configured to allow profile updates without JWT authorization
Configuration of the section
6. Confirm the settings by clicking **Apply**. ### Prepare tracking events on the checkout page --- In this part of the process, you will use a ready-to-use [dynamic content](/docs/campaign/dynamiccontent/creating-dynamic-content) template available in the Synerise platform. This template includes JavaScript that's inserted into the checkout page to identify customers when they fill out a form and to track events on the checkout page. By default, the dynamic content from this template doesn't include any elements visible on the site.
This dynamic content starts working after you enable Synerise SDK on the checkout page. This is described later in this article.
1. Go to **Experience Hub > Dynamic Content > Create new**. 2. Enter the name of the dynamic content. 3. As the dynamic content type, select **Insert object**. 4. In the **Audience** section, select the **Everyone** tab. 5. In the **Content** section, set the **CSS Selector** option to **After**. 2. In the text field, enter `.snrs-modal-wrapper` This sets the dynamic content to be injected after one of the elements created when Synerise JS SDK is initialized. If you need to, you can set a different selector. 7. Click **Create message**. 8. Select **Script templates**. 9. From the Script templates library, select **VTEX - tracking events on checkout page**. The template is ready to be used, it contains all necessary scripts that track events and identify customers when they fill out the form. 10. If needed, you can make changes to the templates.
You can learn more how to edit a template in a dynamic content template builder [here](/docs/campaign/dynamiccontent/creating-dynamic-content-templates/dynamic-content-template-builder#editing-a-ready-made-template).
1. In the upper right corner, click **Use in communication**. 2. Confirm the settings in the **Content** section by clicking **Apply**. 3. In the **Schedule** section, select **Display immediately** and click **Apply**. If needed, you can [declare the date when the dynamic content will start and end being active](/docs/campaign/dynamiccontent/creating-dynamic-content/creating-dynamic-content#schedule-dynamic-content) 4. In the **Display settings** section: 1. Open **Advanced options**. 2. In **Page targeting**, click **Others**. 3. In **Display on pages**, click **Add rule**. 4. Select **Page with URL** and enter the URL of your checkout page. 5. Confirm the settings by clicking **Apply**. 5. Optionally, in the **UTM & URL parameters** section, [define these parameters](/docs/campaign/dynamiccontent/creating-dynamic-content/creating-dynamic-content#define-the-utm-parameters). 6. In the upper right corner, click **Activate**. ## Configuration in VTEX ### Install the Synerise plugin --- Install the application through the VTEX console: 1. Download the VTEX console. 2. In the console, log on to your VTEX workspace. 3. Install the Synerise application with the following command: `vtex install synerisepartnerar.synerise-integration` **Result**: A native Synerise integration appears in the **Apps** section in the menu and you will be redirected to the **Configuration** section automatically.
Synerise integration in the menu in the VTEX panel
Synerise integration in the menu in the VTEX panel
### Select the FastStore plugin configuration --- In this part of the process, depending on the framework you use, select the configuration scenario. 1. In VTEX, go to **Apps > (Synerise) Configuration**. 2. In the **Plugin configuration for FastStore** section, click **Start configuration**.
Selection of the configuration scenario
Selection of the configuration scenario
### Enable data exchange between Synerise and VTEX --- To initiate the exchange of data between Synerise and VTEX, you will provide the workspace API key, Synerise API GUID, and select Synerise API host.
Blank configuration form for enabling data exchange between Synerise and VTEX
Blank configuration form for enabling data exchange between Synerise and VTEX
1. In the **Synerise Workspace API key** field, enter the Synerise API key which you created in ["Creating an API key"](#create-an-api-key). 2. If you want to use basic authentication, in the **Synerise API GUID (Optional)** field, enter the workspace GUID. Filling out this field results in setting GUID to be a password and Workspace API key a login for basic authentication. You can find the GUID in the settings of your API key, after enabling **Basic workspace authentication**.
Read more about [Basic workspace authentication](/developers/api/api-authorization/workspace-login#basic-api-authentication-with-api-keys).
3. From the **Synerise API host** list, select the API host URL. Depending on the cloud where your Synerise workspace is hosted: - if your Synerise portal URL starts with `https://app.synerise.com/`, use **Microsoft Azure**. - if your Synerise portal URL starts with `https://app.azu.synerise.com/`, use **Microsoft Azure US**. - if your Synerise portal URL starts with `https://app.geb.synerise.com/`, use **Google Cloud Platform**. 4. Click **Next**. ### Define additional settings --- In this part of the configuration, you will: - [select order statuses which will overwrite transaction information](#select-order-statuses-for-overwriting-transaction-events) - [select customer attributes to be added to the transaction event metadata](#select-customer-attributes-added-to-orders) - [select additional customer attributes to send to Synerise](#select-additional-customer-attributes) After completing this part of the configuration, at the bottom right corner, click **Configure**. #### Select order statuses for overwriting transaction events --- If you want to send transaction updates to Synerise from [subaccounts](https://help.vtex.com/tutorial/managing-a-multistore--4S0lFVBPylRS5KpVgdyDhJ) in which a transaction occurs, [enable sending transaction updates for sub-accounts](#enable-sending-transaction-events-for-sub-accounts). From the **Order statuses for data updates** dropdown list, select the status or statuses that will update the transaction information in Synerise. As a result, the existing [transaction.charge](/docs/assets/events/event-reference/items#transactioncharge) and [product.buy](/docs/assets/events/event-reference/items#productbuy) events generated by that order will be updated. Refer to the tables below to see which parameters are overwritten: - product.buy | Event parameter | Explanation | |-----------------|----------------------------------------------------------------------------------------------| | `$quantity` | - When an item is removed, the value of the parameter is set to `0`.
- When the item quantity changes, the value changes accordingly. | | `canceled` | This parameter is added only when an item is removed. The value is set to `true`. | - transaction.charge | event parameter | description | |-----------------|------------------------------------------------------------------------------------------------------------------------------------| | `$revenue` | The total value of the transaction may change (for example, as a result of including promotions or removal of items from the order). | | `status` | Contains the name of the order status which triggered overwriting this event. | #### Select customer attributes added to orders --- In the **Customer attributes added to orders** field, you can add customer attributes which will be added to the metadata of the transaction events. #### Select additional customer attributes --- In the **Additional customer attributes** field, select the VTEX attributes which will be sent to the Synerise. These attributes will be saved in the customer's profile.
Customer attributes will be saved on the card of a customer in the customer information panel
Customer attributes will be saved on the card of a customer in the customer information panel in Synerise
### Implement SDK on the checkout page --- The checkout page in VTEX requires a custom script to enable Synerise tracker and SDK. You can implement it in ***one*** of the following ways (the choice of the method depends on your checkout page configuration in VTEX): - [Standard checkout configured in VTEX settings](#standard-checkout-configured-in-vtex-settings) - [Custom UI checkout](#custom-ui-checkout) - [Checkout UI Settings](#checkout-ui-settings) #### Standard checkout configured in VTEX settings 1. In your VTEX workspace, click the gear icon in the lower left corner and go to **Checkout**. 2. Next to the name of the store that you are configuring, click the gear icon. 3. On the page that opens, go to the **Code** tab. 4. From the **Files** list, open **checkout6-custom.js** 5. In the file, add the **Tracking code for the VTEX checkout page** tracking code you created in ["Generating the tracking code" section](#generate-the-tracking-code).
Don't add the `customPageVisit` and `dynamicContent` parameters in this tracking code!
Tracking code added to the checkout page scripts
Tracking code added to the checkout page scripts
6. Click **Save**. **Result**: Synerise SDK is added to the checkout page and the [dynamic content used to track events on the checkout page](#prepare-tracking-events-on-the-checkout-page) becomes enabled. #### Custom UI checkout 1. Follow the instructions in the [VTEX documentation](https://developers.vtex.com/docs/apps/vtex.checkout-ui-custom). 2. While performing the procedure described in the documentation, in the JavaScript tab, add the Synerise tracking code from ["Generating the tracking code" section](#generate-the-tracking-code). #### Checkout UI Settings 1. Follow the instructions in the [VTEX documentation](https://developers.vtex.com/docs/apps/vtex.checkout-ui-settings) described in the Configuration section. 2. While performing the procedure described in the documentation, in the `checkout-ui-custom` folder, create a `JS` file with the Synerise tracking code from ["Generating the tracking code" section](#generate-the-tracking-code). ### Synchronizing VTEX item feed with the Synerise item feed --- Synchronizing feeds lets you keep your product base up to date both in VTEX and Synerise. You can [synchronize VTEX item feed changes in Synerise](/docs/settings/tool/vtex/synchronizing-item-feed#synchronize-vtex-item-feed-changes-to-synerise-in-synerise). For all available synchronization methods, see [Synchronizing item feed](/docs/settings/tool/vtex/synchronizing-item-feed). ## Configuration in your application files --- This part of the process involves making changes to your application files. ### Add the Synerise tracking code In this part of the process, you will prepare a Synerise tracking code for use with the FastStore framework. Once you add the tracking code in your application files, you will be able to track the following events: | Event name in VTEX | Description | Event in Synerise | |------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------| | Client login | This event is generated when a customer logs in to their account on your website. | client.login
See details in [Event reference](/docs/assets/events/event-reference/web-and-app#clientlogin) | | Client logout | This event is generated when a customer logs out from their account on your website. | client.logout
See details in [Event reference](/docs/assets/events/event-reference/web-and-app#clientlogout) | | Add to cart | This event is generated when a customer adds an item to the cart. | product.addToCart
See details in [Event reference](/docs/assets/events/event-reference/items#productaddtocart) | | Remove from cart | This event is generated when a customer removes an item from the cart. | product.removeFromCart
See details in [Event reference](/docs/assets/events/event-reference/items#productremovefromcart) | | Cart status | This event is generated when the customer changes the contents of the cart. | cart.status
See details in [Event reference](/docs/assets/events/event-reference/items#cartstatus) | | Newsletter subscription | This event is generated when a customer enables the email marketing agreement. | marketingAgreement.turnOn
See details in [Event reference](/docs/assets/events/event-reference/email#marketingagreementturnon) | | Add to favorite | This event is generated when a customer adds an item to wishlist. | product.addToFavorite
See details in [Event reference](/docs/assets/events/event-reference/items#productaddtofavorite) | | Remove from favorite | This event is generated when a customer removes an item from wishlist. | product.removeFromFavorite
See details in [Event reference](/docs/assets/events/event-reference/items#productremovefromfavorite) | | Page visit | This event is generated when a customer visits any page within the tracked domain. | page.visit
See details in [Event reference](/docs/assets/events/event-reference/web-and-app#pagevisit) | | Product review | This is a custom event; it is generated when a logged-in customer submits a product review.
If VTEX allows syncing reviews from anonymous customers, no events will be generated in Synerise due to the lack of customer identifiers needed to match reviews with customers.
| product.addReview
See details in [Event reference](/docs/assets/events/event-reference/items#productaddreview) | 1. Go to the Synerise platform. 2. Go to **Settings > Tracking codes**. 3. On the list, find the tracking code you generated in the [Generate the tracking code](#generate-the-tracking-code) part of the process. 4. Open the preview of the tracking code. 4. Copy the value of the `trackerKey` parameter and save in the notepad. 5. Copy the code below to the notepad and in the `trackerKey` parameter value, paste the tracker key you copied in the previous step. 6. Implement the code below according to the instructions in [Adding the third-party scripts](https://developers.vtex.com/docs/guides/faststore/project-structure-handling-third-party-scripts).
const ThirdPartyScripts = () => {
    return (
        <script
        dangerouslySetInnerHTML={{
            __html: `
                function onSyneriseLoad() {
                    SR.init({
                        trackerKey: "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
                        plugin: "faststore",
                    }).then(function () {
                        SR.event.pageVisit().then(function () {
                            SR.dynamicContent.get();
                        });
                    });
                }
                (function(s,y,n,e,r,i,se){s["SyneriseObjectNamespace"]=r;s[r]=s[r]||[],
                s[r]._t=1*new Date(),s[r]._i=0,s[r]._l=i;var z=y.createElement(n),
                se=y.getElementsByTagName(n)[0];z.async=1;z.src=e;se.parentNode.insertBefore(z,se);
                z.onload=z.onreadystatechange=function(){var rdy=z.readyState;
                if(!rdy||/complete|loaded/.test(z.readyState)){s[i]();z.onload = null;
                z.onreadystatechange=null;}};})(window,document,"script", "//web.snrbox.com/synerise-javascript-sdk.min.js", "SR", "onSyneriseLoad");
            `,
        }}
        />
    )
    }
    export default ThirdPartyScripts
### Implement AI recommendations and AI Search Optionally, you can implement Synerise [AI recommendations](/docs/ai-hub/recommendations-v2/introduction-to-recommendation-campaigns) and [AI Search](/docs/ai-hub/ai-search/introduction-to-ai-search) to let you display recommendations in your store and let your customers use the AI-powered search. To do so, refer to the [Github documentation](https://github.com/synerise/faststore-examples). ## Historical data synchronization If you want to export historical information about orders and customers from VTEX to Synerise, you can use the _Synchronization_ feature. It lets Synerise access the VTEX database and fetch data about customers and transactions. Some customer attributes are sent by default. You can add custom attributes. For details, see ["Attributes sent to Synerise"](#attributes-sent-to-synerise).
If the phone number or email are incorrect, the profile is not created or updated at all. If multiple profiles are created/updated as part synchronizing historical data, only the profiles with errors are skipped.

The phone number must match the following regular expression: ```regex (^\+[0-9 \-()/]{6,19}$)|(^[0-9 \-()/]{6,20}$) ``` The email must match the following regular expression: ```regex ^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$ ```
After exporting data to Synerise, you can use it to train AI models, build analytics, create communication campaigns, and more. Synchronization is a one-time transfer, usually used for historical data. Continuous connection (event tracking, transaction tracking, customer data updates) for exchanging new data is achieved by completing the integration as described in ["Pre-configuration in Synerise"](#configuration-in-synerise) and ["Configuration in VTEX"](#configuration-in-vtex). Each exported transaction is saved in Synerise as a [`transaction.charge` event](/docs/assets/events/event-reference/items#transactioncharge) and a number of related [`product.buy` events](/docs/assets/events/event-reference/items#productbuy). Exported customers are saved as profiles. If a transaction or profile already exists in Synerise and the synchronization contains new data, the transaction or profile is updated. #### Create a role You must first create a role which allows for sending historical data to Synerise. 1. In your VTEX workspace, create a role with a set of permissions required for historical imports: 1. Go to **Account settings > User roles > New role**. 2. Select the following permissions for **Product**: - **OMS** - Notify payment - Notify invoice - View order - Notify refund - Order feed subscription - View store sales stats - Feed v3 and Hook Admin - Feed v3 and Hook view only - Subscription view only - Subscription metrics and reports - List Orders - **Dynamic Storage** - Full access to all documents - Insert or update document (not remove) - List data entity - Create data entity - Remove data entity - View data entity details - **CMS** - CMS GraphQL API - **Pricing** - Read prices - Read trade policy configurations - **Search** - General Settings #### Schedule synchronization 1. In your VTEX workspace, go to **Apps > (Synerise) Access to VTEX**. 2. If this is the first time that you're accessing this feature, you are asked to allow Synerise access to VTEX API. To do so: 1. In a new browser tab, open your VTEX admin panel. 2. Generate an internal application key and token as described in [VTEX documentation](https://help.vtex.com/docs/tutorials/api-keys#generating-internal-application-keys).
When you generate the token, copy it immediately. It won't be accessible later.
3. Assign [the role you created](#create-a-role) to the VTEX API key. 4. Paste values from step 2 in **VTEX API key** and **VTEX app token**, respectively. 3. Return to the tab where you need to enter the app key and token in the Synerise plugin. 4. Paste the key and token into the corresponding fields. 5. Click **Save**. 3. If you want to synchronize marketing consents: 1. Enable the **marketing consent** toggle. This works in both directions; any changes in marketing consent in either Synerise or VTEX will be synchronized. 2. To create a new user who doesn't exist in VTEX database, but exists already in Synerise, select the **Adding new users while synchronizing marketing consents** checkbox. 4. Select the **Synchronization** tab. 3. Click **New synchronization**. There is a limit of 2 active synchronizations. 4. In the pop-up that opens: 1. Select the scope of data to be exported: - **Customer (Creation date)** - Exports data about customers whose accounts were created in a specific time range (you will select the dates in the next step). - **Customer (Last updated date)** - Exports data about customers whose accounts were updated in a specific time range (you will select the dates in the next step). - **Orders** - Exports data about transactions and creates/updates `transaction.charge` and `product.buy` events. 2. Select the date range for the export. For example, if in the previous step you selected **Customer (Creation date)**, the data of customers whose profiles were created within the chosen date range will be exported.
New synchronization dialog in the Synerise VTEX plugin showing data scope and date range fields for scheduling a historical data export to VTEX
Scheduling synchronization
3. Click **Save**. **Result**: The transfer starts. You can check its progress in the **Status** column on the list of synchronizations. ## Optional ### Enable sending transaction events for sub-accounts --- If you use [multistore](https://help.vtex.com/docs/tutorials/managing-a-multistore) and you want to send transaction updates to Synerise from each subaccount, follow these instructions: 1. Go to the main VTEX account. 2. Go to **Apps > App Management**. 2. Search for **Orders Broadcast IO** and open its settings 4. Select the **Notify Subaccounts** checkbox. 5. Click **Save**. ### Enable sending customer data --- In this part of the process, you will: 1. [Configure the attributes to send (or leave them at default)](#attributes-sent-to-synerise). 2. Enable sending data to Synerise when a customer account is: 1. [created](#customer-created-an-account), 4. [updated](#customer-updated-the-account), 5. [deleted](#customer-account-has-been-deleted). This process involves creating webhooks.
If you store marketing agreements outside Synerise, it is necessary to configure a separate webhook for updating the status of these agreements in the database where you keep them.
#### Attributes sent to Synerise The following table lists the customer data that is sent to Synerise. The same data is sent when [synchronizing historical data](#historical-data-synchronization).
If the phone number or email are incorrect, the profile is not created or updated at all. If multiple profiles are created/updated as part synchronizing historical data, only the profiles with errors are skipped.

The phone number must match the following regular expression: ```regex (^\+[0-9 \-()/]{6,19}$)|(^[0-9 \-()/]{6,20}$) ``` The email must match the following regular expression: ```regex ^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$ ```
| Property in VTEX | Property in Synerise | | --- | --- | | `email` | `email` | | `firstName` | `firstName` | | `lastName` | `lastName` | | `userId` | `customId` | | 1. `businessPhone`
2. `phone`
3. `homePhone` | `phone`1 | | `isNewsletterOptIn` | `agreements.email` | | `birthDate` | `birthDate` | | `gender` | `sex` | | `profilePicture` | `avatarUrl` | | `country` | `countryCode` | | `state` | `province` | | `city` | `city` | | `postalCode` | `zipCode` | | `street` + `number` + `complement` | `address` | | other attributes | Additional attributes that you add. See ["Sending custom attributes"](#sending-custom-attributes) | 1The numbers are checked in the listed order. The first non-empty one is saved in Synerise. ##### Sending custom attributes If you want to send additional customer attributes: 1. In your VTEX workspace, go to **Stores > (Synerise) Settings**. 2. Open the **Data** tab. 3. In the **Customer attributes** selector, from the dropdown, select the additional attributes that you want to send to Synerise. 4. Click **Save settings**. #### Customer created an account 1. In the VTEX workspace, go to **Store Settings > Master Data**. You can find the **Master Data** section using the search box. 2. Click the **Advanced settings** tab. 3. On the left **Settings** menu, select **Data structure**. **Result**: You are redirected to the following URL: `https://{account}.ds.vtexcrm.com.br/`; account is replaced with the name of your store. 2. Select the method of authentication. 3. After you have been authenticated, select the **Trigger** tab. 1. From the **Action** dropdown list, select **Send an HTTP request**. 1. In the **Name** field, enter a meaningful name of the trigger (for example, "Create customer"). 2. From the **Data Entity** dropdown list, select **Customer**. 3. Set the **Status** option to **Enabled**. 4. In the **Rules** tab, from the **Trigger rule** dropdown list, select **A record is created**. 5. In the **Schedule** tab, select **Run ASAP**. 6. In the **If Positive** tab: 1. In the **URL** field, type the endpoint: `https://yourshopsubdomain.myvtex.com/_v/private/synerise/triggers/customer` Replace `yourshopsubdomain` with your shop's subdomain. 2. As the method, select **POST**. 3. In the headers, add `x-synerise-api-key` with your API key as the value. 4. In the request body, enter the following code:
{
          "id":"{!id}"
       }
where `{!id}` will automatically be replaced with the ID of the record. 7. Click **Save**. #### Customer updated the account 1. In the VTEX workspace, go to **Store Settings > Master Data**. You can find the **Master Data** section using the search box. 2. Click the **Advanced settings** tab. 3. On the left **Settings** menu, select **Data structure**. **Result**: You are redirected to the following URL: `https://{account}.ds.vtexcrm.com.br/`; account is replaced with the name of your store. 2. Select the method of authentication. 3. After you have been authenticated, select the **Trigger** tab. 1. From the **Action** dropdown list, select **Send an HTTP request**. 1. In the **Name** field, enter a meaningful name of the trigger (for example, "Update customer"). 2. From the **Data Entity** dropdown list, select **Customer**. 3. Set the **Status** option to **Enabled**. 4. In the **Rules** tab, from the **Trigger rule** dropdown list, select **A record is changed**. 5. In the **Schedule** tab, select **Run ASAP**. 6. In the **If Positive** tab: 1. In the **URL** field, type the endpoint: `https://yourshopsubdomain.myvtex.com/_v/private/synerise/triggers/customer` Replace `yourshopsubdomain` with your shop's subdomain. 2. As the method, select **PATCH**. 3. In the headers, enter the `x-synerise-api-key` parameters and as a value your API key. 4. In the request body, enter the following code:
{
          "id":"{!id}"
       }
where `{!id}` will automatically be replaced with the ID of the record. 7. Click **Save**. #### Customer account has been deleted 1. In the VTEX workspace, go to **Store Settings > Master Data**. You can find the **Master Data** section using the search box. 2. Click the **Advanced settings** tab. 3. On the left **Settings** menu, select **Data structure**. **Result**: You are redirected to the following URL: `https://{account}.ds.vtexcrm.com.br/`; account is replaced with the name of your store. 2. Select the method of authentication. 3. After you have been authenticated, select the **Trigger** tab. 1. From the **Action** dropdown list, select **Send an HTTP request**. 1. In the **Name** field, enter a meaningful name of the trigger (for example, "Delete customer"). 2. From the **Data Entity** dropdown list, select **Customer**. 3. Set the **Status** option to **Enabled**. 4. In the **Rules** tab, from the **Trigger rule** dropdown list, select **A record is deleted**. 5. In the **Schedule** tab, select **Run ASAP**. 6. In the **If Positive** tab: 1. In the **URL** field, type the endpoint: `https://yourshopsubdomain.myvtex.com/_v/private/synerise/triggers/customer` Replace `yourshopsubdomain` with your shop's subdomain. 2. As the method, select **DELETE**. 3. In the headers, enter the `x-synerise-api-key` parameters and as a value your API key. 4. In the request body, enter the following code:
{
          "email":"{!email}",
          "userId": "{!userId}"
       }
where `{!email}` and `{!userId}` will automatically be replaced with the email of the customer and the ID of a customer respectively. In Synerise, `userId` is the equivalent of `customId`. 7. Click **Save**. ## Uninstalling the Synerise plugin --- The process of uninstalling the Synerise plugin consists of the following steps: 1. [Uninstall the plugin](#uninstall-the-plugin) through administration panel or through the console. 2. Optionally, [remove the Synerise application](#remove-the-synerise-application-from-orderform) from the settings applied to [orderForm](https://developers.vtex.com/docs/guides/orderform-fields) through API. ### Uninstall the plugin You can do it in one of the following ways:
Through the administration panel - click to expand the instruction
  1. In the administration panel, select Apps > App Management.

  2. On the list of installed apps, locate the Synerise Integration plugin.
    Results:

    The list of installed apps in VTEX admin panel
    The list of installed apps in VTEX administration panel
  3. On the Synerise Integration plugin, click Settings.

    Settings of the plugin
    Settings of the Synerise Integration plugin
  4. Click Delete.
    Result: A pop-up appears.

  5. On the pop-up, confirm the action by clicking Delete.

Through the console - click to expand instruction
  1. Open the console through the VTEX Toolbelt.
  2. Execute the following command: vtex uninstall synerisepartnerar.synerise-integration
### Remove the Synerise application from orderForm Apart from removing the integration, you can edit the order form configuration to prevent sending data that won't be used anymore. 1. Get the current configuration with a GET API request to `https://{accountName}.vtexcommercestable.com.br/api/checkout/pvt/configuration/orderForm` - Replace `{account}` with the name of your account - `vtexcommercestable` is the name of the environment, leave it at default
You can check the documentation of this endpoint in [VTEX API reference](https://developers.vtex.com/docs/api-reference/checkout-api#get-/api/checkout/pvt/configuration/orderForm).
2. Copy the response into a text editor and delete the highlighted lines:
{
       "paymentConfiguration": {
           "requiresAuthenticationForPreAuthorizedPaymentOption": false,
           "allowInstallmentsMerge": null,
           "blockPaymentSession": null,
           "paymentSystemToCheckFirstInstallment": null,
           "defaultPaymentSystemToApplyOnUserOrderForm": null,
           "alwaysShowMarketplacePaymentSystems": false
       },
       "taxConfiguration": null,
       "minimumQuantityAccumulatedForItems": 1,
       "decimalDigitsPrecision": 2,
       "minimumValueAccumulated": null,
       "apps": [
           {
               "fields": [
                   "snrs_params",
                   "uuid",
                   "source"
               ],
               "id": "synerise",
               "major": 1
           },
           {
               "fields": [
                   "cartEtag"
               ],
               "id": "faststore",
               "major": 1
           }
       ],
       "allowMultipleDeliveries": true,
       "allowManualPrice": null,
       "savePersonalDataAsOptIn": false,
       "maxNumberOfWhiteLabelSellers": null,
       "recaptchaValidation": "vtexcriteria",
       "recaptchaMinScore": null,
       "recaptchaKeys": null,
       "maskStateOnAddress": true,
       "enableSecureCookies": true,
       "useOwnershipCookie": null,
       "ignoreProfileData": null,
       "useIndividualShippingEstimates": false
   }
3. Update the configuration by sending the edited response as the body of a POST request to the same URL: `https://{accountName}.vtexcommercestable.com.br/api/checkout/pvt/configuration/orderForm` # Audit Log You can use the Audit log to monitor and review the actions taken by users within a workspace. By selecting a specific service that represents a feature (e.g., `Automation` for creating and managing workflows in Automation Hub), you can see which records and Synerise objects have been interacted with and by whom, along with the type of action and when it occurred. This provides a detailed account of the activities within the workspace, ensuring transparency and accountability in tracking and monitoring user activities, as well as strengthening security measures. ## Accessing the Audit Log You can access the Audit Log in the following ways: - **Global audit log** - Go to **Settings > Audit Log** to view all actions across the workspace. - **Analysis-specific audit log** - Open an analysis configuration, in the upper right corner, click the Three dot icon icon , and select **Show audit log** to view the history of changes for that specific analysis. - **AI feature-specific audit log** - Available only for AI recommendation campaigns, AI Search indexes, and Predictions. Open the configuration details of the feature, in the upper right corner, click the Three dot icon icon, and select **Show audit log** to view the history of changes for that specific feature. - **Automation-specific audit log** - Open a workflow configuration, in the upper right corner, click the Three dot icon icon, and select **Show audit log** to view the history of changes for that specific workflow. - **Campaign-specific audit log** - Available for all campaign types except landing pages (email, SMS, dynamic content, mobile push, web push, screen view, and in-app message campaigns). Open the campaign configuration, in the upper right corner, click the Three dot icon icon, and select **Show audit log** to view the history of changes for that specific campaign. ## Information scope - **Subject** - the type and ID of an object which was created, modified, or deleted - **Action** - describes what has happened to the object - **Date** - when the action happened - **Modified by** - the author of the change (either workspace user or a workspace) ## Service reference The following list of services is ordered according to the positioning of modules in the left menu of the Synerise Platform. ### AI Hub | Service name | Description | |-----------------------|--------------------------------------------------------------------------------------------------| | Items Search: Config | Log of actions related to [ search index ]( /docs/ai-hub/ai-search/create-index/ ) | | Item Search: Rules | Log of actions related to [ rules ]( /docs/ai-hub/ai-search/query-rules/ ) | | Item Search: Synonyms | Log of actions related to [ synonyms ]( /docs/ai-hub/ai-search/add-synonyms/ ) | | Promotions | Log of actions related to [ promotions ]( /docs/ai-hub/promotions/ ) | | Handbills | Log of actions related to [ personalized promotions ]( /docs/ai-hub/personalized-promotions/introduction-to-ai-promotions/ ) | | Recommendations | Log of actions related to [ AI recommendation campaigns ]( /docs/ai-hub/recommendations-v2/introduction-to-recommendation-campaigns/ ) | | Optimizer Manager | Log of actions related to [ recommendation A/B/X testing ]( /docs/ai-hub/recommendations-v2/recommendation-abx-test/ ) | | Predictions: module settings | Log of actions related to [ configuration of prediction model settings ]( /docs/ai-hub/predictions/enabling-predictions/ ) and [ time optimizer ]( /docs/settings/configuration/time-optimizer/ ) | | Predictions: model configuration | Log of actions related to [predictions]( /docs/ai-hub/predictions/), such as creating or updating a prediction | | Predictions: models configuration | Log related to monitoring the state of prediction and recommendation models | ### Data Modeling Hub | Service name | Description | |--------------|--------------| | catalogs | Log of actions related to creating or deleting a [catalog](/docs/assets/catalogs), adding or removing catalogs from the [enrichment settings for events](/docs/assets/events/adding-event-parameters#enriching-events-with-data-from-catalogs). | | brickworks | Log of actions related to creating, updating, and deleting [schemas](/docs/assets/brickworks/quick-start/creating-a-schema) and [records](/docs/assets/brickworks/quick-start/creating-a-record). | ### Decision Hub | Service name | Description | |--------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | analytics-v2 | Log of actions related to [segmentations](/docs/analytics/segmentations/introduction-to-segmentations/ ), [reports](/docs/analytics/reports/introduction-to-reports), [trends](/docs/analytics/trends/introduction-to-trends), [histograms](/docs/analytics/histograms/introduction-to-histograms), [metrics](/docs/analytics/metrics/introduction-to-metrics), [funnels](/docs/analytics/funnels/introduction-to-funnels), [geoanalytics](/docs/analytics/geoanalytics/introduction-to-geoanalytics) (they are displayed in logs as a segmentation), [sankey diagrams](/docs/analytics/sankey-charts/introduction-to-sankey-charts), [dashboards](/docs/analytics/analytics-dashboard/introduction-to-dashboards) | ### Behavioral Data Hub | Service name | Description | |--------------|--------------| | analytics-v2 | Logs of actions related to [aggregates]( /docs/crm/aggregates/introduction-to-aggregates/) and [expressions](/docs/crm/expressions/introduction-to-expressions) | ### Automation Hub | Service name | Description | |---------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Automation | Log of actions related to [ workflows ]( /docs/automation/creating-automation/ ) in Automation Hub and [ imports to Synerise ]( /docs/assets/imports/introduction-to-imports/ ) | | Data Transformation | Log of actions related to [ data transformation rules ]( /docs/automation/data-transformation-and-imports/introduction/ ) and [ imports to Synerise ]( /docs/assets/imports/introduction-to-imports/ ) | | automation-bat | A log of actions related to [sending test requests](/docs/automation/test-requests-for-outgoing-integrations) | ### Experience Hub | Service name | Description | |-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Communications | Log of actions related to [email]( /docs/campaign/e-mail/introduction-to-email-campaigns/ ), [SMS](/docs/campaign/SMS/introduction-to-sms), [web push](/docs/campaign/Webpush/introduction-to-webpush), [mobile push](/docs/campaign/Mobile/mobile_campaign), and [dynamic content](/docs/campaign/dynamiccontent/introduction-to-dynamic-content) campaigns | | Inn-App Messages | Log of actions related to [ in-app messages ]( /docs/campaign/in-app-messages/introduction-to-inapp-messages/ ) | | Documents | Log of actions related to [ screen view campaigns ](/docs/campaign/screen-views/creating-screen-views#scheduling-screen-view-campaign) | | Template Backend | Log of actions related to templates for campaigns and HTML blocks | | Scheduler | Log of actions related to scheduling [screen view campaigns](/docs/campaign/screen-views/introduction-to-screen-views) | ### Settings | Service name | Description | |------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Recommendations Config | Log of actions related to the recommendation settings in a feed in **Settings > AI Engine Configuration** | | IAM for Applications | Log of actions related to the features available in **Settings > Authentication for mobile apps** | | IAM | Log of actions related to [users](/docs/settings/identity-access-management/users), [roles]( /docs/settings/identity-access-management/permissions/), [access control features](/docs/settings/identity-access-management/access-control) | | Items Properties | Log of actions related to feeds in **Settings > AI Engine Configuration** | | credentials | Log of actions related to [connections](/docs/settings/tool/connections) | | cwf-clean-up-catalog | Log of actions related to deleting [feeds](/docs/settings/configuration/ai-engine-configuration) from **Settings > AI Engine Configuration** | # Global control group
Global Control Group for campaigns - demo
Global control group is a group of customers which can be excluded from the audience of the message. You can set the global control group to be enabled by default for any campaign type sent from Synerise. You can enable or disable global control group separately for Experience Hub (in which you manually send campaigns) and Automation Hub. Even if the customers from the global control group meet the conditions of the campaign audience, they will not receive it. Instead, [an event is generated on their profiles](#results) informing that the customer was in the global control group. By applying control group while sending a message, you can assess how the message influenced the recipients who did receive it, as compared to those who did not. Global control group must be defined by using a [segmentation](/docs/analytics/segmentations). As a best practice, we recommend creating a segmentation based on an attribute. You can use any method of assigning the attribute to a customer - manual, through the API method, through Automation Hub, and so on. The segmentation of global control group is recalculated right before sending a message.
When creating a message with multiple versions, you can use the allocation slider to specify the proportion of the recipient group that will receive each variant. The allocation slider involves only the recipients who don't belong to the control group.
Instead of the global control group, you can use a campaign control group which can be applied only for the purpose of one campaign (message). You can't use both control group types in a message at the same time. You can also disable using any type of control group.
The required version of mobile SDK that supports the Global Control Group functionality for In-app messages is `5.15.0` (or higher) for Android and `4.15.0` (or higher) for iOS.
## Prerequisites --- - Implement a solution in Synerise that indicates a profile's membership in the global control group. This solution will let you create a segmentation with profiles who will belong to the control group (**recommended solution**: assigning a specific attribute to a profile). - Create a segmentation based on the solution you implemented. The conditions of the segmentation depend on the solution you implemented to mark profiles to be included in the global control group.
Example segmentation based on the example attribute
Example segmentation based on a gcg attribute
## Creating global control group --- 1. Go to Settings icon **Settings > Configuration > Global control group**. 2. From the **Select segmentation** dropdown list, select a group of customers who will belong to the global control group. **Result**: The segmentation is selected. You can view the percentage of the global control group in relation to the total number of customers you have in Synerise. 3. Below the segmentation settings, you can define the message types in which the global control group will be enabled by default. This sets the default setting when creating a new message, but you can enable/disable the global control group manually for each message regardless of this setting. The table below presents the result of enabling and disabling the global control group for the email channel on the settings of email campaign: | Configuration | Result | |---------------|----------------------------------------------------------------------------------------| | Email Communication global control group enabled | When creating a new message, the global control group is enabled by default, but can be disabled. | | Email Automation global control group enabled | When creating an Automation node which sends a message, the global control group is enabled by default, but you can disable it. | | Email Communication global control group disabled | When creating a new message, the global control group is disabled by default, but can be enabled. | | Email Automation global control group disabled | When creating an Automation node which sends a message, the global control group is disabled by default, but you can enable it. | 4. Once you configured all settings of the global control group, in the upper right corner, click **Apply**. ## Results --- The recipients who belong to the global control group will not receive the message. On the activity list in their profile card, the control group event will be generated with the `type` parameter set to `global`. - for email - [newsletter.controlGroup](/docs/assets/events/event-reference/email#newslettercontrolgroup) - for mobile push - [push.controlGroup](/docs/assets/events/event-reference/mobile-push#pushcontrolgroup) - for SMS - [sms.controlGroup](/docs/assets/events/event-reference/sms#smscontrolgroup) - for web push - [webpush.controlGroup](/docs/assets/events/event-reference/webpush#webpushcontrolgroup) - for dynamic content - [dynamicContent.controlGroup](/docs/assets/events/event-reference/dynamic-content#dynamiccontentcontrolgroup) - for in-app messages - [inApp.controlGroup](/docs/assets/events/event-reference/inapp#inappcontrolgroup) ## Differences between global and campaign control group --- | Global control group | Campaign control group | |----------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------| | Can be used as a default control group for selected or all message types | A one-off control group used for the purposes of one message | | Customers are selected through the conditions of the segmentation | Customers are selected at random among the recipients of the message | | When the message is distributed, a control group event is generated for a customer who belongs to the control group with the type parameter set to `global` | When the message is distributed, a control group event is generated for a customer who belongs to the control group with the type parameter set to `campaign` | # Synchronizing item feed The VTEX item feed is the source of truth for your product catalog. A clone of that feed is available in Synerise as a Synerise catalog, so both systems always reflect the same data. Any change in the VTEX item feed — adding new items, updating existing ones, or removing items — triggers a synchronization process that keeps the two feeds in sync. Having a clone of the VTEX item feed in Synerise lets you use up-to-date product information directly in your marketing campaigns. The process is identical for all frameworks (FastStore and Store frameworks). You can use one of the following methods: - [Synchronize VTEX item feed changes through configuration in the Synerise platform](#synchronize-vtex-item-feed-changes-to-synerise-in-synerise) - **RECOMMENDED** - [Synchronize VTEX item feed changes through configuration in the VTEX platform](#synchronizing-item-feed-changes-with-the-synerise-catalog) (soon it will be deprecated) - [Pull VTEX item feed from URL to AI feed in Synerise](#pulling-vtex-item-feed-from-url) (soon it will be deprecated) ## Synchronize VTEX item feed changes to Synerise in Synerise This method is configured entirely in Synerise, in **Settings > Apps & Services**. It uses a dedicated VTEX connection that requires a VTEX API key and API token. You can create multiple synchronization configurations — for example, to map products to different Synerise catalogs or to handle different languages. Once a configuration is activated, any product change in VTEX automatically triggers synchronization to Synerise. You can also run a one-time historical import to bring your entire existing product base into Synerise. ### Prerequisites - Your Synerise user account must have the **Settings > Integration**: `create` permission. - You must have a VTEX API key and API token. To obtain them, see the [VTEX documentation](https://help.vtex.com/en/docs/tutorials/api-keys). ### Adding a VTEX connection To connect your VTEX account to Synerise: 1. Go to **Settings > Apps & Services**. 2. Find the VTEX section and click **Show**. 3. Click **Add connection**. 4. In the pop-up, enter your **VTEX account name**, **VTEX API key** and **VTEX API token**. 5. Click **Save**. ### Creating a synchronization configuration To create a synchronization configuration: 1. In the VTEX integration, click **Add configuration**. 2. Define the following settings: | Setting | Description | |---|---| | **Parameters mapping** | Define how product parameters from the VTEX catalog should be mapped to the Synerise catalog. Use the JSON code editor to write the mapping. Parameter names (keys) are the Synerise attribute names; their values are the corresponding item attribute names from VTEX. Use the preview panel on the left to see how a selected product will appear in the Synerise catalog with the applied mapping. | | **Catalog** | Select the Synerise catalog where the product data will be saved. You can also create a new catalog from this view. | | **Language** (optional) | Select the language for the product catalog. If no language is selected, the system uses the default language set in the VTEX platform. | 3. Activate the configuration. Once active, the configuration listens for changes in the VTEX item feed and synchronizes them to Synerise automatically only if [enable notifications from catalog updates in VTEX](#enabling-catalog-update-notifications-in-vtex). ### Using the code inspector The code inspector helps you understand the structure of VTEX item attributes and build mappings faster. For each attribute, you can view its field structure and copy ready-to-use snippets. You can include these snippets in messages sent from Synerise to dynamically display item attribute values. For example, to personalize marketing content with product details. #### Example mapping The following mapping covers a broad range of product attributes and is meant as a starting point. You can copy the entire template into the mapping editor or take only the parts relevant to your catalog structure. Feel free to adapt, trim, or extend it to fit your needs.
{%- macro get_available_variant_ids(variants) -%}
    {%- set result = [] -%}
    {%- for variant in variants -%}
        {%- if variant.isAvailable -%}
            {%- do result.append(variant.id) -%}
        {%- endif -%}
    {%- endfor -%}
    {{- result | tojson -}}
{%- endmacro -%}
{%- macro render_values(values) -%}
    {%- if values is iterable and values is not string -%}
        {%- if values|length == 1 -%}
            {{ values[0] | tojson }}
        {%- else -%}
            {{ values | tojson }}
        {%- endif -%}
    {%- else -%}
        {{ values | tojson }}
    {%- endif -%}
{%- endmacro -%}
{
    "productId": {{ product.id }},
    "availability": {{ product.isAvailable }},
    "name": {{ product.name | tojson }},
    "category": "{{ product.category.name }}",
    "categoryId": "{{ product.category.id }}",
    "categoryTree": "{{ product.category.tree }}",
    "brand": "{{ product.brand.name }}",
    "brandId": "{{ product.brand.id }}",
    "description": "{{ product.description }}",
    "descriptionShort": "{{ product.descriptionShort }}",
    "metaTagDescription": "{{ product.metaTagDescription }}",
    "link": {{ product.linkId | tojson }},
    "isVisible": "{{ product.isVisible }}",
    "isActive": {{ product.isActive }},
    "releaseDate": "{{ product.releaseDate }}",
    {%- if product.price -%}
        "price" : {
        "value": {{ product.price }}
    },
    {%- endif -%}
    {%- if product.listPrice -%}
    "listPrice" : {
        "value": {{ product.listPrice }}
    },
    {%- endif -%}
    {%- if product.sellingPrice -%}
    "sellingPrice" : {
        "value": {{ product.sellingPrice }}
    },
    {%- endif -%}
    "collections": {{ product.collections | tojson }},
    "productSpecifications": {
        {%- for specificationName, specificationValues in product.specifications.items() -%}
            "{{ specificationName | replace(" ", "_") }}": {{ render_values(specificationValues) }}{% if not loop.last %},{% endif %}
        {%- endfor -%}
    },
    "variantsSpecifications": {
        {%- for specificationName, specificationValues in product.availableVariantsSpecifications.items() -%}
            "{{ specificationName | replace(" ", "_") }}": {{ render_values(specificationValues) }}{% if not loop.last %},{% endif %}
        {%- endfor -%}
    },
    "variantsAttributes": {
        {%- for attributeName, attributeValues in product.availableVariantsAttributes.items() -%}
            "{{ attributeName | replace(" ", "_") }}": {{ render_values(attributeValues) }}{% if not loop.last %},{% endif %}
        {%- endfor -%}
    },
    "availableVaraintIds": {{ get_available_variant_ids(product.variants) }},
    "variants": [{% for variant in product.variants %}
        {
            "id": "{{ variant.id }}",
            "name": "{{ variant.name }}",
            "images": {{ variant.images | map(attribute='path') | list | tojson }},
            "manufacturerCode": "{{ variant.manufacturerCode }}",
            "ean": "{{ variant.ean }}",
            "refId": "{{ variant.refId }}",
            {%- if variant.price -%}
            "price": {
                "value": {{ variant.price }}
            },
            {%- endif -%}
            {%- if variant.price -%}
            "listPrice": {
                "value": {{ variant.listPrice }}
            },
            {%- endif -%}
            {%- if variant.price -%}
            "sellingPrice": {
                "value": {{ variant.sellingPrice }}
            },
            {%- endif -%}
            "isAvailable": {{ variant.isAvailable }},
            "availableQuantity": {{ variant.availableQuantity }},
            {%- if variant.offers -%}
            "offers": {{- variant.offers | tojson -}},
            {%- endif -%}
            "specifications": {
                {%- for specificationName, specificationValues in variant.specifications.items() -%}
                    "{{ specificationName | replace(" ", "_") }}": {{ render_values(specificationValues) }}{% if not loop.last %},{% endif %}
                {%- endfor -%}
            },
            "attributes": {
                {%- for attributeName, attributeValue in variant.attributes.items() -%}
                    "{{ attributeName | replace(" ", "_") }}": {{ render_values(attributeValue)}}{% if not loop.last %},{% endif %}
                {%- endfor -%}
            }
        }{% if not loop.last %},{% endif %}
    {% endfor %}]
}
### Running a historical synchronization To import your full existing product base from VTEX to Synerise: 1. Go to **All historical data import**. 2. In the upper-right corner, click **Start new import**. 3. In the pop-up, select a configuration from the dropdown list. The configuration defines the parameter mapping, the target Synerise catalog, and the language. 4. Click **Start import**. ### Enabling catalog update notifications in VTEX To finalize the process of synchronizing VTEX item feed changes to Synerise in Synerise, go to the VTEX panel and proceed to the configuration of the Synerise plugin (**Synerise > Configuration**). Find the **Notify on catalog changes option** and enable it. This setting is required for live synchronization to work. Without it, Synerise does not receive signals about product updates in VTEX, which means changes to your catalog are never detected or applied.
Synerise plugin configuration in VTEX panel
Enabled "Notify on catalog changed option" in Synerise plugin configuration in VTEX panel
## Synchronizing item feed changes with the Synerise catalog --- You can synchronize changes to the items made to the item feed in VTEX with the Synerise catalog on your workspace which contains item feed. This method lets you synchronize an entire catalog and enable synchronization of the catalog after every change in the VTEX item feed. This way, you keep both item feeds updated. While implementing this method, you can specify the names of columns or a catalog which don't exist yet. Then, during the synchronization the columns or the catalog will be created automatically. The synchronization takes around 15 minutes. We suggest using this method instead of creating XML files and importing them into Synerise. 1. In you VTEX workspace, go to **Apps > (Synerise) Catalog synchronization**. **Result**: You are redirected to the mapping view. The list of required parameters is shown. 2. Verify that the VTEX product parameter values are correctly mapped to columns in the Synerise catalog. - you can't add new parameters to the list of required parameters, - in all fields that indicate prices, add the currency. By default, this field is `price` and doesn't contain the currency. For example, to add `EUR` to the price, enter: `{% product.price %} EUR` - optionally, by clicking the Insert icon icon you can change the value of the VTEX parameter which will be sent to the specific column in the Synerise catalog. You can use metadata and specifications. - if the column name doesn't exist in the catalog yet, it will be created during the synchronization process.
Mapping of required parameters
Mapping of required parameters
3. In the **Additional parameters** section, you can add all product parameters which aren't covered in the **Required parameters** section. 1. To add a new parameter, click **Add parameters**. 2. Select the parameter type: 1. **Add field** to define value of the catalog column as a string. 2. **Add object** to define value of the catalog column as a JSON object. 2. In **Column name in Synerise**, enter the name of the column where you want to save the parameter in Synerise. 3. In **VTEX product parameter value**, you can enter a static value or a dynamic reference by clicking the Insert icon icon and selecting the product parameter whose value will be retrieved. 4. Click **Next**. 5. Optionally, you can map product variant parameters with the columns from the Synerise catalog the same way as in the previous steps.
Mapping of variant parameters
Mapping of variant parameters
6. Click **Next**. **Result**: You are redirected to the **Settings** section.
Selecting catalog and enabling synchronization
Selecting catalog and enabling synchronization
7. Enable the **Synchronize Synerise catalog** toggle. 8. From the **Sales Channel** dropdown list, select the store which is the source of the items in VTEX. 9. In the **Catalog name** field, enter the name of the Synerise catalog which contains the product feed. You can find the Synerise catalog name in the Synerise platform in **Data Modeling Hub > Catalogs**. If you enter the name of a catalog which doesn't exist, it will be created. 10. Save the settings. **Result**: Synchronization of the item feed with Synerise is enabled. 11. As the next step, you must synchronize the entire catalog. For this reason, select the **Catalog full synchronization** tab. 3. Click **New synchronization**. **Result**: Synchronization starts. 4. Optionally, on the **Catalog full synchronization** tab, you can monitor the status of synchronization access historical synchronizations of the catalog. ## Pulling VTEX item feed from URL --- This method lets you synchronize item feed in Synerise which is available in AI feed (list of AI feeds is available in the Synerise platform in **Settings > AI engine configuration**) by periodically generating item feed in VTEX and pulling it from the URL to the AI feed in Synerise. This method requires you to perform the following procedures: 1. [Mapping required and additional parameters](#mapping-parameters) 2. [Enabling feed generation](#enabling-feed-generation) 3. [Pulling the feed to Synerise](#pulling-the-feed-to-synerise) ### Mapping parameters --- The center of the view shows fields that are sent to Synerise and saved in the Synerise catalog that is your item feed. By default, all the required parameter mappings are already added. The field names and values that you send to Synerise must meet the requirements of the Google Merchant XML feed. Ensure that your feed includes the item IDs and the size attribute values as an array, along with other attributes of the item variants also presented as an array. Otherwise, the first available item variant in the product feed will be sent to the Synerise catalog which will make personalizing items in a recommendation according to the size (or other attributes) impossible.
A list of required parameters
A list of required parameters
For each mapping: - **Name** is the name under which the value will be saved in Synerise. - **Value** is the value. You can use inserts to pull data from the VTEX database (see examples in fields added by default). 1. In your VTEX workspace, go to **Apps > (Synerise) Products XML Feed**. 2. In all fields that indicate prices, add the currency. By default, this field is `g:price` and this field doesn't contain currency. For example, to add `EUR` to the price, enter: `{% product.selling_price %} EUR` 2. In the **link** field, add your store's hostname to the link. 3. If you want to add a new field, click **Add field**. 1. In the **Name** field, enter the field name. 2. Enter the **Value** field, enter the value. To add an insert that retrieves data from the VTEX database, click the Insert icon icon and select an insert. The inserts include **Metadata**, which is the list of additional transaction parameters and **Specification** which is the list of additional properties that can be added to your items or item variants. The inserts are loaded with the feed configuration page, so if you added a field to the VTEX database in another window, you need to refresh the feed configuration to see it. 4. If you want to remove a field, click the Three dot icon icon to the right of the field and then **Delete**. 5. If you want to replace a value or its fragment (for example, to change the Portuguese gender values to English): 1. Next to the field you want to modify, click the Three dot icon and then **Convert**. 2. In **Current value parameter**, enter the string to replace. This field is case-sensitive. 4. In **New value parameter**, enter the string that will replace the previous string. **Example**: By default, VTEX provides links to scaled-down images. You can modify the image address in **g:image_link** with this conversion:
Modifying a field value when exporting feed to Synerise
Modifying a field value when exporting feed to Synerise
6. To proceed to the next stage of configuring product feed, click **Next**. **Result**: The configuration for sending item variants opens. ### Enabling feed generation --- You can enable automatic product feed generation and define its frequency.
Enabled the Generate feed option
Enabled the Generate feed option
1. Enable the **Generate feed** toggle. 2. By enabling the **Only for available products** toggle, you can exclude out of stock items. 3. You can set the frequency of generating the product feed and use the predefined or the custom value. We don't recommend setting it more often that is needed due to performance reasons.
- The expression is interpreted starting with full hours, regardless of when you save the settings. For example, if you set the interval to 60 minutes and save the settings at 12:25, the nearest update will be at 13:00, then 14:00, and so on. - Copies older than 7 days are deleted from VTEX database.
1. In **Sales channel**, select the store from which you want to send the feed. 2. In **Number of products processed at once**, set the number of records sent in one batch of the export. If your feed has many parameters, a large batch of data may cause problems with transfer between Synerise and VTEX. We recommend setting the batch size to 1000 or less. 2. In the upper-right corner of the page, click **Save settings**. **Result**: You are redirected to the review of Item feed settings. 8. If you want to review the feed after saving the settings, in the **Product feed** section, click **Preview**. While waiting for the feed to be generated, you can get a preview of an XML file with selected items. To generate the preview, select the sales channel and items you want to include in the preview (you can select maximum 50 items).
Product feed preview configuration panel in the Synerise VTEX plugin with sales channel selector and item selection for previewing the XML export
Product feed settings preview
XML product feed preview generated by the Synerise VTEX plugin showing structured product data for selected items
Product feed preview
9. Copy the link from the **Product feed link** field and save in the notepad. You will need this for [Adding the feed to Synerise](#pulling-the-feed-to-synerise). ### Pulling the feed to Synerise --- In Synerise, create a link to the item feed which will be pulled from VTEX. 1. In Synerise, go to **Settings > AI Engine Configuration > Add feed**. 2. On the pop-up, select **Google Merchant**. 3. In the **Feed link** field, enter the link to the product feed which which you can get after [enabling automatic product feed generation](#enabling-feed-generation). 4. Fill out the rest of the form: 1. Enter the name of the feed. 2. As the file type, select **XML**. 3. Define the frequency of pulling feed updates to Synerise. This should be the same frequency as the interval you set in the cron expression in VTEX. 4. In **Authentication type**, select **None**. 5. Confirm the settings by clicking **Apply**. **Result**: The item feed generated by VTEX starts being pulled into Synerise. You can use data from the feed, for example in search and recommendation. # Cloning Logs Cloning objects allows you to easily make a duplicate of a Synerise object, like an expression or segmentation, and use it in different workspaces. When you clone an object, everything it contains - such as nested analyses - is also copied over. This saves you time because you don't have to recreate these objects from scratch for each workspace.
You can find complete documentation on cloning objects in ["Cloning objects to other workspaces"](/docs/settings/workspace/cloning-objects)
In the Cloning Logs section, you can: - Track the progress of the cloning process. - See how many linked elements the cloned object has. - Check the destination workspace for the cloned object. - View the date when the cloning was done. - Get the link and ID of the cloned object (in a source and target workspaces). - Check the cloning details, like event mapping, parameter mapping, and tag mapping. ## Overview ---
Example cloning logs and context menu
Example cloning logs and context menu expanded
# Cloning predictions to other workspaces Before cloning AI predictions between workspaces, we recommend reading the [Introduction to cloning](/docs/settings/workspace/cloning-objects/introduction-to-cloning) article. ## Prerequisites --- - To clone objects between workspaces, you must be assigned a user role that has the following permissions in the source and target workspaces: - [clone objects](/docs/settings/identity-access-management/permissions/settings-permissions#clone-objects) - [all Prediction permissions](/docs/settings/identity-access-management/permissions/ai-hub-permissions#access-predictions) - In the target workspace, enable [models for the types of predictions you want to clone to the workspace](/docs/settings/configuration/ai-engine-configuration/engine-configuration-for-propensity). - Make sure item feeds in the source and target workspaces have equivalent attributes. ## Select prediction to clone --- 1. Go to AI Hub icon **(AI Predictions) Models**. 2. On the list of predictions, find the prediction you want to clone. 3. To the right side of the prediction author information, click Three-dot icon. 4. From the context menu, select **Clone to workspace**. **Result**: The **Choose destination** pop-up appears. 5. On the pop-up, select up to 5 workspaces to which you want to clone your prediction.
A pop-up with selection of workspaces
A pop-up with selection of workspaces
6. Confirm your choice by clicking **Next**. **Result**: The mapping wizard opens. ## Cloning a prediction --- The procedure of cloning a prediction takes place in the mapping wizard and involves: - selecting an item feed in the target workspace based on which you will map prediction elements (such as segmentations, expressions, events, and so on) - mapping the elements of the predictions (see the full list below)
You can't add new item attributes to the item feed in the target workspace while mapping. Make sure item feeds in the source and target workspaces have equivalent attributes.
| Element name | Description |-------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Mapping item attributes | It involves mapping the attributes selected in the **Item attribute** field with their equivalent in the target workspace.
The item attribute field
The item attribute field
| | Mapping expressions | It is required only if the cloned prediction uses expressions or if the segmentation used in the prediction contains expressions in its conditions. | | Mapping aggregates | It is required only if the cloned prediction uses the segmentation that contains an aggregate in segmentation's conditions. | | Mapping segmentations | It is required while cloning any prediction. | | Mapping events | It involves mapping the event or events of the aggregate, segmentation, or expression selected in the settings of the cloned prediction with their equivalents in the target workspace. | | Mapping parameter | It involves mapping the event parameters of the aggregate, segmentation, or expression selected in the settings of the cloned prediction with their equivalents in the target workspace. | | Mapping tags | It involves mapping profile tags used in the conditions of a segmentation with their equivalents in the target workspace. | The following table lists the nested objects within a prediction that will be cloned: | Prediction type/Object | Prediction | Segmentation | Events | Expression | Item feed | |------------------------|------------|--------------|--------|------------|-----------| | Propensity | Green checkmark | Green checkmark | Green checkmark | Red checkmark | Green checkmark | | Best Fit | Green checkmark | Green checkmark | Green checkmark | Red checkmark | Green checkmark | | Lookalikes | Green checkmark | Green checkmark | Green checkmark | Red checkmark | Green checkmark | | Custom | Green checkmark | Green checkmark | Green checkmark | Green checkmark | Red checkmark | ### Procedure 1. In the **Mapping product feed** section, click **Solve issues**. 2. From the dropdown list, for the target workspace, select the item feed based on which you will map the elements from the cloned prediction with their equivalents in the target workspace. 3. If: - the button on the **Objects to clone** section says **Change solution**, this means the prediction with this name does not exist in the target workspace. Then, follow [this procedure](#a-prediction-does-not-exist-yet-in-the-target-workspace). - the button on the **Objects to clone** section says **Solve issues**, the prediction with this name already exists in the target workspace. In such case, follow [this procedure](#a-prediction-already-exists-in-the-target-workspace). ### A prediction does not exist yet in the target workspace 1. After you select the item feed in the target workspace, map the prediction settings with their equivalents in the target workspace by clicking **Solve conflicts** in each section and selecting the equivalent events/parameters/tags.
Mapping events used in one of the objects in the prediction
Mapping events used in one of the objects in the prediction
5. If applicable, repeat step 1 for other workspaces. 2. Confirm the settings in each section by clicking **Apply**. 3. Before cloning, at the bottom of the page, you can view the summary of mapping by clicking **Summary**. 4. When you complete mapping, in the upper right corner, to clone the prediction to the target workspace, click **Clone**. ### A prediction already exists in the target workspace When you clone a prediction and the prediction with the same name and of the same type exists, you need to resolve the conflict. 1. In the **Objects to clone** section, click **Solve issues**. 2. Next to the target workspace name, click the downward arrow icon. **Result**: The list displays the prediction to be cloned which also exists in the target workspace. 3. You can perform one of the following actions for each conflicting object: - To overwrite the object in the target workspace with the object from the source workspace, click **Update**.
Remember that prediction may be named identically by coincidence. Before you decide to use the "update" option, make sure that you're not overwriting something that should not be overwritten.
- To skip cloning the object to the target workspace, click **Don't update**. - To create a copy of the object from the source workspace in the target workspace, click **Create a copy**. The word `copy` will be added to the name of the cloned object in the target workspace.
Resolving conflicts
Resolving conflicts
5. If applicable, repeat steps 2 and 3 for other workspaces. 4. Confirm the settings by clicking **Apply**. 5. In the remaining sections in **Cloning details**, map the prediction settings with their equivalents in the target workspace by clicking **Solve conflicts** in each section and selecting the equivalent segmentation/expression/events. Confirm the settings in each section by clicking **Apply**.
Mapping events used in one of the objects in the prediction
Mapping events used in one of the objects in the prediction
3. Before cloning, at the bottom of the page, you can view the summary of mapping by clicking **Summary**. 4. When you complete mapping, in the upper right corner, to clone the prediction to the target workspace, click **Clone**. ## Events and tags created while cloning ### Events Events and their parameters created while cloning will be available in the target workspace in **Data Modeling Hub > Events**.
These events/parameters will only have `name` and `display name` defined. The remaining metadata are empty and the JWT authorization settings for the event are disabled.
### Tags Tags created while cloning will be available in the target workspace in **Data Modeling Hub > Tags**. ## Cloning logs To check whether the predictions were successfully cloned, go to **Settings > Cloning logs**. # Integrating Sylius with Synerise Sylius is a fast-growing open-source e-commerce platform, prized for its flexibility and booming adoption. With the official Synerise Integration plugin, you will bring Synerise AI capabilities to your commerce: predictions, recommendations, AI search and personalization. Additionally, you will gain real-time insights into customer behavior and keep data synchronized across customers, orders, and products, all within one connected ecosystem.
Product Update - Sylius integration plugin
## Plugin scope --- - **Website activity tracking** - real-time monitoring of key user interactions such as page visits, session starts, and other on-site activities - **Purchase path tracking** - real-time monitoring of transactions and cart events - **Customer identification** - identifying customers on the website along with sending their attributes such as email, phone number, marketing consents, and address - **Product catalog synchronization** - real-time synchronization of all updates in the product catalog - **Historical data integration** - Import existing customer and transaction data into Synerise for a complete, unified view ## Requirements --- 1. You must have [user permissions to create an API key in Synerise](/docs/settings/identity-access-management/permissions/settings-permissions#manage-api-keys). 2. You must have access to admin panel in the Sylius platform. 3. [Add the hostname to the Sylius channel](https://docs.sylius.com/the-book/configuration/channels#create-or-edit-a-channel). 3. Symfony Messenger should be up and running on your store (optional, but highly recommended); Messenger is required for historical data synchronization. It can also be used to queue up events happening live, which will improve overall performance. ## Configuration in Synerise --- ### Add a workspace API key 1. In Synerise, go to **Settings > API Keys > Add API key**. 2. On the pop-up: 1. Select **Workspace**. 2. In **API key name**, enter the name of the API key (it will be visible on the list of API keys). 3. Optionally, in **Description**, enter the description of the key (it will be visible on the list of API keys).
Adding a new API key for the Sylius integration
Adding a new API key for the Sylius integration
3. Confirm by clicking **Save**. 4. Find the key on the top of API key list and click it. 5. On the **Permissions** section, click **Show**. 5. On the pop-up, select the following permissions: - **CATALOG**: - CATALOGS_CATALOG_CREATE - CATALOGS_CATALOG_READ - CATALOGS_ITEM_BATCH_CATALOG_CREATE - **CLIENT**: - API_BATCH_CLIENT_CREATE - API_CLIENT_CREATE - **EVENTS**: - API_ADDED_TO_CART_EVENTS_CREATE - API_ADDED_TO_FAVORITES_EVENTS_CREATE - API_CUSTOM_EVENTS_CREATE - API_LOGGED_IN_EVENTS_CREATE - API_LOGGED_OUT_EVENTS_CREATE - API_REGISTERED_EVENTS_CREATE - API_REMOVED_FROM_CART_EVENTS_CREATE - **SEARCH**: - ITEMS_SEARCH_CONFIG_SEARCH_CREATE, - ITEMS_SEARCH_CONFIG_SEARCH_UPDATE, - ITEMS_SEARCH_CONFIG_SEARCH_READ, - ITEMS_SEARCH_SEARCH_READ - **TRACKER** - TRACKER_CREATE - **TRANSACTION** - API_BATCH_TRANSACTION_CREATE - API_TRANSACTION_CREATE
Permissions for the API key required by the Sylius integration
A fragment of permissions for the API key required by the Sylius integration
6. Confirm by clicking **Apply settings**. 8. On the **General** section, click **Show**. 9. Copy the API key and paste it to the notepad.
Details of the API key
Details of the API key
### Enable basic workspace authentication (optional) By default, the authorization process involves obtaining a token with a limited lifespan through a request. This means that if a token is leaked, it can only be used until it expires, limiting potential misuse. We recommend using Bearer authentication, as it provides this secure, time-limited access. Alternatively, you can use basic workspace authentication, which requires only the workspace GUID and API key. This method can be faster since it doesn’t require additional token acquisition requests. However, if the credentials are leaked, they allow unlimited use until the keys are revoked. In both methods, you have the option to delete or revoke keys, instantly preventing further access. While basic authentication offers simplicity and easy revocation, it may carry a higher security risk compared to token-based Bearer authentication. The full instruction is available in ["Basic workspace authentication"](/docs/settings/tool/api#basic-workspace-authentication) ## Configuration in Sylius --- Log in to your administration panel in Sylius and perform the steps described below: ### Download and install the Synerise plugin 1. Download the plugin from the [Sylius store](https://store.sylius.com/products/synerise-integration-plugin-by-synerise). 2. Install the plugin according to the [documentation](https://github.com/Synerise/Sylius-Integration-Plugin/?tab=readme-ov-file#installation). ### Connect Synerise to Sylius In this part of the process, you need to connect a Synerise workspace to Sylius by using the API key of a Synerise workspace. This will allow you to exchange the data between Synerise and Sylius. 1. On the left panel, click **Synerise > Workspace connection**. 2. In the upper-right corner, click **Connect workspace**. **Result**:
A form which lets you connect Synerise and Sylius workspaces
A form which lets you connect Synerise and Sylius workspaces
3. In **Synerise Workspace API key** provide the API key you created in [Add a workspace API key](#add-a-workspace-api-key). 4. In **Environment**, select the API host URL. You can recognize your host by how you access the portal: - If your Synerise portal URL starts with `https://app.synerise.com/`, select **Microsoft Azure**. - If your Synerise portal URL starts with `https://app.azu.synerise.com/`, select **Microsoft Azure US**. - If your Synerise portal URL starts with `https://app.geb.synerise.com/`, select **Google Cloud Platform**. 5. In **Authentication method**, select the authentication method: - if you want to include an access token in the authorization header of an HTTP request, select **Bearer**; - if you want to use workspace GUID and API key for authentication ([basic workspace authentication](#enable-basic-workspace-authentication-optional)), select **Basic** and provide the Synerise workspace GUID. You can get the workspace GUID in the Synerise platform in **Settings > API keys**. Go to the details of the workspace API key you used in this integration and copy the GUID from the **Basic access authentication** section. 5. In the **Advanced settings** section: - If you want to keep subsequent requests and responses to be sent and received over the same connection, set **Enable keep-alive header** to **Yes**. - In **Timeout of live requests**, define the time after which the real-time requests will be terminated. - In **Timeout of scheduled requests**, define the time after which the scheduled requests will be terminated. - If you want to enable logging requests and responses, enable **Log requests and responses**. Logs will be available on the server in the `ver/log` catalog. ### Assign Synerise workspace to Sylius channels In this part of the process, you will enable tracking customer activity in your store with a tracking code that is automatically added when you assign workspaces to the websites, as detailed in this section. You can connect multiple Synerise workspaces to Sylius (which you have done in the Workspace Connection tab). However, in the Channel configuration section, the setup works like this: Each channel can be assigned with a single workspace, but the same workspace can be assigned to multiple channels. In other words, there is a many-to-one relationship—multiple channels can connect to one workspace, but each channel can connect to only one workspace. 1. On the left panel, click **Synerise > Channel configurations**. **Result**:
Assigning Synerise workspace to the Sylius channel
Assigning Synerise workspace to the Sylius channel
2. From the **Channel** dropdown, select the Sylius channel configuration. 3. From the **Workspace** dropdown, select the Synerise workspace with which you want to connect the Sylius channel configuration. 4. Click **Next**. #### Page tracking In this part of the process, you will initiate page tracking to collect and send data about customers activity on your website to Synerise. The tracking code is can be automatically when you assign channel to a workspace.
A Page tracking section in the Sylius platform
A Page tracking section in the Sylius platform
1. Leave the **Automatically add tracking code to monitor customer activity** option enabled. The tracking code will be created in the Synerise platform and it will be automatically added to your website. 2. If you want to add OG tags to the product pages and to [`page.visit` events generated in Synerise](/docs/assets/events/event-reference/web-and-app#pagevisit), enable **Add OG tags to the product pages and page.visit events**.
Click here to expand the list of OG tags sent which will be in page.visit events
  • `og:type` - specification of the object,
  • `product:retailer_part_no` - the SKU of the item,
  • `og:image` - image URL,
  • `og:title` - product name,
  • `og:url` - product URL,
  • `product:category` - product category,
  • `product:price:amount` - the current price of the item,
  • `product:sale_price:amount` - the price at which the product is currently being offered for sale,
  • `product:original_price:amount` - the original price (before discounts, if any);
3. If you want to display [dynamic content](/docs/campaign/dynamiccontent/introduction-to-dynamic-content) on your e-shop, enable **Dynamic content for PWA, SPA sites**. PWA stands for Progressive Webpage Application and SPA stands for Single Page Application. 4. If you use several subdomains, they generate cookies with their own domain. To declare a specific domain instead, enable **Override cookie domain** and enter the domain. The domain must conform with channel's URL settings. Subdomains are also accepted. 5. By default, page visits are tracked automatically. If you want to implement custom tracking of page visits, enable **Custom page visit implementation** and make necessary changes in your source code. Instructions for the code changes are available in ["Tracking code in Single Page Applications"](/developers/web/advanced-tracking-code#tracking-code-in-single-page-applications); this configuration will also work for progressive webpage application (PWA). 6. Click **Next**. #### Event tracking In this part of the process, select the activities which will be tracked and generated as events in the Synerise platform on the activity list of the customers who performed a given activity. Events generation within the plugin doesn't require additional actions.
The list of tracked activities contains a `product.updated` event which is the only event that won't be generated in Synerise. Each product update in Sylius triggers an update of the catalog which contains a product feed in Synerise.
Click here to expand the list of events and their description

The names of events are hyperlinked to the Synerise default event reference, where you can find a list of parameters which are available in an event. Event generation within the plugin doesn't require additional actions.

Event name Description
`product.addToCart` A customer added an item to their cart.
`product.removeFromCart` A customer removed an item from their cart.
`product.addReview` A logged-in customer submitted a product review.
`cart.status` A summary of the cart’s current contents.
`client.login` A customer logged in to the website or mobile application.
`client.logout` A customer logged out from the website or mobile application.
`client.register` A customer was registered successfully.
`profile.updated` A customer was updated.
`transaction.charge` A transaction was completed. This event is the summary of the transaction.
`product.update` A catalog with a product feed in Synerise is updated. This event is not generated in Synerise.
An Event tracking section in the Sylius platform
An event tracking section in the Sylius platform
1. By default, in the **Tracking events** section, all events are selected. If you want to narrow down the scope of events, de-select the events you don't need. As a result, an event will be generated on the activity list of a profile that belongs to the customer who performed an action. 2. To add parameters from the [_snrs_param cookie](/developers/web/cookies#_snrs_params) to cart and transaction events, enable **Add tracking parameters to cart and transaction events**. 3. In **Queue tracking events**, select the events which will be queued up and sent through a consumer process. Deselected events will be sent in real-time. 4. To complete the whole configuration, click **Configure**. **Result**: Live synchronization of customer activities has been enabled. This means that the events you selected in this part of the process are sent to Synerise.
When a customer agrees to receive marketing communication, their profile is either created if it does not yet exist or updated if it already exists.
### Synchronization (on demand) Up to this point, a real-time synchronization was triggered through [event tracking](#event-tracking). In this part of the process, you can initiate synchronization on demand of the following information: - products,
Make sure you have [added the hostname to the Sylius channel](https://docs.sylius.com/the-book/configuration/channels#create-or-edit-a-channel). Otherwise the product synchronization will fail.
- orders, - customer data, including marketing agreements; By doing this, you can provide Synerise with transaction data, customer information acquired to until now, and integrate your item feed into Synerise.
When a customer agrees to receive marketing communication, their profile is either created if it does not yet exist or updated if it already exists.
To synchronize data from Sylius to Synerise on demand, you need to set up a synchronization for a specific channel. This initial step entails choosing a Sylius channel, selecting the relevant product attributes, and determining the format for sending these attributes during synchronization. Subsequently, you can proceed to execute a synchronization job by defining the data scope and specifying the time range from which information will be extracted and transmitted. #### Create synchronization for a channel 1. On the left panel, click **Synerise > Synchronization**. 2. In the upper right corner, click **Configure**. **Result**:
A blank synchronization form in which you must select the Sylius website and define product settings for synchronization
A blank synchronization form in which you must select the Sylius website and define product settings for synchronization
3. From the **Channel** dropdown list, select the channel from which the data will be used for synchronization. 4. In **Product settings**, from the **Product attributes** list, select the item attributes which will be updated in Synerise. 5. In **Attribute value**, select the format of item attributes: - If you want to send the IDs of item attributes (for example, `1234`) and their values (for example, `blue`), select **Id & Value**, as a result, the object will look as follows:
{'id':1234, 'value': 'blue'}
We recommend sending both as it provides more data. - If you want to send only the values of attributes (for example, `blue`), select **Value**; - If you want to send only the IDs (for example, `1234`), select **Id**; 6. Confirm the configuration by clicking **Create** in the upper-right corner. **Result**:
A synchronization for a Sylius channel available on the list of synchronizations
A synchronization for a Sylius channel available on the list of synchronizations
#### Start synchronization job In this part of the process, you can launch a synchronization job, select the scope of data, and choose time from which data will be synchronized. 1. On the left panel, click **Synerise > Synchronization**. 2. Next to the synchronization of the Sylius channel, click the eye icon. 3. In the upper-right corner, click **New synchronization**. 4. In **Sync settings**, select the data scope: - **Customers** - if you want to synchronize customer information. As a result, `profile.updated` events will be generated on the activity list on a profile card in Synerise. - **Products** - if you want to synchronize product information. As a result, the item feed in the Synerise catalog will be updated. The catalog containing the feed in Synerise follows this naming convention: `channel-{id}`, for example, channel-123. - **Orders** - if you want to synchronize transactional data. As a result, `transaction.charge` events will be generated on the activity list on a profile card in Synerise. 5. In **Since** and **Until**, define the period from which the data will be synchronized. 6. Start the synchronization by clicking **Create** in the upper-right corner. The synchronization will be executed in background by the messenger consumers. Please make sure your messenger:cosnume process is being run. # Synchronizing promotions --- This procedure is required only if you want to use Synerise promotions in your VTEX store. Synerise serves as the **primary** platform for managing promotions then. If you don't want to use the Synerise promotions feature, skip this article. The instructions in this document are compatible with: - VTEX FastStore framework, - VTEX Store Framework. ## Synchronization frequency --- - Synchronization is one-directional (from Synerise to VTEX), meaning updates to promotions in VTEX do not reflect back to Synerise. Changes made in Synerise overwrite modifications in VTEX. - Promotions are synchronized to VTEX only when they are created, updated, or deleted in Synerise. ## Additional information --- - Certain VTEX settings can only managed by including custom parameters in the Synerise promotion settings (instructions available further in this document). - Some promotion settings in Synerise may not align with VTEX promotions and will not synchronize. ## Scope of synchronized information --- The following information is synchronized from Synerise to VTEX: - [Cart value threshold](#cart-value-threshold) - [Discount type](#discount-type) - [Discount value](#discount-value) - [Information on whether the promotion applies to the cheapest or most expensive item](#applies-to-the-most-expensive) - [Information on whether the promotion combines with others](#combining-promotions) - [Items included in the promotion or items excluded from the promotion](#including-or-excluding-items) - [Number of times a customer can use a promotion](#limits-per-customer) - [Number of items to which a promotion will be applied](#number-of-items-promotion-applies-to) - [Promotion duration](#promotion-duration) - [Promotion ID](#promotion-id) - [Promotion name](#promotion-name) - [Promotion status](#promotion-status) The following data from the Synerise promotions remain **unsynchronized**: | Section name | Option name | |--------------|--------------------------------------------------------------------------------------------------------| | **Audience** | All options in this section. | | **Contents** | - Price before discount,
- Display name,
- Long description,
- Thumbnails,
- Images | | **Store** | All options in this section. | | **Loyalty** | All options in this section. | ## Synchronization scenarios --- | Scenario | Required actions | |----------------------------------|----------------------------------------------------------------------------------------------------------------------------------------| | Promotions in VTEX already exist | [Create equivalent VTEX promotions in Synerise](#creating-promotions-in-synerise) with the required settings:
- [`vtex-promotion` tag](#promotion-tag)
- [VTEX promotion ID](#vtex-promotion-id). | | No promotions in VTEX yet | Start with [creating promotions in Synerise](#creating-promotions-in-synerise); once saved or published, they will automatically synchronize to VTEX. | ## Enabling synchronization --- 1. In your VTEX workspace, navigate to **Apps > (Synerise) Access to VTEX** and [grant Synerise access to VTEX API](/docs/settings/tool/vtex/vtex-integration#schedule-synchronization). 2. In Synerise, go to **Data Modeling Hub > Tags**. 3. Find the predefined **promotions** folder in **Data Modeling Hub > Tags**. 1. On the left side menu, select the promotion tag folder you crated in the previous step. 2. Click **Add tag**. 3. In the name field, enter `vtex-promotion` 4. You can define additional settings of the tag according to the instructions in ["Add new tag" section](/docs/assets/tags#adding-tags). 4. Make sure equivalent promotions exist in both Synerise and VTEX. - If you have already created promotions in VTEX, see the **Promotions in VTEX already exist** scenario in ["Synchronization scenarios" section](#synchronization-scenarios). You can use [mapping guide](#mapping) to make sure the options are the same in Synerise and VTEX. - If you haven't created any promotion in VTEX yet, start with [creating promotions in Synerise](#creating-promotions-in-synerise). You can check the [mapping guide](#mapping) to understand how the options from the Synerise promotions will be reflected in the equivalent VTEX promotion. 6. In Synerise, add the `vtex-promotion` tag to the promotions that you want to synchronize. ## Pausing synchronization --- To prevent synchronizing promotions to VTEX, remove the [vtex-promotion tag](#promotion-tag) from the settings of selected promotions in Synerise. ## Creating promotions in Synerise --- 1. In Synerise, go to **AI Hub > Regular Promotions > Add promotion**. 2. In the **Content** section, add the [`vtex-promotions` tag](#promotion-tag) required for synchronization. 2. Configure the remaining settings of the promotion.
You can skip or use default values for the parameters that aren't synchronized. See ["Scope of synchronized information"](#scope-of-synchronized-information).
For detailed instructions on creating promotions, see: - [Promotions for selected items](/docs/ai-hub/promotions/creating-promotions) - [Promotions for entire cart](/docs/ai-hub/promotions/creating-promotions-for-entire-basket) 3. When you finish creating the promotion, click **Finish later** or **Publish**. The promotion will be synchronized to VTEX immediately. It will be assigned Paused or Active status in VTEX, respectively. ### Restrictions - While [selecting or excluding items](#including-or-excluding-items) from a promotion: - do not use the **Filtered items** option. It's not supported for VTEX synchronization. - keep in mind that including and excluding items from a promotion (available in the **Items** and **Exclude items** sections, respectively) at the same time is not allowed. ## Mapping --- This section shows how Synerise promotion settings will be mapped in VTEX. ### Promotion type In Synerise there are two promotion types: - For selected items - For entire cart This information isn't mapped. ### Promotion name This is the title of the promotion. | Setting in Synerise promotion | Its counterpart in VTEX promotion | |-------------------------------|-----------------------------------| | Promotion name in Synerise | Promotion name in VTEX | ### Promotion status This is the status of the promotion. In Synerise, on the user interface the promotion can have the following statuses and they map in VTEX as follows: | Statis in Synerise promotion | Its counterpart in VTEX promotion | |-------------------------------|-----------------------------------| | Promotion status in Synerise | Promotion status in VTEX | | Published | Active | | Draft | Paused | | Hidden | Inactive | ### Promotion ID This is a unique identifier of a promotion in Synerise. It's generated automatically. As a result of synchronization, the marketing tag is created in the VTEX promotion with the value of Promotion ID. | Setting in Synerise promotion | Its counterpart in VTEX promotion | |-------------------------------|-----------------------------------| | Promotion ID in Synerise | VTEX Marketing tag | ### Promotion tag To be able to synchronize Synerise promotions to VTEX, the promotion must be assigned with the `vtex-promotions` tag. This promotion component doesn't have its counterpart in VTEX. You can assign the tag to the promotion in the promotion configuration form in the **Contents** tab.
The vtex-promotions tag
The vtex-promotions tag
### VTEX promotion ID - The `idCalculatorConfiguration` parameter contains the ID of the promotion in VTEX. - It's used only in the configuration of the Synerise promotions. - This parameter can be added to **Params (JSON code)** field in the **Content** section. - To locate the VTEX promotion's ID, enter the editing mode of that promotion. The ID is added to the final part of the URL. | Scenario | Result | |---------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | You add this parameter to a promotion | The promotion with this ID in VTEX will be overwritten with the settings of the Synerise promotion which contains this reference. | | You create a promotion without this parameter | A synchronization request is made to VTEX. In response, Synerise receives the ID of that promotion in VTEX and adds it as `idCalculatorConfiguration` to the settings of that promotion in Synerise. |
{
    "idCalculatorConfiguration": "d72b3425-e50c-4e3a-8052-cbd4a03fe0c0"
}
| Setting in Synerise promotion | Its counterpart in VTEX promotion | |-------------------------------|-----------------------------------| | Parameter with VTEX promotion ID | VTEX promotion ID | ### Combining promotions To let a Synerise promotion be applied with other promotions, add a `"cumulative": true` parameter in the JSON in the configuration form of the promotion, in the **Contents** tab. | Setting in Synerise promotion | Its counterpart in VTEX promotion | |-------------------------------|-----------------------------------| | Combining in promotion setting in Synerise | Apply with other promotions option in VTEX | ### Number of items promotion applies to To set the number of eligible items in each cart, add a `maxNumberOfAffectedItems` custom parameter in the JSON in the configuration form of the promotion, in the **Contents** tab. The value must be an integer, for example:
{
    "maxNumberOFAffectedItems": 1
}
| Setting in Synerise promotion | Its counterpart in VTEX promotion | |-------------------------------|-----------------------------------| | Number of items promotion applies to, code snippet in Synerise | Number of items promotion applies to in VTEX | ### Applies to the most expensive? To define whether the promotion will be applied to the most expensive or cheapest items, add a custom parameter in the JSON snippet available in the configuration form of the promotion in the **Contents** tab. Use the `isAppliedToMostExpensive` parameter which accepts boolean values. Setting the parameter to: - `true` causes application of the promotion to the most expensive item, - `false` causes application of the promotion to the cheapest item.
{
      "isAppliedToMostExpensive": true
  }
| Setting in Synerise promotion | Its counterpart in VTEX promotion | |-------------------------------|-----------------------------------| | Applies to the most expensive code snippet in Synerise | Apply to the most expensive option in VTEX | ### Including or excluding items In Synerise promotion, you can select items from an item feed to be included or excluded from the promotion (the exclude option is available only for promotions for entire basket). Including and excluding items allows the following options: - selecting items from item feed - selecting the entire item feed as the scope of items included in the promotion - filtering items is NOT available for VTEX integrations In the context of synchronization of promotions between Synerise and VTEX: - Do not use the filtering items option during synchronization as it is not supported. - Do not combine the include and exclude options together. If you do so, only included items (defined in the **Items** section) will be synchronized. Including and excluding based on item attributes is covered in ["Including or excluding item attributes"](#including-or-excluding-item-attributes). #### Include items | Setting in Synerise promotion | Its counterpart in VTEX promotion | |-------------------------------|-----------------------------------| | Include items in promotions - Synerise | Include items in promotions - VTEX | #### Exclude items | Setting in Synerise promotion | Its counterpart in VTEX promotion | |-------------------------------|-----------------------------------| | Exclude items from promotions - Synerise | Exclude items from promotions - VTEX | ### Including or excluding item attributes #### Including To include items from specific category, brand, or collection, you must provide their IDs. For that purpose, use `categories`, `brand`, and `collection` and as their values provide an array of attribute value IDs you want to include in a promotion. For example:
{
    "categories": ["category_1", "category_2", "category_3"],
    "brands": ["brand_ABC", "brand_DEF", "brand_XYZ"],
    "collections": ["collection_1", "collection_2", "collection_3"]
}
| Setting in Synerise promotion | Its counterpart in VTEX promotion | |-------------------------------|-----------------------------------| | Include item attributes in Synerise | Include item attributes in VTEX | #### Excluding To exclude items from specific category, brand, or collection, you must use the following parameters, respectively: - `categoriesAreInclusive` - `brandsAreInclusive` - `collectionsAreInclusive` These parameters accept boolean values. Setting them to `false` excludes specified item attributes from promotion. After each parameter, you must provide an array with IDs of categories, brands, or collections. For example:
{
    "categoriesAreInclusive": false,
    "categories": [123, 345, 789],
    "brandsAreInclusive": false,
    "brands": [987, 654, 321],
    "collectionsAreInclusive": false,
    "collections": [1, 2, 3]
}
| Setting in Synerise promotion | Its counterpart in VTEX promotion | |-------------------------------|-----------------------------------| | Exclude item attributes in Synerise | Exclude item attributes in VTEX | ### Limits per customer This option lets you specify the maximum number of times a customer can use a promotion. Once the defined limit is reached, the promotion will no longer be available for that customer. | Setting in Synerise promotion | Its counterpart in VTEX promotion | |-------------------------------|-----------------------------------| | Limit per customer in Synerise | Limit per customer in VTEX | ### Cart value threshold *Available only for [Promotions for entire cart](/docs/ai-hub/promotions/creating-promotions-for-entire-basket).* This option allows you to set the minimum and maximum values that a shopping cart must meet in order to be eligible for a promotion. Only shopping carts within the specified value range will qualify for the promotion. | Setting in Synerise promotion | Its counterpart in VTEX promotion | |-------------------------------|-----------------------------------| | Cart value threshold in Synerise | VTEX cart value | ### Discount type In Synerise, you can choose from the following discount types: - **Percentage** - This option sets the discount amount as a percentage of the original price. - **Amount** - This option sets a fixed discount amount to subtract from the original price. | Discount type in Synerise promotion | Its counterpart in VTEX promotion | |-------------------------------|-----------------------------------| | Synerise promotion discount type | VTEX promotion discount type | | Percentage | Percentage | | Amount | Fixed amount | ### Discount value This is the value for the selected [discount type](#discount-type). | Setting in Synerise promotion | Its counterpart in VTEX promotion | |-------------------------------|-----------------------------------| | Synerise promotion discount value | VTEX promotion discount value | ### Promotion duration This option defines the time promotion will be available for use. | Setting in Synerise promotion | Its counterpart in VTEX promotion | |-------------------------------|-----------------------------------| | Synerise promotion schedule section | VTEX promotion schedule section | # Test profiles You can make a group of test profiles by picking them from your existing profiles in the Behavioral Data Hub icon **Profiles** section. You can include up to 99 test profiles, and use them for: - checking preview of message templates, [documents](/docs/assets/documents/introduction-to-documents), [snippets](/docs/assets/snippets), [AI recommendations](/docs/ai-hub/recommendations-v2/previewing-recommendations), and [AI Search](/docs/ai-hub/ai-search/previewing-search-engine-results). If your message uses customized details, you can choose a test profile to see how the message will look when it's sent.
The preview context option is available in the left upper corner in the code editor of any message type in type
The preview context option is available in the left upper corner in the code editor of any message type in type; after expanding the list, you can find test profiles at the top of the list
- sending test messages When preparing messages for your customers, you can send a test version of such message to the test profiles. - [sending test requests within workflows](/docs/automation/test-requests-for-outgoing-integrations) When preparing workflows that connect to external APIs or services, you can send test requests to verify credential validity, connection status (for example, expired tokens or invalid credentials), and dynamic templating errors. You can also aim these test profiles in the final campaigns, include them in analyses, workflows. You can remove them from the test list to return them back to their original profile status.
[Profile merging](/docs/crm/merge) is not applicable to test profiles if at least [one source profile](/docs/crm/merge) contains attributes marked as [personally identifiable information (PII)](/docs/settings/pii-protection).
## Prerequisites --- To manage test profiles, you must be granted a [user role](/docs/settings/identity-access-management/permissions) with a permission to preview (read), create, edit, and/or delete test profiles. The permission is available in the [permission matrix](/docs/settings/identity-access-management/permissions#permissions) under **Settings > Test profiles**. ## Designating test profiles --- You can make a group of test profiles by picking them from your existing profiles in the Behavioral Data Hub icon **Profiles** section. 1. Go to Settings icon **Settings > Test profiles**. 2. On the **Test profiles** section, click **Show**. **Result**: A form appears.
View of unconfigured test profile list
View of unconfigured test profile list
4. Click **Add profiles**. **Result**: A pop-up with a list of existing profiles appears. 5. Next to the name of the profile which you want to use as a test profile, select the checkbox. 6. At the bottom of the pop-up, confirm by clicking **Apply**. **Result**:
View of unconfigured test profile list
View of configured test profile list
# Data exchange encryption In today's digital landscape, ensuring the security and integrity of data exchange processes is most important for businesses across all industries. While current data exchange methods in Synerise involving files or HTTPS requests are secured with protocols, some organizations may require an additional layer of protection for sensitive information. To address these heightened security needs, Synerise lets you improve the security of your data transfers by decrypting incoming data and encrypting outgoing data by RSA or AES keys which you can add in Synerise. These keys can be used while preparing [data transformation rules](/docs/automation/data-transformation-and-imports) in the form of [Encrypt Data](/docs/automation/data-transformation-and-imports/transformations-and-data-operators/encrypt-data) and [Decrypt Data](/docs/automation/data-transformation-and-imports/transformations-and-data-operators/decrypt-data) nodes, which can help you encrypt and decrypt data in the files which you retrieve or export outside Synerise. This feature is primarily tailored for enterprise customers seeking to secure their data exchange processes and uphold highest security standards. ### Purposes --- You can use RSA or AES keys for the following purposes: | Key type | Functions | |----------|--------------------------------------------------------------------------------------------------------------------------------------| | AES (265-bit keys only) | - this key type operates using AES-GCM mode,
- encrypting and decrypting values in an imported/exported file,
- encrypting and decrypting by means of [Jinjava tags](/developers/inserts/automation#encrypt-data), [Jinjava encrypt filter](/developers/inserts/automation#encrypt), and [Jinjava decrypt filter](/developers/inserts/automation#decrypt) | | RSA (RSA-2048 standard only) | - this key can encrypt only small amount of data (up to 180 bytes),
- encrypting by means of the [encrypt Jinjava tag](/developers/inserts/automation#encrypt-data) and [Jinjava encrypt filter](/developers/inserts/automation#encrypt) | ### Logic --- The process of adding the key is determined by the distinct logic provided by AES and RSA keys. ### AES keys In Synerise's data exchange encryption process, you bring your own Data Encryption Key (DEK) to encrypt and decrypt data within our system. Synerise provides you with the Key Encryption Key (KEK) which you must use to wrap your DEK to secure the transmission of the encrypted data and to restrict access only to authorized users. This process looks as follows: 1. Download a workspace key encryption key (KEK) from **Settings > Encryption Key**. 2. Wrap your AES-256 secret key using the downloaded key encryption key and the Python script below. The script accepts a base64-encoded secret key, only 256 bit/32 byte secrets are supported. The script will use RSA-OAEP padding with SHA-256 to print a wrapped AES-256 key to standard output.
Click to expand the script
from cryptography.hazmat.primitives.asymmetric import padding from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.serialization import load_pem_public_key import click import base64 from importlib.resources import path def encrypt_key(public_key, secret_key): ''' This function takes PEM encoded public key and AES secret key in base64 encoded form (raw bytes base64 encoded) and wraps the AES secret using public key. The public key for wrapping may be downloaded from UI or using Synerise API endpoint /workspace-wrapping-key and is global for each workspace. Note! As for now only 32 bytes (256 bits) secret key is supported! ''' padding_config = padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None ) encrypted_data = public_key.encrypt(secret_key, padding_config) return encrypted_data @click.command() @click.option('--public-key', 'public_key', required=False, help='RSA wrapping public key') @click.option('--public-key-file', 'public_key_file', required=False, help='RSA wrapping public key file path') @click.option('--secret-key', 'secret_key', required=True, help='Base64 encoded secret key to wrap and upload') def wrap_key(public_key: str, public_key_file:str , secret_key: str): ''' Script wrap_aes_key_for_synerise. Specify either: --public-key "{public-key-content}" or path to public key file: --public-key-file {path} and a secret key (base64 encoded AES-256 secret i.e. 32 random bytes) to wrap for upload to Synerise. Requires packages: "click>=8.2.1", "cryptography>=45.0.5", ''' key = public_key if public_key is None and public_key_file is not None: with open(public_key_file, 'r') as file: key = file.read() secret_key_bytes = base64.b64decode(secret_key) len_secret = len(secret_key_bytes) assert len_secret == 32, f"Secret key must have 256 bits/32 bytes! Given a secret key with: {len_secret} bytes !" # prepare PEM key from Synerise format i.e. # first prune PEM marks and construct PEM key with a prefix, 64 characters per line and pem suffix pem_prefix = "-----BEGIN PUBLIC KEY-----" pem_suffix = "-----END PUBLIC KEY-----" key = key[len(pem_prefix):] if key.startswith(pem_prefix) else key key = key[:-len(pem_suffix)] if key.endswith(pem_suffix) else key lines = [pem_prefix] while True: if len(key) >= 64: lines.append(key[:64]) key = key[64:] else: lines.append(key) break lines.append(pem_suffix) public_key_in_lines = "\n".join(lines) # load pem public_key public_key = load_pem_public_key(public_key_in_lines.encode()) # encrypt does wrap on AES DEK key encrypted_key = encrypt_key(public_key, secret_key_bytes) wrapped_key = base64.b64encode(encrypted_key).decode('utf-8') print(wrapped_key) if __name__ == "__main__": wrap_key()
4. Upload the output of the above script to Synerise while [adding an AES encryption key](#adding-an-encryption-key). ### RSA keys When you add an RSA key type to Synerise, you only need to provide the public key while ensuring the private key is securely stored in a safe location. This means that the process of adding the RSA key only requires providing your public key. ### Statuses --- An encryption key can receive the following statuses: - **Enabled** - A key receives this status after creating. The key is ready for use. - **Pending** - A key receives this status when it's activation date is set for the future. - **Revoked** - After being revoked, a key and its versions are labeled as revoked. A key in this state cannot be used and its status cannot be changed.
Revoking a key used in a [transformation rule](/docs/automation/data-transformation-and-imports/creating-data-transformation) within a running workflow will cause that workflow to stop working.
- **Expired** - This status can be assigned to a key version. The encryption key version with this status cannot be used. ## Requirements --- You must have a user role with the following permissions: - **Settings > Encryption keys > Read** - To preview list of encryption keys, preview list of encryption keys in [Encrypt Data](/docs/automation/data-transformation-and-imports/transformations-and-data-operators/encrypt-data) and [Decrypt Data](/docs/automation/data-transformation-and-imports/transformations-and-data-operators/decrypt-data) nodes in Data Transformation; - **Settings > Encryption keys > Create** - To create an encryption key; - **Settings > Encryption keys > Edit** - To add a key version, to revoke the key; ## Adding an encryption key --- The procedure involves downloading a key encryption key (KEK) which you will use to encrypt (or decrypt) your data encryption key (DEK). After you encrypt your key with the KEK, you can paste it in the form. Additionally, you can define the name of the key, add a description to the key (to let other workspace users know what is the purpose of the key), activation and expiration dates. 1. Go to Settings icon **Settings > Encryption keys**. 2. In the upper-right corner, click **Add Encryption Key**. 3. From the dropdown list, select the key type: - **Symmetric key (AES)** - **Asymmetric key (RSA)** **Result**: A pop-up appears.
A pop-up with a key encryption key for downloading
A pop-up displaying the encryption key for download
3. If in the previous step: - you selected **Symmetric key (AES)**, click **Download**. **Result**: A key encryption key is downloaded to your device. Make sure you wrap your DEK with this key and script provided in [Logic for AES keys](#aes-keys). - you selected **Asymmetric key (RSA)**, click **Next step**. **Result**:
A blank form for creating a symetric key
A blank form for creating a symmetric key
6. In **Data Encryption Key**: - if you are adding an AES key, paste the wrapped key. Currently only 256 bit/32 byte secrets are supported. - if you are adding RSA key, paste the public key. 6. In **Data Encryption Key name**, enter the name for your key for the purposes of identifying the key on the list of encryption keys. 7. In **Description**, enter the purpose of the encryption key. 8. Optionally, to define the activation and/or the expiration dates for the encryption key, enable **Activate at specific date** and/or **Expire at specific date** options, respectively. From the calendar, select the dates. If you don't provide: - the activation date, the key will be saved to be activated on the current date; - the expiration date, the key will never expire. 9. Confirm the settings by clicking **Apply**. **Result**: The key is saved and ready for use. ## Adding a key version --- 1. Go to **Settings > Encryption keys**. 2. On the list of encryption keys, find the one to which you want to add a version. 3. Next to the name of the encryption key, click Three dot icon. 4. From the dropdown list, click **Add new version**. 5. Perform the steps from step 4 from the [Adding encryption key](#adding-an-encryption-key) section.
You can only upload your key wrapped with key encryption key and optionally, define the activation and expiration dates for it.
## Revoking a key --- You can revoke a key, for instance, in the event of a key leak. Revoking a key will also revoke all of its versions. This action is irreversible and will break the integrations which use the key. 1. Go to **Settings > Encryption keys**. 2. On the list of encryption keys, find the one to which you want to revoke. 3. Next to the name of the encryption key, click Three dot icon. 4. From the dropdown list, click **Revoke**. **Result**: A pop-up appears. 5. Confirm the execution by clicking **Yes, revoke**. # Protection of personally identifiable information In Synerise, you can use a feature that protects personally identifiable information (PII), letting you designate which workspace users and API keys can access PII. By default, the ID and UUID data are considered PII, but you can flag other attributes and event parameters as PII. This system lets users without PII access work with the data while ensuring that they cannot view the sensitive information, striking a balance between data usability and protection of personal information. ## What counts as PII By default, only the `ID` and `UUID` [profile attributes](/docs/crm/customer-properties) are considered PII, but they are not encrypted - only masked. Additionally, users with specific [permissions](/docs/settings/identity-access-management/permissions#permissions) can mark any profile attribute or [event parameter](/docs/assets/events/adding-event-parameters) as PII. It's important to note that once a parameter is marked as PII, it applies to all relevant [events](/docs/assets/events/event-definitions). ## Impact on tracking Identification of profiles in workspaces with PII protection enabled is only possible in the following ways: - **Web tracking with JS SDK**: [JWT authentication](/developers/web/jwt-auth) must be enabled. For example, when submitting a form, the JavaScript SDK will send a [`form.submit` event](/docs/assets/events/event-reference/web-and-app#formsubmit), but the request will be rejected without a JWT token by the backend. - **Mobile app integration**: The client key in a mobile app must have permissions to access PII data. - [**Integration through API**](https://hub.synerise.com/api-reference/profile-management#tag/Profile-management/operation/BatchAddOrUpdateClients): Authorization must be performed with an API key that has permissions to access PII data. ## Enabling the PII protection When creating a workspace, you must specify whether it will support PII protection. Enabling PII protection must occur before loading event and profile data, as encryption cannot be applied retroactively. Enabling PII protection is also possible for older workspaces with existing data, however, the data won't be encrypted retroactively. By default, PII protection is disabled. The process for enabling this feature is the same for both new and existing workspaces. Below you can find a short overview of the process. | Stage | Description or Result | |-------------------------------------|----------------------------------------------------------------------------------------------------------------------------| | [Request enabling access to PII Protection](#request-enabling-access-to-pii-protection) | Request access to settings that allow granting PII data access to user roles, API keys, and marking attributes and event parameters as PII. | | [Grant or restrict access to PII data](#grant-or-restrict-access-to-pii-data) | After confirmation, in the Synerise platform, update permissions for API keys and user roles, and mark sensitive attributes and event parameters.
Changes are not yet applied; data is not protected yet.
| | [Start enforcing PII protection](#start-enforcing-pii-protection) | Synerise enforces the settings defined in "Grant or restrict access to PII data" stage, activating PII protection. | ### Request enabling access to PII protection Make a request for enabling access to the PII protection feature to [Synerise Support](https://hgintelligence.atlassian.net/servicedesk/customer/portals). Enabling the PII protection of the workspace causes: - Access to the **PII protection status** section under this link: https://app.synerise.com/settings/pii This section shows the state of the PII protection option.
PII protection status section
PII protection status section
- Appearance of the PII-related user permissions: **PII settings** Setting these permissions to: - **Read**: allows users to set PII access level for API keys and user roles. - **Update** and **Create**: allows users to mark profile attributes and event parameters as PII.
A fragment of permission list which is available in Settings > Roles, after clicking a role, the editing view displays, and the Permission section is available in which you can find this list
List of permissions in Settings > Roles that can be accessed by clicking on a role and viewing the Permission section.
The data is not protected yet. Now you have been granted access to the PII settings. The next step is to [grant or restrict access to PII data](#grant-or-restrict-access-to-pii-data). These changes will take effect and become live [after Synerise receives and processes your request to execute PII protection](#start-enforcing-pii-protection).
### Grant or restrict access to PII data After enabling access to the PII protection feature (the status is reflected in https://app.synerise.com/settings/pii through the **PII access configuration** toggle), perform the following actions: #### Enable access to PII data for user roles Update [user roles](/docs/settings/identity-access-management/permissions) by granting them access to PII data. You can also grant access to PII data to the [predefined Synerise roles](/docs/settings/identity-access-management/permissions#predefined-synerise-roles). To view the scope of actions available to users with roles that have **Full access to PII** data, see the table in the ["Impact on user access and actions" section](#impact-on-user-access-and-actions). The PII setting applies exclusively to the access rights associated with each specific role. For example, if a user holds two roles: - Role A, which grants access to Behavioral Data Hub and has PII access - Role B, which grants access to Decision Hub and doesn't have PII access The user will have full access to PII data within Behavioral Data Hub, while having no access to PII data within Decision Hub.
When a new role is assigned to a user, they must refresh the page for the changes to take effect. If an existing role assigned to a user is updated, no action is required - the new settings will be applied automatically.
1. Go to **Settings > Roles**. 2. On the role list, find the role for whom you want to enable access to PII data. 3. Click Three-dot icon **> Edit**. 4. On the **PII access** section, click **Define**. 4. Click **Full access to PII data**.
The PII access section available while defining the settings of a role
The PII access section available while defining the settings of a role
5. Confirm by clicking **Apply**. #### Enable access to PII data for API keys Update existing [API keys](/docs/settings/tool/api) to grant them permissions for operations involving PII data.
There is no need to refresh the JWT for API keys after updating them. The token will automatically reflect the new settings after up to 5 minutes.
1. Go to **Settings > API keys**. 2. To add access to an existing key, open the details of the key to which you want to grant the access. 3. On the **PII access** section, click **Define**. 4. Click **Full access to PII data**.
The PII access section available while defining the settings of an API key
The PII access section available while defining the settings of an API key
#### Mark profile attributes as PII Label specific [profile attributes](/docs/crm/customer-properties) as PII to ensure their value is accessible only for users who have access to PII data.
Completing this procedure generates [`profile.updated`](/docs/assets/events/event-reference/profiles#profileupdated) events.
1. Go to **Data Modeling Hub > Profile attributes**. 2. On the list of attributes, open the details of the attribute which you want to mark as PII. 3. In the **PII protection** section, click **Define**. 4. Enable the **This attribute is personal data** option. **Result**: A `profile.updated` event is generated for all profiles that have this attribute assigned. This event will include the encrypted value of the attribute.
The PII protection section; it's accessible in Data Modeling Hub > Profile attributes, in the details of a profile attribute
The PII protection section; it's accessible in Behavioral Data Hub > Profile attributes, in the details of a profile attribute
When an attribute is marked as PII, you can only search for profiles by that attribute using the full value. Partial values do not return results. For example, if the `email` attribute is marked as PII, searching for `john` or `johndoe@` returns no results, but searching for `johndoe@example.com` does.
#### Mark event parameters as PII Label specific [event parameters](/docs/assets/events/adding-event-parameters) as PII to ensure their value is accessible only for users who have access to PII data. 1. Go to **Data Modeling Hub > Event parameters**. 2. On the list of event parameters, open the details of the parameter which you want to mark as PII. 3. In the **PII protection** section, click **Define**. 4. Enable the **This parameter contains personal data** option.
The PII protection section; it's accessible in Data Modeling Hub > Event parameters, in the details of an event parameter
The PII protection section; it's accessible in Data Modeling Hub > Event parameters, in the details of an event parameter
### Start enforcing PII protection After updating roles for workspace users and API keys, as well as marking profile attributes and event parameters as PII, submit a request to Synerise support to apply the PII settings you defined in the previous steps. Once your request is processed: - the **PII access execution** toggle in https://app.synerise.com/settings/pii is enabled. - workspace user roles and API keys with PII permissions will become active. - profile attributes and event parameters marked as PII are accessible only for users with full access to PII. ## Impact on user access and actions
Apart from PII itself, you also need to have the right permissions. For example, you can have full access to PII data, but without the READ permission for **Behavioral Data Hub** you won't see anything, similarly, all campaigns, and so on.
Because marking attributes and event parameters as PII causes their values to be encrypted, it’s important to understand the differences in what a user can do with full access to PII data versus no access to PII data. Below is a comparison of feature access and actions for each option. | | Full Access to PII data | No Access to PII data | |-------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------| | [Profile data](/docs/crm/crm-profile) access | Can view [regular profiles](/docs/crm/crm-profile) and [test profiles](/docs/settings/configuration/test-profiles) | Can view only [test profiles](/docs/settings/configuration/test-profiles) | | Updating profile information | Can [update profile information](/docs/crm/editing-profiles) and [create new profiles](/docs/crm/adding-profiles) | Can't update profile information, can't create new profiles | | Importing profiles, transactions, and events | Can [import profiles](/docs/assets/imports/importing-clients), [transactions](/docs/assets/imports/importing-transactional-data), and [events](/docs/assets/imports/importing-custom-events) | Cannot import profiles, transactions, and events | | Campaigns and templates | Can create templates and campaigns, and preview the output of Jinjava and dynamic attributes such as aggregates and expressions | Can build templates and campaigns without exposing real data (they can preview campaigns in the context of test profiles) | | Sending messages | - Can send messages/campaigns to any audience and preview real contact data;
- When defining audience conditions, PII attributes and event parameters can be used **only** with the **Equal** operator to check if a PII-marked attribute or parameter is `null`, `true`, or `false` and compare their value to a specific value—even ignoring differences in capitalization and spaces | - Can send messages and campaigns to any audience, but will not see real contact data,
- When defining audience conditions, PII attributes and event parameters can be used **only** with the **Equal** operator to check if a PII-marked attribute or parameter is null or not null | | Sending test messages | Can send test campaigns to any recipient (profiles, test profiles, recipients who are not available in **Behavioral Data Hub > Profiles**)| Can send test campaign only to test profiles; sending tests to custom email or phone number (not available in Profiles) is impossible. | | Creating analyses |Attributes and event parameters marked as PII can only be used in specific ways within analyses:
- You can test whether a PII-marked attribute or parameter is `null`, `true`, or `false` (analyses with **Equal** operator).
- You can compare a PII attribute or parameter’s value using the **Equal** operator to a specific value—even ignoring differences in capitalization and spaces.
- You cannot perform function operations on PII-marked attributes or parameters, nor use them inside expressions or aggregated calculations. For example, you cannot include a PII attribute as a value within an expression or aggregate. | Attributes and event parameters marked as PII can only be used in specific ways within analyses:
- You can test whether a PII-marked attribute or parameter is null or not null (analyses with **Equal** operator).
- You cannot perform function operations on PII-marked attributes or parameters, nor use them inside expressions or aggregated calculations. For example, you cannot include a PII attribute as a value within an expression or aggregate. | | [Automation Hub](/docs/automation) | Can access sensitive data, use all nodes (where available, PII attributes and event parameters can be used **only** with the **Equal** operator in node filters to check if a PII-marked attribute or parameter is `null`, `true`, or `false` and compare their value to a specific value—even ignoring differences in capitalization and spaces, for example, in ["Profile Filter" node](/docs/automation/conditions/client-filter-node)), import and export data, access export logs | - Have limitations on using PII attributes and event parameters in the filters in nodes: they can **only** be used with the **Equal** operator to check if a PII-marked attribute or parameter is null or not null;
- Have limitations on using [Email Alert](/docs/automation/actions/send-email-alert-node) and [SMS Alert](/docs/automation/actions/send-sms-node) nodes,
- can't preview the file in [Local File](/docs/automation/operation/local-file-node) node,
- can't use [Update Profile](/docs/automation/actions/change-attribute-node), [Import Profiles](/docs/automation/actions/synerise-integrations/import-customers), [Import Events](/docs/automation/actions/synerise-integrations/import-events), [Import Transactions](/docs/automation/actions/synerise-integrations/import-transactions), [Generate Event](/docs/automation/actions/send-client-event) nodes,
- can't preview, edit, run, or resume workflows containing nodes mentioned before | | [Data Transformation](/docs/automation/data-transformation-and-imports) | Can export and import data, access export logs | Can export data to trusted endpoints, cannot import data and access export logs, recommended to use sample data | # Loyalty In this section, you can configure global loyalty settings that apply to all [promotions](/docs/ai-hub/promotions) in your workspace. The settings are organized into four groups. To access these settings, go to Settings icon **Settings > (Configuration) Loyalty**.
Some settings can only be configured by means of the [Update settings for current Workspace](https://hub.synerise.com/api-reference/loyalty-and-engagement#tag/Promotion-settings/operation/endpointSettingsUpdateSettingsPUT) API method. Before sending an update, to avoid overwriting values configured in the user interface, retrieve the current settings by using the [Get settings for current Workspace](https://hub.synerise.com/api-reference/loyalty-and-engagement#tag/Promotion-settings/operation/endpointSettingsGetSettingsGET) API method.
## General In this section, you can configure the expression used to check a profile's point balance and define profile groups eligible to transfer loyalty points. 1. Go to Settings icon **Settings > (Configuration) Loyalty**. 2. On the **General** section, click **Show**. **Result**:
The General section of the global promotion settings
The General section of the global promotion settings
3. In the **Points balance** section, from the **Expression** dropdown, select an expression that checks whether a profile has sufficient points to activate a promotion:
In [Loyalty programs basics](/use-cases/loyalty-programs-basics) use case, you can learn how to create an expression that calculates point balance.
4. In the **Points transfer settings** section, define which profile groups can send and receive loyalty points: 1. From the **Expression** dropdown, select an expression used to calculate the sender's point balance. 2. In the **Recipient segments** section, click **Select segmentation** and select the segmentation(s) with profiles who are eligible to receive points. If you select several segmentations, they are combined using an OR condition. 3. In the **Sender segments** section, click **Select segmentation** and select the segmentation(s) with profiles who are eligible to send points. If you select several segmentations, they are combined using an OR condition. 5. Click **Apply**. ## Security & Locks In this section, you can configure which profiles are blocked from receiving promotions, manage points restoration on deactivation, and apply locks to prevent simultaneous promotion requests from multiple points of sale. 1. Go to Settings icon **Settings > (Configuration) Loyalty**. 2. On the **Security & Locks** section, click **Show**. **Result**:
The Security and Locks section of the global promotion settings
The Security and Locks section of the global promotion settings
3. In the **Blocking profiles** section, configure which profiles are blocked from receiving promotions: 1. From the **Tag** dropdown, select a tag. Profiles assigned with this tag are blocked from receiving promotions through POS methods and from activating new promotions. 2. To allow profiles to redeem promotions that were assigned before the tag was applied, enable **Allow redemption of promotions assigned before blocking**. 4. In the **Points management after batch deactivation** section, to return the loyalty points spent on promotion activation when all of a profile's promotions are deactivated through [the batch deactivation endpoint](https://hub.synerise.com/api-reference/loyalty-and-engagement#tag/Promotions/operation/BatchDeactivateAsProfile), enable **Restore points on batch deactivation**. 5. In the **Locks** section, configure temporary locks that prevent multiple points of sale from requesting the same promotion at the same time: 1. To require POS to provide a Lock Identifier when fetching the promotion list, enable **Require lock ID**. This identifier can be sent using the [Get Profile promotions by a custom filter](https://hub.synerise.com/api-reference/loyalty-and-engagement#tag/Promotions/operation/GetClientPromotionsByACustomFilter) endpoint. 2. In **Lock duration for promotion request**, enter the time in seconds during which promotion deactivation is blocked after a POS request. 3. In **Retry interval for promotion requests**, enter the time in seconds the system waits before retrying to acquire a promotion lock during the process sale operation. 6. Click **Apply**. ## Basket & pricing rules In this section, you can configure whether basket promotions can be combined during checkout and define how discounts are ordered and calculated. 1. Go to Settings icon **Settings > (Configuration) Loyalty**. 2. On the **Basket & pricing rules** section, click **Show**. **Result**:
The Basket and pricing rules section of the global promotion settings
The Basket and pricing rules section of the global promotion settings
3. In the **Combine basket promotions** section, configure combining promotions: 1. To allow multiple basket promotions to apply to a single checkout, enable **Enable combining promotions**. 2. If combining is enabled, select the price to use as the basis for discount calculation: - **Always use original price** — each discount is calculated from the original item price. - **Use current price (discounted if applicable)** — each subsequent discount is calculated from the price after the previous discount was applied. 4. In the **Discount value strategy** section, define the order in which discounts are applied: 1. In the **Synerise identifier** field, enter the number that identifies the discount type assigned to Synerise discounts in the Basket/Checkout flow. 2. In the **Discount order** field, select the value used as the basis for ordering (for example, **Discount value**). 3. Select the direction in which discounts are applied: **Ascending** or **Descending**. 5. Click **Apply**. ## Promotions settings In this section, you can define the format of automatically generated promotion codes and configure cashback and spending limit rules. 1. Go to Settings icon **Settings > (Configuration) Loyalty**. 2. On the **Promotions settings** section, click **Show**. **Result**:
The Promotions settings section
The Promotions settings section
3. In the **Promotion code format** section, select the format for the default promotion code generated when creating a promotion. The code can be used as the promotion identifier in the promotions API: - **UUID (16 characters)** — generates a UUID as the promotion code. - **Ordinal number with custom prefix** — generates a code with a custom prefix and an incremental number (for example, Promo-1, Promo-2). 4. In the **Cashback promotions settings** section, enter the global points-to-cash conversion multiplier for cashback promotions. Define how many loyalty points equal one currency unit. These settings serve as global defaults for cashback promotions. When [Creating promotions for entire basket](/docs/ai-hub/promotions/creating-promotions-for-entire-basket), you can choose to apply these global rules or define a custom multiplier and spending limits for that promotion only. 5. In the **Spending limits** section, define the point spending boundaries per transaction: 1. In **Minimum points required to spend**, enter the minimum number of loyalty points a profile must spend per transaction. 2. In **Maximum number of points to spend**, enter the maximum number of loyalty points a profile can spend per transaction. 3. In **Maximum cashback amount**, enter the maximum cashback value expressed in currency units. 4. In **Maximum percentage of cart value**, enter the maximum cashback amount as a percentage of the cart value. 6. Click **Apply**. # Integrating WooCommerce with Synerise The Synerise users can integrate their websites built on the WooCommerce platform. The scope of integration involves the transmission of the following data from WooCommerce to Synerise: - information about the customers (their activity, identification of a customer throughout the whole journey), - information about the transactions, - information about the items
The Synerise for WooCommerce plug in is currently in the beta version.
#### Multistore support If you manage several stores within one Wordpress panel and you send the data from them to one workspace, you will need to define a common cookie domain and separate catalogs for each store. The steps do to this are included in the process described further. ## Prerequisites --- - Add [a tracking code](/developers/web/installation-and-configuration) in Synerise. - You must be granted user permissions to access the API key section to be able to create a key in Synerise. - You must have access to the admin panel in Wordpress. - You must use 4.7 Wordpress version or higher. - Configure the WooCommerce plugin. Use the WooCommerce plugin version that supports: - 7.0 PHP version or higher - 4.7 Wordpress version or higher
You can find more information in the [WooCommerce documentation](https://woocommerce.com/document/update-php-wordpress/).
## Download the Synerise plugin --- 1. To download the Synerise plugin for WooCommerce, click [here](https://github.com/Synerise/synerise-for-woocommerce). 2. To install the plug in, insert the plugin folder to the `/wp-content/plugin/` catalog in your directory.
Keep the original name of the plugin folder (`synerise-for-woocommerce`).
## Configuration in Synerise --- Log in to your workspace in Synerise and perform the steps described below: ### Create an API key --- 1. In Synerise, go to Settings icon **Settings > API Keys > Add API key**. 2. On the pop-up: 1. Enter the name of the API key (it will be visible on the list of API keys). 2. Select **Workspace**. 3. Optionally, enter the description of the key (it will be visible on the list of API keys).
Adding a new API key for the WooCommerce integration
Adding a new API key for the WooCommerce integration
3. Confirm by clicking **Save**. 4. Find the key on the top of the API key list and click **Permissions**. 5. On the pop-up, select the following permissions: - **CATALOG**: - CATALOGS_CATALOG_CREATE - CATALOGS_CATALOG_READ - CATALOGS_ITEM_BATCH_CATALOG_CREATE - **CLIENT**: - API_BATCH_CLIENT_CREATE - API_CLIENT_CREATE - **EVENTS**: - API_ADDED_TO_CART_EVENTS_CREATE - API_CUSTOM_EVENTS_CREATE - API_LOGGED_IN_EVENTS_CREATE - API_LOGGED_OUT_EVENTS_CREATE - API_REGISTERED_EVENTS_CREATE - API_REMOVED_FROM_CART_EVENTS_CREATE - **TRACKER** - TRACKER_CREATE - **TRANSACTION** - API_BATCH_TRANSACTION_CREATE - API_TRANSACTION_CREATE
Permissions for the API key required by the WooCommerce integration
Permissions for the API key required by the WooCommerce integration
6. Confirm by clicking **Apply settings**. 7. In the **General** section, click **Show**. 8. Copy the API key and paste it to the notepad.
Details of the API key
Details of the API key
#### Enable basic workspace authentication (optional) By default, the authorization process involves obtaining a token with a limited lifespan. To acquire this token, you must send a request. Alternatively, basic workspace authentication requires only the GUID and API key, eliminating the need for additional requests or timeouts. However, this approach may increase vulnerability. 1. If you want to authorize requests only by API key and GUID (workspace login), in the **Basic workspace authentication** section, click **Show**. 2. Switch the **Enable workspace authentication** toggle on. **Result**: A GUID field appears. 3. Copy the value of the GUID field and save it in the notepad. This value serves as a workspace identifier which will be used as a login in the authorization requests. To learn more about basic authorization, read ["Basic workspace authentication"](/docs/settings/tool/api#basic-workspace-authentication). 4. Confirm by clicking **Apply**. ## Configuration in the WooCommerce panel --- Log in to your administration panel in WooCommerce and perform the steps described below: ### Add API key --- 1. In the **API key** field, enter the key you created [in the previous part of the process](#create-an-api-key). 2. In the **Host** field, leave the value at default (`https://api.synerise.com`).
The configuration of the API section
The configuration of the API section
The Request logging option is available after you configure the plugin for the first time. This option allows you to enable logging requests.
3. If you want to enable basic authorization with Synerise API key, in the **Basic Auth** section, set the **Enabled** field to **Yes**. 4. In the **API GUID** field, enter the Synerise Workspace GUID you received in ["Enable basic authorization"](#enable-basic-workspace-authentication-optional). 3. Click **Next step**. ### Add tracking code --- In this part of the process, you can enable tracking the customer activity in your store by [a tracking code](/developers/web/installation-and-configuration) which is added automatically. You can also set advanced options related to page tracking in this section as well. 1. Set the **Enabled** option to **Yes**. 3. **Recommended**: Set the **Open Graph** option to **Yes**. **Result**: WooCommerce sends the following OG tags to Synerise: - `og:title` which is the name of the item, - `og:description` which is the description of the item, - `og:image` which is the file path to the item image, - `og:type`which is the type of the content, - `og:url` which is the link to the item, - `og:site_name` which is the name of the website your item is on, - `product:retailer_part_no` which is the SKU of the item, - `product:price:amount` which is the current price of the item, - `product:price:currency` which is the currency of the current price, - `product:original_price:amount` which is the original price (before discounts, if any), - `product:original_price:currency` which is the currency of the original price (before discounts, if any), - `product:category` which is the category of the purchased item
When **Open Graph** is switched off, the `product:retailer_part_no parameter` is not added to the pages and you cannot track which product pages are visited.
4. If multiple subdomains share a tracking code, in the **Cookie domain** field, enter the domain of the common cookies. 5. From the **Tracker host** dropdown list, select the option according to your Synerise deployment variant.
The configuration of the Tracking section
The configuration of the Tracking section
3. In case you need to customize the tracking code, in the **Custom script** subsection, set the **Enabled** option to **Yes**. In the **Script** field, paste [the tracking code](/developers/web/installation-and-configuration) (available in Synerise > Settings > Tracking code) and make changes to the code.
In order to send events, either **Cookie domain** or **Custom script** are required.
5. Click **Next step**. ### Define event settings --- In this part of the process: - [Enable tracking of the backend events related to customers and products](#enable-event-tracking). By default, all events are selected. Most of them will be available in the [customers' profiles](/docs/crm/crm-profile).
We recommend selecting all the events.
- You can [queue events and send them to Synerise in custom intervals](#enable-queuing-events) instead of sending them in real time. #### Enable event tracking 1. Select the **Events** section 3. Select the scope of tracked events. 1. Set the **Enabled** option to **Yes**. 2. All events are selected by default. If you don't want to track all, you can unselect some of them. You can choose from the following events: | Event | Description | Action name in Synerise | |------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------| | Customer registration | This event is generated when a customer creates an account on your website. | client.register | | Customer login | This event is generated when a customer logs in to their account on your website. | client.login | | Customer logout | This event is generated when a customer logs out from their account on your website. | client.logout | | Customer data saved | This event is generated when a customer makes changes to their account (for example, updates information about birthday, location, and so on). | client.updateData | | Customer added product to cart | This event is generated when a customer adds an item to the cart. | product.addToCart | | Customer removed product from cart | This event is generated when a customer removes an item from the cart. | product.removeFromCart | | Customer placed order | This event is generated when a customer places an order. | transaction.charge | | Product update | This event is generated when a product has been edited - then the product is added to queue to be synchronized. | n/a | | Product update in bulk | This event is generated when a set of products has been edited - then the products are added to queue to be synchronized. | n/a | | Product update by quick edit | This event is generated when a product is edited through the quick edit option. The product is added to queue to be synchronized. | n/a | | Product import | This event is generated when a product has been edited through the import of data. | n/a | | Product trashed/untrashed | This event is generated when the product is removed or restored. The deleted product stays in the Synerise catalog and the `deleted=1` parameter is added. If it's restored, the `deleted` parameter value changes to `0`. These changes are applied to the Synerise catalog immediately. | n/a | | Product review | This event is generated when a customer adds a review to a product. | product.addReview |
The list of events
The list of events
#### Enable queuing events --- 1. In the **Event queue** section, set the **Enabled** field to **Yes**. 2. In the **Cron expression** field, enter a cron expression that defines the frequency of sending batches of events to Synerise. 3. In the **Page size** field, enter the size of a batch of events that will be sent in a single request. ## Select data for synchronization --- In this part of the process, you will - select the product attributes for synchronization, orders, and customers. - enter a Synerise catalog name to which the product data will be sent. If the catalog with such name does not exist, it will be automatically created in Synerise (Data Modeling Hub > Catalogs). By default, all attributes are selected and the synchronization of customers and orders is enabled as well. 1. In the **Products** section: 1. Set the **Enabled** option to **Yes**. 2. In the **Attributes** field, select or unselect the attributes which are sent to the Synerise catalog. If you create custom attributes after the configuration of the Synerise for WooCommerce plugin, you can return to the settings and add the attributes to this field. 2. In the **Customers** section, set the **Enabled** option to **Yes**. 3. In the **Orders** section, set the **Enabled** option to **Yes**. 4. In the **Catalog** section, in the **Catalog name**, enter the name of the catalog to which the data will be sent. If you haven't created a catalog in Synerise, enter a name of the catalog and it will be automatically created in Synerise.
If you manage multiple stores, set different catalog names while configuring the plugin settings for each store.
The configuration of the Data section
The configuration of the Data section
5. Click **Next step**. ## Configure data synchronization --- By default, the Synerise plugin uses the WooCommerce-native scheduler to schedule the synchronization of data between Synerise and WooCommerce which runs in asynchronous loopback. However, this default setting may cause notable delays between a customer's activity (event) and its transfer to Synerise. #### Optimization
This solution is optional, but recommended.
To achieve nearly real-time data synchronization between WooCommerce and Synerise, you can disable the scheduler, set up a cron job with the [WP CLI command](https://actionscheduler.org/wp-cli/) on your server, and set the `action-scheduler` to run separately for the Synerise task group and other processes. 1. Install `wp-cli` according to the instructions available in the [documentation](https://wp-cli.org/). 2. In the WooCommerce panel, go to **Synerise > Settings > Synchronization**. 3. In the **Action Scheduler** section, set the **Default Consumer Disabled** option to **Yes**.
Disabling asynchronous loopback
Disabling asynchronous loopback
**Result**: The schedule stops running in asynchronous loopback. 4. In your server, in the `crontab`, configure cron to start the scheduler as WP CLI command. Make sure WP CLI is available as a global `wp` alias or modify the command according to your WP CLI setup.
* * * * * wp action-scheduler run --group=synerise_for_woocommerce
   * * * * * wp action-scheduler run --exclude-groups=synerise_for_woocommerce
This way the Synerise actions will be processed in parallel with other scheduled actions and your servers process them faster. 5. Proceed to defining the frequency of [full data synchronization](#full-synchronization) and/or [update synchronization](#updates-synchronization).
Synchronization is disabled by default. Before enabling, verify the configuration of each item attribute to make sure it contains all data you want to include.
### Full synchronization --- In this part of the process you can synchronize the data collected before the integration. 1. In the **Full synchronization** section, set the **Enabled** option to **Yes**. 2. In the **Cron expression** field, enter the time of the synchronization in the form of a cron expression. 3. In the **Page size** field, enter the size of a batch of items that will be sent in a single request.
Extending the default size might speed up synchronization process, but it also means heavier database usage.
The configuration of the Full synchronization subsection
The configuration of the Full synchronization subsection
### Updates synchronization --- This subsection allows you to synchronize ongoing item updates. It is based on the item queues, which are built by data update events.
It is highly recommended keeping the update synchronization process running, while the data synchronization can be disabled when unused.
1. Set the **Enabled** option to **Yes**. 2. In the **Cron expression** field, enter the time of the synchronization in the form of a cron expression. 3. In the **Page size** field, enter the size of a batch of items that will be sent in a single request.
Extending the default size might speed up synchronization process, but it also means heavier database usage which can slow down the work of the service.
The configuration of the Update Syncrhonization subsection
The configuration of the Update Syncrhonization subsection
### Enabling marketing agreements --- In the **Marketing agreements** section, you can enable collecting marketing agreements (for email and SMS) and send them to Synerise. You can choose from the following options: - **Disabled** - Choose this option if you don't want to collect the marketing agreements. - **Map existing metadata** - Choose this option, if you already implemented solutions that collect marketing agreements on your website. This option allows you to declare the parameter names which store the marketing agreements in the database (supported values: `true/false`, `0/1`). As a result, the values of the declared parameters are sent to Synerise to update the values in `newsletter_agreement` and `receive_smses` parameters. - **Add marketing agreements to register form** - Choose this option, if you want to add marketing agreements options to the registration form. As a result, the email and SMS agreement checkboxes are added to the form. - **Add marketing agreements to checkout form** - Choose this option, if you want to add marketing agreements options to the payment form. As a result, the email and SMS agreement checkboxes are added to the form. - **Add marketing agreements to register and checkout form** - Choose this option if you want to add marketing agreement to both registration and checkout forms. #### Map existing metadata
Mapping existing metadata form
Mapping existing metadata form
In the **Customer metadata** and **Order metadata** sections, enter the names of the parameters that contain the marketing agreements in your database. - Data from the **Customer metadata** section will be used to update information about recognized customers. - Data from the **Order metadata** section will be used to save information about customer who are logged out. #### Add marketing agreements to forms
Add marketing agreements to forms
Add marketing agreements to forms form
In the settings for the three **Add marketing agreements to** options (checkout, registration forms, or both forms), you can define the design of checkboxes on the interface. 1. In the **Label** field, enter the description that will be displayed next to the checkbox. 2. In the **Field classes** field, you can add your own class. 4. When you're done with configuring the plugin settings, confirm by clicking **Finish**. You can go back to the settings of the plugin any time. You can check the status of synchronization on the dashboard of the Synerise plugin as well. # Cloning objects to other workspaces Cloning objects allows you to copy a Synerise analyses and recommendations to other workspaces you are using. ## Contents # Upcoming changes to handling identifiers
These changes take effect on **July 6, 2026**. Migration will be fully logged and communicated with at least 30 days' notice. Review the sections below and take any necessary action before the migration date.
Synerise is introducing a set of backward-incompatible changes to how user identifiers and UUIDs are handled. The changes align the platform with common industry standards, improve data consistency, and reduce accidental profile merges.
The logic described on this page already applies to all new workspaces created after **March 24, 2026**. Existing workspaces will be migrated on July 6, 2026.
## Summary of changes | Area | What is changing | |---|---| | [Accent-sensitive identifiers](#accent-sensitive-identifiers) | Identifiers (`email`, `customId` / `custom_identify`) with diacritical characters are no longer normalized - they are treated as exact strings. | | [Invalid identifiers](#fixing-invalid-identifiers) | Profiles with leading or trailing whitespace in identifiers are removed if a trimmed duplicate already exists; otherwise the identifier is trimmed automatically. | | [UUID deduplication](#uuid-deduplication) | Duplicate UUIDs across profiles are resolved; uniqueness is enforced going forward. | ## Recommended actions before July 6, 2026 - [ ] **Accent-sensitive identifiers:** Audit your identifier data (`email`, `customId` / `custom_identify`) for accented or diacritical variants (for example, `jose@example.com` vs. `josé@example.com`). Ensure all your systems send identifiers in a consistent, exact form. If you believe your workspace may be affected, contact your Customer Success representative. - [ ] **Whitespace in identifiers:** Verify that your integrations do not send identifiers with leading or trailing whitespace. To get a workspace-specific estimate of affected profiles, contact your Customer Success representative. - [ ] **UUID deduplication:** No action is required in most cases. If you use custom UUID generation logic in your implementation, contact your Customer Success representative to assess potential impact. ## Accent-sensitive identifiers ### What is changing Identifiers (`email`, `customId`/`custom_identify`) will no longer be normalized for diacritics or accents. Each identifier is treated as an exact string. ### Why This change aligns the platform with common industry standards for identity systems. It prevents accidental merging of distinct users caused by normalization and improves correctness of user identity resolution, analytics accuracy, and privacy guarantees. ### Impact Identifiers that differ only by accents or diacritical marks will be treated as separate profiles. No automatic normalization will occur. You must ensure consistent identifier usage across all systems. ### Examples | Scenario | Before | After | |---|---|---| | Email with umlaut | `"muller@example.com"` = `"müller@example.com"` | `"muller@example.com"` ≠ `"müller@example.com"` | | Email with accent | `"jose@example.com"` = `"josé@example.com"` | `"jose@example.com"` ≠ `"josé@example.com"` | ### Recommended actions - Audit your identifier data for accented or diacritical variants. - Ensure your systems send identifiers in a consistent form. - Contact your Customer Success representative if you believe your workspace may be affected. ## Fixing invalid identifiers ### What is changing Profiles with leading or trailing whitespace in their identifiers are handled as follows: - If a profile with the same identifier in its **trimmed** form already exists, the whitespace variant is treated as a duplicate and **deleted**. - If no corresponding trimmed profile exists, the identifier is **automatically trimmed** — the profile is not deleted. ### Why Identifiers with whitespace are invalid by definition, cannot be reliably addressed via API or imports, and introduce inconsistencies in data processing. Removing them improves data hygiene and reduces edge-case complexity. ### Examples #### Duplicate (profile will be deleted) | | Before | After | |---|---|---| | Canonical profile | `"user@example.com"` | `"user@example.com"` — unchanged | | Whitespace variant | `" user@example.com "` (note the leading and trailing spaces) | deleted | #### Unique invalid identifier (profile will be trimmed, not deleted) | | Before | After | |---|---|---| | Profile | `" user@example.com "` (note the leading and trailing spaces; no trimmed counterpart exists) | `"user@example.com"` — trimmed automatically | ## UUID deduplication ### What is changing In a small fraction of cases, duplicate UUIDs exist across profiles. These rare occurrences will be resolved and UUID uniqueness will be enforced going forward. ### Why Duplicate UUIDs can lead to ambiguous user identity assignment. Resolving conflicts improves system consistency, simplifies diagnostics, and reduces the risk of unpredictable routing of user data. ### Impact - Some anonymous or unidentified profiles may be merged. - In case of UUID conflicts between two identified profiles, the UUID is detached from one profile and replaced with a newly generated UUID. - Device-stored UUIDs remain unchanged and continue to function as-is. ### Examples #### Non-conflicting identifiers (profiles merged) | Profile | Before | After | |---|---|---| | User A | `"john@example.com"` → UUID X | `"john@example.com"` → UUID X | | Anonymous user B | UUID X | merged into User A | #### Conflicting identifiers (UUID detached) | Profile | Before | After | |---|---|---| | User A | `"john@example.com"` + UUID X | keeps UUID X | | User B | `"alice@example.com"` + UUID X | UUID X replaced with newly generated UUID Y | ## Migration logging All actions performed during migration (merges, deletions, and UUID changes) are fully logged and available on request. ## FAQ **Can I request an estimate of impact for my workspace?** Yes. For invalid identifiers and accent-sensitive identifier scale, contact your Customer Success representative. UUID conflict scale is expected to be marginal. **Does this affect new workspaces?** No. New workspaces created after March 24, 2026 already operate under the new rules. # Single sign-on tutorials Take a look at the list and check if there is a tutorial on configuring a single sign-on process with the tool of your choice # Time optimizer Time optimizer is a tool that selects the best time to perform an action towards your customers (for example, send an email). It uses the Synerise proprietary AI engine to analyze customer behavior and reach your customers with the right content at right time. ## Modes In time optimizer, you can create multiple modes for different channels (for example, email, mobile push, and so on). After enabling time optimizer, the **Standard** mode is available on the list of modes by default and it predicts the optimal time based on the `page.visit` and `screen.view` events. - You can create a mode out of a ready-made template: | Template name | Time predicted for | Analyzed events | |---------------|---------------------|-----------------------------------------------| | Email | page.visit | page.visit, newsletter.open, newsletter.click | | Mobile | screen.view | screen.view, screen.interaction | | Web | page.visit | page.visit, product.addToCart, form.submit | - You can create custom modes, which means that you build them from scratch - in the settings of a custom mode, you select the purpose and the input events (up to 6) based on which the best time to perform an action is predicted. ## Application You can use time optimizer in: - **Automation Hub** - time optimizer is available as the [Optimize Time](/docs/automation/flow-control/optimize-time) node. In Automation Hub, time optimizer makes predictions for each customer individually. - **Experience Hub** - time optimizer is available while scheduling email, mobile push, SMS, and web push communication. In Communication, time optimizer predicts the best time to send a message for the whole audience. ## Enabling time optimizer --- 1. Go to **Settings > AI Engine Configuration**. 2. Select **Time optimizer** tab. 3. Click **Define**. 4. Switch the toggle on.
After time optimizer is enabled, it starts being trained. The training may take a few hours.
## Creating modes --- 1. Go to **Settings > AI Engine Configuration**. 2. Select the **Time optimizer** tab. 3. Click **Define**. 4. Click **Add new node**. 5. Select how you want to create a new mode:
To keep the time optimizer enabled, at least one mode must be active.
Create a mode from a template

More information about the settings of each template is available in the Modes section.

  1. On the pop-up, select the Template tab.
  2. You can choose one of the following modes:
    • Email
    • Mobile
    • Web
  3. Confirm your choice by clicking Apply.
Create a custom mode
  1. In the Mode name field, enter the name of the mode.
  2. From the Predicted event dropdown list, select several customer activities for which you want to calculate the most probable time of occurrence.
  3. From the Input events dropdown list, select up to 6 events based on which the engine will perform the predictions.
# Co-Brand Decisioning Layer
This feature is in a [public preview](/glossary/#public-preview) mode.
# Identifiers
**Upcoming breaking change (effective July 6, 2026):** Synerise is introducing changes to how user identifiers and UUIDs are handled. These changes may affect profiles with accented or diacritical characters in identifiers, profiles with leading or trailing whitespace in identifiers, and profiles with duplicate UUIDs. For details and recommended actions, see [Upcoming changes to handling identifiers](/docs/settings/configuration/identifier-standardization).
By default, an email address is a unique identifier of a profile created in the Synerise app and it's used to recognize customers. However, you may change this configuration, so the `customId` becomes the primary identifier in your workspace.
- This is a one-way change. You can go from unique to non-unique email, however, you can't configure it the other way round. - After the change, integrations and automations that refer to the `newsletter_agreement` profile attribute will need to be updated to use a new email agreement attribute. - After the change, [Synerise API endpoints](https://hub.synerise.com/api-reference/profile-management#tag/Profile-management) that use the `agreements.email` property in profiles will need to be updated to use the new email agreement attribute.
The **non-unique emails** option: 1. Allows you to indicate a `customId` to be the unique identifier of a profile. When a profile has `customId` assigned, it is considered to be recognized. In the Web SDK, some APIs, and on the interface in the Synerise platform, this ID is called `custom_identify` instead. 2. Keeps a predefined email address attribute, however, it will not be used anywhere, it must exist to maintain the integrity. 3. Enforces creating additional attributes: email address and marketing agreement which will be used for communication with a customer. ## Prerequisites --- Before you enable the option of non unique emails on the interface, perform the actions listed below: 1. Define `customId` for every customer - each identified customer and new ones must be assigned with a `customId`. 2. Change the identification methods which require email address as the identifier. 3. Create the new email address and supplement customer data with this attribute. 4. Create a marketing agreement attribute (which can take the following values: `enabled`, `disabled`, `confirmation`) and supplement customer data with this attribute. 4. If you [track forms](/developers/web/tracking-form-data), you must switch to the new method:
SR.event.sendFormData('', {custom_identify: "424234234234"})
| | Has email address | Has customID | Log in
action | Effect | |--------|---------------|----------|--------------------|------------------------------------------------------------------------------------------| | Scenario 1 | No | No | For the first time | A customer becomes
recognized and they
are assigned with a hash
and UUID | | Scenario 2 | Yes | Yes | No | Nothing happens | | Scenario 3 | Yes | Yes | Subsequent log in | Hash is changed, UUID is reset,
but before it happens, it is
saved to the customer | ## Enabling non-unique emails ---
A blank configuration of email attribute uniqueness
A blank configuration of email attribute uniqueness
1. Go to **Settings > Identifiers**. 2. In the **Unique email addresses & reset UUID settings** section, click **Show**. 3. Select the **Non-unique** option. 4. From the **Email address** dropdown list, select the customer attribute that stores the email used for communication. 5. From the **Email agreements** dropdown list, select the attribute that stores marketing agreement. 6. Confirm by clicking **Apply**. ## Managing user context --- You can choose which identifier (email or custom_identfy) to use for managing user context (UUID) in the JS SDK when [submitting form data](/developers/web/tracking-form-data/tracking-form-data-sdk), and decide how the user context should be handled [when a link contains user-identifying parameters (snrs_cl and snrs_he)](/developers/web/user-identification#recognizing-customers-from-link-parameters). This feature works independently from [resetting customer UUIDs with a query parameter](/developers/web/uuids#with-query-parameter). 1. Go to **Settings > Identifiers**. 3. In the **User context management in JS SDK** section, from the **Identifier used to mange context** dropdown list, select one of the following options: - **email** (which is selected by default if the workspace uses unique emails) - **custom_identifier** (the only option if the workspace uses non-unique emails). 4. From the **Action for links with recognition params** dropdown list, select what happens with the user context when a link contains user-identifyng parameters: | Option name | Explanation | |---------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Always reset | The user context will be updated according to the link parameters. An anonymous user will be identified as the user specified in the link. If the current user context differs from the one in the link, the user context (UUID) will switch to match the link’s user context. | | Do not reset if a user is already recognized | An anonymous user will be identified as the user specified in the link. However, if a user is already recognized in the browser and differs from the user in the link, the existing user context (UUID) will remain unchanged. | | Never reset (this is the only option if your workspace uses [JWT authentication](/developers/web/jwt-auth)) | The user context in the browser—anonymous or not—takes precedence over the context from the link and remains unchanged; link parameters are ignored. |
Managing user context section
Managing user context section
5. Confirm changes by clicking **Apply**. ## FAQ --- ### Does the non-unique option influence capping? No, capping is counted per user, not per email address. ### When the non-unique email is on, when is the customer considered recognized? When you enable the non-unique email, a customer is considered recognized at the moment of assigning a `customId` to this customer.