How to get a Survey Link in Salesforce via API call

How to get a Survey Link in Salesforce via API call

Use - Case: When you want to send surveys created on SurveySensum via Salesforce, you have to configure this integration. 

Flow of Integration

  1. Event happens in Salesforce, like a ticket gets closed. 

  2. Immediately a request is sent to SurveySensum, please return a survey link for the customer who’s ticket is closed

  3. SurveySensum returns a unique survey link, and workflow is triggered in Salesforce to use that link and send the survey to the customer. 

Note* - You need to configure a workflow in salesforce that sends an automatic survey to the customer after the ticket gets closed. 

In this article we are going to Share a Survey Link via Salesforce Flow and Apex class.

This process involves two steps. These steps involve little technical knowledge, so it is recommended you have a Salesforce Engineer and SurveySensum team to help you through the process. The steps are as follows:

Task 1: Using Salesforce Contact Object as a trigger

  1. Add a record trigger, having a condition that checks if the Contact field is updated. We are taking a scenario like updating the Description of a Contact will trigger the Flow.
  2. Add an Apex Action for calling out the API.



Follow the below instructions for creating an Apex Class
  1. Click on setup and open the developer console.

  2. In Salesforce, add an Apex Class and create an “@invocable method” (The action reads the invocable methods). Like we have created a Class “CampaignController” and added an Invocablemethod “SendCampaign” with a List of emails as a parameter(InvocableMethod only allows List<T>).
    public class CampaignController {
    @invocablemethod(Label='Send survey' description='Makes API call')
    public static void sendCampaign(List<String> email){
    String contactEmail = email[0];
    if(!System.isFuture() && !System.isBatch()){
    GetSurveyLinkCallout.getSurveyLink(contactEmail);
    }
    }
    }

  3. Inside the method, we take the Email as a parameter and call another method. In the above screenshot, you can see we have called the “getSurveyLink” method defined in the “GetSurveyLinkCallout” class.

  4. Now create a new Class that contains your API callout. As mentioned above we have created a class “GetSurveyLinkCallout”, inside the class, we have added a method “getSurveyLink”. We have made the method “@future(callout=true)” as we have to make an HTTP call. In this method, we are updating two custom fields of contacts “Survey Link” and “Survey Link Updated” to “True”.
    public class GetSurveyLinkCallout {
    @future(callout=true)
    public static void getSurveyLink(String contactEmail){
    String apiUrl = 'https://open-api.surveysensum.com/api/v2/Share/shareSurvey/link?surveyGuid=c9341fa9-8e3e-4ccc-906f-2a268dab977e';
    System.debug(contactEmail);
    Http h = new Http();
    httpRequest request = new HttpRequest();
    request.setMethod('POST');
    request.setTimeout(60000);
    request.setEndpoint(apiUrl);
    String authorizationHeader = 'Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6ImEyNTYwZTZmMmYyMjU1NGIzOWM3NTllNGFiOWVmYWIwIiwidHlwIjoiSldUIn0.eyJuYmYiOjE2NzE1Mzg0OTYsImV4cCI6MTcwMzA3NDQ5NiwiaXNzIjoiaHR0cHM6Ly9wcm9kLXN0cy5zdXJ2ZXlzZW5zdW0uY29tIiwiYXVkIjpbImh0dHBzOi8vcHJvZC1zdHMuc3VydmV5c2Vuc3VtLmNvbS9yZXNvdXJjZXMiLCJ2el9vcGVuX2FwaSJdLCJjbGllbnRfaWQiOiI0NmQ1ODI1NS0xZWFkLTQyMGUtYWVmYy1jZmI2ZjEwNjI3YjAiLCJzdWIiOiIyY2Y5NzgwNy1kNzhhLTQzZjEtOWVlMi0wYjdlMTEzYTZlMDAiLCJhdXRoX3RpbWUiOjE2NzE1Mzg0OTYsImlkcCI6ImxvY2FsIiwiSXNQYW5lbEFsbG93ZWQiOiJUcnVlIiwic3Vic2NyaXB0aW9uR3VpZCI6IjgyOWU1N2Y0LWEyMmQtNGQ1YS04MTk0LTljYTJkODg3M2NiMCIsInVzZXJJZCI6ImF1dG8ubmV1cm9zZW5zdW1AZ21haWwuY29tIiwiRnVsbHlNYW5hZ2VkVXNlciI6ImZhbHNlIiwiQWdlbnRVc2VyIjoiZmFsc2UiLCJmb3JaYXBwZXIiOiJmYWxzZSIsInN1YklkIjoiMzU1IiwidXNlclN0YXR1cyI6IjYiLCJQZXJtaXNzaW9uIjpbImNyZWF0ZV9jb250YWN0X2xpc3RzIiwidmlld19jb250YWN0X2xpc3RzIiwidXBkYXRlX2NvbnRhY3RfbGlzdHMiLCJkZWxldGVfY29udGFjdF9saXN0cyIsImNyZWF0ZV9jb250YWN0Iiwidmlld19jb250YWN0IiwidXBkYXRlX2NvbnRhY3QiLCJkZWxldGVfY29udGFjdCIsImNyZWF0ZV9zdXJ2ZXlzIiwidmlld19zdXJ2ZXlzIiwidXBkYXRlX3N1cnZleSIsImRlbGV0ZV9zdXJ2ZXkiLCJjcmVhdGVfc2hhcmVzIiwidmlld19zaGFyZXMiLCJkZWxldGVfc2hhcmVzIiwidmlld193ZWJob29rcyIsImNyZWF0ZV93ZWJob29rcyIsInVwZGF0ZV93ZWJob29rcyIsImRlbGV0ZV93ZWJob29rcyIsInZpZXdfcmVzcG9uc2VzIiwidmlld19lbWFpbF90ZW1wbGF0ZXMiXSwic2NvcGUiOlsib3BlbmlkIiwicHJvZmlsZSIsIm1hbmFnZV9jb250YWN0X2xpc3RzIiwibWFuYWdlX2NvbnRhY3RzIiwibWFuYWdlX3N1cnZleXMiLCJtYW5hZ2Vfd2ViaG9va3MiLCJzdXJ2ZXlfc2hhcmUiLCJ2aWV3X2NvbnRhY3RfbGlzdHMiLCJ2aWV3X2NvbnRhY3RzIiwidmlld19lbWFpbF90ZW1wbGF0ZXMiLCJ2aWV3X3Jlc3BvbnNlcyIsInZpZXdfc3VydmV5cyIsInZpZXdfd2ViaG9va3MiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsicHdkIl19.2YpckkxBhUJF612GxNQ6h5NS6IPeH2z7hDTfbl8elDaX3dfdkg1l4gDWPwv0C_7kXyggixE1vf-VMr_VftcE8VBbguz8NDLW5g5JZp_cJ4acC7pmU3vaaJQ1fSXYWipvDLtXWo1tGijAoK3cKHr6mRum-SWZlNmtIwomiwmuOeuLQA0OFvCHHOnDLJu2piuxtNUZXnQkTpeey1q9VLMKr1yCDofOLJWXUIxCs6rrvF4hm0AnRd1zZtDDHFt2zS8bRlJ1YP-IYQOLgo03Pu3QbJGn9tizWfHqxsDWVL-3ZbbddhYCnpsfF_i8m9AkZMJzEQkmwJcXd8muQaA4dwHUuQ';
    request.setHeader('Authorization', authorizationHeader);
    String requestBody = '{"contactInfo": [{"key": "vz_c_name","value": "Aashish"},{"key": "vz_c_email","value": "'+ contactEmail +'"}],"metadata": [{"key": "vz_transaction_id","value": "T-4"}]}';
    System.debug(requestBody);
    request.setHeader('Content-Type', 'application/json;charset=UTF-8');
    request.setBody(requestbody);
    HttpResponse response = h.send(request);
    String respData = response.getBody();
    system.debug('Response ' + respData);
    if (response.getStatusCode() == 200)
    {
    Map<String, Object> results = (Map<String, Object>) JSON.deserializeUntyped(response.getBody());
    List<Object> surveyLinks = (List<Object>) results.get('result');
    System.debug(String.valueof(surveyLinks[0]));
    Contact contactInstance = new Contact();
    contactInstance = [SELECT Survey_Link__c, Survey_Link_Updated__c From Contact WHERE Email = :contactEmail LIMIT 1];
    contactInstance.Survey_Link__c = String.valueof(surveyLinks[0]);
    contactInstance.Survey_Link_Updated__c = 'True';
    update contactInstance;
    }
    }
    }

