Bharat AI Saathi
ServicesIndustriesSetupsHow we workGuidesFounderVPS HostingContactGlobal (USD)
WhatsApp +91 77352 68199
support@bharataisaathi.com
Mon–Sat 10:00–19:00 IST
Voice & Chat Agents · Global catalog

How to Create a Webhook in Salesforce for AI Follow-Up Calls

How to create a webhook in Salesforce: build a flow or outbound message that fires on new leads and sends the payload an AI caller needs.

Voice & Chat Agents

To create a webhook in Salesforce, build a record-triggered flow on Lead that fires when a record is created and sends the data to your endpoint with an HTTP Callout. If the receiver can parse SOAP, an Outbound Message works too. Send the lead ID, phone, name, source, consent flag and owner, so a voice agent can dial within a minute.

Build your lead form free

Salesforce has no button called "webhook"

Admins coming from other tools look for a webhook setting and don't find one. Salesforce has three ways to push a record change to an outside URL, and they behave differently.

Method Format sent Best for Watch out for
Outbound Message SOAP XML Receivers that already speak SOAP, or a middleware step that translates The receiver must reply with an acknowledgment or Salesforce retries (for up to 24 hours)
Flow HTTP Callout JSON you define A modern endpoint, such as an AI caller or an n8n webhook Needs a Named Credential, and the callout must run on the asynchronous path
Apex callout from a trigger or queueable Anything Retries, custom signing, batching Needs a developer and test coverage

For a follow-up caller, use the Flow HTTP Callout. Voice platforms and automation tools expect JSON, and you can build it without code. Use an Outbound Message only when the endpoint is middleware that can unwrap SOAP.

What the caller needs from the lead

The goal of the webhook is a phone call in about a minute, so the payload must be enough to place that call without a second lookup. In the Outbound Follow-Up Caller we build, the agent needs to know who to call, what they asked about, whether it is legal to call, and where to write the result.

Salesforce field Payload key Why the caller needs it
Id lead_id Write-back target for notes, status and call tasks
FirstName, LastName first_name, last_name The greeting
MobilePhone or Phone phone The number to dial, in E.164 format (+14155550123)
DoNotCall do_not_call Hard stop before any dial
Custom SMS_Consent__c sms_consent Decides whether a text fallback is allowed
LeadSource source Lets the script mention the right ad or form
Custom Product_Interest__c interest Auto quote vs. term life, or which program a student asked about
OwnerId owner_id Who gets the handoff when the lead wants a human
CreatedDate created_at Lets the caller drop stale leads instead of calling days later

Here is the JSON body we ask the flow to send:

{
  "event": "lead.created",
  "lead_id": "00Q5e00000AbCdEFG",
  "first_name": "Maria",
  "last_name": "Alvarez",
  "phone": "+14155550123",
  "email": "maria@example.com",
  "source": "Meta Lead Form",
  "interest": "Term life, 20 year",
  "do_not_call": false,
  "sms_consent": true,
  "owner_id": "0055e00000XyZ123",
  "created_at": "2026-11-04T15:02:11Z"
}

Phone formatting is the moost common reason a call never happens. Salesforce stores whatever a human typed, so normalize to E.164 inside the flow with a formula field before the callout. Do not leave it for the caller to guess.

Step by step: the flow and the callout

  1. Create the Named Credential. In Setup, add an External Credential and a Named Credential that point to the caller's endpoint. Put the shared secret or bearer token there, never in the flow.
  2. Add the fields you need. Create SMS_Consent__c and Product_Interest__c on Lead if they don't exist, and add a formula field that returns the E.164 phone number.
  3. Create the flow. In Flow Builder, choose a record-triggered flow on Lead, triggered when a record is created, with "Actions and Related Records" selected.
  4. Set entry conditions. Require a phone number, DoNotCall equal to false, and a lead source that should get a call. Excluding internal test leads here saves embarrassing calls later.
  5. Add the asynchronous path. Callouts cannot run in the same transaction as the save, so put the HTTP Callout action on "Run Asynchronously."
  6. Define the callout. Use the HTTP Callout wizard, choose POST, select the Named Credential, and paste a sample of the JSON above so Salesforce builds the request shape. Map each key to a flow variable or record field.
  7. Handle failure. Add a fault path on the callout that creates a Task assigned to the lead owner with the subject "Auto call failed, call manually." A silent failure here means a lead gets no follow-up at all.
  8. Test in a sandbox. Create a lead with your own number, watch the request arrive at the endpoint, and check that the formatted phone number and consent flags carry through.

