Install the SSP Inquiry Management feature
Edit on GitHubThis document describes how to install the Self-Service Portal (SSP) Inquiry Management feature.
Prerequisites
| FEATURE | VERSION | INSTALLATION GUIDE |
|---|---|---|
| Spryker Core | 202512.0 | Install the Spryker Core feature |
| Self-Service Portal | 202512.0 | Install Self-Service Portal |
Install the required modules
Install the required modules using Composer:
composer require spryker-feature/self-service-portal:"^202512.0" --update-with-dependencies
Make sure the following packages are now listed in composer.lock:
| MODULE | EXPECTED DIRECTORY |
|---|---|
| SelfServicePortal | vendor/spryker-feature/self-service-portal |
Set up configuration
| CONFIGURATION | SPECIFICATION | NAMESPACE |
|---|---|---|
| FileSystemConstants::FILESYSTEM_SERVICE | Configures the Flysystem service for managing file uploads, specifying the adapter and storage path for inquiry-related files. | Spryker\Shared\FileSystem |
| SelfServicePortalConstants::BASE_URL_YVES | Defines the base URL for the Yves frontend, which is used to construct links in email notifications sent for inquiries. | SprykerFeature\Shared\SelfServicePortal |
| SelfServicePortalConstants::DEFAULT_TOTAL_FILE_MAX_SIZE | Sets a maximum total size for all files that can be uploaded with a single inquiry, preventing excessively large submissions. | SprykerFeature\Shared\SelfServicePortal |
| SelfServicePortalConstants::DEFAULT_FILE_MAX_SIZE | Sets a maximum size for a single file that can be uploaded with an inquiry. | SprykerFeature\Shared\SelfServicePortal |
| SelfServicePortalConstants::INQUIRY_STORAGE_NAME | Defines the storage name for inquiry files in the Flysystem configuration, linking to the specified file system service. | SprykerFeature\Shared\SelfServicePortal |
| KernelConstants::CORE_NAMESPACES | Defines the core namespaces. | Spryker\Shared\Kernel |
| SelfServicePortalConfig::getInquiryInitialStateMachineMap() | Maps an inquiry’s state machine process to its initial state, determining the starting point of the inquiry workflow. | SprykerFeature\Shared\SelfServicePortal |
| SelfServicePortalConfig::getSspInquiryStateMachineProcessInquiryTypeMap() | Maps each inquiry type to a specific state machine process, allowing for different workflows based on the inquiry’s nature. | SprykerFeature\Shared\SelfServicePortal |
| SelfServicePortalConfig::getSspInquiryCancelStateMachineEventName() | Defines the name of a state machine event that is triggered to cancel an inquiry. | SprykerFeature\Shared\SelfServicePortal |
| SelfServicePortalConfig::getSspInquiryAvailableStatuses() | Provides a list of all possible statuses that an inquiry can have, which are used for filtering and display purposes. | SprykerFeature\Shared\SelfServicePortal |
| SelfServicePortalConfig::getInquiryStatusClassMap() | Maps inquiry statuses to corresponding CSS class names, allowing for visual styling of status indicators in the user interface. | SprykerFeature\Zed\SelfServicePortal |
| SelfServicePortalConfig::getInquiryPendingStatus() | Specifies which inquiry status is considered “Pending,” which is used for dashboard widgets and filtering. | SprykerFeature\Zed\SelfServicePortal |
| SalesConfig::getSalesDetailExternalBlocksUrls() | Extends the order details page in the Back Office by adding a block to display related inquiries. | Spryker\Zed\Sales |
config/Shared/config_default.php
<?php
use Spryker\Service\FlysystemLocalFileSystem\Plugin\Flysystem\LocalFilesystemBuilderPlugin;
use Spryker\Shared\FileSystem\FileSystemConstants;
use SprykerFeature\Shared\SelfServicePortal\SelfServicePortalConstants;
$config[FileSystemConstants::FILESYSTEM_SERVICE] = [
'ssp-inquiry' => [
'sprykerAdapterClass' => Aws3v3FilesystemBuilderPlugin::class,
'key' => getenv('SPRYKER_S3_SSP_CLAIM_KEY') ?: '',
'secret' => getenv('SPRYKER_S3_SSP_CLAIM_SECRET') ?: '',
'bucket' => getenv('SPRYKER_S3_SSP_CLAIM_BUCKET') ?: '',
'region' => getenv('AWS_REGION') ?: 'eu-central-1',
'version' => 'latest',
'root' => '/ssp-inquiry',
'path' => '',
],
];
$config[SelfServicePortalConstants::BASE_URL_YVES] = 'https://your-yves-url';
$config[SelfServicePortalConstants::DEFAULT_TOTAL_FILE_MAX_SIZE] = getenv('SPRYKER_DEFAULT_TOTAL_FILE_MAX_SIZE') ?: '100M';
$config[SelfServicePortalConstants::DEFAULT_FILE_MAX_SIZE] = getenv('SPRYKER_DEFAULT_FILE_MAX_SIZE') ?: '20M';
$config[SelfServicePortalConstants::INQUIRY_STORAGE_NAME] = 'ssp-inquiry';
$config[KernelConstants::CORE_NAMESPACES] = [
...
'SprykerFeature',
];
In cloud environments, set the following environment variables:
SPRYKER_S3_SSP_CLAIM_KEY- AWS S3 access key for SSP inquiry file storageSPRYKER_S3_SSP_CLAIM_SECRET- AWS S3 secret key for SSP inquiry file storageSPRYKER_S3_SSP_CLAIM_BUCKET- AWS S3 bucket name for SSP inquiry file storageAWS_REGION- AWS region (defaults toeu-central-1if not set)SPRYKER_DEFAULT_TOTAL_FILE_MAX_SIZE- Maximum total size for all files uploaded with a single inquiry (defaults to100Mif not set)SPRYKER_DEFAULT_FILE_MAX_SIZE- Maximum size for a single file uploaded with an inquiry (defaults to20Mif not set)
src/Pyz/Shared/SelfServicePortal/SelfServicePortalConfig.php
<?php
namespace Pyz\Shared\SelfServicePortal;
use SprykerFeature\Shared\SelfServicePortal\SelfServicePortalConfig as SprykerSelfServicePortalConfig;
class SelfServicePortalConfig extends SprykerSelfServicePortalConfig
{
public function getInquiryInitialStateMachineMap(): array
{
return [
'SspInquiryDefaultStateMachine' => 'created',
];
}
public function getSspInquiryStateMachineProcessInquiryTypeMap(): array
{
return [
'general' => 'SspInquiryDefaultStateMachine',
'order' => 'SspInquiryDefaultStateMachine',
'ssp_asset' => 'SspInquiryDefaultStateMachine',
];
}
/**
* @return string
*/
public function getSspInquiryCancelStateMachineEventName(): string
{
return 'cancel';
}
/**
* @return array<string>
*/
public function getSspInquiryAvailableStatuses(): array
{
return [
'pending',
'in_review',
'approved',
'rejected',
'canceled',
];
}
}
src/Pyz/Zed/SelfServicePortal/SelfServicePortalConfig.php
<?php
namespace Pyz\Zed\SelfServicePortal;
use Pyz\Zed\Synchronization\SynchronizationConfig;
use SprykerFeature\Zed\SelfServicePortal\SelfServicePortalConfig as SprykerSelfServicePortalConfig;
class SelfServicePortalConfig extends SprykerSelfServicePortalConfig
{
/**
* @return array<string>
*/
public function getInquiryStatusClassMap(): array
{
return [
'approved' => 'label-success',
'rejected' => 'label-danger',
'pending' => 'label-warning',
'canceled' => 'label-default',
'in_review' => 'label-primary',
];
}
public function getInquiryPendingStatus(): string
{
return 'pending';
}
}
src/Pyz/Zed/Sales/SalesConfig.php
<?php
namespace Pyz\Zed\Sales;
use Spryker\Zed\Sales\SalesConfig as SprykerSalesConfig;
class SalesConfig extends SprykerSalesConfig
{
/**
* @return array<string>
*/
public function getSalesDetailExternalBlocksUrls(): array
{
$projectExternalBlocks = [
'inquiries' => '/self-service-portal/list-order-inquiry'
];
$externalBlocks = parent::getSalesDetailExternalBlocksUrls();
return array_merge($externalBlocks, $projectExternalBlocks);
}
}
Configure navigation
Add the Inquiries section to navigation.xml:
config/Zed/navigation.xml
<?xml version="1.0"?>
<config>
<ssp>
<label>Customer Portal</label>
<title>Customer Portal</title>
<icon>fa-id-badge</icon>
<pages>
<self-service-portal-inquiries>
<label>Inquiries</label>
<title>Inquiries</title>
<bundle>self-service-portal</bundle>
<controller>list-inquiry</controller>
<action>index</action>
</self-service-portal-inquiries>
</pages>
</ssp>
</config>
Generate routers and navigation cache
console router:cache:warm-up:backoffice
console navigation:build-cache
Set up database schema
Apply schema updates:
console propel:install
spy_ssp_inquiryspy_ssp_inquiry_filespy_ssp_inquiry_sales_orderspy_ssp_inquiry_sales_order_itemspy_ssp_inquiry_ssp_asset
Set up transfer objects
Generate transfer classes:
console transfer:generate
Add state machine configuration
Create an XML configuration file for the state machine.
config/Zed/StateMachine/SspInquiry/SspInquiryDefaultStateMachine.xml
<?xml version="1.0"?>
<statemachine
xmlns="spryker:state-machine-01"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="spryker:state-machine-01 http://static.spryker.com/state-machine-01.xsd"
>
<process name="SspInquiryDefaultStateMachine" main="true">
<states>
<state name="created"/>
<state name="pending"/>
<state name="in_review"/>
<state name="canceled"/>
<state name="approved"/>
<state name="rejected"/>
<state name="closed"/>
</states>
<transitions>
<transition happy="true">
<source>created</source>
<target>pending</target>
<event>initiate</event>
</transition>
<transition happy="true">
<source>pending</source>
<target>in_review</target>
<event>start_review</event>
</transition>
<transition happy="true">
<source>pending</source>
<target>canceled</target>
<event>cancel</event>
</transition>
<transition>
<source>in_review</source>
<target>approved</target>
<event>approve</event>
</transition>
<transition>
<source>in_review</source>
<target>rejected</target>
<event>reject</event>
</transition>
</transitions>
<events>
<event name="initiate" onEnter="true"/>
<event name="start_review" manual="true"/>
<event name="cancel" manual="true"/>
<event name="approve" manual="true" command="SspInquiry/Approve"/>
<event name="reject" manual="true" command="SspInquiry/Reject"/>
</events>
</process>
</statemachine>
Set up behavior
| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE |
|---|---|---|---|
| CreateSspInquiryPermissionPlugin | Allows customer to create inquiries. | SprykerFeature\Shared\SelfServicePortal\Plugin\Permission | |
| ViewBusinessUnitSspInquiryPermissionPlugin | Allows customer to view inquiries within the same company business unit. | SprykerFeature\Shared\SelfServicePortal\Plugin\Permission | |
| ViewCompanySspInquiryPermissionPlugin | Allows customer to view inquiries within the same company. | SprykerFeature\Shared\SelfServicePortal\Plugin\Permission | |
| SelfServicePortalPageRouteProviderPlugin | Provides Yves routes for the SSP inquiry feature. | SprykerFeature\Yves\SelfServicePortal\Plugin\Router | |
| SspInquiryRestrictionHandlerPlugin | Restricts access to inquiries and inquiry details pages for non-company users. | SprykerFeature\Yves\SelfServicePortal\Plugin\ShopApplication | |
| FileSizeFormatterTwigPlugin | Adds a Twig filter to format file sizes in a human-readable format. | SprykerFeature\Zed\SelfServicePortal\Communication\Twig | |
| SspInquiryDataImportPlugin | Introduces the ssp-inquiry import type. |
SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\DataImport | |
| SspInquiryApprovedMailTypeBuilderPlugin | Sends an email on inquiry approval. | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Mail | |
| SspInquiryRejectedMailTypeBuilderPlugin | Sends an email on inquiry rejection. | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Mail | |
| SspInquirySspAssetManagementExpanderPlugin | Adds the inquiries table to Assets. | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\SspAssetManagement | |
| SspInquiryStateMachineHandlerPlugin | State Machine handler for inquiry processing. | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\StateMachine | |
| ApproveSspInquiryCommandPlugin | State Machine command that handles inquiry approval. | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\SspInquiryManagement | |
| RejectSspInquiryCommandPlugin | State Machine command that handles inquiry rejection. | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\SspInquiryManagement |
src/Pyz/Zed/Permission/PermissionDependencyProvider.php
use Spryker\Zed\Permission\PermissionDependencyProvider as SprykerPermissionDependencyProvider;
use SprykerFeature\Shared\SelfServicePortal\Plugin\Permission\CreateSspInquiryPermissionPlugin;
use SprykerFeature\Shared\SelfServicePortal\Plugin\Permission\ViewBusinessUnitSspInquiryPermissionPlugin;
use SprykerFeature\Shared\SelfServicePortal\Plugin\Permission\ViewCompanySspInquiryPermissionPlugin;
class PermissionDependencyProvider extends SprykerPermissionDependencyProvider
{
protected function getPermissionPlugins(): array
{
return [
new CreateSspInquiryPermissionPlugin(),
new ViewBusinessUnitSspInquiryPermissionPlugin(),
new ViewCompanySspInquiryPermissionPlugin(),
];
}
}
src/Pyz/Client/Permission/PermissionDependencyProvider.php
use Spryker\Yves\Permission\PermissionDependencyProvider as SprykerPermissionDependencyProvider;
use SprykerFeature\Shared\SelfServicePortal\Plugin\Permission\CreateSspInquiryPermissionPlugin;
use SprykerFeature\Shared\SelfServicePortal\Plugin\Permission\ViewBusinessUnitSspInquiryPermissionPlugin;
use SprykerFeature\Shared\SelfServicePortal\Plugin\Permission\ViewCompanySspInquiryPermissionPlugin;
class PermissionDependencyProvider extends SprykerPermissionDependencyProvider
{
protected function getPermissionPlugins(): array
{
return [
new CreateSspInquiryPermissionPlugin(),
new ViewBusinessUnitSspInquiryPermissionPlugin(),
new ViewCompanySspInquiryPermissionPlugin(),
];
}
}
Enable new permission plugins
console setup:init-db
src/Pyz/Yves/Router/RouterDependencyProvider.php
<?php
namespace Pyz\Yves\Router;
use Spryker\Yves\Router\RouterDependencyProvider as SprykerRouterDependencyProvider;
use SprykerFeature\Yves\SelfServicePortal\Plugin\Router\SelfServicePortalPageRouteProviderPlugin;
class RouterDependencyProvider extends SprykerRouterDependencyProvider
{
/**
* @return array<\Spryker\Yves\RouterExtension\Dependency\Plugin\RouteProviderPluginInterface>
*/
protected function getRouteProvider(): array
{
return [
new SelfServicePortalPageRouteProviderPlugin(),
];
}
}
src/Pyz/Zed/DataImport/DataImportDependencyProvider.php
<?php
namespace Pyz\Zed\DataImport;
use Spryker\Zed\DataImport\DataImportDependencyProvider as SprykerDataImportDependencyProvider;
use SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\DataImport\SspInquiryDataImportPlugin;
class DataImportDependencyProvider extends SprykerDataImportDependencyProvider
{
/**
* @return array<\Spryker\Zed\DataImport\Dependency\Plugin\DataImportPluginInterface>
*/
protected function getDataImporterPlugins(): array
{
return [
new SspInquiryDataImportPlugin(),
];
}
}
src/Pyz/Zed/Mail/MailDependencyProvider.php
<?php
namespace Pyz\Zed\Mail;
use Spryker\Zed\Mail\MailDependencyProvider as SprykerMailDependencyProvider;
use SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Mail\SspInquiryApprovedMailTypeBuilderPlugin;
use SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Mail\SspInquiryRejectedMailTypeBuilderPlugin;
class MailDependencyProvider extends SprykerMailDependencyProvider
{
protected function getMailTypeBuilderPlugins(): array
{
return [
new SspInquiryApprovedMailTypeBuilderPlugin(),
new SspInquiryRejectedMailTypeBuilderPlugin(),
];
}
}
src/Pyz/Zed/SelfServicePortal/SelfServicePortalDependencyProvider.php
<?php
namespace Pyz\Zed\SelfServicePortal;
use SprykerFeature\Zed\SelfServicePortal\SelfServicePortalDependencyProvider as SprykerSelfServicePortalDependencyProvider;
use SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\SspAssetManagement\SspInquirySspAssetManagementExpanderPlugin;
use SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\StateMachine\ApproveSspInquiryCommandPlugin;
use SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\StateMachine\RejectSspInquiryCommandPlugin;
class SelfServicePortalDependencyProvider extends SprykerSelfServicePortalDependencyProvider
{
/**
* @return array<\SprykerFeature\Zed\SspAssetManagement\Dependency\Plugin\SspAssetManagementExpanderPluginInterface>
*/
protected function getSspAssetManagementExpanderPlugins(): array
{
return [
new SspInquirySspAssetManagementExpanderPlugin(),
];
}
/**
* @return array<\Spryker\Zed\StateMachine\Dependency\Plugin\CommandPluginInterface>
*/
protected function getStateMachineCommandPlugins(): array
{
return [
'SspInquiry/Approve' => new ApproveSspInquiryCommandPlugin(),
'SspInquiry/Reject' => new RejectSspInquiryCommandPlugin(),
];
}
}
src/Pyz/Zed/StateMachine/StateMachineDependencyProvider.php
<?php
namespace Pyz\Zed\StateMachine;
use Spryker\Zed\StateMachine\StateMachineDependencyProvider as SprykerStateMachineDependencyProvider;
use SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\StateMachine\SspInquiryStateMachineHandlerPlugin;
class StateMachineDependencyProvider extends SprykerStateMachineDependencyProvider
{
/**
* @return array<\Spryker\Zed\StateMachine\Dependency\Plugin\StateMachineHandlerInterface>
*/
protected function getStateMachineHandlers(): array
{
return [
new SspInquiryStateMachineHandlerPlugin(),
];
}
}
src/Pyz/Zed/Twig/TwigDependencyProvider.php
<?php
namespace Pyz\Zed\Twig;
use Spryker\Zed\Twig\TwigDependencyProvider as SprykerTwigDependencyProvider;
use SprykerFeature\Zed\SelfServicePortal\Communication\Twig\SelfServicePortalTwigPlugin;
class TwigDependencyProvider extends SprykerTwigDependencyProvider
{
/**
* @return array<\Spryker\Shared\TwigExtension\Dependency\Plugin\TwigPluginInterface>
*/
protected function getTwigPlugins(): array
{
return [
new SelfServicePortalTwigPlugin(),
];
}
}
src/Pyz/Yves/Twig/TwigDependencyProvider.php
<?php
namespace Pyz\Yves\Twig;
use Spryker\Yves\Twig\TwigDependencyProvider as SprykerTwigDependencyProvider;
use SprykerFeature\Yves\SelfServicePortal\Plugin\Twig\FileSizeFormatterTwigPlugin;
class TwigDependencyProvider extends SprykerTwigDependencyProvider
{
/**
* @return array<\Spryker\Shared\TwigExtension\Dependency\Plugin\TwigPluginInterface>
*/
protected function getTwigPlugins(): array
{
return [
new FileSizeFormatterTwigPlugin(),
];
}
}
Set up widgets
| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE |
|---|---|---|---|
| CreateOrderSspInquiryWidget | Provides a button to create an inquiry for an order. | SprykerFeature\Yves\SelfServicePortal\Widget | |
| SspInquiryListWidget | Provides the inquiries table. | SprykerFeature\Yves\SelfServicePortal\Widget | |
| SspInquiryMenuItemWidget | Provides a customer menu item for the inquiries. | SprykerFeature\Yves\SelfServicePortal\Widget |
src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php
<?php
namespace Pyz\Yves\ShopApplication;
use SprykerFeature\Yves\SelfServicePortal\Widget\CreateOrderSspInquiryWidget;
use SprykerFeature\Yves\SelfServicePortal\Widget\SspInquiryListWidget;
use SprykerFeature\Yves\SelfServicePortal\Widget\SspInquiryMenuItemWidget;
use SprykerFeature\Yves\SelfServicePortal\Plugin\ShopApplication\SspInquiryRestrictionHandlerPlugin;
use SprykerFeature\Yves\SelfServicePortal\Widget\SspListMenuItemWidget;
use SprykerShop\Yves\ShopApplication\ShopApplicationDependencyProvider as SprykerShopApplicationDependencyProvider;
/**
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
*/
class ShopApplicationDependencyProvider extends SprykerShopApplicationDependencyProvider
{
/**
* @return array<string>
*/
protected function getGlobalWidgets(): array
{
return [
SspInquiryMenuItemWidget::class,
CreateOrderSspInquiryWidget::class,
SspInquiryListWidget::class,
SspListMenuItemWidget::class,
];
}
protected function getFilterControllerEventSubscriberPlugins(): array
{
return [
new SspInquiryRestrictionHandlerPlugin(),
];
}
}
Add translations
Here you can find how to import translations for Self-Service Portal feature
Import translations:
console data:import glossary
CMS block data import is required for email templates to work properly. To import CMS block data for email templates, see the Add cms block data import for email templates section below.
Set customer permissions for inquiry management:
- In the Back Office, go to Customers > Company Roles.
- Click Add Company User Role.
- Select a company.
- Enter a name for the role.
- In Unassigned Permissions, enable the following permissions:
- Create inquiry
- View company inquiries
- View business unit inquiries
- Click Submit.
- Go to Customers > Company Users.
- Click Edit next to a user.
- Assign the role you’ve created to the user.
Verify customer permissions on Storefront:
- On the Storefront, log in with the company user you’ve assigned the role to.
- Go to Customer Account > Inquiries.
- Click Create Inquiry.
- Fill in the required fields.
- Optional: Upload up to 5 files.
- Click Submit Inquiry. Make sure this saves the inquiry and opens the inquiry details page.
- Go to Customer Account > Inquiries. Make sure the inquiry you’ve created is displayed in the list.
Verify inquiries in the Back Office:
- In the Back Office, go to Customer Portal > Inquiries page. Make sure the following applies:
- The inquiry you’ve created on the Storefront is displayed in the list.
- You can filter the list by Inquiry status and Inquiry type.
- Click View next to an inquiry. Make sure that, in the Status section, Start review and Cancel buttons are displayed.
- Click Start review. Make sure the inquiry status changes to In review.
Demo data for EU region / DE store
Add inquiry demo data
Prepare your data according to your requirements using our demo data:
data/import/common/common/ssp_inquiry.csv
>reference,store,type,company_user_key,subject,description
DE-INQR--1,DE,general,Spryker--8,Request for documentation,Please provide detailed documentation on the warranty and return policies for the products purchased under my account.
DE-INQR--2,DE,general,Spryker--8,Product catalog issue,I noticed that several products in the catalog are missing specifications and images. This makes it difficult to make informed purchasing decisions. Please update the product details.
DE-INQR--3,AT,general,Spryker--8,Request for documentation,Please provide detailed documentation on the warranty and return policies for the products purchased under my account.
DE-INQR--4,AT,general,Spryker--8,Product catalog issue,I noticed that several products in the catalog are missing specifications and images. This makes it difficult to make informed purchasing decisions. Please update the product details.
Extend the data import configuration
/data/import/local/full_EU.yml
# ...
# SelfServicePortal
- data_entity: ssp-inquiry
source: data/import/common/common/ssp_inquiry.csv
Add cms block data import for email templates
CMS block data import is required for inquiry email notifications to work properly. Make sure to complete this step.
Add to data/import/common/common/cms_block.csv:
cms_block.csv
>
cms-block-email--ssp-inquiry-approved--html,ssp-inquiry-approved--html,HTML Email Template With Header And Footer,@CmsBlock/template/email-template-with-header-and-footer.html.twig,1,,,,,,,"<table class=""sprykerTextBlock"" style=""min-width:100%;border-collapse:collapse;mso-table-lspace:0pt;mso-table-rspace:0pt;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" width=""100%"" cellspacing=""0"" cellpadding=""0"" border=""0""><tbody class=""sprykerTextBlockOuter""><tr><td class=""sprykerTextBlockInner"" style=""mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" valign=""top""><table style=""min-width:100%;border-collapse:collapse;mso-table-lspace:0pt;mso-table-rspace:0pt;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" class=""sprykerTextContentContainer"" width=""100%"" cellspacing=""0"" cellpadding=""0"" border=""0"" align=""left""><tbody><tr><td class=""sprykerTextContent"" style=""mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;word-break:break-word;color:#202020;font-family:Helvetica;font-size:16px;line-height:150%;text-align:center"" valign=""top""><h1 style=""text-align:center;margin:0;color:#202020;font-family:Helvetica;font-size:20px;font-weight:normal;line-height:125%;padding:15px"">{{ 'ssp_inquiry.mail.trans.ssp_inquiry_approved.salutation' | trans({'%name%':mail.customer.firstName~' '~mail.customer.lastName})}}</h1></td></tr></tbody></table></td></tr></tbody></table><table class=""sprykerTextBlock"" style=""min-width:100%;border-collapse:collapse;mso-table-lspace:0pt;mso-table-rspace:0pt;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" width=""100%"" cellspacing=""0"" cellpadding=""0"" border=""0""><tbody class=""sprykerTextBlockOuter""><tr><td class=""sprykerTextBlockInner"" style=""mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" valign=""top""><table style=""min-width:100%;border-collapse:collapse;mso-table-lspace:0pt;mso-table-rspace:0pt;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" class=""sprykerTextContentContainer"" width=""100%"" cellspacing=""0"" cellpadding=""0"" border=""0"" align=""left""><tbody><tr><td class=""sprykerTextContent"" style=""mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;word-break:break-word;color:#202020;font-family:Helvetica;font-size:16px;line-height:150%;text-align:center"" valign=""top""><p style=""text-align:center;margin:0;font-weight:bold"">{{ 'ssp_inquiry.mail.trans.ssp_inquiry_approved.main_text' | trans({'%reference%':mail.sspInquiry.reference})}}</p></td></tr><tr><td style=""padding-top:18px;padding-bottom:18px;mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" class=""sprykerButtonBlockInner"" valign=""top"" align=""center""><table class=""sprykerButtonContentContainer"" style=""min-width:30%;border-collapse:separate!important;border-radius:2px;background-color:#1EBEA0;mso-table-lspace:0pt;mso-table-rspace:0pt;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" cellspacing=""0"" cellpadding=""0"" border=""0""><tbody><tr><td class=""sprykerButtonContent"" style=""font-family:Helvetica,Helvetica,Arial,Verdana,sans-serif;font-size:14px;padding:13px 18px;mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" valign=""middle"" align=""center""><a class=""sprykerButton"" href=""{{ mail.sspInquiryUrl }}"" target=""_blank"" style=""font-weight:bold;letter-spacing:normal;line-height:100%;text-align:center;text-decoration:none;color:#FFFFFF;mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;display:block"">{{ 'ssp_inquiry.mail.trans.ssp_inquiry_list_page' | trans }}</a></td></tr></tbody></table></td></tr></tbody></table></td></tr></tbody></table>","<table class=""sprykerTextBlock"" style=""min-width:100%;border-collapse:collapse;mso-table-lspace:0pt;mso-table-rspace:0pt;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" width=""100%"" cellspacing=""0"" cellpadding=""0"" border=""0""><tbody class=""sprykerTextBlockOuter""><tr><td class=""sprykerTextBlockInner"" style=""mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" valign=""top""><table style=""min-width:100%;border-collapse:collapse;mso-table-lspace:0pt;mso-table-rspace:0pt;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" class=""sprykerTextContentContainer"" width=""100%"" cellspacing=""0"" cellpadding=""0"" border=""0"" align=""left""><tbody><tr><td class=""sprykerTextContent"" style=""mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;word-break:break-word;color:#202020;font-family:Helvetica;font-size:16px;line-height:150%;text-align:center"" valign=""top""><h1 style=""text-align:center;margin:0;color:#202020;font-family:Helvetica;font-size:20px;font-weight:normal;line-height:125%;padding:15px"">{{ 'ssp_inquiry.mail.trans.ssp_inquiry_approved.salutation' | trans({'%name%':mail.customer.firstName~' '~mail.customer.lastName})}}</h1></td></tr></tbody></table></td></tr></tbody></table><table class=""sprykerTextBlock"" style=""min-width:100%;border-collapse:collapse;mso-table-lspace:0pt;mso-table-rspace:0pt;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" width=""100%"" cellspacing=""0"" cellpadding=""0"" border=""0""><tbody class=""sprykerTextBlockOuter""><tr><td class=""sprykerTextBlockInner"" style=""mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" valign=""top""><table style=""min-width:100%;border-collapse:collapse;mso-table-lspace:0pt;mso-table-rspace:0pt;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" class=""sprykerTextContentContainer"" width=""100%"" cellspacing=""0"" cellpadding=""0"" border=""0"" align=""left""><tbody><tr><td class=""sprykerTextContent"" style=""mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;word-break:break-word;color:#202020;font-family:Helvetica;font-size:16px;line-height:150%;text-align:center"" valign=""top""><p style=""text-align:center;margin:0;font-weight:bold"">{{ 'ssp_inquiry.mail.trans.ssp_inquiry_approved.main_text' | trans({'%reference%':mail.sspInquiry.reference})}}</p></td></tr><tr><td style=""padding-top:18px;padding-bottom:18px;mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" class=""sprykerButtonBlockInner"" valign=""top"" align=""center""><table class=""sprykerButtonContentContainer"" style=""min-width:30%;border-collapse:separate!important;border-radius:2px;background-color:#1EBEA0;mso-table-lspace:0pt;mso-table-rspace:0pt;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" cellspacing=""0"" cellpadding=""0"" border=""0""><tbody><tr><td class=""sprykerButtonContent"" style=""font-family:Helvetica,Helvetica,Arial,Verdana,sans-serif;font-size:14px;padding:13px 18px;mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" valign=""middle"" align=""center""><a class=""sprykerButton"" href=""{{ mail.sspInquiryUrl }}"" target=""_blank"" style=""font-weight:bold;letter-spacing:normal;line-height:100%;text-align:center;text-decoration:none;color:#FFFFFF;mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;display:block"">{{ 'ssp_inquiry.mail.trans.ssp_inquiry_list_page' | trans }}</a></td></tr></tbody></table></td></tr></tbody></table></td></tr></tbody></table>"
cms-block-email--ssp-inquiry-approved--text,ssp-inquiry-approved--text,TEXT Email Template With Header And Footer,@CmsBlock/template/email-template-with-header-and-footer.text.twig,1,,,,,,,"{{ 'ssp_inquiry.mail.trans.ssp_inquiry_approved.salutation' | trans({'%name%' : mail.customer.firstName ~ ' ' ~ mail.customer.lastName})}}\n{{ 'ssp_inquiry.mail.trans.ssp_inquiry_approved.main_text' | trans({'%reference%' : mail.sspInquiry.reference})}}\n{{ 'ssp_inquiry.mail.trans.ssp_inquiry_list_page' | trans }}: {{ mail.sspInquiryUrl }}","{{ 'ssp_inquiry.mail.trans.ssp_inquiry_approved.salutation' | trans({'%name%' : mail.customer.firstName ~ ' ' ~ mail.customer.lastName})}}\n{{ 'ssp_inquiry.mail.trans.ssp_inquiry_approved.main_text' | trans({'%reference%' : mail.sspInquiry.reference})}}\n{{ 'ssp_inquiry.mail.trans.ssp_inquiry_list_page' | trans }}: {{ mail.sspInquiryUrl }}"
cms-block-email--ssp-inquiry-rejected--html,ssp-inquiry-rejected--html,HTML Email Template With Header And Footer,@CmsBlock/template/email-template-with-header-and-footer.html.twig,1,,,,,,,"<table class=""sprykerTextBlock"" style=""min-width:100%;border-collapse:collapse;mso-table-lspace:0pt;mso-table-rspace:0pt;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" width=""100%"" cellspacing=""0"" cellpadding=""0"" border=""0""><tbody class=""sprykerTextBlockOuter""><tr><td class=""sprykerTextBlockInner"" style=""mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" valign=""top""><table style=""min-width:100%;border-collapse:collapse;mso-table-lspace:0pt;mso-table-rspace:0pt;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" class=""sprykerTextContentContainer"" width=""100%"" cellspacing=""0"" cellpadding=""0"" border=""0"" align=""left""><tbody><tr><td class=""sprykerTextContent"" style=""mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;word-break:break-word;color:#202020;font-family:Helvetica;font-size:16px;line-height:150%;text-align:center"" valign=""top""><h1 style=""text-align:center;margin:0;color:#202020;font-family:Helvetica;font-size:20px;font-weight:normal;line-height:125%;padding:15px"">{{ 'ssp_inquiry.mail.trans.ssp_inquiry_rejected.salutation' | trans({'%name%':mail.customer.firstName~' '~mail.customer.lastName})}}</h1></td></tr></tbody></table></td></tr></tbody></table><table class=""sprykerTextBlock"" style=""min-width:100%;border-collapse:collapse;mso-table-lspace:0pt;mso-table-rspace:0pt;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" width=""100%"" cellspacing=""0"" cellpadding=""0"" border=""0""><tbody class=""sprykerTextBlockOuter""><tr><td class=""sprykerTextBlockInner"" style=""mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" valign=""top""><table style=""min-width:100%;border-collapse:collapse;mso-table-lspace:0pt;mso-table-rspace:0pt;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" class=""sprykerTextContentContainer"" width=""100%"" cellspacing=""0"" cellpadding=""0"" border=""0"" align=""left""><tbody><tr><td class=""sprykerTextContent"" style=""mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;word-break:break-word;color:#202020;font-family:Helvetica;font-size:16px;line-height:150%;text-align:center"" valign=""top""><p style=""text-align:center;margin:0;font-weight:bold"">{{ 'ssp_inquiry.mail.trans.sspInquiry_rejected.main_text' | trans({'%reference%':mail.sspInquiry.reference})}}</p></td></tr><tr><td style=""padding-top:18px;padding-bottom:18px;mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" class=""sprykerButtonBlockInner"" valign=""top"" align=""center""><table class=""sprykerButtonContentContainer"" style=""min-width:30%;border-collapse:separate!important;border-radius:2px;background-color:#1EBEA0;mso-table-lspace:0pt;mso-table-rspace:0pt;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" cellspacing=""0"" cellpadding=""0"" border=""0""><tbody><tr><td class=""sprykerButtonContent"" style=""font-family:Helvetica,Helvetica,Arial,Verdana,sans-serif;font-size:14px;padding:13px 18px;mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" valign=""middle"" align=""center""><a class=""sprykerButton"" href=""{{ mail.sspInquiryUrl }}"" target=""_blank"" style=""font-weight:bold;letter-spacing:normal;line-height:100%;text-align:center;text-decoration:none;color:#FFFFFF;mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;display:block"">{{ 'ssp_inquiry.mail.trans.ssp_inquiry_list_page' | trans }}</a></td></tr></tbody></table></td></tr></tbody></table></td></tr></tbody></table>","<table class=""sprykerTextBlock"" style=""min-width:100%;border-collapse:collapse;mso-table-lspace:0pt;mso-table-rspace:0pt;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" width=""100%"" cellspacing=""0"" cellpadding=""0"" border=""0""><tbody class=""sprykerTextBlockOuter""><tr><td class=""sprykerTextBlockInner"" style=""mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" valign=""top""><table style=""min-width:100%;border-collapse:collapse;mso-table-lspace:0pt;mso-table-rspace:0pt;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" class=""sprykerTextContentContainer"" width=""100%"" cellspacing=""0"" cellpadding=""0"" border=""0"" align=""left""><tbody><tr><td class=""sprykerTextContent"" style=""mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;word-break:break-word;color:#202020;font-family:Helvetica;font-size:16px;line-height:150%;text-align:center"" valign=""top""><h1 style=""text-align:center;margin:0;color:#202020;font-family:Helvetica;font-size:20px;font-weight:normal;line-height:125%;padding:15px"">{{ 'ssp_inquiry.mail.trans.ssp_inquiry_rejected.salutation' | trans({'%name%':mail.customer.firstName~' '~mail.customer.lastName})}}</h1></td></tr></tbody></table></td></tr></tbody></table><table class=""sprykerTextBlock"" style=""min-width:100%;border-collapse:collapse;mso-table-lspace:0pt;mso-table-rspace:0pt;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" width=""100%"" cellspacing=""0"" cellpadding=""0"" border=""0""><tbody class=""sprykerTextBlockOuter""><tr><td class=""sprykerTextBlockInner"" style=""mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" valign=""top""><table style=""min-width:100%;border-collapse:collapse;mso-table-lspace:0pt;mso-table-rspace:0pt;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" class=""sprykerTextContentContainer"" width=""100%"" cellspacing=""0"" cellpadding=""0"" border=""0"" align=""left""><tbody><tr><td class=""sprykerTextContent"" style=""mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;word-break:break-word;color:#202020;font-family:Helvetica;font-size:16px;line-height:150%;text-align:center"" valign=""top""><p style=""text-align:center;margin:0;font-weight:bold"">{{ 'ssp_inquiry.mail.trans.ssp_inquiry_rejected.main_text' | trans({'%reference%':mail.sspInquiry.reference})}}</p></td></tr><tr><td style=""padding-top:18px;padding-bottom:18px;mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" class=""sprykerButtonBlockInner"" valign=""top"" align=""center""><table class=""sprykerButtonContentContainer"" style=""min-width:30%;border-collapse:separate!important;border-radius:2px;background-color:#1EBEA0;mso-table-lspace:0pt;mso-table-rspace:0pt;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" cellspacing=""0"" cellpadding=""0"" border=""0""><tbody><tr><td class=""sprykerButtonContent"" style=""font-family:Helvetica,Helvetica,Arial,Verdana,sans-serif;font-size:14px;padding:13px 18px;mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%"" valign=""middle"" align=""center""><a class=""sprykerButton"" href=""{{ mail.sspInquiryUrl }}"" target=""_blank"" style=""font-weight:bold;letter-spacing:normal;line-height:100%;text-align:center;text-decoration:none;color:#FFFFFF;mso-line-height-rule:exactly;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;display:block"">{{ 'ssp_inquiry.mail.trans.ssp_inquiry_list_page' | trans }}</a></td></tr></tbody></table></td></tr></tbody></table></td></tr></tbody></table>"
cms-block-email--ssp-inquiry-rejected--text,ssp-inquiry-rejected--text,TEXT Email Template With Header And Footer,@CmsBlock/template/email-template-with-header-and-footer.text.twig,1,,,,,,,"{{ 'ssp_inquiry.mail.trans.ssp_inquiry_rejected.salutation' | trans({'%name%' : mail.customer.firstName ~ ' ' ~ mail.customer.lastName})}}\n{{ 'ssp_inquiry.mail.trans.ssp_inquiry_rejected.main_text' | trans({'%reference%' : mail.sspInquiry.reference})}}\n{{ 'ssp_inquiry.mail.trans.ssp_inquiry_list_page' | trans }}: {{ mail.sspInquiryUrl }}","{{ 'ssp_inquiry.mail.trans.ssp_inquiry_rejected.salutation' | trans({'%name%' : mail.customer.firstName ~ ' ' ~ mail.customer.lastName})}}\n{{ 'ssp_inquiry.mail.trans.ssp_inquiry_rejected.main_text' | trans({'%reference%' : mail.sspInquiry.reference})}}\n{{ 'ssp_inquiry.mail.trans.ssp_inquiry_list_page' | trans }}: {{ mail.sspInquiryUrl }}"
Add to data/import/common/DE/cms_block_store.csv:
>cms-block-email--ssp-inquiry-approved--html,DE
cms-block-email--ssp-inquiry-approved--text,DE
cms-block-email--ssp-inquiry-rejected--html,DE
cms-block-email--ssp-inquiry-rejected--text,DE
Import the data
console data:import ssp-inquiry
console data:import cms-block
console data:import cms-block-store
Make sure the following applies:
- Glossary keys have been added to
spy_glossary_keyandspy_glossary_translationtables. - The
ssp_inquirytable contains the new inquiries. - The new CMS blocks are assigned to correct stores.
Enable Storefront API endpoints
| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE |
|---|---|---|---|
| SspInquiriesResourceRoutePlugin | Provides the GET and POST endpoints for the SSP inquiries. | SprykerFeature\Glue\SelfServicePortal\Plugin\GlueApplication |
src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php
<?php
declare(strict_types = 1);
namespace Pyz\Glue\GlueApplication;
use SprykerFeature\Glue\SelfServicePortal\Plugin\GlueApplication\SspInquiriesResourceRoutePlugin;
class GlueApplicationDependencyProvider extends SprykerGlueApplicationDependencyProvider
{
/**
* {@inheritDoc}
*
* @return array<\Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRoutePluginInterface>
*/
protected function getResourceRoutePlugins(): array
{
return [
new SspInquiriesResourceRoutePlugin(),
];
}
}
-
Create inquiries by importing demo data as described in the previous sections.
-
Get the access token by sending a
POSTrequest to the token endpoint with the company user credentials.POST https://glue.mysprykershop.com/access-tokens
{
"data": {
"type": "access-tokens",
"attributes": {
"username": {username},
"password": {password}
}
}
}
- Use the access token to access the
ssp-inquiriesendpoint:
GET https://glue.mysprykershop.com/ssp-inquiries
{
"data": [
{
"type": "ssp-inquiries",
"id": "DE-INQR--1",
"attributes": {
"sspAssetReference": null,
"orderReference": null,
"type": "general",
"status": "pending",
"subject": "Request for documentation",
"description": "Please provide detailed documentation on the warranty and return policies for the products purchased under my account.",
"reference": "DE-INQR--1",
"isCancellable": null
},
"links": {
"self": "http://glue.eu.spryker.local/ssp-inquiries/DE-INQR--1"
}
},
{
"type": "ssp-inquiries",
"id": "DE-INQR--2",
"attributes": {
"sspAssetReference": null,
"orderReference": null,
"type": "general",
"status": "pending",
"subject": "Product catalog issue",
"description": "I noticed that several products in the catalog are missing specifications and images. This makes it difficult to make informed purchasing decisions. Please update the product details.",
"reference": "DE-INQR--2",
"isCancellable": null
},
"links": {
"self": "http://glue.eu.spryker.local/ssp-inquiries/DE-INQR--2"
}
}
],
"links": {
"self": "http://glue.eu.spryker.local/ssp-inquiries"
}
}
- To get the particular inquiry, use the access token to send a
GETrequest to thessp-inquiriesendpoint with the asset ID:GET https://glue.mysprykershop.com/ssp-inquiries/DE-INQR--1
{
"data": {
"type": "ssp-inquiries",
"id": "DE-INQR--1",
"attributes": {
"sspAssetReference": null,
"orderReference": null,
"type": "general",
"status": "pending",
"subject": "Request for documentation",
"description": "Please provide detailed documentation on the warranty and return policies for the products purchased under my account.",
"reference": "DE-INQR--1",
"isCancellable": null
},
"links": {
"self": "http://glue.eu.spryker.local/ssp-inquiries/DE-INQR--1"
}
}
}
- Use the access token to create the
ssp-inquiriesresource:POST https://glue.mysprykershop.com/ssp-inquiries
{
"data": {
"type": "ssp-inquiries",
"attributes": {
"subject": {Inquiry subject},
"description": {Inquiry description},
"type": {One of the following types: general, order, ssp_asset}
}
}
}
Example of a successful response:
{
"data": {
"type": "ssp-inquiries",
"id": "DE-INQR--3",
"attributes": {
"sspAssetReference": "AST--39",
"orderReference": null,
"type": "ssp_asset",
"status": "pending",
"subject": "TestInquiryAPIsubject",
"description": "TestInquiryAPIdescription",
"reference": "DE-INQR--3",
"isCancellable": true
},
"links": {
"self": "http://glue.eu.spryker.local/ssp-inquiries/DE-INQR--3"
}
}
}
Thank you!
For submitting the form