Here is a step-by-step guide on how to send Outbound Message from a Flow in Salesforce. Salesforce introduced the capability to send it from Flows in its Winter ’22 Release. Before this the only option to send outbound message was from Workflow Rules.
So, what is an Outbound Message in Salesforce?
Outbound Message is one of the declarative features of Salesforce that you can use to integrate Salesforce with other external systems. The concept is simple. Whenever a record gets created or updated in Salesforce, send a SOAP API message to an external system.
A common use case is to create/update Account records in backend systems like ERP, Order Management System or Logistics System, whenever a new Account gets created or an existing Account gets updated in Salesforce.
And the beauty of this feature is that it is a declarative configuration, that won’t take more than 10-15 minutes.
How to send Outbound Message?
Configuring Outbound Messages is a two-step process:
- In the first step, define the outbound message, where you will select the object, fields from the object and specify an endpoint URL.
- In the second step, define what will fire this outbound message. There are two main features in Salesforce that allow you to run automations on record creation/updation.
- Salesforce Flow
- Apex Trigger
Salesforce Flow is a declarative point-and-click took, where as Apex trigger requires writing code.
In this guide, we will take a look at how to send outbound messages from the Flow.
For the endpoint URL, we are going to use a service called RequestBin. RequestBin allows you to create public endpoint to receive and inspect HTTP requests from any source, and easily inspect the headers, payload and more.
Here is a picture from Salesforce’s SOAP API Developer Guide explaining the flow of Outbound Message (just for your reference)
Here is the graphical representation of what we will be building in this guide.
And here is the detailed step-by-step guide with screenshots.
NOTE: Certain sections of the guide will appear as locked in the free preview. You can download the unlocked version of the guide in PDF format by subscribing to our “All Access” Pass through the link below.
Introducing Mastering Salesforce Flows Training Course
Liked this post? We are now offering a complete self-paced, video-based training course on Mastering Salesforce Flows. The course comes with downloadable step-by-step PDF guides, unlimited access, free upgrades, community discussion area, free preview and more. For more details, please click here.
Need Help with Flows?
Need advice on Flows? I also offer advisory & consulting services on Salesforce Flows. So, whether you want to create new Flows or migrate existing automations (Workflow Rules, Process Builder, Triggers) to Flows, I can help you analyze, design, plan & review. To initiate a discussion, please submit the contact form here stating your requirement or schedule a discussion at this URL.
References & Useful URLs
- Blog Post – Step By Step Guide To Creating Record-Triggered Flow in Salesforce
- Training Course – Mastering Salesforce Flows
- SOAP API Developer Guide – Outbound Messaging
- Salesforce Help Article – Considerations for Outbound Messages
- Salesforce Help Article – Error ‘Content is not allowed in prolog’ in Outbound Message
Perfect man.
Hi Ashish,
This is really a great post and very useful!
Could you help me out how can I load these outbound messages into let say file in Azure Data Lake or AWS S3?
Thanks,
Abhay
Hi Abhay, you will need a listener on the other end to receive these outbound messages and process it. I am not familiar with Azure Data Lake but Amazon S3 is just a file storage system, so it can’t receive outbound messages. But just wondering, why would you want to save the messages in S3?
Thank you Ashish, this was another great step by step !
My pleasure Alex. đŸ™‚
Hi Ashish, great post!!
1) This is called real time integration right?
However in real scenario in general we wont not have the open endpoint, so the question is how can we authenticate and send the data using flow/outbound?
2) Is it a good practice to do the same using apex REST callout? Would we end-up hitting the limit doing so, the limit is 100 callout per transaction and here in one transaction (creating/updating) only 1 callout will be used.
So would you suggest to go with apex, if we need some custom logic too?
Thanks Vicky,
Outbound Message is not really real time. There could be some delay in sending the message as Salesforce tries to batch multiple requests together. If you go by Salesforce terms, the pattern is called “Fire & Forget”.
For authentication, you can use Two Way SSL (more information at this URL – https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_om_outboundmessaging_setting_up.htm )
I will not recommend using Apex REST Callout over Outbound Message because of following reasons:
1. Apex REST callout will require custom development. OBM is a declarative feature and takes just a few minutes to configure.
2. Outbound Message will keep retrying for 24 hours, so there is some resiliency built in. With Apex Callout, you will have to build this yourself.
3. There is no limit on Outbound Message. Salesforce can include 100 notifications per message, so the endpoint must be able to handle it. But there is no limit as such.
Hope this helps.
Regards,
Ashish
Thanks Ashish, this is very informative – using OBM in Flows.
Quick question:
Q1: How and where do we change the Acknowledgement Response XML in true destination system (not RequestBin) ?
As per your use case, let’s says SAP / D365 ?
Q2: And is this a Standard XML response format that can be used anywhere, as-is ?
Thanks once again!
You are welcome Shikhir. The answer is yes for both the questions.
1. At the endpoint URL where OBM is sent, you will need to ensure that the response XML is sent in the format expected by Salesforce
2. This is standard XML response format that can be used anywhere as-is for OBM messages. Towards the end of the blog post I have also included the link to the Salesforce help article, where the message format is specified.
Cheers,
Ashish