vicigeeksimple guides
Browse
All guides

Automate tasks · Messaging integration

WhatsApp with VICIdial: a safe, opt-in integration plan

Connect a consented WhatsApp conversation to the right VICIdial lead without pretending that a phone dialer is a WhatsApp inbox.

Reader setup

Before you choose

List your constraints, required evidence and stop rules before you score options.

  1. A Meta WhatsApp Business Platform account and one test phone number that belongs to your team
  2. An approved inactive VICIdial test list containing one synthetic lead
  3. A developer who can run a small HTTPS webhook service and keep tokens out of source code
What you will prove
A written, testable design that records consent, receives one test message, matches it safely to one synthetic VICIdial lead, and lets an agent see the result.
Safety boundary
Use only company-owned test numbers and synthetic lead data. Do not upload a calling list, send marketing messages, scrape WhatsApp, or use an unofficial WhatsApp client.

Reader path

How to use this article

  • Use it when: You are comparing options and need decision evidence before approval.
  • Expected result: Turn options into explicit acceptance criteria and documented stop conditions.
  • Start here: Score what is mandatory, keep unknowns visible, then decide only when risks are understood.

Start with the boundary, not a bulk-message button

WhatsApp Business Platform and VICIdial solve different jobs. WhatsApp receives and sends business messages; VICIdial manages phone agents, leads, campaigns and call outcomes. A safe integration joins them through a small service that records consent, validates webhooks, and writes only reviewed, minimum data to the lead workflow.

Meta says business-initiated WhatsApp messages use pre-approved templates and that people control whether they receive business messages. Treat opt-in, message purpose, timestamp, source and opt-out as records your integration must preserve—not a checkbox an agent can guess.

In plain language: a webhook is an HTTPS request a service sends your app when something happens; an API is a controlled way for software to exchange data; a lead is one contact record; a template is a pre-approved message layout with permitted placeholders.

This article is a Decision framework, not a How-to guide, because VICIdial has no built-in WhatsApp screen to click through: WhatsApp Business Platform access, template approval and webhook hosting are choices made in Meta's developer tools and your own infrastructure, not in the VICIdial admin menu. The sequence that fits a five-agent team sending appointment reminders is not the sequence that fits a large floor connecting a shared CRM—read this to decide the shape of the integration before assigning anyone to build it.

  • Choose one support or appointment use case before building.
  • Keep WhatsApp message storage separate from call recordings and unrestricted exports.
  • Write who may send, read, export and delete each data type.
  • Confirm current WhatsApp Business Platform pricing and quality-rating rules with Meta or your provider before scaling past the pilot.
Trace path · read left to right
01Customer opts in → WhatsApp Business Platform02Webhook receiver → approved integration store03Reviewed lead match → VICIdial agent context

Visual walkthrough

Follow three real demo screens

Captured on an isolated VICIdial demo: Administration screens on September 24, 2026, and the idle Agent screen on August 11, 2026. Each caption states its own capture time, and every sanitized image helps you recognize a related screen; none proves that this article's call, command, or result occurred.
Step 1 · Find Scripts

Open the script workspace

Sanitized VICIdial Scripts Listings page showing where agent-visible scripts are managed
Captured September 24, 2026 at 21:53:14 UTC on the authorized isolated demo. No scripts are defined for the fixture account, so the listing is empty. It does not show a script execution, CRM exchange, or call result.
Step 2 · Locate URL overrides

Check list-level form and URL fields

Sanitized VICIdial list detail page showing list state, reset, time, script, and URL override settings
Captured August 11, 2026 at 16:21:03 UTC on the authorized isolated demo. This is list configuration rather than a lead record; it contains no customer row and does not prove a dialing or import result.
Step 3 · See the Agent-side surface

Recognize where the agent sees the workflow

Sanitized logged-in VICIdial Agent screen in an idle no-live-call state with blank customer fields
Captured August 11, 2026 at 16:25:04 UTC on the authorized isolated demo. This is a real logged-in idle Agent screen with session and system identifiers redacted. Customer fields are blank, and it does not prove a placed, answered, recorded, transferred, or completed call.

Make consent and opt-out first-class data

Record how the person agreed to receive messages, what they agreed to receive, when, and which number they used. A web form, QR code or customer-started conversation can be a consent source only if the wording and evidence are retained under your organization’s policy.

An opt-out is immediate operational work: stop future sends for that number, retain only the evidence your policy requires, and do not rely on an agent’s memory. Legal requirements vary by place and message type; obtain compliance review before any production campaign.

Decide single or double opt-in once, as policy, rather than letting whichever engineer builds the sign-up form choose by default. A single recorded action—submitting a form, sending the first message—is faster to launch and weaker as evidence; a second confirmation step is slower and holds up better if a customer later disputes receiving messages. Whichever you pick, set a retention period for the consent record itself, separate from how long you keep the messages it authorizes.

Assign a single owner for the consent record's schema and retention rule—compliance or legal, not whoever wrote the webhook handler—so a policy change updates one definition instead of every service that reads it.

  • Decide single vs. double opt-in once, in policy, not per engineer.
  • Set a retention period for the consent record itself, separate from message retention.
  • Name who can look up, export or revoke a consent record on request.
Synthetic consent record
phone_e164: +15555550199source: test QR pagepurpose: appointment reminderrecorded_at: 2026-08-11T14:00:00Zstatus: opted_inSTOP: no evidence or opt-out received
Not executed · worksheet or reference text

