This document and any attached materials are the sole property of Beyond Now Innovation Team. This document and any attached materials are not to be disseminated, distributed, or otherwise conveyed throughout your organization to employees without a need for this information or to any third parties without the express written permission of Beyond Now Innovation Team.

This document gives an overview of the capabilities of Infonova Experience Framework, how to set up and configure a new shopfront and how to connect it with an Infonova tenant and offer catalogue.

Big Picture and Architecture

To use the shopfront effectively it is important to understand the big picture. The entities and their associations determine the usage of Infonova Experience Framework.

Infonova Experience Framework is an addon to the Infonova ecosystem and is associated with a single Infonova tenant. The Experience Framework allows tenants to present and showcase their products, let customers order or request products that are configured in the Infonova offer catalogue as well as let customers self-manage their product inventory, orders and invoices on CSC pages.

Experience Framework entities are configured in Strapi, a headless Content Management System (CMS) and are loaded and presented on the Infonova Shopfront UI, an Angular application that utilizes both the Strapi CMS and the Infonova APIs.

shopfront architecture

Hosting Experience Framework on a path segment

When hosting the Experience Framework frontend service on a path segment (e.g. https://eu01.sb.infonova.com/shopfront-frontend/sb-beyond/SHOPFRONT) a few tasks have to be executed in order to make all capabilities of Experience Framework work.

Static Resources References

Static content - like images or other files - can be loaded in the frontend by providing them with a relative URI starting with static. In order to make this work on an environment hosted on a path segment, the leading / has to be removed. An example for this is static/assets/images/logo.png. The Experience Framework frontend will then attempt to load the resource from the configured helm deployment parameter frontend.assetsurl.

SSO Check

The default location of the Keycloak SSO check frame is window.location.origin + '/assets/silent-check-sso.html'. This will not work when hosting the Experience Framework on a path segment. To change the location of the SSO check frame, provide the following Storefront parameter:

Key Value

SSO_CHECK_PATH

Location to the silent-check-sso frame, e.g. https://eu01.sb.infonova.com/shopfront-frontend/sb-beyond/assets/silent-check-sso.html

Authenticating Infonova Operators in Experience Framework Backend APIs

Infonova Keycloak bearer tokens can be used to authenticate for non-public Experience Framework backend APIs like "CRUD" operations on entities like Storefront, Page, Product. In order to enable authenticating Infonova operators a few steps have to be taken.

OAuth Environment Variables

The following environment variables entity has to be created to configure the Experience Framework backend’s token verification.

Name

API_OAUTH_AUTHENTICATION.{{name}} with name being a custom identifier to recall the entry later.

The following variables have to be configured on the entity:

Key Value

jwks_uri

The URI of the JWKS (JSON web key set) certificate, e.g. https://eu01.sb.infonova.com/auth/realms/BEYOND/protocol/openid-connect/certs

infonova_tenant

The name of the Infonova tenant that the user of the token needs to have access mapped

workgroup

The name of the Infonova authorization workgroup that the user of the token needs to have access mapped

Backend API Permissions

The Experience Framework backend’s API role Authenticated will be used to authorize the Infonova operator for each API endpoint. The endpoints can be added and removed in the Experience Framework backend admin portal settings on the Roles page of the Users & Permission Plugin section.

Required Infonova Tenant Settings

In order to enable the Infonova Shopfront for the Infonova tenant, a list of settings have to be made.

CSM User Permissions

Since the access token of the logged-in user is being used to make requests to the Infonova APIs, the role of the user has to have a list of required permissions.

List of required permissions of the user role
{
  "permissions": [
   "/addresses/v1/addresses:POST",
    "/authorization/v1/customerAccountUserRoles:GET",
    "/billing/v1/customerBills:GET",
		"/billing/v1/billingAccounts/{id}:PATCH",
		"/billing/v1/billingAccounts/{id}:GET",
    "/bl-ticketing/category/Support/create",
    "/bl-ticketing/category/Support/update",
    "/bl-ticketing/category/Support/view",
    "/channel/override",
    "/chargeCatalog/v1/onceOnlyCharges/{name}:GET",
    "/chargeCatalog/v1/recurringCharges/{name}:GET",
    "/chargeInventory/v1/recurringCharges:GET",
    "/configuration/v1/languages:GET",
    "/configuration/v1/lookupOptions/areas/{area}/options:GET",
    "/configuration/v1/templateDefinitions/templates/{name}:GET",
    "/contentrepository/documents/types/OFFER_IMAGE/view",
    "/contentrepository/documents/types/TICKET/add",
    "/contentrepository/documents/types/TICKET/delete",
    "/contentrepository/documents/types/TICKET/edit",
    "/contentrepository/documents/types/TICKET/view",
    "/customers/v1/customerAccounts/{id}:GET",
    "/customers/v1/customerAccounts/{id}:PATCH",
    "/customers/v2/customerAccounts/{customerAccount}/relationships/{relatedCustomerAccount}:GET",
    "/customers/v2/customerAccounts:GET",
    "/customers/v2/customerAccounts/{id}:GET",
    "/customers/v2/customerAccounts/{id}:PATCH",
    "/GLOBAL/Admin/executeOnBehalfOfAnotherUser",
    "/parties/v1/individuals/{id}:GET",
    "/parties/v1/individuals/{id}:PATCH",
    "/parties/v1/organizations/{id}:GET",
    "/parties/v1/organizations/{id}:PATCH",
    "/productCatalog/v1/productOfferingCharacteristicGroups/{name}:GET",
    "/productCatalog/v1/productOfferings/{name}:GET",
    "/productCatalog/v1/productOfferings/{productOffering}/summary:GET",
    "/productCatalog/v1/productOfferingTariffModels/{name}:GET",
    "/productCatalog/v1/resourceSpecificationGroupTariffModels/{name}:GET",
    "/productInventory/v1/products:GET",
    "/productInventory/v1/products/{product}:GET",
    "/productOrdering/v1/carts/{cart}/catalog/productOfferings:GET",
    "/productOrdering/v1/carts/{cart}/catalog/productOfferings:POST",
    "/productOrdering/v1/carts/{cart}/catalog/products:GET",
    "/productOrdering/v1/carts/{cart}/catalog/products/{product}:GET",
    "/productOrdering/v1/carts/{cart}/catalog/products/{product}:POST",
    "/productOrdering/v1/carts/{cart}/configuration/charges:GET",
    "/productOrdering/v1/carts/{cart}/configuration/productCharacteristics/{productCharacteristic}:GET",
    "/productOrdering/v1/carts/{cart}/configuration/products:GET",
    "/productOrdering/v1/carts/{cart}/configuration/products/{product}/characteristicGroups:GET",
    "/productOrdering/v1/carts/{cart}/configuration/products/{product}/charges:GET",
    "/productOrdering/v1/carts/{cart}/configuration/products/{product}:GET",
    "/productOrdering/v1/carts/{cart}/configuration/products/{product}/productGroups:GET",
    "/productOrdering/v1/carts/{cart}/configuration/products/{product}/resourceGroups:GET",
    "/productOrdering/v1/carts/{cart}/configuration/products/{product}/resourceGroups/{resourceGroup}:GET",
    "/productOrdering/v1/carts/{cart}/configuration/products/{product}/resourceGroups/{resourceGroup}/resources:GET",
    "/productOrdering/v1/carts/{cart}/configuration/products/{product}/services:GET",
    "/productOrdering/v1/carts/{cart}/configuration/resourceCharacteristics/{resourceCharacteristic}:GET",
    "/productOrdering/v1/carts/{cart}/configuration/resources:GET",
    "/productOrdering/v1/carts/{cart}/configuration/resources/{resource}/capabilities/{capability}/providers:GET",
    "/productOrdering/v1/carts/{cart}/configuration/resources/{resource}/characteristics:GET",
    "/productOrdering/v1/carts/{cart}/configuration/resources/{resource}/charges:GET",
    "/productOrdering/v1/carts/{cart}/configuration/resources/{resource}:GET",
    "/productOrdering/v1/carts/{cart}/configuration/serviceCharacteristics:GET",
    "/productOrdering/v1/carts/{cart}/configuration/serviceCharacteristics/{serviceCharacteristic}:GET",
    "/productOrdering/v1/carts/{cart}/configuration/services:GET",
    "/productOrdering/v1/carts/{cart}/configuration/services/{service}/capabilities/{capability}/providers:GET",
    "/productOrdering/v1/carts/{cart}/configuration/services/{service}/characteristics:GET",
    "/productOrdering/v1/carts/{cart}/configuration/services/{service}/charges:GET",
    "/productOrdering/v1/carts/{cart}/configuration/services/{service}:GET",
    "/productOrdering/v1/carts/{cart}/configuration/services/{service}/services:GET",
    "/productOrdering/v1/carts/{cart}/customerOrderSummary:GET",
    "/productOrdering/v1/carts/{cart}:DELETE",
    "/productOrdering/v1/carts/{cart}:GET",
    "/productOrdering/v1/carts/{cart}/operations/products/{product}/characteristics:GET",
    "/productOrdering/v1/carts/{cart}/operations/products/{product}/characteristics:POST",
    "/productOrdering/v1/carts/{cart}/operations/products/{product}/characteristics/{productCharacteristic}:DELETE",
    "/productOrdering/v1/carts/{cart}/operations/products/{product}/characteristics/{productCharacteristic}:GET",
    "/productOrdering/v1/carts/{cart}/operations/products/{product}/characteristics/{productCharacteristic}:PATCH",
    "/productOrdering/v1/carts/{cart}/operations/products/{product}:DELETE",
    "/productOrdering/v1/carts/{cart}/operations/products/{product}:PATCH",
    "/productOrdering/v1/carts/{cart}/operations/resources:GET",
    "/productOrdering/v1/carts/{cart}/operations/resources:POST",
    "/productOrdering/v1/carts/{cart}/operations/resources/{resource}/characteristics/{resourceCharacteristic}:GET",
    "/productOrdering/v1/carts/{cart}/operations/resources/{resource}/characteristics/{resourceCharacteristic}:PATCH",
    "/productOrdering/v1/carts/{cart}/operations/resources/{resource}:DELETE",
    "/productOrdering/v1/carts/{cart}/operations/resources/{resource}:GET",
    "/productOrdering/v1/carts/{cart}/operations/resources/{resource}:PATCH",
    "/productOrdering/v1/carts/{cart}/operations/services:GET",
    "/productOrdering/v1/carts/{cart}/operations/services:POST",
    "/productOrdering/v1/carts/{cart}/operations/services/{service}/characteristics:GET",
    "/productOrdering/v1/carts/{cart}/operations/services/{service}/characteristics:POST",
    "/productOrdering/v1/carts/{cart}/operations/services/{service}/characteristics/{serviceCharacteristic}:DELETE",
    "/productOrdering/v1/carts/{cart}/operations/services/{service}/characteristics/{serviceCharacteristic}:GET",
    "/productOrdering/v1/carts/{cart}/operations/services/{service}/characteristics/{serviceCharacteristic}:PATCH",
    "/productOrdering/v1/carts/{cart}/operations/services/{service}:DELETE",
    "/productOrdering/v1/carts/{cart}/operations/services/{service}:GET",
    "/productOrdering/v1/carts/{cart}/operations/services/{service}:PATCH",
    "/productOrdering/v1/carts/{cart}:PATCH",
    "/productOrdering/v1/carts/{cart}/save:POST",
    "/productOrdering/v1/carts/{cart}/submit:POST",
    "/productOrdering/v1/carts/{cart}/summary:GET",
    "/productOrdering/v1/carts/{cart}/validate:POST",
    "/productOrdering/v1/carts:GET",
    "/productOrdering/v1/carts:POST",
    "/productOrdering/v1/productOrders:GET",
    "/productOrdering/v1/productOrders/{id}:GET",
    "/resourceInventory/v1/resources:GET",
    "/resourceInventory/v1/resources/{resource}:GET",
    "/serviceInventory/v1/services:GET",
    "/serviceInventory/v1/services/{service}/changes:GET",
    "/serviceInventory/v1/services/{service}:GET",
    "/templateRendering/v1/templates/{name}:POST",
    "/troubleTicketing/v1/categories:GET",
    "/troubleTicketing/v1/tickets:GET",
    "/troubleTicketing/v1/tickets/{id}:GET",
    "/troubleTicketing/v1/tickets:POST",
    "/troubleTicketing/v1/tickets/{ticket}/attachments:GET",
    "/troubleTicketing/v1/tickets/{ticket}/attachments/{id}:DELETE",
    "/troubleTicketing/v1/tickets/{ticket}/attachments/{id}/download:GET",
    "/troubleTicketing/v1/tickets/{ticket}/attachments:POST",
    "/troubleTicketing/v1/tickets/{ticket}/notes:GET",
    "/troubleTicketing/v1/tickets/{ticket}/notes:POST",
    "/UI/CRM/addWholesaleProduct",
    "/UI/CRM/editSubAccountAccess",
    "/UI/CRM/manageCsmUsers",
    "/UI/CRM/viewAccountHierarchy",
    "/UI/CRM/viewSubAccountHierarchy",
    "/usages/v1/usages:GET",
    "/users/customerAccountUsers/accessEntireAccountHierarchy",
    "/users/customerAccountUsers/accessSubAccountHierarchy",
    "/users/v1/customerAccountUsers/{name}/associatedCustomerAccounts:GET",
    "/users/v1/customerAccountUsers/{name}/associatedCustomerAccounts:PUT",
    "/users/v1/customerAccountUsers/{name}:GET",
    "/users/v1/customerAccountUsers/{name}:PATCH",
    "/users/v1/customerAccountUsers:POST"
  ]
}

Offer Configuration Parameter Set

To enable the Infonova Shopfront UI app to manage the user’s shopping cart, a list of parameters have to be defined on every offer configuration of the tenant’s Infonova product catalogue that he wants to make orderable vie Infonvoa Shopfront UI.

The required parameter definitions of offers in the Infonova product catalogue
<parameterSet strictValidation="false">
    <parameterDefinitions>
        <parameterDefinition isRequired="false" isSearchable="true" isTransient="false" isHidden="false">
            <key>$productEntityKey</key>
            <displayName>The key of the product entity in Strapi</displayName>
            <changeSource>ORDER</changeSource>
        </parameterDefinition>
        <parameterDefinition isRequired="false" isSearchable="true" isTransient="false" isHidden="false">
            <key>$productEntityVariationKey</key>
            <displayName>The key of the product entity variation in Strapi</displayName>
            <changeSource>ORDER</changeSource>
        </parameterDefinition>
        <parameterDefinition isRequired="false" isSearchable="true" isTransient="false" isHidden="false">
            <key>$tags</key>
            <displayName>Comma-delimited list of tags that the user can set via shopfront UI</displayName>
            <changeSource>PRODUCT</changeSource>
        </parameterDefinition>
    </parameterDefinitions>
</parameterSet>

Core Entities

The core entities are the building-blocks of Infonova Experience Framework. They are defined and configured in the Strapi backend and loaded and used by the shopfront UI application.

core entities
Figure 1. To configure the entities navigate to the Administrator panel of the Strapi backend and use the menu on the top left.

Storefront

The storefront entity is the main entity of a shopfront. It defines the path at which the storefront can be accessed via the shopfront UI.

Table 1. Storefront entity consists of the following properties:
Property Details

Name

Defines the identifier of the storefront and is used to request storefront data from the backend. It also defines the path of the storefront: https://path-to-storefront/Name.

Channel

The key of the Infonova channel that is being used by product-ordering and the shopping cart.

Channel_id

The id of the Infonova channel that is being used by product-ordering and the shopping cart.

Keycloak_realm

The Keycloak realm that should be used for authenticating customer account users.

Keycloak_client_id

The id of the Keycloak client that should be used for authenticating customer account users.

Keycloak_url

The URL of the Keycloak client that should be used for authenticating customer account users. e.g. https://eu01.sb.infonova.com/auth.

Infonova_api_url

The base-URL of the Infonova API e.g. https://eu01.sb.infonova.com/r6-api/.

Infonova_tenant

The name of the Infonova tenant.

Logotip

The logo of the shopfront that will be displayed in the header of the shopfront UI.

Footer

The HTML of the footer that will be displayed as the footer of the shopfront UI.

Store_front_display_name

The display-name of the storefront. It will be used in the browser’s page titles.

Cart_summary_icon

The image that will be displayed on the top-right of the header of the shopfront UI. It is used to toggle the shopping cart popup.

Global_scripts

The script files that are added to the DOM scripts and loaded when navigating to the shopfront UI. Mainly used to load web components (custom elements).

Node_red_base_url

The base-URL of the Node-red backend. Will be added to the single-page application (SPA) environment and can be accessed in web components.

Browser_window_title

Can be used to override the page title of the browser tab.

Fav_ico

The image that is being used as the favicon of the shopfront UI.

Menu

A reference of a Menu entity. It is being used to define the top header menu of the shopfront UI.

Pages

A list of page entities that are associated with this storefront.

Css_file

A reference of the CSS entity that is being used by this storefront.

Landing_page

A reference to a page entity that is being used as the landing page of this storefront. It will be displayed when navigating to the shopfront UI’s home-page.

Cart_summary_page

A reference to a page entity that is being used to display the current content of the customer’s shopping cart. It will be displayed when clicking on the Show Cart button in the shopping cart popup.

Customer_registration_page

A reference to a page entity that is being used to register a new customer account. It will be displayed when clicking the Request new user link in the user pop-up.

Default_cart_config_page

A reference to a page entity that is being used as the default page when configuring a product in the shopping cart.

Sub_menus

A list of Menu entities that can be used by the shopfront UI and web components.

Customer_account_user_creation_page

A reference to a page entity that is being used to create a new customer account user. It will be displayed when logged in and clicking on the Customer Account User link in the user pop-up.

Csc_config

A reference to a CSC config entity that is being used to define the storefront’s CSC experience.

Default_layout

A reference to a Layout entity that is being used to define the storefront’s default layout.

CSS

The CSS entity is used to attach a CSS stylesheet to a Storefront. It will be automatically loaded when navigating the a storefront’s shopfront UI.

Table 2. CSS entity consists of the following properties:
Property Details

Name

The identifier of the CSS entity. Only used in the Strapi Administrator UI to identify the CSS entity in the CSS entities list.

Css

The CSS stylesheet file. Must be a file ending with .css.

Css_for_storefront

A reference of the Storefront that should use this CSS entity.

Menu

The menu entity is used to configure the Storefront's header navigation menu, as well as the CSC side-bar. It can also be used to define custom menus in web components.

Table 3. Menu entity consists of the following properties:
Property Details

Name

The identifier of the menu entity. Only used in the Strapi Administrator UI to identify the menu entity in the menu entities list.

Items

The menu items. See Menu Items for more information.

Menu_for_storefront

A reference of the Storefront that is using this menu as the header navigation menu.

Sub_menu_for_storefront

A reference of the Storefront that is using this menu as a menu other than the header navigation menu.

Type

The type of the menu. Can be any value other than the reserved value SIDEBAR, which is being used to define the CSC sidebar of a Storefront.

Menu Items

The items of a menu can be used to navigate the shopfront UI.

Table 4. Menu items consist of the following properties:
Property Details

Name

The display name of the menu item. It is being used to render the entry in the shopfront UI.

Page

A reference of a Page that the user will be navigated to when clicking the menu item.

Icon

The image that is associated with the menu item.

Dropdowns

The list of menu items that will be displayed in a pop-up when clicking the menu item. If this property is populated, then the menu item will not be a single link, but instead open a pop-up that contains all the page links of the menu items in the Dropdowns property.

CSC Config

The CSC Config entity defines the user experience of the customer self-care components of Infonova Shopfront.Using the Infonova Shopfront CSC components and CSC Config is an optional feature.

Table 5. CSC Config consists of the following properties:
Property Details

Name

The identifier of the CSC Config. Only used in the Strapi Administrator UI to identify the CSC Config in the CSC Config list.

Page

A reference of a Page that the user will be navigated to when clicking the menu item.

Default_Product_Image

The image that is being used as a default image for a Product that does not have an associated image.

Dashboard

The configuration of the pre-integrated CSC dashboard component. See CSC Dashboard Configuration for more details.

Storefront

A reference of the Storefront which uses the CSC Config.

Default_Product_Details

A reference of a Page that is being used as the default product details for a Product that does not have product details configured.The product details page is rendered on the product item of the CSC products component.

Default_CSC_Product_Actions

The default product actions that will be used for a Product that does not have Product Actions configured.

CSC Dashboard Configuration

The Dashboard Configuration of the CSC Config configured the pre-integrated dashboard component of Infonova Shopfront and consists of rows and their widgets. Widgets and rows can be moved in the Strapi Administrator UI. There is a list of out-of-the-box widgets, but custom widgets can also be used.

Table 6. CSC dashboard widgets consist of the following properties:
Property Details

Name

The identifier of the widget.

Size

Defines how much space the widget takes up.

Custom_widget_tooltip

The text that will be displayed when hovering over the ?-icon next to the widget.

Predefined_widget

If the widget is an out-of-the-box pre-integrated widget it can be chosen from the provided list.

Custom_widget

If the widget is a custom widget a Page can be referenced to be rendered.

Parameters

A list of Key-Value pairs that can be passed to the widgets. Pre-defined widgets can utilize a parameter entry with the key link and value of a Page slug for navigating when the user is clicking their link.

Product

A product entity is used to link an offer of the tenant’s Infonova product catalogue with the Storefront. It defines how the product can be configured in the shopping cart and how it can be used in the customer self-care components.

Table 7. CSC dashboard widgets consist of the following properties:
Property Details

Key

The identifier of the product. The value must be unique in Strapi.

Displayname

The display name of the product in the Strapi Administrator UI.

Published

Toggle between ON and OFF. Determines if the product should be displayed in some components of Infonova Shopfront.

Target

The target of the product in the Infonova tenant’s product catalogue. See Product Target for more information.

Cart_config_url

The URL of the cart configuration JSON file. See Shopping Cart Configuration for more information.

Media

A list of files associated with the product. The key value csc_product_image is reserved and used to define the product’s image which will be displayed in several CSC components.

Tags

A list of tags that can be used in custom web components.

Variation

A list of variations of the product. See Product Variation for more information.

Terms_and_Conditions

A list of files that will be presented to the user when checking out the shopping cart.

CSC_Product_Actions

A list of CSC product actions. Can be used to define product change-journeys. See Product Actions for more information.

Modify_cart_config_url

Replaced by Product Actions and will be removed in the future. Currently, not used.

Custom_config_page

If the product should be configured with a custom component, a Page can be referenced here that will be used when the user adds the product to the cart.

Storefront

A reference of the Storefront that this product is being associated with.

Product Target

The Product target is used to link the product entity to a product configuration in the Infonova tenant’s product catalogue. When ordering the product entity in the Infonova Shopfront UI, the product target will be added to the user’s shopping cart. The value of the product target is a JSON object with the following schema:

Product Target example JSON object
{
  "type": "product",
  "product": {
    "key": "OFFER_KEY"
  }
}

The value of the product.key property references a product offering in the Infonova tenant’s product catalogue.

Product Parameters

Product parameters is an array of key- value pairs attached to the product entity. There are reserved keys that are used to define specific behaviour:

Table 8. Reserved product parameters
Key Details

csc_recommendations_description

Defines the description of the product when displayed in the CSC dashboard recommendation widget.

csc_recommendations_page_slug

Defines the slug of a Page that is being redirected to when clicking on the product in the CSC dashboard recommendation widget.

csc_product_details

Defines the slug of a Page that is being rendered in the details section of the product in the CSC customer products list.

Product Actions

Product actions manage how the user can interact with the products in his product inventory in the CSC customer products page. If there are no actions defined on a product, then the default actions will be used which are defined in the CSC Config of the storefront. Product actions can be used to create a product change-journey that allows the user to make a change-request for his products.

Table 9. Product actions consist of the following properties:
Property Details

Displayname

The name of the action that will be displayed in the drop-down actions-button of the product in the CSC customer products list.

Page

A reference of a Page that the user will be redirected to when selecting the product action.

Parameters

A list of key-value pairs associated with the product action. The key Modify_cart_config_url is reserved and is used to define the cart config experience of the modify-product-entity component. See Modify Product Entity for more details.

Product Variation

Product variations can be used when the same product offering of the tenant’s product catalogue can be used for several products. An example would be connection products with different bandwidths that use the same Infonova product offering, but only use a different service characteristic value.

Table 10. Product variations consist of the following properties:
Property Details

Key

The identifier of the product variation. Must be unique in Strapi and is used when adding the product variation to the user’s shopping cart and when loading product details in CSC components.

Cart_operation

Used to apply operations on the product variation after it has been added to the shopping cart. Can be used to set the value of a service-characteristic or patch the entire cart. See Product Variation Cart Operation for more details.

Display_Name

Used to override the Product entity’s display name when the variation is used, instead.

CSC_Product_Actions

If there are [_product_actions_] defined on the variation, then the variation’s product actions will be used instead of the product actions of the Product.

Parameters

Can be used to override Product Parameters of a Product when the variation is used, instead.

Product Variation Cart Operation

A cart operation is applied to the product, after adding the product variation to the user’s shopping cart. It is used to set values of service-characteristics or patch the entire shopping cart.

The following cart operation will set the value of the service-characteristic SPEED of the service SERVICE-KEY to 100_100
{
  "operations": [
    {
      "type": "patch",
      "value": "100_100",
      "target": {
        "type": "service-characteristic",
        "serviceCharacteristic": {
          "serviceKey": "SERVICE-KEY",
          "serviceProvider": "SERVICE_TENANT",
          "serviceCharacteristicKey": "SERVICE-KEY:SPEED"
        }
      }
    }
  ]
}

Page

A page entity represents a single web page that can be served and rendered on a tenant’s Infonova Shopfront UI. Pages are associated with a single Storefront and are identified by their page slug. The location of a page on the storefront is https://path-to-storefront/storefrontName/page/pageSlug. An exception is the landing page of a storefront, which is referenced in the storefront’s Landing_page property and served with https://path-to-storefront/storefrontName.

The contents of a page is an array of components which are either Pre-integrated Components or plain HTML components. All components of the page will be rendered when the page is loaded in the browser.

Table 11. A page consists of the following properties:
Property Details

Name

The name of the page that will be displayed in the Strapi Administrator UI.

Content

The array of components that will be rendered on the page. Can be Pre-integrated Components or a Generic component that consists of plain HTML and optional scripts and CSS style sheets.

Page_for_storefront

A reference of the Storefront this page will be associated with.

Landing_for_storefront

If a Storefront is referenced, then the page will act as the storefront’s landing page. There can only be one landing page for each storefront.

Cart_summary_for_storefront

If a Storefront is referenced, then the page will act as the storefront’s cart summary page. There can only be one cart summary page for each storefront.

Slug

A short identifier of the page that will be used to navigate to the page in the Infonova Shopfront UI. If left empty, a value will be automatically generated. Page slugs must be unique in each Storefront. There are two reserved slug values that are used in the Infonova Shopfront UI: account is used to define the storefront’s CSC dashboard UI page and ordersummary is used for the storefront’s CSC orders page. See Pre-integrated Components for more details.

Browser_window_title

Used to override the browser’s tab title when navigating to the page.

Authentication_required

If true, this page can only be navigated to when a user is logged in on the Infonova Shopfront UI. Can be used to create CSC pages.

Show_customer_menu

If true, the storefront’s customer menu sidebar will be displayed, when navigating to the page. See Menu for more details.

Layout

A reference to a Layout entity that is being used to override the storefront’s default layout.

Layout

A layout entity is used to change the design layout of the Infonova Shopfront UI and to define various parts like the header, footer or menues. It can be used as a default layout for the whole Storefront or as a layout for specific pages. For example, one layout is used as the storefront’s default layout and another layout is used for the customer-self-care pages.

Table 12. A layout consists of the following properties:
Property Details

Name

The name of the layout that will be displayed in the Strapi Administrator UI.

Layout

The layout in the form of HTML code. See below for more information.

The following HTML code represents a basic shopfront layout and can be used as a starting point for developing new shopfront or page layouts.
<shopfront-layout-container>
    <shopfront-sidebar-container>
        <shopfront-sidebar-menu>
            <shopfront-sidebar-menu-account>
                <div class="mat-subheader" slot="start">Account</div>
                <shopfront-sidebar-menu-divider slot="end"></shopfront-sidebar-menu-divider>
                <div class="mat-subheader" slot="end">My area</div>
                <shopfront-sidebar-menu-items menu="customer menu" slot="end"></shopfront-sidebar-menu-items>
                <shopfront-sidebar-menu-divider slot="end"></shopfront-sidebar-menu-divider>
            </shopfront-sidebar-menu-account>
            <div class="mat-subheader">Language</div>
            <shopfront-sidebar-menu-language-switcher></shopfront-sidebar-menu-language-switcher>
            <shopfront-sidebar-menu-divider></shopfront-sidebar-menu-divider>
            <shopfront-sidebar-menu-items menu="main menu"></shopfront-sidebar-menu-items>
            <shopfront-sidebar-menu-divider></shopfront-sidebar-menu-divider>
            <shopfront-sidebar-menu-divider></shopfront-sidebar-menu-divider>
            <shopfront-sidebar-menu-login></shopfront-sidebar-menu-login>
        </shopfront-sidebar-menu>
    </shopfront-sidebar-container>
    <shopfront-content-container>
        <header>
            <div class="announcement">
                <div class="shell">
                    <p>
                        <img src="/static/welcome-ico.png" alt="">
                        <span>Welcome</span>
                        Welcome to the shopfront! This is a top page content information!
                    </p>
                </div>
            </div>
            <div class="lang-chooser">
                <div class="container nav-wrapper">
                    <shopfront-language-switcher class-name="right">
                        <shopfront-login slot="additional-fields-start"></shopfront-login>
                    </shopfront-language-switcher>
                </div>
            </div>
            <shopfront-toolbar class-name="container">
                <shopfront-sidebar-trigger class="d-lg-none">
                    <shopfront-icon class-name="infonova-sidebar__toggle-icon" icon-name="menu"></shopfront-icon>
                </shopfront-sidebar-trigger>
                <shopfront-logo></shopfront-logo>
                <shopfront-menu class-name="d-sm-none" menu-name="main menu"></shopfront-menu>
                <shopfront-shopping-cart slot="right-side"></shopfront-shopping-cart>
            </shopfront-toolbar>
        </header>
        <shopfront-page-content></shopfront-page-content>
        <shopfront-footer></shopfront-footer>
    </shopfront-content-container>
</shopfront-layout-container>

Layout Components (selection)

Shopfront Page Content

The Shopfront page content web component can be used to render the current Page.

Selector

shopfront-page-content

Example

<shopfront-page-content></shopfront-page-content>

Shopfront Menu

The Shopfront menu component can be used to render a Menu.

Table 13. The attributes of the Shopfront page content web component

menu-name

Used to define which Menu entity should be rendered.

class-name

Used to add classes to the component’s element in the DOM.

Selector

shopfront-menu

Example

<shopfront-menu class-name="d-sm-none" menu-name="main menu"></shopfront-menu>

Shopfront Sidebar Menu

The Shopfront sidebar menu component can be used to render a Menu in the Shopfront’s sidebar. A child element Shopfront Sidebar Menu Items has to be added to define which items should be included in the menu.

Selector

shopfront-menu

Example

<shopfront-sidebar-menu> <shopfront-sidebar-menu-items menu="main menu"></shopfront-sidebar-menu-items> </shopfront-sidebar-menu>

Shopfront Sidebar Menu Items

The Shopfront sidebar menu items component is used in a Shopfront Sidebar Menu to define which items should be rendered in the Menu.

Table 14. The attributes of the Shopfront page content web component

menu

Used to define which Menu entity should be rendered.

Selector

shopfront-sidebar-menu-items

Example

<shopfront-sidebar-menu> <shopfront-sidebar-menu-items menu="main menu"></shopfront-sidebar-menu-items> </shopfront-sidebar-menu>

Language Templates

Shopfront supports internationalization via language templates, which allow chaning pre-defined labels of existing shopfront components as well as adding templates for custom components. Language templates can be defined for all available languages of a shopfront. The languages need to be configured and available in order to be visible in the selector on the language templates config page.

Each language template has a unique component name with a flat key/value map. The language-templates have one key/value map per available language.

The key/value map translates the texts on the html page of a component. If no entries are set, the pre-defined fallback values of the component pages are displayed.

With the 'translate' pipe, the language-templates can be loaded. It loads the language-templates whith the currently selected language from shopfront. If not available it will fallback to the pre-defined value.

Example for translation-pipe inside component.
...
<a class="button login-existing" (click)="login()">{{ 'Log in existing user' | translate : 'login' : 'existing_user' | async }}</a>
...
Syntax:
{{ '<fallback-text>' | translate: '<language-template-name>':'<language-template-map-key> | async }}
language template
Figure 2. Language template config page

Default language-templates

Table 15. default language-template values:

Component

Key

Value

authentication

session-timeout

Your session has timed out. Please log in again

cart

added_products

Added Products:

cart

modified_configure

Configure

cart

modified_delete

Delete

cart

modified_products

Modified Products:

cart

new_configure

Configure

cart

new_delete

Delete

cart

shopping_cart

Shopping Cart

cart

show_cart

Show cart

cart_summary

accept_terms

Accept the Terms & Conditions:

cart_summary

added_products

ADDED PRODUCTS

cart_summary

cart_emtpy

Cart is empty

cart_summary

costs

COSTS

cart_summary

costs_per_month_inner

Costs per month:

cart_summary

costs_per_month_outer

Costs per month:

cart_summary

installation_date

Date for installation:

cart_summary

modified_products

MODIFIED PRODUCTS

cart_summary

one_time_inc_installation_inner

One time fees including Installation:

cart_summary

one_time_inc_installation_outer

One time fees including Installation:

cart_summary

order_daft

A request with ID ${cart.draftId} has been successfully submitted

cart_summary

order_draft_title

Success

cart_summary

order_placed

An order with ID ${order.id} has been placed successfully

cart_summary

order_placed_title

Success

cart_summary

product_configure_inner

Configure

cart_summary

product_configure_outer

Configure

cart_summary

product_delete_inner

Delete

cart_summary

product_delete_outer

Delete

cart_summary

remove_product

Removed product:

cart_summary

remove_product_title

Removed from cart

cart_summary

shopping_cart

Shopping Cart

cart_summary

summary

Summary

cart_summary

total_monthly_costs

Total Monthly Costs

cart_summary

total_onetime_costs

Total Onetime Costs

cart-config

amount

Amount:

cart-config

city

City

cart-config

configure_product

Configure Product

cart-config

cost_per_month

Costs per month:

cart-config

infonova_cart

Infonova Cart

cart-config

month

/ mo

cart-config

monthly

monthly:

cart-config

once

once:

cart-config

one_time_fees_with_installation

One time fees including Installation:

cart-config

order_configuration

Order Configuration

cart-config

province

Province

cart-config

request_quote

Request Quote

cart-config

Search

Search

cart-config

state

State

cart-config

street

Street

cart-config

street_number

Street number

cart-config

summary.checkout

Checkout

cart-config

summary.configure-product

Configure Product

cart-config

summary.continue-shopping

Continue Shopping

cart-config

summary.costs-per-month

Costs per month:

cart-config

summary.one-time-fees

One time fees including Installation:

cart-config

summary.product-summary

Product Summary:

cart-config

use_current_location

Use current location

cart-config

your_order

Your Order:

cart-config

your_quote

Your Quote:

cart-config

zip

ZIP

modify-cart-config

monthly

monthly:

modify-cart-config

once

once:

modify-cart-config

summary.configure-product

Configure Product

modify-cart-config

summary.product-summary

Product Summary

modify-cart-config

summary.one-time-fees

One time fees including Installation:

modify-cart-config

summary.costs-per-month

Costs per month:

modify-cart-config

summary.checkout

Checkout

modify-cart-config

summary.continue-shopping

Continue Shopping

customer_registration

submit_success

Customer has been requested successfully

customer_registration

submit_title

Customer Request

CUSTOMER_VIEW

BILLING_HEADER_TEXT

Billing Address:

CUSTOMER_VIEW

BUSINESS_LEGAL_NAME

Legal Name:

CUSTOMER_VIEW

BUSINESS_LEGAL_NAME_PLACEHOLDER

Your Legal Name

CUSTOMER_VIEW

BUSINESS_NAME

Business Name:

CUSTOMER_VIEW

BUSINESS_NAME_PLACEHOLDER

Your Business Name

CUSTOMER_VIEW

BUSINESS_NUMBER

Business Number:

CUSTOMER_VIEW

BUSINESS_NUMBER_CODE

FN:

CUSTOMER_VIEW

BUSINESS_NUMBER_PLACEHOLDER

Your Business Number

CUSTOMER_VIEW

BUSINESS_TYPE

Business Type:

CUSTOMER_VIEW

CANCEL_BUTTON

Cancel

CUSTOMER_VIEW

CITY

City:

CUSTOMER_VIEW

CITY_PLACEHOLDER

Your City

CUSTOMER_VIEW

CONTACT_HEADER_TEXT

Contact:

CUSTOMER_VIEW

COUNTRY

Country:

CUSTOMER_VIEW

COUNTRY_PLACEHOLDER

Your Country:

CUSTOMER_VIEW

CUSTOMER_EDIT_VIEW_HEADER_TEXT

Your Account

CUSTOMER_VIEW

EDIT_BILLING_ADDRESS_FORM_HEADER

Edit Billing Address:

CUSTOMER_VIEW

EDIT_BUSINESS_FORM_HEADER

Edit Business Details:

CUSTOMER_VIEW

EDIT_CONTACT_ADDRESS_HEADER

Edit Contact Address:

CUSTOMER_VIEW

EDIT_CONTACT_DETAILS_HEADER

Edit Contact Details:

CUSTOMER_VIEW

EMAIL_OPTIONAL

E-Mail:

CUSTOMER_VIEW

FAMILY_EMAIL_PLACEHOLDER

Your E-Mail Address

CUSTOMER_VIEW

FAMILY_MOBILE_PHONE_PLACEHOLDER

Your Mobile Phone

CUSTOMER_VIEW

FAMILY_NAME

Last Name:

CUSTOMER_VIEW

FAMILY_NAME_PLACEHOLDER

Your Family Name

CUSTOMER_VIEW

FAMILY_PHONE_PLACEHOLDER

Your Phone

CUSTOMER_VIEW

GIVEN_NAME

First Name:

CUSTOMER_VIEW

GIVEN_NAME_PLACEHOLDER

Your Name

CUSTOMER_VIEW

INDUSTRY_TYPE

Industry Type:

CUSTOMER_VIEW

MOBILE_PHONE_REQUIRED

Mobile Phone:

CUSTOMER_VIEW

PHONE_OPTIONAL

Phone:

CUSTOMER_VIEW

POSTCODE

Post code:

CUSTOMER_VIEW

POSTCODE_PLACEHOLDER

Post code

CUSTOMER_VIEW

PREFERRED_HEADER_TEXT

Preferred Contact:

CUSTOMER_VIEW

PREFERRED_LANGUAGE

Preferred Language:

CUSTOMER_VIEW

PREFERRED_LANGUAGE_TEXT

Preferred Language:

CUSTOMER_VIEW

PREFERRED_METHOD

Preferred Method:

CUSTOMER_VIEW

PREFERRED_OPTION_EMAIL

E-Mail

CUSTOMER_VIEW

PREFERRED_OPTION_MOBILE

Mobile Phone

CUSTOMER_VIEW

PREFERRED_OPTION_PHONE

Phone

CUSTOMER_VIEW

SAVE_BUTTON

Save Changes

CUSTOMER_VIEW

STREET_NAME

Address:

CUSTOMER_VIEW

STREET_NAME_PLACEHOLDER

Your Address

dashboard

hello

Hello

dashboard

monthly_invoices

Monthly Invoices

dashboard

more

more

dashboard

most_recent_orders

Most recent orders

dashboard

no_recent_orders

No recent orders

dashboard

recommend

Recommendations

dashboard

see_all_orders

See all orders

dashboard

see_more_month

See more

dashboard

see_more_total

See more

dashboard

see_orders

See orders

dashboard

see_products

See products

dashboard

service_fee

Service fee per product

dashboard

tooltip

This chart shows the sum of your monthly spendings. The vertical axis represents the amount in Euro and the horizontal axis shows the past six months.

dashboard

tooltip_recommend

Click on images to get more information about the products.

file-picker

add-file

Add File

file-picker

confirm

Confirm

file-picker

discard-changes

Discard

file-picker

invalid-files-selected

Please select max ${maxNumberOfSelectableFiles} files with extension ${allowedFileExtensions} and max file size ${maxSizePerFile}

file-picker

placeholder

Select max. ${maxNumberOfSelectableFiles}, ${allowedFileExtensions}, ${maxSizePerFile} each

infonova-cart-summary

costs_per_month

Costs per month:

infonova-cart-summary

infonvoa_cart

Infonova Cart

infonova-cart-summary

one_time_fees_inc_installation

One time fees including Installation:

infonova-cart-summary

order_summary

Order Summary

infonova-cart-summary

your_order

Your Order:

invoices

date

Date

invoices

download_invoice

Download invoice

invoices

invoices

Invoices

invoices

invoices_modal

Invoices

invoices

modal_download

Download invoice

invoices

modal_total

Total

invoices

monthly_invoices

Monthly Invoices

invoices

number

Number

invoices

state

State

invoices

status_open

Open

invoices

status_partial

Partially Paid

invoices

status_preparing

Preparing

invoices

status_settled

Settled

invoices

status_unknown

Unknown

invoices

tooltip

This chart shows the sum of your monthly spendings. The vertical axis represents the amount in Euro and the horizontal axis shows the past six months.

invoices

total

Total

login

account

Account

login

create_customer_account_user

Create Customer Account User

login

create_new_account

Create new Account

login

existing_user

Log in existing user

login

log_in

Log in

login

orders

Orders

login

user_menu_login

Log in

login

user_menu_logout

Logout

orders

no_orders

You don’t have any active orders yet.

orders

order_date_prefix

on

orders

order_date_unknown

Unknown

orders

order_hide_details

Hide details

orders

order_id

Order ID:

orders

order_placed

Order Placed:

orders

order_see_details

See details

orders

order_show_less

Show less

orders

order_show_more

Show more

orders

order_total_one_time

One-time Total:

orders

order_total_recc_prefix

orders

order_total_recc_suffix

per month

orders

order_total_service

Service Total:

orders

search_description

Search for order id

orders

search_result_empty

Sorry, no results were found for:

orders

time_period

Time period

product_description

add_successfully

Added successfully

product_description

add_title

Added to cart

product_description

failed_to_add_product

Failed to add product to cart

product_description

failed_to_add_product_title

Error

product_description

no_product_configured

No target for product configured

product_description

no_product_configured_title

Error

products

actions_select

Actions

products

buy_again

Buy again

products

no_products

You don’t have any active products yet.

products

per_month

per month

products

products_search

Search for name or tag

products

search_result_empty

Sorry, no results were found for:

products

tags_cancel

Cancel

products

tags_header

Tags

products

tags_info

Enter a comma after each tag.

products

tags_save

Save tags

TICKET_MANAGEMENT

CANCEL

Cancel

TICKET_MANAGEMENT

CREATE_TICKET_CATEGORY

Category

TICKET_MANAGEMENT

CREATE_TICKET_DESC

Description

TICKET_MANAGEMENT

CREATE_TICKET_DESC

Description*

TICKET_MANAGEMENT

CREATE_TICKET_E_MAIL_OPTION

E-MAIL

TICKET_MANAGEMENT

CREATE_TICKET_FIXEDLINE_OPTION

Fixed Line

TICKET_MANAGEMENT

CREATE_TICKET_HEADER

Create Ticket

TICKET_MANAGEMENT

CREATE_TICKET_MOBILE_PHONE_OPTION

Mobile Phone

TICKET_MANAGEMENT

CREATE_TICKET_NOTIFICATION_METHOD

Notification Method

TICKET_MANAGEMENT

CREATE_TICKET_NOTIFICATION_METHOD

Notification Method*

TICKET_MANAGEMENT

CREATE_TICKET_PRODUCT_INV_ORDER_NMB

Product Inventory or Order Number*

TICKET_MANAGEMENT

CREATE_TICKET_U_DOC

Upload Documents

TICKET_MANAGEMENT

CUSTOMER

You

TICKET_MANAGEMENT

DESCRIPTION_ERROR

Minimum 10 characters

TICKET_MANAGEMENT

HELPDESK

Helpdesk

TICKET_MANAGEMENT

SUBMIT

Create Ticket

TICKET_MANAGEMENT

TICKET_DETAILS_ATTACHMENTS

Attachments

TICKET_MANAGEMENT

TICKET_DETAILS_COMMENTS

Comments

TICKET_MANAGEMENT

TICKET_DETAILS_DESCRIPTION

Description

TICKET_MANAGEMENT

TICKET_DETAILS_FILE_UPLOAD_MENU_BUTTON_DELETE

Delete

TICKET_MANAGEMENT

TICKET_DETAILS_FILE_UPLOAD_MENU_BUTTON_DOWNLOAD

Download

TICKET_MANAGEMENT

TICKET_DETAILS_FILE_UPLOAD_MENU_BUTTON_OPEN

Open

TICKET_MANAGEMENT

TICKET_DETAILS_TICKET_ID

Case #

TICKET_MANAGEMENT

TICKET_DETAILS_UPLOAD

Upload

TICKET_MANAGEMENT

TICKET_LIST_ATTACHMENTS_HEADER

Attachments

TICKET_MANAGEMENT

TICKET_LIST_CASE_HEADER

Case#

TICKET_MANAGEMENT

TICKET_LIST_CAT_TITLE_HEADER

Category / Title

TICKET_MANAGEMENT

TICKET_LIST_CREATED_HEADER

Created

TICKET_MANAGEMENT

TICKET_LIST_NOTES_HEADER

Notes

TICKET_MANAGEMENT

TICKET_LIST_STATUS_HEADER

Status

TICKET_MANAGEMENT

TICKET_MANAGEMENT_CREATE_TICKET_BTN

Create Ticket

TICKET_MANAGEMENT

TICKET_MANAGEMENT_TICKETS_HEADER

Tickets

Publish Infonova Product Offering to Experience Framework

Infonova UI enables operators of the Infonova tenant to use a non-technical procedure to onboard Infonova product offers of the tenant’s product catalog onto a marketplace environment. This process includes creating the Product entity, the product’s marketing Page as well as the customer Shopping Cart Configuration.

The function can be initiated in the Infonova UI offer-management state on the offer’s details page top-right "Actions" menu entry "Marketplace Configuration". As soon as the process created the Product and Page entities, the operator will be redirected to a new UI state that provides a multi-step wizard where the details of the onboarded product can be customized.

This wizard consists of the following steps:

Step Description

Base Configuration

Configure basic information of the product including title, description, marketing starting price, image, currency, etc. Component also provides an iframe of the marketplace showing the product card. The page used for the iframe is configured by the channel parameter marketplaceSingleProductCatalogSlug.

Configuration View

Configure the customer product configuration view. The component features an iframe of the marketplace cart configuration builder and helps the operator create the Cart Configuration JSON Object that defines the customer’s product configuration view. The page used for the iframe is defined by the channel parameter marketplaceCartConfigEditorSlug.

Product Marketing

Design and change the product marketing page with the help of a WYSIWYG editor. The editor is running on the marketplace app and will be iframed. The page slug used for the iframe is the product’s marketing page including the isEditMode=true and product={{strapiProductName}} URL search parameters telling the component to initialize the WYSIWYG editor.

Review

The last step of the wizard features a summary of the product’s properties. The right side of the component features an iframe showing the marketplace’s product catalog page. The page slug used is defined by the channel’s marketplaceProductCatalogSlug parameter. In this iframe the operator can also test the configuration of the product.

Setup process dependencies

In order to use the publish functionality a few steps have to be taken:

1. Download, upload and activate the following ui-customizations on the Infonova tenant:

Name Link

publish-product

Download

publish-product-components

Download

2. Set up connection to marketplace

The marketplace environment used for publishing a product offering is defined on the Infonova channel entity. That means that each Infonova channel can have a different marketplace referenced with itself. When publishing a product to a marketplace via the Infonova UI product details page, a popup will list all channels that are configured to have a marketplace connection.

To connect a marketplace with an Infonova channel the following Infonova Channels API can be used:

PATCH /r6-api/your-tenant/channels/v1/channels/{{channel}}

with the following payload example:

Channel update payload
{
	"parameters": {
		"marketplaceSingleProductCatalogSlug": "single-product-publish",
		"marketplaceApiUri": "https://brightcomstrapi.cluster.sandbox.lab.infonova.com",
		"marketplaceDisplayName": "BrightCom Marketplace",
		"marketplaceName": "SHOPFRONT",
		"marketplaceUri": "https://brightcomstrapi.cluster.sandbox.lab.infonova.com/shopfront",
		"marketplaceCartConfigEditorSlug": "cart-config-builder",
		"marketplaceProductCatalogSlug": "product-catalog"
	}
}

3. Create Product Marketing Page Template

The marketing Page that will be created for the Product during the process will be based on a template that must be deployed on the marketplace environment. The html content of the template of the marketing page can include mustache templates that will be compiled during the creation of the marketing page. The following list contains all available templates:

Table 16. Available templates for the marketing page
Template Description

{{displayName}}

The display name of the product offering.

{{description}}

The description of the product offering.

{{currency}}

The currency of the product’s charges. If there are multiple currencies the first one will be taken.

{{price}}

The recurring price of the first currency of the product. If there are no recurring charges, the once only charges will be taken.

{{priceDetails}}

If there are recurring charges, / month will be taken, otherwise empty.

{{offering}}

The key (name) of the product offering

Internationalization

In Infonova Shopfront, some core entities can have versions of different languages. This makes it possible to load independent versions of one and the same entity from the Strapi backend.

internationalization page

Currently, the following entities support internationalization:

The version of the entity that gets loaded from the Strapi backend depends on the language, that the user selects on the Shopfront UI. If the entity does not have a version of the language that the user selected, the version with the default language will get loaded, instead.

entity internationalization
Figure 3. The Internationalization feature can be configured in the sidebar on the right side.

Events

Infonova Shopfront provides an event service that enables the shopfront owner to measure user traffic and engagement.

Event List

Default events emitted by Infonova Shopfront:

  • add_to_cart

  • begin_checkout

  • remove_from_cart

  • view_cart

  • view_item

  • purchase

  • login

Example how to subscribe to Event Subject:
  constructor(private infonovaShopfrontEventService: InfonovaShopfrontEventService) {
            infonovaShopfrontEventService.subscribeOnEventName('EVENT_NAME')
            .subscribe( payload  => {
                console.log(payload);
            });
  }
Example how to dispatch Event an event:
    document['$infonovaShopfrontEventService'].dispatchEvent('EVENT_NAME', { PARAMETERS })
Example how to dispatch Event using web-component:
    <trigger-event event="EVENT_NAME" payload="PARAMETERS" />

add_to_cart

This event signifies that an item was added to a cart for purchase.

Table 17. Parameters:

Name

Type

Required

Example value

currency

string

Yes

USD

value

number

Yes

7.77

items

Array<Item>

Yes

Table 18. Item parameters

Name

Type

Required

Example value

item_id

string

Yes

SKU_12345

item_name

string

Yes

Stan and Friends Tee

affiliation

string

No

Google Store

coupon

string

No

SUMMER_FUN

currency

string

No

USD

discount

number

No

2.22

index

number

No

5

item_brand

string

No

Google

item_category

string

No

Apparel

item_category2

string

No

Adult

item_category3

string

No

Shirts

item_category4

string

No

Crew

item_category5

string

No

Short sleeve

item_list_id

string

No

related_products

item_list_name

string

No

Related products

item_variant

string

No

green

location_id

string

No

ChIJIQBpAG2ahYAR_6128GcTUEo (the Google Place ID for San Francisco)

price

number

No

9.99

quantity

number

No

1

begin_checkout

This event signifies that a user has begun a checkout.

Table 19. Parameters:

Name

Type

Required

Example value

currency

string

Yes

USD

value

number

Yes

7.77

coupon

string

No

SUMMER_FUN

items

Array<Item>

Yes

Table 20. Item parameters

Name

Type

Required

Example value

item_id

string

Yes

SKU_12345

item_name

string

Yes

Stan and Friends Tee

affiliation

string

No

Google Store

coupon

string

No

SUMMER_FUN

currency

string

No

USD

discount

number

No

2.22

index

number

No

5

item_brand

string

No

Google

item_category

string

No

Apparel

item_category2

string

No

Adult

item_category3

string

No

Shirts

item_category4

string

No

Crew

item_category5

string

No

Short sleeve

item_list_id

string

No

related_products

item_list_name

string

No

Related products

item_variant

string

No

green

location_id

string

No

ChIJIQBpAG2ahYAR_6128GcTUEo (the Google Place ID for San Francisco)

price

number

No

9.99

quantity

number

No

1

remove_from_cart

This event signifies that an item was removed from a cart.

Table 21. Parameters:

Name

Type

Required

Example value

currency

string

Yes

USD

value

number

Yes

7.77

items

Array<Item>

Yes

Table 22. Item parameters

Name

Type

Required

Example value

item_id

string

Yes

SKU_12345

item_name

string

Yes

Stan and Friends Tee

affiliation

string

No

Google Store

coupon

string

No

SUMMER_FUN

currency

string

No

USD

discount

number

No

2.22

index

number

No

5

item_brand

string

No

Google

item_category

string

No

Apparel

item_category2

string

No

Adult

item_category3

string

No

Shirts

item_category4

string

No

Crew

item_category5

string

No

Short sleeve

item_list_id

string

No

related_products

item_list_name

string

No

Related products

item_variant

string

No

green

location_id

string

No

ChIJIQBpAG2ahYAR_6128GcTUEo (the Google Place ID for San Francisco)

price

number

No

9.99

quantity

number

No

1

view_cart

This event signifies that a user viewed their cart.

Table 23. Parameters:

Name

Type

Required

Example value

currency

string

Yes

USD

value

number

Yes

7.77

items

Array<Item>

Yes

Table 24. Item parameters

Name

Type

Required

Example value

item_id

string

Yes

SKU_12345

item_name

string

Yes

Stan and Friends Tee

affiliation

string

No

Google Store

coupon

string

No

SUMMER_FUN

currency

string

No

USD

discount

number

No

2.22

index

number

No

5

item_brand

string

No

Google

item_category

string

No

Apparel

item_category2

string

No

Adult

item_category3

string

No

Shirts

item_category4

string

No

Crew

item_category5

string

No

Short sleeve

item_list_id

string

No

related_products

item_list_name

string

No

Related products

item_variant

string

No

green

location_id

string

No

ChIJIQBpAG2ahYAR_6128GcTUEo (the Google Place ID for San Francisco)

price

number

No

9.99

quantity

number

No

1

view_item

This event signifies that some content was shown to the user. Use this event to discover the most popular items viewed.

Table 25. Parameters:

Name

Type

Required

Example value

currency

string

Yes

USD

value

number

Yes

7.77

items

Array<Item>

Yes

Table 26. Item parameters

Name

Type

Required

Example value

item_id

string

Yes

SKU_12345

item_name

string

Yes

Stan and Friends Tee

affiliation

string

No

Google Store

coupon

string

No

SUMMER_FUN

currency

string

No

USD

discount

number

No

2.22

index

number

No

5

item_brand

string

No

Google

item_category

string

No

Apparel

item_category2

string

No

Adult

item_category3

string

No

Shirts

item_category4

string

No

Crew

item_category5

string

No

Short sleeve

item_list_id

string

No

related_products

item_list_name

string

No

Related products

item_variant

string

No

green

location_id

string

No

ChIJIQBpAG2ahYAR_6128GcTUEo (the Google Place ID for San Francisco)

price

number

No

9.99

quantity

number

No

1

purchase

This event signifies when one or more items is purchased by a user.

Table 27. Parameters:

Name

Type

Required

Example value

currency

string

Yes

USD

transaction_id

string

Yes

T_12345

value

number

Yes

12.21

affiliation

string

No

Google Store

coupon

string

No

SUMMER_FUN

shipping

number

No

3.33

tax

number

No

1.11

items

Array<Item>

Yes

Table 28. Item parameters

Name

Type

Required

Example value

item_id

string

Yes

SKU_12345

item_name

string

Yes

Stan and Friends Tee

affiliation

string

No

Google Store

coupon

string

No

SUMMER_FUN

currency

string

No

USD

discount

number

No

2.22

index

number

No

5

item_brand

string

No

Google

item_category

string

No

Apparel

item_category2

string

No

Adult

item_category3

string

No

Shirts

item_category4

string

No

Crew

item_category5

string

No

Short sleeve

item_list_id

string

No

related_products

item_list_name

string

No

Related products

item_variant

string

No

green

location_id

string

No

ChIJIQBpAG2ahYAR_6128GcTUEo (the Google Place ID for San Francisco)

price

number

No

9.99

quantity

number

No

1

login

Send this event to signify that a user has logged in.

Table 29. Parameters:

Name

Type

Required

Example value

method

string

No

Google

Google Analytics integration

Infonova Shopfront allows you to submit events directly to a Google Analytics account. This is done by adding a shopfront parameter to the shopfront entity:

Google Analytics Configuration

Shopfront Parameter

Value

GAID

G-XXXXXXXXXX

Google Tag Manager Configuration

Shopfront Parameter

Value

GTMID

GTM-XXXXXXX

Automatically collected events by Google Analytics:

  • first_visit

  • page_view

  • scroll

  • user_engagement

  • session_start

Example how to dispatch Google Analytics Event:

    document['$infonovaShopfrontEventService'].dispatchEvent('view_item',
    {
        'currency': 'EUR',
        'value': 77,
        'items': ['item1', 'item2']
    }
)

Pre-integrated Components

There is a list of pre-defined components in Infonova Shopfront that can be either used as a Page content component directly or via their HTML element selector in a generic HTML component.

Important
Some components require user authorization for making requests to the Infonova API! This can be ensured, by only using those components on pages that have the Authentication_required property.

Banner Slider

Selector

-

Usable in HTML

no

Requires user authorization

no

The banner slider component shows a rotating banner that cycles through slides that contain a title, sub-title and a link. It can be added to a Page in the Strapi Administrator UI when configuring a page and adding the slide component.

banner slider
Figure 4. The banner slider component rendered in Infonova Shopfront UI.

Cart Summary

Selector

-

Usable in HTML

no

Requires user authorization

yes

The cart summary component renders the contents of the user’s shopping cart, lists the charges and offers links to configure, delete and submit the products in the shopping cart. It can be added to a Page in the Strapi Administrator UI when configuring a page and adding the Cart Summary component. When configuring the component, the text of the Order button can be configured and the submit-method can be chosen between quote and order. Quote method will submit the shopping cart as an Infonova prospect order and Order method will sub mit the Infonova product order.

A page that contains the cart summary component is usually used as the Storefront's Cart_summary_page.

cart summary
Figure 5. The cart summary component rendered in Infonova Shopfront UI.

Add Product to Cart

Selector

add-product-to-cart

Usable in HTML

yes

Example usage

<add-product-to-cart product="fiber" variation="fiber-100" button-text="Order"></add-product-to-cart>

Requires user authorization

yes

The add-product-to-cart web component can be used on a generic HTML content of a Page to render a button, that when clicked by a user, adds the corresponding Product or the Product Variation to the user’s shopping cart. If the user does not have a shopping cart when the user clicks the button, the component will create a new shopping cart.

Table 30. The following attributes define the web component’s behaviour:

product

references a Product's Key value

variation

references a Product Variation's Key value. This attribute is optional and is only used, when a variation of a product should be added to the shopping cart.

button-text

the text of the rendered button

require-login

optional attribute, that can be used and set to true, when the product can only be ordered if the user is logged in. If the user clicks the button without login, the button will redirect to the login-page.

login-text

optional attribute, that can be used to configure the button’s text when require-login is set to true and the user is not logged in. If the attribute is not provided, a Language Templates entity with the name add-product-to-cart and the template key login.<productKey> is used, instead.

After the product has been added to the cart, Infonova Shopfront UI will navigate to the product configuration page that is configured on the Product's Custom_config_page property. If the product does not have a Custom_config_page the user is redirected to the Storefront's Default_cart_config_page, instead.

For more information of how to set up a product ordering journey see Make a Product orderable via Infonova Shopfront UI.

CSC Dashboard

Selector

app-dashboard

Usable in HTML

yes

Example usage

<app-dashboard></app-dashboard>

Requires user authorization

yes

The dashboard web component renders a responsive page with configurable widgets. It can be added to a page in a generic HTML component and uses the Storefront's CSC Config.

csc dashboard
Figure 6. The CSC dashboard component rendered in Infonova Shopfront UI.
Tip
It makes sense to add the dashboard web component to a Page with the account slug, since it is used, when the user clicks on the Account-link in the user pop-up in the top-right corner of Infonova Shopfront UI.

CSC Orders

Selector

app-orders

Usable in HTML

yes

Example usage

<app-orders></app-orders>

Requires user authorization

yes

The orders web component renders a responsive page with a list of the user’s product orders. It can be added to a page in a generic HTML component.

csc orders
Figure 7. The CSC orders component rendered in Infonova Shopfront UI.
Tip
It makes sense to add the dashboard web component to a Page with the ordersummary slug, since it is used, when the user clicks on the Orders-link in the user pop-up in the top-right corner of Infonova Shopfront UI.

CSC Products

Selector

app-products

Usable in HTML

yes

Example usage

<app-products></app-products>

Requires user authorization

yes

The products web component renders a responsive page with a list of the user’s products in the Infonova product-inventory. It can be added to a page in a generic HTML component.

csc products
Figure 8. The CSC products component rendered in Infonova Shopfront UI.

CSC Invoices

Selector

app-invoices

Usable in HTML

yes

Example usage

<app-invoices></app-invoices>

Requires user authorization

yes

The products web component renders a responsive page with a list of the user’s invoices. It uses the Infonova billing V1 API. It can be added to a page in a generic HTML component.

csc invoices graph
Figure 9. The CSC invoices component’s stats tab rendered in Infonova Shopfront UI.
csc invoices
Figure 10. The CSC invoices component’s list tab rendered in Infonova Shopfront UI.

Modify Product Entity

Selector

app-modify-product-entity

Usable in HTML

yes

Example usage

<app-modify-product-entity></app-modify-product-entity>

Requires user authorization

yes

The modify-produt-entity web component makes it possible to configure a Product's change (modify) journey. It can be added to a page in a generic HTML component.

The component uses the browser URL query parameter product and uses it as the id for loading the product via Infonova productInventory V1 API. For a detailed description of how to configure product change journeys see Create a Product Change-Journey.

Cart Entity Config

Selector

shopfront-cart-entity-config

Usable in HTML

yes

Example usage

<shopfront-cart-entity-config></shopfront-cart-entity-config>

Requires user authorization

yes

The cart-entity-config web component makes it possible to configure a shopping cart in order to order a Product. It can be added to a page in a generic HTML component.

To control how charges are displayed in the component, an attribute show-tax can be added. If the value is false, then charges will be displayed without their tax amount included. By default, charges are displayed with their tax amounts included.

For more information on how to create a shopping cart journey, see Shopping Cart Configuration and follow the use case described in Make a Product orderable via Infonova Shopfront UI.

Login component

Selector

shopfront-login

Usable in HTML

yes

Example usage

<shopfront-login></shopfront-login>

Example usage with content

<shopfront-login> <ul> <li>list</li> </ul> <custom-web-component></custom-web-component> </shopfront-login>

Requires user authorization

no

The login component is used to render a login Button when user is not logged in and if a user is logged in, the user can open a popup with the following content:

  • display of user’s e-mail address

  • links to navigate to:

    • Account CSC page

    • Orders CSC page

    • Create customer account user form

  • Logout

If content is added to the shopfront-login element, the default links are hidden and the html content is renderd, instead of the default links.

It can be added to a page in a generic HTML component.

Conditional content rendering ("show-if") component

Selector

shopfront-show-if

Usable in HTML

yes

Example usage

<shopfront-login></shopfront-login>

Example usage with custom content

<shopfront-show-if is-authenticated="true"> <h1>Heading Text</h1> <div>Paragraph</div> <some-web-component></some-web-component> </shopfront-show-if>

Requires user authorization

no

The conditional content rendering, or "show-if" web component can be used to display and hide content depending on several conditions.

Table 31. The following attributes define the condition if the web component’s content is rendered:

is-authenticated

can be set to either true or false. If the value is set to true, the content will only get rendered if a user is logged in. If the value is set to false, the content will only get rendered if the user is not logged in. If the attribute is not used, the content will be rendered regardless of a user being logged in or not.

Post-Login Redirect

Selector

shopfront-post-login-redirect

Usable in HTML

yes

Example usage

<shopfront-post-login-redirect redirect-page="pageslug"></shopfront-post-login-redirect>

Requires user authorization

no

The post-login redirect component can be used to configure the page that the user will be redirected to after logging in on the current page. By default, the Infonova Shopfront frontend application will redirect the user to the storefront’s landing page. If the post-login redirect web component is used in either a Layout or a Page's content, then the user will be redirected to the current page, on which the user clicked on the Login button. The target page can also be customized by using the component’s redirect-page attribute, which takes a Page slug as a value.

Note
The post-login redirect web component does not have any content. It is only used to customize the post-login redirect.

SEO

Search Engine Optimization is practice/process of getting website to rank higher in search engines results. The customization and flexibility of Strapi will allow you to optimize your content structure and improve your website SEO.

Sitemaps

Infonova Shopfront automatically generates sitemaps based on you page entities.

You can retrieve the sitemap by using the following url:

seo sitemap
Figure 11. Example of sitemap.

Meta Tags

Infonova Shopfront supports Meta Tags to help search engines determine the content of a page. Those Meta Tags can be defined on storefront level for every page (default / fallback) or specifically for every page.

Prevent indexing

The prevent indexing toggle allows you to add a meta tag that prevents search engines to add your pages to the search index.

Open graph and facebook Meta Tags

The open graph and facebook toggle allows you to automatically create social media tags based on already existing meta tag information on every page.

Storefront Meta Tags

The following Meta Tags can be defined on storefront level:

Table 32. Storefront Meta Tags

Meta Tags

Component

default_title

Text

default_description

Text

default_keywords

Text

default_image_alt_text

Text

default_meta_image

Media

default_type

Text

prevent_indexing

Boolean

open_graph_and_facebook

Boolean

custom_meta_tag_mapping

Component

global_meta_tags

Component

custom_meta_tag_mapping

Component

key

Text

value

Enumeration

global_meta_tags

Component

key

Text

value

Text

seo meta tags add to strapi storefront
Figure 12. The Meta Tags feature can be configured in config Storefront.

Page Meta Tags

The following Meta Tags can be defined on page level:

Table 33. Page Meta Tags

Meta Tags

Component

title

Text

description

Text

keywords

Text

type

Text

meta_image

Media

image_alt_text

Text

prevent_indexing

Boolean

canonical

Relation with Page

custom_meta_tags

Component

custom_meta_tags

Component

key

Text

value

Text

seo meta tags add to strapi page
Figure 13. The Meta Tags feature can be configured in config Page.

Shopping Cart Configuration

After adding a product to the user’s shopping cart, the user will be redirected to the shopping cart configuration page, where he can configure the product’s characteristics. The configuration form is an abstraction layer above the offer configuration of the tenant’s Infonova product catalogue with the aim to hide the complexity of the product catalog offering and making it easier for the user to configure the products he wants to order.

The cart configuration page is rendered with the help a JSON object configured and linked to a Product entity. The JSON object can be saved in the Strapi Media Library or on any other server. With the help of the JSON object the product’s configuration page can be configured. It consists of sections which can have multiple features that interact with the Infonova product catalog. Features can have pre-defined types, like address, text, select, etc. or a custom type that can be integrated into Infonova Shopfront via scripts containing custom elements (web components) made by a developer.

shopping cart configuration
Figure 14. An example of a shopping cart configuration in Infonova Shopfront UI.

Tax Amount Display of Charges

By default, the charges that are displayed during the configuration of the shopping cart are displayed with their tax amount included. To change the display of charges to net amounts, a Storefront parameter with the key SHOW_PRODUCT_CONFIG_TAX is used. If the parameter’s value is true, then charges will include the tax amount, otherwise tax amounts are excluded. It’s also possible to set the tax display mode on cart-configuration component level, which has a higher priority than the global storefront parameter:

<shopfront-cart-entity-config show-tax="true"></shopfront-cart-entity-config>

Cart Configuration JSON Object

The cart configuration JSON object defines the customer experience of ordering a product in Infonova Shopfront UI. It is linked to a Product by providing the URL of the JSON object to the product entity’s Cart_config_url property. For a detailed walk-through of creating a product order journey see Make a Product orderable via Infonova Shopfront UI.

A full example cart configuration JSON object.
{
  "sections": [
    {
      "name": "SD WAN Package",
      "open": true,
      "page": "1",
      "features": [
        {
          "type": "readonly",
          "target": {
            "type": "product-characteristic",
            "productCharacteristic": {
              "key": "MRC_SD_WAN",
              "offerKey": "RT_SD_WAN"
            }
          }
        }
      ]
    },
    {
      "name": "Region",
      "open": true,
      "page": "1",
      "features": [
        {
          "type": "selectdropdown",
          "displayName": "Choose Region",
          "description": "",
          "icon": "https://strapi-develop.s3.eu-west-1.amazonaws.com/region_0edbedb1b1.svg",
          "target": {
            "type": "service-characteristic",
            "serviceCharacteristic": {
              "serviceKey": "SD_WAN",
              "serviceCharacteristicKey": "SD_WAN:REGION",
              "serviceProvider": "BEYONDCOM"
            }
          }
        }
      ]
    },
    {
      "name": "Virtual Network Functions",
      "open": true,
      "page": "2",
      "features": [
        {
          "type": "toggle",
          "icon": "https://strapi-develop.s3.eu-west-1.amazonaws.com/security_347223322d.svg",
          "pricingTemplate": "${currency} ${charge} / mo",
          "target": {
            "type": "service-characteristic",
            "serviceCharacteristic": {
              "serviceKey": "SD_WAN",
              "serviceCharacteristicKey": "SD_WAN:FIREWALL",
              "serviceProvider": "BEYONDCOM"
            }
          }
        },
        {
          "type": "toggle",
          "icon": "https://strapi-develop.s3.eu-west-1.amazonaws.com/bandwidth_664314c90d.svg",
          "pricingTemplate": "${currency} ${charge} / mo",
          "target": {
            "type": "service-characteristic",
            "serviceCharacteristic": {
              "serviceKey": "SD_WAN",
              "serviceCharacteristicKey": "SD_WAN:WAN_OPTIMIZER",
              "serviceProvider": "BEYONDCOM"
            }
          }
        }
      ]
    }
  ]
}

Sections

The cart configuration JSON object with a single section.
{
  "sections": [
    {
      "name": "Section header",
      "open": "true",
      "page": "1",
      "features": [
        {}
      ]
    }
  ]
}
Table 34. A section consists of the following properties:
Property Description Mandatory

name

Display name of the section’s header

yes

open

If true, the section is initially expanded

page

Number of the page on which to show the section

features

List of the section’s features. See Features for more details.

Pages

The cart configuration JSON object with pages.
{
  "sections": [
    {
      "name": "Section header",
      "open": true,
      "page": "1",
      "features": [
        {}
      ]
    }
  ],
  "pages": [
    {
      "key": "1",
      "name": "Page 1",
    }
  ]
}
Table 35. A page consists of the following properties:
Property Description Mandatory

key

Page key for language templates. To define a language template, create an entry in Strapi language templates in the format i18n.cart-entity-config.page.${key}.ftl.

yes

name

Display name of the page. Fall-back value, if there is no language-template found.

Features

The configuration of a feature in the cart configuration JSON object.
{
  "target": {},
  "options": [
    {}
  ],
  "show": "availableInCart",
  "type": "feature-type",
  "pricingTemplate": "${currency} ${charge} / mo",
  "icon": "http://iconurl.com/icon.svg",
  "isAddress": false,
  "displayName": "Feature display name",
  "description": "Feature description"
}

Some pre-defined feature types require a target, others require options. For more details see the descriptions of the pre-defined feature types below.

Table 36. A feature consists of the following properties:
Property Description Mandatory

target

The Infonova product catalog target. See Feature Targets for more information.

depends on feature type

options

The Infonova product catalog target options

depends on feature type

show

Used to show and hide features. Can have two values, availableInCart or activeInCart. When setting the value to availableInCart, the feature will be displayed if the target or any option’s target is available to be added to the shopping cart. When setting the value to activeInCart, the feature will only be displayed if the target or any option’s target is already active in the user’s shopping cart. By default, the feature will always be displayed!

no

type

Type of the feature. Can be one of the pre-defined types or a custom type. See Feature Types for more information.

yes

pricingTemplate

The template for the pricing display.

no

isAddress

Determines if the feature is an address-type feature

no

displayName

Override text for the feature’s display name. By default, the feature-component will use the display name of the feature configured in the Infonova product catalogue.

no

description

Override text for the feature’s description. By default, the feature-component will use the description of the feature configured in the Infonova product catalogue.

no

validation

Validation rules of the feature. See Feature Validation for more information.

no

Feature Types

Feature types define how the feature should be rendered on the cart configuration page in Infonova Shopfront. There is a list of pre-defined, ready-to-use feature types, but custom types can also be created and used. The way Infonova Shopfront UI renders the feature is by using a naming convention for the custom element (web component): for every feature, Infonova Shopfront renders the component with the selector infonova-cart-feature-featureName (e.g. infonova-cart-feature-select for a feature with type select). That means that for a feature with type custom, a custom element (web-component) has to be provided with the selector infonova-cart-feature-custom. For a detailed walk-through of how to create a custom feature type see Create a Custom Cart Configuration Feature Type.

cart config feature
Figure 15. Example of a feature of type select
Important
Every feature type has a certain set of supported feature targets. Not every combination makes sense!
Table 37. List of pre-defined feature types and their supported feature targets.

Product

Product Characteristic

Service

Service Characteristic

Service Characteristic Parameter

Resource

Address

NO

NO

NO

YES

NO

NO

Toggle

YES

YES

YES

YES

NO

NO

Select

YES

YES

YES

YES

YES

YES

Quantity

YES

YES

YES

YES

NO

YES

Readonly

YES

YES

YES

YES

NO

YES

Select Dropdown

NO

YES

YES

YES

YES

NO

Text

NO

NO

NO

YES

NO

NO

Mass Ordering

NO

NO

NO

NO

NO

NO

Address

Google Maps integration to select an address feature value.

Supported targets:
  • service-characteristic

An example configuration feature of type address.
{
  "type": "address",
  "isAddress": true,
  "target": {
    "type": "service-characteristic",
    "serviceCharacteristic": {
      "serviceKey": "SERVICE_KEY",
      "serviceCharacteristicKey": "SERVICE_KEY:ADDRESS_FEATURE",
      "serviceProvider": "SERVICE_PROVIDER"
    }
  }
}
cart feature address
Figure 16. Example of a feature of type address
Toggle

Enable or disable a feature in the shopping cart.

Supported targets:
  • product

  • product-characteristic

  • service

  • service-characteristic

An example configuration feature of type toggle.
{
  "type": "toggle",
  "target": {
    "type": "service-characteristic",
    "serviceCharacteristic": {
      "serviceKey": "SERVICE_KEY",
      "serviceCharacteristicKey": "SERVICE_KEY:TOGGLE_FEATURE",
      "serviceProvider": "SERVICE_PROVIDER"
    }
  },
  "pricingTemplate": "${currency} ${charge} per month"
}
cart feature toggle
Figure 17. Example of a feature of type toggle
Select

Select one of multiple options in the shopping cart. If the Infonova target type is "Service Characteristic Parameter", options cannot be mixed with other Infonova target types.

Supported targets:
  • product

  • product-characteristic

  • service

  • service-characteristic

  • service-characteristic-parameter

  • resource

An example configuration feature of type select.
{
  "type": "select",
  "options": [
    {
      "name": "Option 1",
      "target": {
        "type": "service-characteristic-parameter",
        "serviceCharacteristicParameter": {
          "serviceKey": "SERVICE_KEY",
          "serviceCharacteristicKey": "SERVICE_KEY:SELECT_FEATURE",
          "serviceCharacteristicParameterKey": "option1"
        }
      }
    },
    {
      "name": "Option 2",
      "target": {
        "type": "service-characteristic-parameter",
        "serviceCharacteristicParameter": {
          "serviceKey": "SERVICE_KEY",
          "serviceCharacteristicKey": "SERVICE_KEY:SELECT_FEATURE",
          "serviceCharacteristicParameterKey": "option2"
        }
      }
    }
  ]
}
cart feature select
Figure 18. Example of a feature of type select
Quantity

Set the amount of certain features in the shopping cart.

Supported targets:
  • product

  • product-characteristic

  • service

  • service-characteristic

  • resource

An example configuration feature of type quantity.
{
  "type": "quantity",
  "target": {
    "type": "service-characteristic",
    "serviceCharacteristic": {
      "serviceKey": "SERVICE_KEY",
      "serviceCharacteristicKey": "SERVICE_KEY:AMOUNT_FEATURE"
    }
  }
}
cart feature quantity
Figure 19. Example of a feature of type quantity
Readonly

Displays a read-only feature without user interaction.

Supported targets:
  • product

  • product-characteristic

  • service

  • service-characteristic

  • resource

An example configuration feature of type readonly.
{
  "type": "readonly",
  "target": {
    "type": "product-characteristic",
    "productCharacteristic": {
      "key": "PRODUCT_FEATURE",
      "offerKey": "OFFER"
    }
  }
}
cart feature readonly
Figure 20. Example of a feature of type readonly
Select Dropdown

Select one of multiple options in the shopping cart. If the Infonova target type is "Service Characteristic Parameter", options are loaded automatically.

Supported targets:
  • product-characteristic

  • service

  • service-characteristic

  • service-characteristic-parameter

An example configuration feature of type selectdropdown.
{
  "type": "selectdropdown",
  "target": {
    "type": "service-characteristic",
    "serviceCharacteristic": {
      "serviceKey": "SERVICE_KEY",
      "serviceCharacteristicKey": "SERVICE_KEY:SELECT_FEATURE",
      "serviceProvider": "SERVICE_PROVIDER"
    }
  }
}
cart feature selectdropdown
Figure 21. Example of a feature of type selectdropdown
Text

Set a String value of a service feature in the shopping cart.

Supported targets:
  • service-characteristic

An example configuration feature of type text.
{
  "type": "text",
  "target": {
    "type": "service-characteristic",
    "serviceCharacteristic": {
      "serviceKey": "SERVICE_KEY",
      "serviceCharacteristicKey": "SERVICE_KEY:SELECT_FEATURE",
      "serviceProvider": "SERVICE_PROVIDER"
    }
  }
}
cart feature text
Figure 22. Example of a feature of type text
Mass Ordering

Changes the quantity property of the current cart entity that is being configured. Can be used to enable bulk ordering of a product offering. The customer-experience of the mass-ordering feature is similar to the quantity feature type.

An example configuration feature of type massordering.
{
  "type": "massordering",
  "icon": "http://iconurl.com/icon.svg",
  "displayName": "Amount of orders",
  "description": "Order the package in bulk"
}

Feature Targets

With the help of targets, features are linked with Infonova product catalogue features of a base offer.

Product

Type identifier: product

A product target configuration referencing an Infonova base offer with the key OFFERKEY.
{
  "key": "OFFERKEY",
  "offerGroup": "OFFERGROUPKEY"
}
Table 38. A product target consists of the following properties:
Property Description Mandatory

key

The name of the retail offer of the Infonova product catalog.

yes

offerGroup

The name of the offer group, if the product is in an offer group of a bundle.

no

Product Characteristic

Type identifier: product-characteristic

A product characteristic target configuration referencing an Infonova base offer feature.
{
  "key": "PRODUCT_FEATURE",
  "offerKey": "OFFERKEY"
}
Table 39. A product characteristic target consists of the following properties:
Property Description Mandatory

key

The name of the product feature.

yes

offerKey

The name of the retail offer of the Infonova product catalog.

yes

Resource

Type identifier: resource

A resource target configuration referencing an Infonova base offer resource.
{
  "resourceKey": "RESOURCE",
  "resourceReferenceKey": "RESOURCE_GROUP_REFERENCE_KEY",
  "resourceProvider": "RESOURCE_PROVIDER",
  "offerKey": "OFFERKEY"
}
Table 40. A resource target consists of the following properties:
Property Description Mandatory

resourceKey

The name of the resource.

yes

resourceReferenceKey

The name of the resource group reference.

yes

resourceProvider

The name of the resource provider tenant.

yes

offerKey

The key of the offer configuration of the Infonova product catalog.

yes

Service

Type identifier: service

A service target configuration referencing an Infonova base offer service reference.
{
  "key": "SERVICE_KEY",
  "tenant": "SERVICE_PROVIDER",
  "offerKey": "OFFERKEY"
}
Table 41. A service target consists of the following properties:
Property Description Mandatory

key

The name of the service.

yes

tenant

The name of the service provider tenant.

yes

offerKey

The name of the retail offer of the Infonova product catalog.

yes

Service Characteristic

Type identifier: service-characteristic

A service characteristic target configuration referencing an Infonova base offer service feature reference.
{
  "serviceKey": "SERVICE_KEY",
  "serviceCharacteristicKey": "SERVICE_FEATURE",
  "serviceProvider": "SERVICE_TENANT"
}
Table 42. A service target consists of the following properties:
Property Description Mandatory

serviceKey

The name of the service.

yes

serviceCharacteristicKey

The name of the service feature.

yes

serviceProvider

The name of the service provider tenant.

yes

Service Characteristic Parameter

Type identifier: service-characteristic-parameter

A service characteristic parameter target configuration referencing an Infonova base offer service feature reference parameter.
{
  "serviceKey": "SERVICE_KEY",
  "serviceCharacteristicKey": "SERVICE_FEATURE",
  "serviceCharacteristicParameterKey": "SERVICE_PROVIDER"
}
Table 43. A service target consists of the following properties:
Property Description Mandatory

serviceKey

The name of the service.

yes

serviceCharacteristicKey

The name of the service feature.

yes

serviceCharacteristicParameterKey

The value of the service characteristic parameter.

yes

Feature Validation

Validation on feature level prevent users from configuring invalid shopping carts on the cart configuration page. The validation rules can be specified on feature level and the validations are automatically performed whenever any input value on the cart configuration page changes.

The validation rules can be configured by adding a validation object to the feature configuration, which supports two fields. The field templateKey is a string that specifies which language template has to be loaded, see Error Messages. The field validators specifies an object containing the validators and its values, see Built-in Validators. The field templateKey is optional whereas the validators key is mandatory.

Example of a validation on a quantity feature
{
  "type": "quantity",
  "validation": {
    "templateKey": "template_key",
    "validators": {
      "min": 1,
      "max": 3
    }
  },
  "target": {
    //  ...
  }
}
Built-in Validators

Shopfront has built-in validators for performing validations. Each validator is set as an object entry in the validators object as shown in the example. For a full list of supported built-in validators see the table below.

Table 44. List of built-in validators

Validator

Value

Description

required

Boolean value, e.g., true

Validates if a certain field is set

isEmail

Boolean value, e.g., true

Validates if the input field is an email

max

Integer number, e.g., 100

Validates if the entered number is less than the supplied value

min

Integer number, e.g., 50

Validates if the entered number is greater than the supplied value

regex

String containing a regular expression, e.g., "^[a-zA-Z0-9]$"

Validates if the input conforms to the regular expression

Validators are not supported on every feature type, e.g., a quantity feature cannot perform an email validation. The table shows all feature types and all its supported validators.

Table 45. List of pre-defined feature validators and on which feature they are supported

required

isEmail

max

min

regex

Address

YES

NO

NO

NO

NO

Toggle

NO

NO

NO

NO

NO

Select

YES

NO

NO

NO

NO

Quantity

YES

NO

YES

YES

NO

Text

YES

YES

NO

NO

YES

Readonly

NO

NO

NO

NO

NO

Select Dropdown

YES

NO

NO

NO

NO

Mass Ordering

YES

NO

YES

YES

NO

Error Messages

Validation error messages can be configured via language templates in Strapi, see Language Templates for further information.

The templateKey is part of a language template entity namethat is used for fetch the errors messages. If this key is not set, the value default is used instead. The error messages can be configured by creating a language template entity, where the name of the language template entity is validation. followed by the templateKey value, e.g., validation.default or validation.template_key. To customize the error message of a validator create a template with the validator’s name as the template key and the value specifies the associated text.

language template validation generic
Figure 23. Default validation error messages.
language template validation specific
Figure 24. Override default validation messages by using a templateKey.

The error message test specified in the template also supports built-in variables that are substituted to certain values as described in the table below.

Built-in Variable

Description

${value}

Resolves to the input that the user has entered.

${feature}

Resolves to the feature description.

The name of the validator, e.g., ${min}

Resolves to the validation value.

language template validation variables definition
Figure 25. Use built-in variables in a language template.
language template validation variables result

Common Use Cases

The following list serves as a quick reference list and instructions of how to implement common use cases.

Make a Product orderable via Infonova Shopfront UI

In order to make a product orderable via Infonova Shopfront UI we assume, that the offer configuration already exists in the tenant’s Infonova product catalogue. For this example walk-through we have an SD WAN product configuration we want to expose to users of Infonova Shopfront UI.

At first, we have to prepare the Storefront entity and add a default cart-config Page. To achieve this, we navigate to the Page entities on the top-left of the Strapi Administrator UI and create a new page and add the Cart Config component:

cart config component
Figure 26. The cart-config component:

After saving the page entity it has to be referenced in the Default_cart_config_page property of the Storefront.

The next step is to create the Product entity:

product 01
Figure 27. The product entity configuration.

The Target property links the product to an offer configuration of the tenant’s Infonova product catalogue. The product.key property references the key of the base offer in Infonova.

The Target of the product entity.
{
  "type": "product",
  "product": {
    "key": "RT_SD_WAN"
  }
}

The next step is to give a Key to the product and to create the Cart Configuration JSON Object which is used to define the user experience when configuring the product offer in Infonova Shopfront UI.

product 02
Figure 28. The product entity configuration.

The cart configuration JSON object can be uploaded to the Strapi Media Library, and the URL can be pasted to the Cart_config_url property of the product entity.

The content of the cart configuration JSON object for the product.
{
  "sections": [
    {
      "name": "SD WAN Package",
      "open": true,
      "page": "1",
      "features": [
        {
          "type": "readonly",
          "target": {
            "type": "product-characteristic",
            "productCharacteristic": {
              "key": "MRC_SD_WAN",
              "offerKey": "RT_SD_WAN"
            }
          }
        }
      ]
    },
    {
      "name": "Region",
      "open": true,
      "page": "1",
      "features": [
        {
          "type": "selectdropdown",
          "displayName": "Choose Region",
          "description": "",
          "icon": "https://strapi-develop.s3.eu-west-1.amazonaws.com/region_0edbedb1b1.svg",
          "target": {
            "type": "service-characteristic",
            "serviceCharacteristic": {
              "serviceKey": "SD_WAN",
              "serviceCharacteristicKey": "SD_WAN:REGION",
              "serviceProvider": "BEYONDCOM"
            }
          }
        }
      ]
    },
    {
      "name": "Virtual Network Functions",
      "open": true,
      "page": "2",
      "features": [
        {
          "type": "toggle",
          "icon": "https://strapi-develop.s3.eu-west-1.amazonaws.com/security_347223322d.svg",
          "pricingTemplate": "${currency} ${charge} / mo",
          "target": {
            "type": "service-characteristic",
            "serviceCharacteristic": {
              "serviceKey": "SD_WAN",
              "serviceCharacteristicKey": "SD_WAN:FIREWALL",
              "serviceProvider": "BEYONDCOM"
            }
          }
        },
        {
          "type": "toggle",
          "icon": "https://strapi-develop.s3.eu-west-1.amazonaws.com/bandwidth_664314c90d.svg",
          "pricingTemplate": "${currency} ${charge} / mo",
          "target": {
            "type": "service-characteristic",
            "serviceCharacteristic": {
              "serviceKey": "SD_WAN",
              "serviceCharacteristicKey": "SD_WAN:WAN_OPTIMIZER",
              "serviceProvider": "BEYONDCOM"
            }
          }
        }
      ]
    }
  ]
}

Finally, we have to create the button that the user can click to initiate the ordering process. This can be done by adding the following element to a Page HTML component:

The Add Product to Cart component used in an HTML component:
<add-product-to-cart product="sd-wan-virtual" button-text="Order Now!"></add-product-to-cart>

Create a Product Change-Journey

Product change-journeys allow the user to modify the products of his Infonova product inventory. The starting-point for the user to initiate a product change is using the Product Actions of the user’s product in the CSC Products list on the shopfront’s CSC pages. Change-journies can use the pre-integrated Modify Product Entity component or use a custom developed web component.

The first step is to create a Page entity that includes the Modify Product Entity component in a generic HTML content.

make product change page
Figure 29. The page entity containing the Modify Product Entity component.

To configure the cart configuration page of the change-journey a Cart Configuration JSON Object has to be set up that defines which features are changeable by the user.

The Cart Configuration JSON Object for the change-journey:
{
  "sections": [
    {
      "name": "Connectivity",
      "open": true,
      "page": "1",
      "features": [
        {
          "type": "select",
          "displayName": "Broadband",
          "description": "Select a bandwidth",
          "icon": "https://assets-base-url.com/icon.svg",
          "options": [
            {
              "name": "8Mbit",
              "target": {
                "type": "service-characteristic-parameter",
                "serviceCharacteristicParameter": {
                  "serviceKey": "SERVICE",
                  "serviceCharacteristicKey": "SERVICE:BANDWIDTH",
                  "serviceCharacteristicParameterKey": "8192_768"
                }
              }
            },
            {
              "name": "16Mbit",
              "target": {
                "type": "service-characteristic-parameter",
                "serviceCharacteristicParameter": {
                  "serviceKey": "SERVICE",
                  "serviceCharacteristicKey": "SERVICE:BANDWIDTH",
                  "serviceCharacteristicParameterKey": "16384_1024"
                }
              }
            }
          ]
        }
      ]
    }
  ]
}

After this, we have to configure the Product Actions of the Product entity that should be changeable. For this, we have to open the Product entity on the Strapi administration panel and add a Product Actions entry. The Displayname value defines the name of the action on the product item in the CSC pages. For the Page value we select the Page that we created earlier. The Cart Configuration JSON Object has to be linked via a parameter of the action with the Key value Modify_cart_config_url and the URL to the JSON object as the value.

modify product product action
Figure 30. The Product Actions config of the Product entity.

Creating a link from one page to another can be done with a href anchor in an HTML component of a Page. To create a link, we have to use the name of the Storefront as well as the slug of the page.

The href anchor to navigate to another page:
<a href="/STOREFRONTNAME/page/PAGESLUG">Link</a>
Important
Using the link will reboot the Single Page Application (SPA)! In the future there will be pre-defined web components that will create an Angular router navigation, so this can be avoided.

A page navigation can also be triggered in the code of a web component by dispatching a custom event on the document:

The custom event to trigger a page navigation to a Page with the slug page-slug:
document.dispatchEvent(new CustomEvent('triggerRouterPageNavigation', {'detail': 'page-slug'}));

Create and Integrate a Custom Element (Web Component)

Custom elements, also called web components, are reusable HTML tags containing JavaScript code, HTML template and CSS styling bundled in a single JavaScript file. In Infonova Shopfront, web components can be integrated by adding the JavaScript file to the Global_scripts field of a Storefront entity and using the HTML tag of the web component in generic HTML contents of Page entities.

A pre-configured web component skeleton based on Angular and Angular Elements can be downloaded here.

To use storefront capabilities, like the data of the user that is logged in or the Infonova API clients, several services can be used in the code of web components. The following list shows all the services that are usable on a global level:

Table 46. The services of the Infonova Shopfront application that are usable in web components:
Service Location Description

infonovaCartConfigService

document['$infonovaCartConfigService']

contains several dependencies including the Infonova APIs and helper methods to manipulate an Infonova Shopping Cart as well as the data of the currently logged in user.

storefrontService

document['$storefrontService']

used to load data of the currently active Storefront.

pageService

document['$pageService']

used to load the data of Page entities.

menuService

document['$menuService']

used to load the data of Menu entities.

For details of how to use the services and finding a list of available methods see the README of the web component skeleton.

In order to trigger an Infonova Shopfront router page navigation, the following custom event can be dispatched on the document:

The custom event to trigger a page navigation to a Page with the slug page-slug:
document.dispatchEvent(new CustomEvent('triggerRouterPageNavigation', {'detail': 'page-slug'}));

Create a Custom Cart Configuration Feature Type

Feature Types are used to define how the user is changing a feature in the Infonova shopping cart. There is a list of pre-defined types that can be used out-of-the-box, but sometimes a custom type is needed