notifly
IntegrationsChat providerUpdated

WhatsApp messages from the same Notifly workflow.

You bring your own Meta app and WhatsApp Business number. Connect them to Notifly with the app's access token and ids, and the chat steps of your workflows reach each subscriber's phone on WhatsApp, sent from your number through Meta's Graph API.

Notifly adds the workflow around each message: one trigger for WhatsApp, email, SMS, push and in-app; digest, delay and throttle steps; subscriber preferences checked before each send; and an activity feed with Meta's answer for every message.

What you need from your Meta app

These are the fields the dashboard asks for when you connect WhatsApp Business, quoted from the create form.

FieldRequiredStoredNotes
Access API tokenRequiredEncrypted at restYour WhatsApp Business access API token
Phone Number IdentificationRequiredAs enteredYour WhatsApp Business phone number identification
WhatsApp Business Account IDRequiredAs enteredShown directly above the Phone Number ID on the API Setup page in your Meta app
App SecretRequiredEncrypted at restIn your Meta app, open App settings > Basic from the bottom of the left sidebar — used to verify inbound webhook signatures
  • Access API token. Sent as the Bearer token of every Graph API request; stored encrypted at rest.
  • Phone Number Identification. The Phone Number ID of the WhatsApp number you send from; every message is posted to that number's /messages endpoint.
  • WhatsApp Business Account ID and App Secret. From your Meta app's API Setup page and its App settings; the App Secret is stored encrypted at rest.

Connect WhatsApp Business in the dashboard

  1. Sign in at app.notifly.io, open Integration Store in the sidebar and choose Connect Provider.
  2. In the Connect Integration sheet, open the Chat tab (or search across channels), find WhatsApp Business and choose Connect.
  3. Pick the environment the integration belongs to. Development and Production keep separate integrations, so you can point each at a different WhatsApp Business account or key.
  4. Fill in Delivery Provider Credentials with the fields in the table above, then choose Create Integration.

Trigger a WhatsApp message from your code

The subscriber's phone is the recipient, so a trigger only needs to name the user; this one also sets their phone and sends an approved template.

Node.js · @notiflyio/api@0.1.26
// npm install @notiflyio/api@0.1.26
import { Notifly } from "@notiflyio/api";

const notifly = new Notifly({ security: { secretKey: process.env.NOTIFLY_SECRET_KEY } });

await notifly.trigger({
  workflowId: "appointment-reminder",
  to: { subscriberId: "user_123", phone: "+15551234567" },
  payload: { time: "3:30 PM" },
  overrides: {
    // Sends an approved template instead of the chat step's text.
    providers: {
      "whatsapp-business": {
        template: { name: "appointment_reminder", language: { code: "en_US" } },
      },
    },
  },
});

Prefer plain HTTP? The same trigger is POST https://api.notifly.io/v1/events/trigger with an Authorization: ApiKey header and a body of { "name", "to", "payload" }.

What reaches WhatsApp

  • One message per send. A POST /<Phone Number ID>/messages to the Graph API with messaging_product: "whatsapp" and the subscriber's phone as to.
  • Text by default. The chat step's content, with link previews off.
  • Or the type you pass. A template, interactive or media body under overrides.providers["whatsapp-business"] sets the message type.
  • Meta's answer. The message id WhatsApp returns is stored on the Notifly message; a refused request is recorded in the activity feed.

What Notifly adds on top of WhatsApp

Workflows around the send

One trigger runs a workflow: this provider’s step can sit beside in-app, email, SMS, push and chat steps, behind digest, delay and throttle steps.

Digest notifications →

Subscriber preferences, enforced at send

Before each step runs, the subscriber’s workflow and channel preferences are checked; an opted-out step is skipped and the reason is recorded.

An in-app Inbox next to it

The same workflow can write to the Notifly Inbox, a real-time in-app feed you embed with the React component or the JavaScript SDK.

React notification inbox →

Per-trigger provider parameters

Anything the trigger passes under overrides.providers.<provider id> is merged into the request Notifly sends to the provider, per workflow or per step.

Activity you can debug

Every message gets execution details in the activity feed, including the response or error the provider returned.

Secrets encrypted at rest

API keys, tokens and service accounts are stored encrypted with AES-256; new and re-saved credentials use authenticated AES-256-GCM. The table above marks which of this provider’s fields that covers.

Go deeper in the docs

Frequently asked questions

Which Meta credentials does Notifly need?

Four values from your Meta app: an access token for the WhatsApp Business Platform, the Phone Number ID you send from, the WhatsApp Business Account ID shown above it on the API Setup page, and the App Secret from App settings > Basic. The access token and App Secret are stored encrypted at rest; the two ids are stored as entered.

Where does the recipient's WhatsApp number come from?

From the subscriber's phone, which the trigger's to object can set or update in the same call. When the environment has an active WhatsApp Business integration, Notifly sends the chat step to that number. A subscriber with no phone and no other chat channel is skipped, and the activity feed records that the subscriber has no configured channel.

Can Notifly send WhatsApp templates?

Yes. Put a template object under overrides.providers["whatsapp-business"] and Notifly sends a template message instead of text; the same works for interactive, image, document, video, audio, location, contacts, sticker and reaction messages. Without one, the chat step's content goes out as a text message with link previews off. Meta requires an approved template for a message that starts a conversation.

Which WhatsApp API does Notifly call?

Meta's Graph API, version v22.0. Each message is a POST to /<Phone Number ID>/messages with your access token as a Bearer token, and Notifly stores the message id WhatsApp returns on the Notifly message, so the two can be matched. A refused request records Meta's error in the activity feed.

Bring your provider account. Keep your sender reputation.

One POST /v1/events/trigger — email, SMS, push, in-app, and chat. 10,000 events a month, free.

Get started freeSee pricing