Technical Articles
SAP Solution Manager – Qualtrics Integration
X+O case for IT Service Management
INTRODUCTION
Qualtrics is an experience management platform, which combines the experience data and operational data (X+O) and provides meaningful and deep insights into customer expectations, patterns and helps to improve satisfaction.
The details and uses of Qualtrics are outlined in various other resources (refer links section below).
In this article I will try to explain how the integration from an on-premise system (in our case it was the SAP Solution Manager system 7.2) to Qualtrics works. I will try to highlight the important touch points with respect to integration, various technical aspects and how you can benefit in general from the integration.
USE CASE
Our SAP Solution Manager ITSM solution was using CRM Standard survey suite for collecting positive call ratings for a ticket.
Wherein the customer rate the service delivery or issue resolution on different parameters like overall satisfaction, initial response time, update period, time to resolution and quality of solution.
Customers can also rate the ticketing tool experience and provide comments for improvement of tool and service delivery or resolution of issue. We decided to move satisfaction survey to the Qualtrics platform.
With this change of the survey platform the following goals were targeted:
- Improved user experience for customers filling the survey
- Easy maintenance of survey
- Better manage end user experience across support channels
- State of the art analysis of customer feedback and comments
- Visualize trends and patterns and to react on it
- Reveal correlation between user feedback and support process
We had the task also to bring survey results back into SAP Solution Manager along with link to filled in survey. This will be attached as part of the ticket for the benefit of service desk agents to query on ticket ratings and view them.
Otherwise every processor in the organization needs to have a user created in the Qualtrics survey platform.
USEFUL LINKS
Create free account in Qualtrics to play around with survey creation with limited features (Research core, Actions Website/App feedback projects Dashboards are not possible)
https://www.qualtrics.com/free-account/
Website / App Feedback Technical Documentation – Qualtrics Support
Single Page Application – Qualtrics Support
API Integration Basic Overview – Qualtrics Support
Actions Basic Overview – Qualtrics Support
Blog Series – SAP API Management – API Providers: Part 1: Accelerating connectivity through APIs and SAP API Management | SAP Blogs
Connecting and Exposing APIs from Cloud Platform Integration | SAP Blogs
SAP API Management – Overview & Getting started | SAP Blogs
DATA FLOW
Below you find the data flow between different systems for our case.
- Starting with “User” interacting with SAP On-Premise system
- Trigger survey feedback via Qualtrics where users rate service delivery or issue resolution
- Survey responses are sent back to SAP On-Premise system via SAP Cloud Platform – API Management via SAP Cloud Connector
- Used OData service for data transfer from Qualtrics to SAP On-Premise system
DETAILS
I will briefly touch on Qualtrics survey platform and Integration to SAP Solution Manager system. For detailed explanation please refer to help documents in “Links” section.
Steps for achieving Qualtrics to SAP Solution Manager integration :
- Create Survey project in Qualtrics
- Distributing the survey
- Site Interceptor
- Let’s also look at the simple URL with embedded data to collect feedback
- Add the site interceptor script in header BSP component and Create HTML elements on the webpage for Site Interceptor
- Create OData service to fetch the results back from Qualtrics
- Whitelist the service in web dispatcher and in Cloud Connector account
- Create API provider and API (used the technical user) deploy the API
- Create action in Qualtrics Survey project to trigger the POST call to API
- Survey data stored in SAP Solution Manager
Create Survey project in Qualtrics
At first you need to create a survey project as below in Qualtrics
Survey Preview –>
Created embedded data in the survey to be captured in the “Survey Flow”
In the above example I will try to capture objectID, email and Name of the customer
Distributing the survey
Qualtrics provides different ways to invoke or distribute survey and collect experience data.
You can either use Website/App Feedback (Site interceptor), distribute the URL with embedded attributes or send via mail.
Site Interceptor:
Step 1: Create Website/App Feedback project
Step 2: Create a pop-over Creative and Publish
Step 3: Create an Intercept with the creative as the popover, survey target as on-prem test
Note: You can define creatives with different sizes so that you can also specify action sets for different screen resolution to show creatives (of different sizes for e.g. monitor/mobile/laptop) and also for different hosts or based on a JavaScript expression or based on HTML element on the website.
Step 4: Embedded data for Site Intercept
You can also use “Value from JavaScript” to read values from html elements in your application or create hidden html elements for survey embedded data.
Qualtrics Survey Interceptor will read from these html elements and pass them to response data.
document.getElementById or document.querySelector to read an element or with pattern
Step 5: Publish and Activate your Intercept
Go to “Settings” tab and copy the JavaScript code snippet (this will be placed in your BSP application component htm page)
Select option “Display with custom JavaScript code (Manually)”
Let’s also look at the simple URL with embedded data to collect feedback
Notice the embedded data towards the end of URL
?Q_CHL=si&objectID=12345&email=xyz%40sap%2Ecom&name=xyz
which passes the embedded data to the Qualtrics Survey
Add the site interceptor script in header BSP component and Create HTML elements on the webpage for Site Interceptor
Add the site interceptor script (section above on Site Interceptor) in the BSP Component. For our use case we placed the script in the CRM_WORKAREAHDR/WorkAreaHeader.htm page
<!--BEGIN QUALTRICS WEBSITE FEEDBACK SNIPPET-->
<script type='text/javascript'>
(function(){var g=function(e,h,f,g){
this.get=function(a){for(var a=a+"=",c=document.cookie.split(";"),b=0,e=c.length;b<e;b++){for(var d=c[b];" "==d.charAt(0);)d=d.substring(1,d.length);if(0==d.indexOf(a))return d.substring(a.length,d.length)}return null};
this.set=function(a,c){var b="",b=new Date;b.setTime(b.getTime()+6048E5);b="; expires="+b.toGMTString();document.cookie=a+"="+c+b+"; path=/; "};
this.check=function(){var a=this.get(f);if(a)a=a.split(":");else if(100!=e)"v"==h&&(e=Math.random()>=e/100?0:100),a=[h,e,0],this.set(f,a.join(":"));else return!0;var c=a[1];if(100==c)return!0;switch(a[0]){case "v":return!1;case "r":return c=a[2]%Math.floor(100/c),a[2]++,this.set(f,a.join(":")),!c}return!0};
this.go=function(){if(this.check()){var a=document.createElement("script");a.type="text/javascript";a.src=g;document.body&&document.body.appendChild(a)}};
this.start=function(){var a=this;window.addEventListener?window.addEventListener("load",function(){a.go()},!1):window.attachEvent&&window.attachEvent("onload",function(){a.go()})}};
try{(new g(100,"r","QSI_S_ZN_9Ah03bqMBAKrxY1","https://abcdefgh-surveyaccount.qualtrics.com/WRSiteInterceptEngine/?Q_ZID=ZN_9Ah03bqMBAKrxY1")).start()}catch(i){}})();
</script><div id='ZN_9Ah03bqMBAKrxY1'><!--DO NOT REMOVE-CONTENTS PLACED HERE--></div>
<!--END WEBSITE FEEDBACK SNIPPET-->
Also add the below code to trigger the site intercept in the webUI on click of an action or when a variable is set
<%
if not controller->gv_call_intercept is initial.
%>
<span hidden id="objectID"><%= lv_objectID %></span>
<span hidden id="email"><%= lv_email %></span>
<span hidden id="name"><%= lv_name %></span>
<script type="text/javascript">
if ( typeof QSI !== 'undefined' && typeof QSI.API !== 'undefined' ) {
console.log( "Calling SI API" );
QSI.API.unload();
QSI.API.load().done(QSI.API.run);
} else {
console.log( "Can't find SI API" );
}
<%
clear controller->gv_call_intercept.
%>
</script>
Ensure to create hidden HTML elements in the webpage with the same name as you mentioned in the survey as well as Site Interceptor Embedded data.
Details on QSI.API.load(), unload() and run() is available in the Qualtrics API documentation.
Create OData service to fetch the results back from Qualtrics
As a next step I have created a simple OData service to fetch the survey feedback from Qualtrics and store it in the ticket in our SAP Solution Manager ITSM.
Basically a POST with a technical user and password from Qualtrics sends the data to SAP Solution Manager system
https://yourhost:port/sap/opu/odata/sap/ZQUALTRICS_SVY_SRV/SurveyFromQualtricsSet?$format=json
with JSON structure
{
"d": {
"results": [
{
"__metadata": {
"id": " https://yourhost:port/sap/opu/odata/sap/ZQUALTRICS_SVY_SRV/SurveyFromQualtricsSet (1234567890l)",
"uri": " https://yourhost:port/sap/opu/odata/sap/ZQUALTRICS_SVY_SRV/SurveyFromQualtricsSet (1234567890l)",
"type": "ZQUALTRICS_SVY_SRV.SurveyFromQualtrics"
},
"ObjectID": "1234567890",
"Q1": 10,
"Q2": 1,
"Q3": 0,
"Comments": "Test 1",
"ResponseId": "123asdfg",
"ResponseLink": "Qualtrics Preview Link",
"ErrorText": ""
}
]
}
}
Refer to below blog post on how to create OData service
OData service development with SAP Gateway – code-based service development – Part I | SAP Blogs
or any other material available in SAP Community
The survey results are passed to the SAP Solution Manager system if the
- Answer to first question is less than 8
- Answer to second question is not satisfied
- Answer to third question is no
- I also trigger an email to the email id passed part of the embedded data, along with the Call of OData service to notify the user about the rating and dis-satisfaction (could be manager or lead)
Note: If you can already expose your OData service to the external world from your SAP System, then you dont have to consider the next steps and directly continue with consuming the OData service in Qualtrics. But in our case the OData needs to be exposed and we choose SAP CP API Management.
Whitelist the service in web dispatcher and in SAP Cloud Connector account
As a next step you need
- Activate your OData service, maintain destination (depends on whether you have a central hub deployment or Embedded deployment)
- Whitelist your OData service URL from SAP Solution Manager system or Gateway system in the web dispatcher
- Whitelist the OData service also in the Cloud Connector account of you SAP CPI
You can refer to below blog posts/information
Consume SAP Gateway OData Service in SAP Cloud Platform Workflow | SAP Blogs
Consume an OData Service Using the Cloud Connector | Tutorial group
Create API provider and API (used the technical user)- deploy the API
Next you will create API Provider and an API to trigger from Qualtrics in SAP Cloud Platform API Management portal.
API Provider will refer to your service URL with a technical user and password.
I have created the API as below
Refer:
Connecting and Exposing APIs from Cloud Platform Integration | SAP Blogs
SAP API Management – Overview & Getting started | SAP Blogs
Create action in Qualtrics Survey project to trigger the POST call to API
Here I will create 2 actions in the Qualtrics survey platform
Action 1:Trigger email
Selected the Event as Survey Response – Created
Conditions – when the answer to first question is detractor
And 2nd and 3rd question answered as not satisfied and no
This will send a mail automatically to the email ID from the embedded data (${e://Field/email})
Action 2: Trigger OData service Call
- First select the Event as “Survey Response – Created”
- No Conditions – as we want to send all responses to back end, but if you want to send only responses with low feedback you can very well do that
- Tasks – Choose ‘Web Service Request”
- Create Authorization token
- Enter Credentials and save
- Enter API which you created in SAP Cloud Platform API Management and map embedded data fields to the API Request body
- Save your actions and now it is ready to send data to SAP Solution Manager
- Reporting Tab in actions also gives you the history of actions triggered API call or Emails
- Click on status to view the Request header/body as well as Response from API call
Survey data stored in SAP Solution Manager
Once the POST call is successful from Qualtrics it will attach the survey feedback into the ticket in SAP Solution Manager system.
Conclusion
The full integration of Qualtrics survey platform to SAP Solution Manager has been beneficial for us to gain positive customer satisfaction and service delivery. We also use the dashboards/reports for analyzing X+O Data using Qualtrics ‘s very own Text analytics, Sentiment analysis and other techniques.
I have not covered the inbuilt reporting/dashboards capability in Qualtrics. which can be found in Qualtrics website.
Bringing the results back from Qualtrics also helps in other scenarios or use cases for e.g. if you are planning to create leads or opportunities in a CRM system or if you want to create complaints based on customer feedback in CRM Service. Or if you want to get ideas for product improvements and convert them into Jira Backlog (yes, you can also create Issues/Backlog items in Jira), Create tickets for customer experience in SAP Solman or ServiceNow or Zendesk etc.
Think of various X+O cases in your areas or products and explore the full potential of Qualtrics Integration in different SAP solutions. All the best !
Thank you for sharing this!
How much effort/duration did it took you (your team) to prepare and implement?
What type of feedback have you received from users from the change of platform? (if they noticed)
If possible, could you share some reports that can be generated now with Qualtrics?
Thank you,
Ruth
Hello Ruth,
It took around 4-6 weeks for training preparation and implementation.
For users/customers there is not much change, only the look and feel of the survey and how the survey pops-up as an embedded view within CRM webUI. The real benefit is for the Service Delivery owners who can get insights from customer feedback.
Just as an e.g. get the sentiments of comments entered and then correlate the same with how much time it took to solve the issue.
What kind of reports you are looking at? we did went live recently and still collecting feedback and preparing the reporting framework.
Can you DM me if you need further details?
Best regards,
Guru
Hi Guru ?
Do you take into consideration how “Happy” the user was with the ticket resolution and the product for which the ticket was raised?
Can you map the feedback to our products and solutions? It might help product development and product management!
How do you initiate the feedback loop back to the users? Considering the XM principle “listen”, “understand” and “act”?
Btw. our SAC colleagues launched a Qualtrics-SAP connector: https://video.sap.com/media/t/0_tl8w2r02
Best regards
Sven York
Hi Sven York,
Thank you for the questions. Let me answer one by one.
Q:Do you take into consideration how “Happy” the user was with the ticket resolution and the product for which the ticket was raised?
Q: Can you map the feedback to our products and solutions? It might help product development and product management!
Q: How do you initiate the feedback loop back to the users? Considering the XM principle “listen”, “understand” and “act”?
Btw. our SAC colleagues launched a Qualtrics-SAP connector: https://video.sap.com/media/t/0_tl8w2r02
–> Thank you for the link
Best regards
Guru