Step 2:

  1. Add a record trigger, having a condition that checks if the Contact field: “Survey Link Updated“ equals “True”.

  2. Add Update Records data elements to update the “Survey Link Updated” field to “False”.

  3. Add Email Action for Send an email campaign, in the campaign body we can add “Survey Link” field which consists of the latest value of the link.





These steps will allow you to send a Survey Link to any customer using Salesforce and Apex class.

Email us at support@surveysensum.com for any concerns or if you need assistance.

    • Related Articles

    • How to add SurveySensum surveys to Salesforce Campaigns

      This document will help you understand how to integrate SurveySensum with Salesforce’s marketing email campaigns.   This integration will help you capture certain data from your Salesforce campaigns such as name or email address of the respondent ...
    • Share Survey Via Email

      After creating your survey, your survey is ready to be shared! Let us see how we can share the survey via email. Click on Send Email and you will direct to the Email Campaign. Enter the following details based on your requirements: From Name: Enter ...
    • Share Survey

      Now that you have created your survey, your survey is ready to be shared! Share your survey via Email, on Social Media, using an Anonymous Link, or by a QR Code. View the sharing options on the Share Survey page on your build or click the sharing ...
    • Share Survey using Anonymous Link and on Social Media

      Share Survey using Anonymous Link After creating your survey, your survey is ready to be shared! Start collecting anonymous responses for your survey. Let us see how we can share the survey via the anonymous link. You will be able to view the ...
    • How to create unique trackable links for surveys sent via external email/sms services

      This feature will help you to track respondents while using external email/sms provider by generating unique links for each responder. You will need to upload the data in contacts section before using this feature.   Let's suppose you already have a ...