---
title: "WhatsApp Channel"
url: https://flexie.io/resources/inbox/whatsapp
description: "Pairing a WhatsApp number, sending text and media to direct chats and groups, how customers' messages reach your inbox, and the Incoming WhatsApp workflow trigger plus the Send WhatsApp action."
---

# WhatsApp Channel

Last updated 26 May 2026

![A WhatsApp number being paired to Flexie via QR code, with the inbox showing incoming text and media messages from individual chats and groups](https://flexie.io/image/resources/inbox-whatsapp.png)

Pair a WhatsApp number to Flexie and your team can chat with customers (text, photos, voice notes, PDFs, even group chats) from the same inbox they use for email and SMS. Inbound messages link to the right customer and can trigger workflows. In the inbox, a channel switcher lets you narrow the view to **WhatsApp**.

## What "the WhatsApp channel" is

A WhatsApp number you've **paired** to Flexie. After pairing, messages sent to that number show up in the shared inbox; you can reply with text, images, audio, documents, and attached PDFs (e.g. quotes and invoices). Group chats are supported. The inbox shows them with the group name and each message's sender.

You can connect more than one number. Each one is a separate **channel**; access to each channel can be granted to everyone, by role, by group, or by named users.

## Adding a WhatsApp number (QR pairing)

**Add WhatsApp number** opens the provision form:

| Field                     | Required                  | What it is                                                                                                                                                                                                                                                                       |
| ------------------------- | ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Phone number**          | Yes                       | The WhatsApp number being attached, in international format (+14302028897).                                                                                                                                                                                                      |
| **Display name**          | Optional                  | A label shown in the channel picker (e.g. _"Sales"_, _"Support"_).                                                                                                                                                                                                               |
| **Append Country Prefix** | Optional                  | A default country prefix (+44, +1, +355, …) automatically added to outbound numbers that don't already include a country code. Same rule as the SMS line, see [Handling messy phone data](https://flexie.io/resources/inbox/sms#handling-messy-phone-data-append-country-prefix) on the SMS page. |
| **Access**                | Yes (default _All users_) | Who can see and send through this channel: all users / specific permission sets / user groups / named users.                                                                                                                                                                     |

**Submit** → Flexie creates the channel in a _pending_ state and shows a **QR code**. From the phone holding the WhatsApp account, open WhatsApp → Settings → Linked Devices → Link a Device → scan the QR. Within a few seconds the channel flips to _connected_ and the QR disappears.

The QR is single-use; if it expires before you scan, the **Refresh QR** button generates a new one.

### Channel statuses

A channel sits in one of four states; you can see it on the channels list and at the top of the channel's inbox.

Pending

Provisioned but not yet paired. Waiting for the QR to be scanned.

Connected

Live. Inbound messages are flowing; outbound sends through this number.

Disconnected

The phone signed the device out, or the device hasn't checked in for a long while. Reconnect from the channel page.

Error

A persistent error. Hover the status for the last error message. Logout, reconnect, or, in extreme cases, delete and re-provision.

### Channel management actions

From the channels list, each channel offers:

* **Check status**: current connection state and last activity.
* **Refresh QR**: generate a new pairing code (during initial pairing or after a logout).
* **Edit**: rename the channel, change the access list.
* **Logout**: sign the device out cleanly (the channel stops sending and receiving; can be re-paired later).
* **Reconnect**: re-pair after a logout.
* **Delete**: remove the channel entirely.

## Sending WhatsApp messages

### From the inbox

In the WhatsApp channel, **Compose**:

| Field                          | What it is                                                                                  |
| ------------------------------ | ------------------------------------------------------------------------------------------- |
| **From channel**               | Which of your connected numbers to send through (if more than one is accessible to you)     |
| **Recipient phone**            | The destination number. Auto-complete searches by name across contacts, leads, and accounts |
| **Message**                    | The text body                                                                               |
| **Attachment**                 | Optional. Image (JPG/PNG), audio (OGG/MP3), document (PDF, DOCX, …)                         |
| **Attach a quote/invoice PDF** | Optional. One-click attach of a generated business document                                 |

### From a customer's page

The timeline view has a **WhatsApp** action that pre-fills the recipient.

### From a workflow

The workflow action **Send WhatsApp** mirrors the **Send SMS** action; see [Workflows & automation](https://flexie.io/resources/inbox/workflows-and-automation).

> **No cold WhatsApp from workflows.** WhatsApp is a conversational channel, not a marketing one. Per WhatsApp / Meta policy, the **Send WhatsApp** action only succeeds when the customer has **recently messaged your channel**, they have to start the conversation first. Sends to anyone outside that recent window will be rejected. Once they message you, you can reply freely from automation. This isn't a Flexie limit; it's how WhatsApp Business works, and it's there to prevent spam.

### Group chats

When you reply inside a WhatsApp group conversation, the message is sent to the group (not to individual members). The compose form recognises a group thread and addresses the group automatically.

## How incoming WhatsApp is handled

When a customer messages your WhatsApp number, the message lands in your inbox seconds later. Flexie attaches it to the right customer automatically by matching the sender's phone number against your contacts, leads, accounts, deals, and cases. For group chats, the message links by the group identifier instead, so you can build workflows on a whole group (e.g. a customer support team) rather than a single contact.

Media (images, voice notes, documents, stickers) is pulled in alongside the message and previewed directly from the conversation view. Once a message is linked to a record, the **Incoming WhatsApp** workflow trigger runs on every matched record (see below).

## Workflow trigger: Incoming WhatsApp

Use this when you want a workflow to react to a **WhatsApp message from a customer**. It runs every time a new incoming message comes in and is matched to one of your records.

**Form fields:**

* **Message text**: optional pattern match (case-insensitive) against the message body. `YES*` matches "yes please", `*receipt*` matches any message containing "receipt", and leaving it blank runs the workflow on every message.

The form also shows a **Last 10 inbound messages** panel below the field so you can craft the pattern against real examples.

**What your workflow can use from the message** (exposed under `incoming_whatsapp`):

```twig
{{ __data.incoming_whatsapp.from_number }}         {# +14155551212        #}
{{ __data.incoming_whatsapp.to_number }}           {# your channel's #    #}
{{ __data.incoming_whatsapp.text }}                {# the message body    #}
{{ __data.incoming_whatsapp.message_type }}        {# "text" or "media"   #}
{{ __data.incoming_whatsapp.direction }}           {# "inbound"           #}
{{ __data.incoming_whatsapp.whatsapp_message_id }}
{{ __data.incoming_whatsapp.is_group }}            {# true / false        #}
{{ __data.incoming_whatsapp.display_name }}        {# sender's WA name    #}
{{ __data.incoming_whatsapp.date_received }}

```

And for **group messages only** (when `is_group` is true):

```twig
{{ __data.incoming_whatsapp.group_jid }}
{{ __data.incoming_whatsapp.group_name }}
{{ __data.incoming_whatsapp.participant }}        {# the in-group sender            #}
{{ __data.incoming_whatsapp.participant_jid }}    {# their WhatsApp identifier      #}

```

> **Use cases:** customer sends "INVOICE" → workflow finds their latest invoice, generates a fresh PDF, replies with the PDF attached · customer sends an image → workflow saves the image to the deal's attachments and notifies the salesperson.

### WhatsApp delivery confirmations: not yet available

A workflow trigger for "WhatsApp message delivered" isn't available in the current build. Use **Incoming WhatsApp** plus a **Wait** action if you need approximate "after delivery" timing.

## Limits and gotchas

* **No spam, ever.** WhatsApp is a conversational channel, not a marketing one. You cannot send automatic messages to people you don't have a **recent conversation** with, the customer has to message your channel first. If a workflow tries to **Send WhatsApp** to anyone outside that recent window, the send will fail. This is WhatsApp / Meta's policy and terms; the only safe pattern is **customer messages you → workflow replies**.
* **One device per number on WhatsApp side.** Pairing this device replaces any existing linked device. Existing chats stay on the phone; new incoming messages flow into Flexie.
* **The phone must stay connected.** If the paired phone is offline for too long, WhatsApp signs the device out; the channel flips to _Disconnected_ and inbound stops. Bring the phone back online and reconnect.
* **Groups vs DMs in the auto-link.** Direct messages link to records via the sender's phone. Group messages link via the group's identifier, so you can build a workflow on a _group_ (e.g. a customer support group) rather than a single contact.
* **Media size.** Each attachment has a per-message size cap (typically 100 MB); larger files are rejected before they reach Flexie.

## Next

* [Templates](https://flexie.io/resources/inbox/templates): saved messages with variables. The same SMS-template library feeds WhatsApp compose.
* [Workflows & automation](https://flexie.io/resources/inbox/workflows-and-automation): the WhatsApp trigger in the full catalogue, plus the **Send WhatsApp** action.
