# Set up WhatsApp

> Connect a WhatsApp Business number through Meta, choose whether it stays on your WhatsApp Business app, put an agent on it, and keep it healthy.

Source: https://docs.amomic.in/channels/whatsapp

---

Connecting WhatsApp puts one of your agents on a WhatsApp Business number you own. Customers message the number the way they message anyone. The agent reads the message, answers from its knowledge base, and every exchange lands in your [inbox](/concepts/conversations) beside web chat and voice.

**Who can do it.** WhatsApp needs the **Starter** plan or above. Owners and admins connect, remove and reconnect numbers, choose the workspace default, change a number's settings (the **Automation** tab: reply mode, assigned agent, read receipts and typing indicator), edit the business profile and delete templates. The server enforces this: a member who tries gets *Administrator access is required.* The **Channels** item in the sidebar is shown to owners and admins.

On the Free plan the page shows **Answer customers on WhatsApp** with an upgrade prompt instead of the setup card. An owner sees **View plans & upgrade**; anyone else is asked to get an owner to upgrade. See [Plans and limits](/operate/limits).

![The WhatsApp page with two senders in the rail, the default sender open on its Overview tab, a Live: Active strip, the Readiness card and the Verify a conversation card](https://docs.amomic.in/screens/whatsapp/overview.light.webp)

*A connected workspace: senders on the left, the open sender's header, live status, and its five tabs.*

## What you get once it is connected

- **Inbound conversations answered automatically.** Every message to the number reaches the agent on it, unless you've set the number's [reply mode](/channels/whatsapp-reply-modes) to hold back.
- **Your team can step in.** Take a conversation over from the inbox, or reply from your phone if the number stays on the WhatsApp Business app.
- **Outbound sends from your backend.** [`POST /messages`](/api/messages) sends free-form text or an approved [template](/channels/whatsapp-templates) from any connected number.
- **Opt-out handling across the workspace.** A customer who sends `STOP` to one of your numbers is suppressed on all of them.

## Vocabulary: WABA, sender, agent

| Term | What it is |
|---|---|
| **WhatsApp Business Account (WABA)** | Meta's container for your business messaging. It holds your message templates and one or more phone numbers. You own it; Amomic-AI is authorized to act on it. |
| **Sender** | One phone number inside that WABA, connected to your workspace. Each sender has its own credential, its own agent, its own reply settings and its own business profile. |
| **Agent** | The [agent](/build/agents) that answers on the sender. You choose it when you connect, and can change it on the sender's **Automation** tab. |

A workspace can hold several senders. A number belongs to one workspace at a time. If it is already connected somewhere else, setup stops with *"This WhatsApp number is already connected to another workspace."* A WhatsApp Business Account can't be split across workspaces either: *"This WhatsApp account is already connected to another workspace."*

## Before you begin

You need all of these. Missing one usually stops the flow inside Meta's window, where the error is least helpful.

- The **Starter** plan or above, and the owner or admin role.
- Admin access to your Meta Business portfolio.
- A business phone number you control.
- A way to receive Meta's SMS or voice verification on that number.
- An agent to answer. If there is none, the page says *"Create an agent before connecting WhatsApp."* with a **Create agent** link. Build one first: the [Quickstart](/start/quickstart) takes a few minutes.

::: warning Saved agent changes are live on WhatsApp straight away
The number answers with whatever the agent's saved instructions, knowledge and tools are at that moment. There is no separate publish step for this channel. Try risky changes in the agent's playground before you save them. See [Test and publish](/build/testing).
:::

## Step 1: Choose the agent

Open **Channels → WhatsApp**. With no number connected, the page shows **Connect your first WhatsApp number**, a three-step card.

Under **Choose the agent that will answer**, pick the agent from the list. You can change it later, per number, on the **Automation** tab.

![The Connect your first WhatsApp number card with Veloria Support chosen, the option Use the number already on my WhatsApp Business app selected, and Meta's warning about companion devices and broadcast lists](https://docs.amomic.in/screens/whatsapp/connect-first-number.light.webp)

*Choosing to keep the number on the WhatsApp Business app shows what Meta changes before you continue.*

## Step 2: Choose how the number connects

Step 2 of the card, **Authorize your business with Meta**, asks one question first. The answer picks a different Meta flow, so it can't be changed after the number connects.

| Option | Choose it when | What happens |
|---|---|---|
| **Connect a new number** | The number is not in use in the WhatsApp Business app. | The number runs entirely through Amomic-AI. It shows as **Amomic only**. |
| **Use the number already on my WhatsApp Business app** | You already run the business from the WhatsApp Business app on your phone and want to keep doing so. | You keep answering from your phone, and the agent answers on the same number. Your recent chats and contacts come across. It shows as **Phone + Amomic**. |

::: warning What Meta changes when you keep the WhatsApp Business app
Meta signs out linked companion devices, and makes existing broadcast lists read-only. Your chats and contacts are copied over once, so finish the setup in one sitting.
:::

A **Phone + Amomic** number behaves differently in three useful ways:

- **Your phone replies appear in the inbox**, marked **Your phone** and *Sent from the WhatsApp Business app*.
- **In Smart mode, your phone replies count as a team reply**, so the agent steps back while you're talking. See [Reply modes](/channels/whatsapp-reply-modes).
- **You can pause the agent for one customer from your phone** by sending `/stop`, and hand back with `/continue`. See [Pause the agent with /stop](/channels/whatsapp-pause).

Your phone replies also reach your backend as the `message.echo` [webhook event](/webhooks/events).

## Step 3: Authorize with Meta

Choose **Continue with Meta**. Meta opens in its own secure window. Sign in, then choose an existing WhatsApp Business Account and number, or create them there.

You authorize inside Meta's window and the credential comes back to Amomic-AI server-side. On this path you are never asked to paste a token into your browser.

When Meta finishes, Amomic-AI:

1. checks that the account and number you picked are the ones you authorized;
2. checks the number isn't connected to another workspace;
3. subscribes the account to incoming messages;
4. stores the credential in a secrets vault. It is never sent back to the browser.

The toast *"WhatsApp sender connected and ready to verify."* confirms it. The number's agent starts answering as soon as setup completes.

### If the Meta window fails

| Message | What it means | What to do |
|---|---|---|
| *Meta login could not be loaded. Check browser privacy settings.* | Strict tracking protection or an extension blocked Meta's login script. | Use a normal window in a mainstream browser, with blockers off for this site. |
| *WhatsApp setup was cancelled before completion.* | The window closed before Meta finished. Nothing was saved. | Start again. |
| *Meta login was cancelled or authorization was not granted.* | You closed the login, or declined the permissions. | Start again and accept the permissions. |
| *WhatsApp setup could not be completed. … (Meta error N). It stopped at: …* | Meta reported an error, and where it stopped. | Fix what Meta names (often number verification), then start again. |
| *Meta completed a different kind of setup than we asked for. …* | Meta ran a migration or API-only grant instead of a connect. | Reopen setup and choose **Continue with Meta** again. |
| *WhatsApp setup timed out. Please reopen Meta and try again.* | Nothing came back from Meta within 3 minutes. | Start again, and finish in one go. |
| *This WhatsApp number is already connected to another workspace.* | The number belongs to a different Amomic-AI workspace. | Remove it there first. |

If the page says *"Embedded Signup is unavailable right now. Use advanced recovery below or contact Amomic support."*, contact support. **Advanced manual recovery** asks for a phone number ID, WABA ID, permanent access token and Meta app secret. It exists for support-led recovery of an existing installation, not for a normal connect.

## Step 4: Verify a real conversation

The sender opens on its **Overview** tab. The **Verify a conversation** card tests the real inbound session and the real reply path, which is the only proof that matters.

::: steps
::: step Message the number
From your own phone, send any message to the connected number.
:::
::: step Enter your number
Type that same phone number into **Customer phone number**, with the country code.
:::
::: step Send the reply
Choose **Send verification reply**. *"Your Amomic WhatsApp connection is working."* arrives on your phone, and the console shows *"Reply sent. Your WhatsApp connection is working."*
:::
:::

If you skip the first step, the send fails with *"The 24-hour session window is closed; only approved template messages can be sent."* That is [the 24-hour window](/channels/whatsapp-window) working. Message the number, then try again.

The button stays disabled, with *"Resolve the sender's connection status before sending a test."*, while the sender is **Not delivering**, **Reconnect required**, **Paused**, or not yet registered with Meta.

## The sender workspace

Once a number is connected, the page has two columns.

**Senders** (left) lists every connected number, the default first. Each row shows a health dot, the number, a **Default** pill on the workspace default, the verified business name, and **Phone + Amomic** if the number stays on the WhatsApp Business app. **+** adds a number. The footnote is a rule worth remembering: *"A customer opt-out blocks sends from every number in this workspace."*

**The sender header** (right) shows:

- the number, its health badge, **Phone + Amomic** or **Amomic only**, and **Workspace default** if it is;
- the verified business name and Meta's phone number ID;
- **Agent**, **Quality** (Meta's rating: Green, Yellow or Red) and **Connected with** (**Meta**, or **Manual** for a recovered connection);
- a live status strip. It checks the number with Meta every time you open the sender, then shows **Live: Active** or the problem. **Re-check** runs it again.

Below the header are five tabs:

| Tab | What it's for |
|---|---|
| **Overview** | Anything that needs action, the **Readiness** checklist, and **Verify a conversation**. |
| **Profile** | The business profile customers see. See [Business profile](#business-profile-and-display-name). |
| **Automation** | Reply mode, assigned agent, read receipts and typing indicator. See [Reply modes](/channels/whatsapp-reply-modes). |
| **Templates** | This account's message templates, and the Amomic-AI templates. See [Templates](/channels/whatsapp-templates). |
| **Connection** | Meta authorization, live verification, identifiers, default, reconnect and remove. |

## Sender health

Each sender shows one health state. The page names the fix for each.

| State | What it means | Fix |
|---|---|---|
| **Ready** | Messages can be received and answered by the assigned agent. | Nothing. |
| **Connected** | The live check confirmed it with Meta: the number is receiving and answering messages. | Nothing. |
| **Finishing setup** | The connection is saved, but Meta setup is not fully active yet. Usually the number's own verification is still pending. | Finish verification in WhatsApp Manager, then **Re-check**. |
| **Agent required** | No agent is assigned. Messages to the number are not answered and are not saved. | **Assign agent** opens the Automation tab. |
| **Reconnect required** | Meta authorization is missing or no longer valid. | **Reconnect Meta**. |
| **Not delivering** | Meta is refusing to send from this number, even though the credential is valid. The usual cause is the WhatsApp Business Account's payment method. The card shows Meta's own reason. | **Open Meta Business Manager** and fix it there. |
| **Paused** | The sender is disabled and won't handle messages. | Contact support. |

![A sender marked Not delivering, with a red card reading Business eligibility payment issue and an Open Meta Business Manager button](https://docs.amomic.in/screens/whatsapp/not-delivering.light.webp)

*Not delivering outranks a healthy credential: the token works, Meta still won't send.*

**Not delivering** comes from real delivery receipts, so it catches what a token check can't. It clears on its own once a message from the number is delivered again. Nothing in the console fixes it, because the payment method, any policy appeal and any account restriction all live in Meta Business Manager.

The **Readiness** card breaks health into four checks: **Phone number** (registered with Meta), **Authorization** (credential available), **Incoming messages** (webhook subscription active) and **Agent**. Use it to see which part is failing.

::: note Quality rating
Meta rates each number **Green**, **Yellow** or **Red** from how recipients react to your messages. On **Red** the Overview shows *"Meta quality rating is red"*: pause non-essential campaigns, review recent blocks and reports, and confirm every recipient opted in. Meta may reduce your messaging limits if quality stays low.
:::

## The Connection tab

![The Connection tab for +91 99011 47362, showing Authorization Healthy, Incoming webhooks Subscribed, Reconnect Meta and Make workspace default buttons, Live verification Active, and Sender identifiers including the Internal sender ID](https://docs.amomic.in/screens/whatsapp/connection.light.webp)

*Everything about the link to Meta, plus the ids you need for the API and for Meta support.*

| Section | What it shows |
|---|---|
| **Meta connection** | **Authorization** (Healthy / Needs attention / Missing) and **Incoming webhooks** (Subscribed / Not subscribed), with **Reconnect Meta** and, on any number that isn't the default, **Make workspace default**. |
| **Live verification** | The result of the live check: **Active**, **Reconnect required**, **Not delivering**, **Couldn't verify** or **Not configured**. When active it shows the number, name and quality Meta reports. **Verify with Meta** runs it again. |
| **Sender identifiers** | **Phone number ID**, **WhatsApp Business Account ID**, **Internal sender ID** and **Last updated**, each with a copy button. |
| **Advanced manual connection** | Collapsed. Replacing identifiers or a token here can interrupt live messaging. Use it only when support asks. |
| **Remove this sender** | Collapsed. See [Remove (disconnect) a sender](#remove-disconnect-a-sender). |

The **Internal sender ID** (for example `wa_snd_veloria_bookings`) is the `sender_id` the API takes. You can also list senders and their ids from code with [`GET /channels`](/api/discovery).

## Reconnect a sender

Use **Reconnect Meta** on the Connection tab when a sender shows **Reconnect required**: the credential was revoked, the person who authorized lost access to the business portfolio, or the number moved. The dialog, **Reconnect WhatsApp sender**, asks for the agent and opens Meta again. Choose the same business, account and number.

A sender that was connected manually shows **Upgrade with Meta** instead. It runs the same Meta flow and replaces the manual credential with an authorized one.

Reconnecting keeps the number's setting for the WhatsApp Business app. That was fixed by Meta at first connect, so the dialog doesn't ask again.

## Multiple senders and the default

Add another number with **Add sender**, or **+** in the rail. Each one authorizes separately through Meta and gets its own credential, so a problem with one never touches another.

![The Add WhatsApp sender dialog with the Agent select set to Veloria Support and the two choices Connect a new number and Use the number already on my WhatsApp Business app](https://docs.amomic.in/screens/whatsapp/add-sender.light.webp)

*Each new number gets its own agent and its own connection choice.*

Per sender, independently:

- the agent that answers, and the [reply mode](/channels/whatsapp-reply-modes);
- whether incoming messages are marked as read, and whether a typing indicator shows;
- the business profile customers see;
- its message templates (shared by every number on the same WhatsApp Business Account).

One sender is the **workspace default**, marked **Default** in the rail and **Workspace default** in its header. Change it with **Make workspace default** on another sender's Connection tab. The default decides which number [`POST /messages`](/api/messages) uses when you don't pass `sender_id`.

```json title="Choosing a sender explicitly"
{
  "to": "+919840331276",
  "sender_id": "wa_snd_veloria_bookings",
  "text": "Your technician is on the way."
}
```

The default does **not** decide which number a support reply leaves from. That is set in **Tickets → Reply settings**. A ticket that arrived on WhatsApp always replies from the number the customer wrote to. See [Working tickets](/console/tickets).

::: warning Opt-outs are workspace-wide, senders are not
A customer opt-out blocks sends from every number in the workspace. A second number doesn't give you a second chance with someone who unsubscribed.
:::

## Putting an agent on a sender

Two routes set the agent on a number:

- **From the channel.** Open the sender's **Automation** tab, pick the agent under **Assigned agent**, and choose **Save automation**. It applies straight away.
- **From the agent.** Deploy the agent to the WhatsApp connection from the agent's deployments. Activating the deployment points the number at that agent. See [Deployments](/build/deployments).

Whichever acts last wins. Disabling the deployment that is serving the number takes its agent off. The sender then shows **Agent required**, and messages to it go unanswered.

## Business profile and display name

The **Profile** tab edits what customers see when they open your number in WhatsApp. Changes go straight to Meta and are live immediately. Choose **Save profile** to send them.

![The Profile tab with the Veloria Home logo, a locked Display name with a WhatsApp Manager link, About, Description, Contact email, Category Shopping & retail, two websites and an address](https://docs.amomic.in/screens/whatsapp/profile.light.webp)

*The display name is locked; everything else goes straight to Meta.*

| Field | Rules |
|---|---|
| **Profile photo** | Square JPEG or PNG, at least 192×192, under 5 MB. **Upload photo** or **Change photo**. |
| **Display name** | Read-only. Meta reviews every display-name change, so it can only be edited in WhatsApp Manager. |
| **About** | The short line under your business name. Up to 139 characters. |
| **Description** | Shown on your business profile page. Up to 512 characters. |
| **Contact email** | Optional. |
| **Category** | One of Meta's categories, such as **Shopping & retail**, **Medical & health** or **Professional services**. |
| **Website**, **Second website** | Meta allows up to two. Each must start with `https://` (or `http://`), or the field shows *"Include https:// at the start."* |
| **Address** | Up to 256 characters. |

The display name can carry a note from Meta's review:

- *"A change to this name is awaiting Meta's review."*
- *"Meta declined this name. Submit a different one in WhatsApp Manager."*
- *"No display name yet. Set one in WhatsApp Manager — customers see it above your number."*

If Meta doesn't return the profile, the tab shows *"We couldn't read the profile"* with **Try again**. Nothing has changed at Meta.

## Remove (disconnect) a sender

Open the sender's **Connection** tab and expand **Remove this sender** at the bottom. It's tucked away because it's the one control on the page that silences a live number. Choose **Remove sender**, then confirm **Remove and disconnect** in the dialog **Remove {number}?**. You need the owner or admin role.

Removing a sender disconnects it from your workspace. It doesn't remove the number from WhatsApp.

| What happens | What doesn't |
|---|---|
| The workspace stops sending and receiving on the number immediately. | The number stays registered with WhatsApp. |
| Its agent is undeployed. | Its quality rating and messaging limits are untouched. |
| The stored Meta credential is destroyed. | Its approved display name survives. |
| Meta stops delivering its messages to Amomic-AI (unless another number on the same account is still connected). | Its templates stay on the WhatsApp Business Account. |

Conversations already in your inbox are kept. The number can be connected again later, to this workspace or another, without verifying it again.

::: warning Removing a sender doesn't revoke your Meta authorization
Destroying the credential means Amomic-AI forgets it. It doesn't withdraw the grant at Meta. If you're disconnecting because you no longer want Amomic-AI to have access, also remove the app under **Meta Business Settings → Business integrations**.
:::

To take the number off the WhatsApp Cloud API entirely (back to the WhatsApp Business app only, or to another provider), deregister it in WhatsApp Manager. That can't be undone, and the display name goes back through review.

## How an inbound message reaches your agent

```
Customer sends a message
  → Meta delivers a signed webhook to Amomic-AI
  → the number it was sent to identifies the sender
  → the sender identifies the workspace, the agent and the reply mode
  → the agent answers, grounded in its knowledge base
  → the reply goes back out on the same number
```

Details in that chain that surprise people:

- **Routing is by the receiving number.** The same customer messaging two of your numbers gets two separate conversations, each with that number's agent.
- **A sender with no agent is silent.** No error to the customer, no fallback message. Check for **Agent required** if messages seem to vanish.
- **Reply mode, contact settings and pauses come first.** The agent stays quiet when the number is **Off**, when Smart mode has stepped back, when someone sent `/stop`, or when the contact's **Let the agent reply** switch is off. The message is still saved to the inbox in every one of those cases, unless the number is **Off** with **Don't keep these conversations** on. See [Reply modes](/channels/whatsapp-reply-modes) and [Pause the agent](/channels/whatsapp-pause).
- **Out of conversations, the agent goes quiet.** If the workspace has used its plan's conversation allowance, a message that would start a new conversation is saved but not answered. Conversations already open keep going.
- **A suspended workspace answers nobody.** While the workspace is suspended for an unpaid plan invoice, every message is saved to the inbox but not answered, with no *typing…*, even in conversations already open, and nothing is sent from the number at all: no agent replies, no team replies, no templates or API sends. Opt-outs are still recorded. It lifts by itself once the invoice is paid. See [When a payment fails](/operate/plan-changes#when-a-payment-fails).

Every inbound message also restarts [the 24-hour window](/channels/whatsapp-window) for that customer on that number.

### What the agent can read

| Customer sends | What happens |
|---|---|
| Text | Answered normally. |
| Image (JPEG, PNG, WEBP, GIF) | Read by the agent. A caption is treated as the question; an image with no caption is answered on its own. |
| Button tap or list selection | Treated as the customer's reply. |
| Location | Passed through as the shared coordinates. |
| Voice note | Transcribed and answered like a typed question, including in Hindi and the other Indian languages, in the customer's own script. The agent keeps every capability it has on a typed message: knowledge base, live lookups, bookings, tickets. |
| Audio file (MP3, M4A, AAC, AMR) | Understood the same way as a voice note, but answered in text. A forwarded recording isn't a question asked out loud. |
| Reaction (👍, ❤️, 😕…) | The agent sees which message was reacted to and decides whether it needs anything. An acknowledgement is left alone; a confused or unhappy reaction gets a short reply. |
| Video, document, sticker | Not processed. The agent says so and asks for the question another way. |

Voice notes over 8 MB, and recordings with no clear speech, get a reply asking the customer to send it again or type it.

### What the agent can send

Text, interactive replies, and voice notes.

**Voice notes.** When a customer sends a voice note, the agent replies with a voice note first and the written reply underneath. They're the same answer in two forms. The spoken one is reworded to be heard: no formatting, numbers and amounts said the way people say them, no links read out. The written one keeps the links, references and tappable buttons.

The voice note is a real WhatsApp voice message with a waveform, not a file to download. There's no setting for it: it happens whenever a customer sends a voice note and the language is one the agent can speak. If the voice can't be produced, the written reply still goes out on its own, so a voice note is never the only copy of an answer.

The agent writes in WhatsApp's own formatting (`*bold*`, `_italic_`, `~strike~`), never markdown. Long replies split at sentence and paragraph boundaries rather than being cut off.

It can also produce native WhatsApp UI:

- **Up to 3 options** render as tap buttons, labels trimmed to 20 characters.
- **4 to 10 options** render as a tap-to-open list, row titles trimmed to 24 characters.
- **A single link** renders as a call-to-action button.

The agent doesn't send images, documents or video on this channel. If a customer needs a file, it sends a link.

## Opt-outs

Opt-out is handled for you, before the message reaches the agent, and in every reply mode. A customer whose message matches an opt-out keyword exactly, ignoring case and surrounding spaces, is suppressed immediately.

**Opt-out keywords:** `stop`, `unsubscribe`, `opt out`, `optout`, `cancel`, `stop promotions`, `band karo`, `बंद करो`, `रोको`, `बंद`

A button tap counts too: tapping a quick reply labelled with one of these words (such as Meta's **Stop promotions** button on marketing templates) opts the customer out, and so does a button whose hidden payload is one of them, except `cancel` and `बंद`, so a "Cancel booking" button never unsubscribes anyone.

They get one reply and nothing else:

> You won't receive any more messages from us. Send START to resubscribe.

**Opt-in keywords:** `start`, `subscribe`, `unstop`, `shuru karo`, `शुरू करो`

> Welcome back! How can I help you today?

::: danger Suppression lasts until they send START
There's no expiry and no console override. A suppressed customer stays suppressed on every number in the workspace until they message one of your numbers with an opt-in keyword.

Any send to them, free text or template, from the API, an agent or your team, fails with `403 permission_denied`, message *"Recipient has opted out."*, and `details.reason` of `"suppressed"`. Handle that code and stop retrying.
:::

The match is exact. "please stop messaging me" doesn't suppress anyone; it reaches the agent as an ordinary message. `/stop` with a slash is different again: it's typed by **you** to [pause the agent](/channels/whatsapp-pause), and never suppresses the customer.

## Sending from your backend

Once a sender is connected and healthy, [`POST /messages`](/api/messages) is the whole surface:

```bash
curl -X POST https://services.amomic.in/api/v1/messages \
  -H "Authorization: Bearer $AMOMIC_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: visit-SR-20817-confirmed" \
  -d '{
    "to": "+919840331276",
    "template": {
      "name": "service_visit_confirmed",
      "language": "en",
      "variables": ["Meera", "washing machine drum noise", "Thu 15 Oct, 10 am – 12 pm"]
    }
  }'
```

Two rules shape every integration on this channel:

- **Free-form `text` only works inside the 24-hour window.** Outside it you get `409` with `session_window_closed`. See [The 24-hour window](/channels/whatsapp-window).
- **Templates must already be approved by Meta.** See [Templates](/channels/whatsapp-templates).

## Troubleshooting

::: details Messages arrive but the agent never replies
Check, in order:

1. The sender's health. **Agent required** means no agent is assigned; choose one on the **Automation** tab.
2. The sender's [reply mode](/channels/whatsapp-reply-modes). **Off** never replies. In **Smart**, the agent stays quiet after anyone on your team replies.
3. The inbox banner on that conversation. *"Paused with /stop"* means someone paused it; **Resume AI now** hands it back.
4. The contact. If **Let the agent reply** is off for them in **Contacts**, the agent never answers that person on WhatsApp.
5. Your plan allowance. Past it, new conversations are saved but not answered. See [Credits and allowances](/operate/credits).
6. Billing. If the workspace is suspended for an unpaid invoice, nothing is answered or sent until it is paid. See [When a payment fails](/operate/plan-changes#when-a-payment-fails).
:::

::: details The sender shows Not delivering
Meta is refusing to send from the number. The card shows Meta's reason, most often a missing or failed payment method on the WhatsApp Business Account. Fix it in Meta Business Manager. The state clears once a message is delivered again.
:::

::: details The sender flipped to Reconnect required
The stored credential no longer works: Meta revoked it, the person who authorized lost access to the business portfolio, or the number moved. Use **Reconnect Meta** on the Connection tab. The agent can't reply on the number until you do.
:::

::: details A number connected fine but shows Finishing setup
Meta hasn't finished verifying the number itself, or the incoming-message subscription isn't active yet. Complete verification in WhatsApp Manager, then **Re-check**.
:::

::: details Sends fail with 412 channel_not_connected
No WhatsApp sender is connected, or the `sender_id` you passed doesn't exist. Call [`GET /channels`](/api/discovery) to see what your key can send from.
:::

::: details Sends fail with failed_precondition and channel_dormant
The workspace's plan no longer includes WhatsApp. After a downgrade the number is held for seven days so an upgrade restores it. Inbound messages are still saved during that time, but nothing is sent. See [Plans and limits](/operate/limits).
:::

::: details Setup says the number is already connected to another workspace
A number, and a WhatsApp Business Account, can only be connected to one workspace. Remove it from the other workspace first.
:::

## Go-live checklist

- [ ] The sender shows **Ready** or **Connected**, and **Readiness** has four green checks.
- [ ] **Verify a conversation** delivered a reply to your phone.
- [ ] The right agent is assigned, and you tested its answers in the playground.
- [ ] The [reply mode](/channels/whatsapp-reply-modes) matches how your team works.
- [ ] The business profile has a photo, an About line, a description and a website.
- [ ] The templates your systems will send are **approved**. See [Templates](/channels/whatsapp-templates).
- [ ] If you'll reply to tickets on WhatsApp, the Amomic-AI ticket template is approved or nominated.
- [ ] Your backend handles `409 session_window_closed` and `403 suppressed`.

## Next

::: cards

::: card Reply modes
[Always on, Smart or Off](/channels/whatsapp-reply-modes): decide when the agent answers and when your team does.
:::

::: card The 24-hour window
[The one WhatsApp rule](/channels/whatsapp-window) that decides whether your message sends or returns a 409.
:::

::: card Templates
[Write, submit and send](/channels/whatsapp-templates) the approved messages that reach customers outside the window.
:::

::: card Receive replies
[Webhooks](/webhooks/overview) push `message.received` and `message.status` to your backend.
:::

:::