This sample is a template or reading aid, not a terminal command. There is no output to show.

Before you run it
Create this only for the team-owned test number, in the integration’s test store.
Success looks like
The record has a purpose, source, timestamp and reversible status.
Stop if
Stop sending when any consent field is missing or status is opted_out.

Receive webhooks as untrusted Internet input

Meta’s webhook documentation describes HTTPS notifications to the URL configured for the app. Verify the platform challenge and request signature according to the current Meta documentation, acknowledge valid events quickly, then process them asynchronously with idempotency so retries do not create duplicate notes or sends.

Store the provider message ID, event type, received timestamp and a minimal correlation key. Do not put a VICIdial username, database password, access token, or raw message body in logs. Reject events that fail verification and alert the integration owner.

Decide who runs the webhook receiver before deciding how it verifies requests. Hosting the endpoint yourself keeps data handling and cost in your control, at the price of owning uptime, retries and Meta’s own verification changes over time. Routing through a Business Solution Provider—a Meta-authorized platform that resells Cloud API access with a hosted webhook layer and dashboard—trades that operational load for a recurring fee and one more vendor in the data path. Neither choice is safe by default; both still need the verification, deduplication and minimal logging described above.

  • Decide build-vs-buy for the webhook layer before writing a verification handler.
  • Put that decision and its owner in writing, not in a chat message.
  • Re-test signature verification whenever Meta changes its verification requirements.
  • Log webhook failures somewhere a human actually watches, not only to a file no one reads.
Webhook acceptance checklist
VERIFY: Meta challenge and request signatureDEDUPLICATE: provider message IDACK: successful validated eventQUEUE: background processingLOG: event type + correlation ID onlySTOP: signature missing or invalid
Not executed · worksheet or reference text

This sample is a template or reading aid, not a terminal command. There is no output to show.

Before you run it
Apply this checklist to a staging endpoint before subscribing a production number.
Success looks like
One test inbound message creates one queued event and one sanitized audit record.
Stop if
Disable the endpoint from the app and investigate if invalid requests are accepted or one event is processed twice.

Match a message to a lead without creating a data leak

Normalize the phone number to the format your approved lead process uses, then search only the permitted test list or an explicitly approved lookup boundary. A phone-number match is not proof that the sender is the correct person, and it is not permission to expose every historical call note to every messaging agent.

For the first release, write an integration note or a reviewed custom field reference rather than directly changing dial status, callback state or campaign membership. Those changes affect live calling and should have a separate approved workflow.

Set a match-confidence policy before the first real message arrives. An exact match on a normalized E.164 number—the international format that starts with a country code, such as +15555550199—against one approved list is a safe default; a fuzzy match, or a match against several lists at once, is not. Decide in advance what an agent sees for an unmatched or ambiguous number: an empty result is safer than a guess, and only a named owner should be able to widen the lookup boundary later.

Decide, too, who owns cross-channel visibility. A phone agent who can suddenly see a customer's WhatsApp history—or vice versa—is a bigger permission change than it looks, especially when the two channels used different consent language to begin with. Scope that visibility narrowly at first, and widen it only for a specific, documented reason.

  • Show agents a link or small summary, not a raw integration database.
  • Use least-privilege service credentials and rotate them through the approved secret store.
  • Return an unmatched result for ambiguous numbers; do not guess.

Prove one inbound and one approved outbound test

Test inbound first: from the team-owned WhatsApp number, send a simple message to the business test number; verify signature handling, one stored event, correct synthetic-lead match and a constrained agent view. Then test one approved template to the opted-in test number and observe provider delivery status through the webhook.

Do not call a successful lab message a production launch. Production requires current Meta policy review, template approval, a privacy/compliance review, monitoring, rate/error handling, ownership and a tested opt-out path.

Treat the move from lab to production as a staged decision, not a single switch: one synthetic lead end-to-end, then one real opted-in volunteer, then a small cohort with a named owner watching delivery and opt-out rates daily, then general availability. Require an explicit sign-off from whoever owns consent policy at each stage, not only from the engineer who built the webhook receiver—the larger risk in this integration is organizational, not technical.

Budget for the ongoing cost of the channel, not just the build. WhatsApp Business Platform's pricing and quality-rating rules are set by Meta and change over time, so confirm the current terms directly with Meta or your Business Solution Provider before assuming a pipeline that reopens conversations on a schedule is otherwise free to run once built.

  • Test duplicate delivery and invalid signature cases.
  • Test opt-out before any non-test send.
  • Document the current provider policy and template version on release day.

Evidence ledger

Verification basis

  • Meta states that Business Platform API users can initiate messages only using pre-approved templates and describes customer message controls.
  • VICIdial’s Non-Agent API is a version-dependent interface; this article intentionally does not prescribe an unreviewed write command.

Primary references

Sources

  1. Ways to manage business chats on WhatsAppMeta · accessed September 23, 2026
  2. Webhooks - WhatsApp Cloud APIMeta · accessed September 23, 2026
  3. VICIdial Non-Agent APIVICIdial · accessed September 23, 2026

Follow without guesswork

Get the next article

RSS is live now. Email delivery below is an explicit local preview and sends nothing.Open the RSS feed
Email preview only. The address stays in this browser and is never transmitted.