Customer service is the support that you provide to your customers. It is crucial to offer a great customer service in order to grow your business and retain customers. Customer support is more than just providing answers to your customers. According to a Gartner research, 89% of companies now expect to compete mostly on the basis of customer experience. Since great customer support drives an amazing customer experience, it is important for companies to focus on their customer service support. There are a few ways to know if customers are satisfied with the customer service. Survey is the most common method of gathering information.
Case Object and Surveys in Salesforce
Case is the main object of Salesforce Service Cloud. You can use the case object to manage cases for your organization. There are many ways to create a case record in Salesforce. A case record can be created from a phone call, email, chat, or a web form. It typically represents a customer's request or problem. Therefore, if you want to measure customers' satisfaction from the customer support, you should consider sending surveys when case records are closed.
There is a standard feature for sending surveys. On the other hand, there are many third party solutions to send surveys. However, in some situations, these may not be preferred by the companies.
It is possible to build a screen flow with some questions and use it as a customer satisfaction survey. Salesforce users can use flows, but how can you make a flow public so that your customers can use it as well? You can put your flow to a public Experience site and send a link to your customers. However, don't forget to pass parameters from the URL and make the flow dynamic. Read this post to learn more details about passing parameters to flows in Experience sites.
Let's see how to build a simple screen flow to be used as a customer satisfaction survey.
Building a Screen Flow
Let's create a customer satisfaction survey with 3 questions and one free text for the customer's feedback. In this example, let's assume that we are sending a survey link to the customer when a case is closed. Then we will save the survey answers to a custom object called Survey_Answer__c. This is not mandatory and you can save your answers to the related case record as well.
This screen flow will be in a public Experience site and we will pass parameters from the URL. Since we expose the parameters, it is important to pass multiple parameters and build the flow accordingly. This will decrease the chance for the users to modify the values and access other data. Therefore, let's pass both the case Id and case number, so that it will be impossible to guess them correctly at the same time.
1- First of all, create two input text variables for the case Id and the case number. Let's call them Id and Key. The flow should find the case record according to these variables. However, if the Id is not in the correct format (customer can manually change it from the URL), then the flow might fail. Because of this, it is important to check if the format is correct.
Create a number formula that shows the length of the Id.
Then, add a decision to check if the length is 18 and starts with 500 (all the case record Ids start with 500).
2- If the Id is not in the correct format, go to a screen that displays a message like this.
3- If the Id is in the correct format, add a Get Records element to find the correct case record according to the Id and the Case Number.
4- Add a decision to check if the case record exists. If not, go to the same screen that you created in the second step. If the case record exists, get the related Survey_Answer__c record to see if the customer filled the survey before.
5- Add a Get Records element to get the Survey_Answer__c record that is related to the case (let's assume that this object has lookup fields to case, account, and contact).
6- Add a screen element for the survey. This is the main screen of this flow and it should contain the survey itself.
In order to make the experience more personalized, add a display text for the introduction. Contact_Name__c is a formula field that displays the full name of the contact, but you can also use the standard fields (FirstName and LastName) from the contact.
7- For the questions, add radio button components and create choices that display stars but store numbers. For example, this choice displays 3 stars (emojis) but stores 3 as a number.
Add your questions as radio buttons and create 5 choices for the star ratings. At the end, add a long text field for the customer's feedback.
This screen will look like a survey.
8- When you build a flow, you usually build it for your users. However, this flow is for your customers and the user experience is critical. Since there is no standard input component for star rating, we created choices that display stars. It looks okay, but it doesn't look like the surveys that we are familiar with.
Therefore, let's use this custom screen component that allows the users select star ratings. Install the component from this link, add display text for the questions and add the StarRatingComponent for the answers (for each question).
As you can see, you can set the maximum number of stars, make the component read only, and set a default value. At the end, it stores the number of the stars that the user selects.
In this example, let's allow customers change their answers. Therefore, let's not make the component read only and set the existing survey answer as the default value.
9- Add a decision element to check if the survey answer exists (from the 5th step).
10- If it exists, update the existing survey answer.
If it doesn't exist, create a new survey answer record. Don't forget to map the lookup fields too.
11- Display a success message. (And confetti, because why not?)
From the advanced properties of the flow, make it run in the system context without sharing. So that it will work fine for the guest users.
At the end, your flow should look like this.
Adding the Flow to a Public Experience Site
Using Salesforce Experience Cloud, you can create branded digital experiences to share information and collaborate with people. With its drag and drop builder, you can easily build Experience sites.
1- Enable Digital Experiences in setup and create a new site. In this example, I selected Customer Service as the template.
2- In the builder, make it a public site by marking "Guest users can see and interact with the site without logging in".
3- Remove all the pages and create a new page called CS Survey (URL is cs-survey). Then, add the flow to the content area. For the input variables, enter {!Id} and {!Key}. Read this post to learn more about passing values to a flow in an Experience site.
Optionally, add more components to make the page beautiful. For example, I added Salesforce Time logo.
4- Publish the site and then activate it.
Giving Permission to Guest User Profile
The flow and the site are ready. However, guest users cannot even see the flow, because they don't have the permission. Salesforce removed the "Run Flow" permission from the Guest User profile. However, don't worry, there is a way to give permission.
Go to flows in setup, find your screen flow, click the small arrow on the right side. Then, click "Edit Access". Mark "Override default behavior and restrict access to enabled profiles or permission sets." and then select the profiles that can use this flow. You won't be able to see the guest user profile here.
Go to the builder of the Experience site, click the settings and click on the name of the guest user profile. In this example, it is called "Survey Profile".
Scroll down to the Enabled Flow Access and add your flow to the list. This action will give permission for running the selected flow.
Summary
Using a screen flow and a public Experience site, you can easily create surveys for your customers. In this example, we save the survey answers to a custom object. Since the survey is related to a case, you can save them to the case record as well. However, if you want to send surveys without case records, then it is a better practice to use this custom object.
Here is a link for the public survey that we built. Since it is public, anyone can run it. Go ahead and play with it!
Let's see the flow in action!
Here is the survey answer record that the flow created. Since all the answers and customer details are saved in the record, it is easy to build reports and calculate the customer satisfaction rate.
This is a great post, thank you! One question: how did you make it so that the "thank you" page does not show the "previous" or the "finish" button? If I try to disable both on the screen component, I get a message telling me that I can disable one or the other, but not both.
Wait... I can just "Hide" the entire footer... XO never mind! Thank you again.
Exactly!
Have you thought about making it so you could change the icon that is used? This would be beneficial for other use cases that a star may not be appropriate (i.e. creating a survey item where we aren't rating satisfaction, but maybe health score or safety score)
It is a great idea!
When trying to run from survey site as guest is fails, and the following flow error occurs on mail:
Error element Get_Case (FlowRecordLookup).
This error occurred when the flow tried to look up records: AccountId, OwnerId, ContactId FROM Case WHERE (((Id = 'xxxxxxxxxxx') ^ ERROR at Row:1:Column:68 sObject type 'Case' is not supported. If you are attempting to use a custom object, be sure to append the '__c' after the entity name. Please reference your WSDL or the describe call for the appropriate names..
I guess the guest profile is missing permissions to read/write on the sObjects?
This was not described in your guide? Or am I wrong 🙂 thanks.
Hi Rune,
Can you run the flow in system context?
If running flow as "System Without Sharing - Access All Data" then it seems to work. But isn't that a security risk to run it that way with access all data, when it is a guest user profile?
Hello, I've recently installed your component and i have a problem...
Basically i have a checbox on the screen and if the user checks the checkbox(value=true) your component should disappear (and this part is working ok) but if he then unchecks the checkbox(value=false) the component doesn't appear and to make it appear again i have to change screens or reload the page, can you help with this?
Note:
I have checkbox=false as the criteria for the component to show
Hi Diogo,
It is a very strange and unexpected behavior, I will check this and let you know.
Thank you!
Hello Yumi, any updates?
Thank you.
Hello, thanks for sharing this article. I published my site from a sandbox and have been trying to test the link in incognito mode and the page opens up but the flow does not show. I followed your instructions and went to the guest profile from experience builder but Flow Access is showing nothing to select. My flow is active and is under the run as system context setting.
Any idea why no flows are showing up under the Flow Access page in the guest profile?
Nevermind....I never hit save on the step for going into the "edit access" part in the flow for system admin...which then allowed it to show under guest user profile flow access
Hi! This is exactly what I've been looking for! I've have built out my flow in my sandbox environment, added it to the experience site, and when I go to test the link in an incognito window, I get the "Sorry, we couldn't find this cae in the system" message from the case not found screen. Good news is my flow appears to be working. However, since the first element in the flow is a decision to check if the case is in the correct format, how does the case ID get passed into the decision element to kick it off from experience site? I'm sure it's something simple I just overlooked. Your help would be greatly appreciated. Thanks!
Hi Debra,
You have to map the URL parameters to your input variables from the flow.
See this screenshot. It maps the Id URL parameter to an input text variable called Id (Same for another parameter called Key).
https://salesforcetime.com/wp-content/uploads/2022/11/image-24-2048x939.png