Last week I judged for the fifth FlowFest. I cannot believe we have five FlowFests behind us. The challenges were extra difficult this time. Two functionalities that came up repeatedly were the HTTP Callout and the data table component.
HTTP Callout in Spring 23 got many people excited. The blog post and the video by Josh Dayment and I drew quite some attention. We heard one criticism for this functionality: the solution was incomplete without the POST method.
With Summer 23, the Salesforce Flow Product Team not only moves the GET method to GA, but also gives us the POST method in Beta.
The use case we picked for this demo is based on a real-life client requirement. The client wants to shorten the long URL links before they send them to customers via email or text. Read on for a link to the three-part blog on this topic.
First, let’s dive into the background information: Until recently, API access was reserved for developers. Flow automation did not deal with APIs much. 👨 💻
But what does this functionality do? 🚨
This feature creates an invocable action powered by External Services to connect your flow to an HTTP-based API without using code.
What is an API? 🔁
API (Application Programming Interface) is a program mediator that allows two applications to exchange data and complies with HTTP and REST standards. API refers to standards and documentation that describe how to create or use such a connection or interface.
What is the GET method? ⬅️
The GET request method is used to fetch data from the server. Example: Send Postal/ZIP-code to receive City in the response. Another example: Send phone number, receive the telecom carrier.
What is the POST method? ➡️
The HTTP POST request method sends data to the server. The HTTP POST method creates or updates a resource on the server. POST is one of the most widely used methods of the HTTP protocol. The HTTP POST method is used to submit web forms, upload files and images to the server.
With each new release lately the Salesforce Flow team has been bringing some amazing features. I am really excited about the introduction of HTTP Callout (Beta) in Spring 23′. It really starts to open up the possibility of more resources for admins to start doing more with clicks and not code. This allows an admin directly inside of flow to make an HTTP Callout to perform a Get on an external system previously this would require either an invocable apex action or an external service be created in Salesforce. Andy and I took sometime over the last couple of weeks to test it out and you can see our video here to see our discussion and brief demo but let’s take a deep dive walkthrough on how we configured it and the steps to take. For this testing and demonstration we found a simple api that has a free use tier that allows for a set number of callouts to validate a phone number and return validation information you can find more on Api Layer and the documentation here.
Before you can create an HTTP Callout you first need to create a what’s called a Named Credential a Named Credential is what Salesforce uses to validate you are able to use the external service you are making the call to.
Step 1 in Setup go to Named Credentials
Step 2 Click on External Credentials then click on New (yes we are doing this before creating our Named Credential because we are going to use it in our Named Credential)
Step 3 Enter the initial details for your External Credential
Step 4 After hitting save scroll down on the new External Credential until you see Principals and click on New
Step 5 Enter in your Principal details this is what the API service will use to authenticate
Step 6 Click on New in Custom Headers and we are going to create the header to pass through our authentication
Step 7 Create one more header to set how to accept the data from the api service
Step 8 Go to the Named Credentials tab and click on New
Step 9 Enter the details of your Named Credential and click save
Step 10 Allow users the use the External Credential. I created a permission set to handle permissions.
Step 11 New Fields I created 2 fields on the Lead Object Phone_Number_Details__c a rich text field to hold the information about the phone number that will get returned in the callout and I also created a checkbox field called Phone_Number_Validated__c that is checked true or false if a phone number has been validated in the service
Step 12 Let’s make a flow – In this example I am using a record-triggered flow that will fire when a lead is created. I set two conditions on Phone to make sure this fires only when there is a value in the Phone field. I also marked it to include an Asynchronous path since we can only make a callout Asynchronously.
On the asynchronous path click on the “+” and then add an action
After clicking on action a modal will pop up and you will want to scroll down to the bottom of the left panel and click on “Create HTTP Callout (Beta)”
Next fill out the details for the HTTP Callout Action you are creating the name is all one word no special characters or spaces, make sure to add a description because you will be able to reuse this in other flows without a need to create a new one so make it easier on other admins, devs and your predecessors so they know what it does, and finally choose the named credential you created in Step 1.
On the next screen we want to give it another label and description along with setting our Method which in the beta is only GET which means we can only retrieve data from an external service. We can also optionally set a URL Path in this case we will use ‘/validate’ this path comes from our api documentation that says this is what we want to do on the service. We are also going to set some Query Parameter Keys this is the data we want to send to our service for our use case we want to send the apikey and the number both of them have a datatype of string we use the names and data types that are from the api documentation; I also made both required otherwise the call will fail. The task is to give an example of what a successful json response will look like once again we get this from our API Documentation. After you paste your example click review and you should see the data structure on the right click done.
Step 13 Configure the new action you created. Give it a name and description like all best practices. In the apikey input I am referencing the label I created in step 3 using the global variable for label and in the number field I am referencing the phone file using the Record Variable from the lead
Step 14 Almost done I created a text template to populate the Phone Details Field I created. In the text template I am referencing the outputs from my service I just created it will create what’s called an Apex Defined Variable I can reference specific pieces of data.
Step 15 Update the Lead Here I am updating the Lead Record that is my Triggering Record updating the Phone Validated and Phone Detail fields.
Step 9 Debug, Validate, Activate, Deploy – Next up debug your flow make sure you set to debug on the asynchronous path and review your debug details and validate it is doing what you expect. Once it’s validated activate your flow and deploy it 🙂
Step 16 Take a deep breath exhale, pat yourself on the back, put on your superhero cape, and enjoy your drink of choice
Views and opinions in this article are my own and do not represent that of Salesforce