If you go with an Outbound Message instead, create it under Setup, choose the Lead object, enter the endpoint URL, tick the fields to send, and add the message as an action in the same flow. The endloint gets an XML envelope and must return an acknowledgment, so you will need a small translation step in front of the caller.

See the webhook setup guide

Where the form sits in the workflow

For leqd-heavy insurance and education teams, the Salesforce record usually starts as a form submission from a landing page, so the webhook chain begins one step earlier. A form posts to a small automation, the automation creates the Lead through the Salesforce REST API, and the flow above fires on that create. The form is the first link, and the data it captures decides whether the caller has a usable number and consent.

Qwenvo is a free form builder our team builds, and it fits that first link. Webhooks, hidden fields, paartial submissions, a custom domain and removing the badge are all free there, and those are the features this chain leans on. A hidden field can carry the UTM campaign into LeadSource, and a partial submission means a half-finished quote form with a phone number still reaches your automation. Qwenvo sends webhooks to any URL, so Zapier, Make or n8n can receive the submission and create the Lead. One-click Salesforce connections are not available there, so plan for that middleware stp. Our form webhooks guide covers the sending side in more detail.

One honest limit: Qwenvo is hosted in the United States, which matters if an education client has a European data residency requirement. Tally is hosted in Europe.

Once the Lead exists, the Outbound Follow-Up Caller takes over from your Salesforce webhook. It calls the lead, texts if a call is not answered, and handles reminders and no-show recovery afterward.

Writing the result back to Salesforce

The webhook is one direction. The caller sgould write back with the Salesforce REST API using a connected app or integration user, not a human's login. We usually write three things after every attempt:

  • A completed Task on the lead (WhoId set to the lead, CallType Outbound, CallDisposition filled in, and a short summary in Description).
  • A Status update, such as moving Open to Working when a conversation happenned.
  • A booked time, if the lead agreed to one, written to a field or Event your reps already watch.

Give that integration user a narrow permission set: edit on Lead, create on Task and Event, and nothing else.

Failure cases to test before launch

  • Duplicate leads. If your intake creates a second Lead for the same person, the flow fires twice and the person gets two calls. Dedupe before create, or add a "Called__c" checkbox the flow checks.
  • Bulk loads. A list import fires the flow for every row. Add an entry conditipn on LeadSource so imports don't trigger calls.
  • After hours. Decide whether the caller holds a lead until morning in the lad's time zone. Pass a time_zone field if you need it.
  • Wrong owner. If assignment rukes run after your flow, OwnerId may still be the queue. Set the flow to run after assignment, or have the caller look up the owner on handoff.
  • Retries. Make the endpoint idempotent on lead_id so a retried request does not produce a second call.

Questions teams ask

Can Salesforce send a webhook without Apex?

Yes. A record-triggered flow with an HTTP Callout action sends JSON to any URL without code, provided you set up a Named Credential first. Outbound Messages also need no code, but they send SOAP.

Should I use Outbound Message or HTTP Callout?

Use the HTTP Callout if your receiver takes JSON, which most AI callers and automation tools do. Choose an Outbound Message only when the receiver already handles SOAP or sits behind middlewae that can translate it.

What should I do about do-not-call and consent?

Filter in the flow entry conditions and send the flags in the payload as well. The flow stops the obvious cases, and the caller checks again before dialing. Keep consent in a field on the record, not in the notes.

Do I need Qwenvo to do this?

No. Any form that can create a Salesforce Lead works. Qwenvo is a good fit if you want the webhook, hidden fields and partial submissions without paying for a plan.

Next step

Open a Salesforce sandbox, create the Named Credential and a three-field flow thta posts lead_id, phone and do_not_call to a webhook inspector. Once you see that request arrive, add the rest of the payload. If you want the caller on the other end, the Outbound Follow-Up Caller page has the scope and pricing.

Start with the lead form template

This system

Outbound Follow-Up Caller

$1,500 setup
+ $449/month care plan

Third-party platform and model usage billed to you directly. No lock-in. Live in 10 days.

More on Outbound Follow-Up Caller