> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tai42.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# tools-whatsapp

> WhatsApp provisioning tools for the TAI ecosystem: manifest-loaded Meta Graph tools that register a WhatsApp message template, list the account's message templates, delete a message template by name, and subscribe the app to a WhatsApp Business Account's webhooks.

<Info>`Tool` plugin · listing `tai42/tools-whatsapp`</Info>

## Install

```bash theme={null}
tai plugins install tai42-tools-whatsapp
```

## Permissions

| Capability | Declared |
| ---------- | -------- |
| Network    | yes      |
| Subprocess | no       |
| Filesystem | no       |

## Provides

<h3 id="register-whatsapp-template">
  register\_whatsapp\_template
</h3>

`Tool` · group `message-templates` — Register a WhatsApp message template on the business account and return Graph's id and status.

<h3 id="list-whatsapp-templates">
  list\_whatsapp\_templates
</h3>

`Tool` · group `message-templates` — List every WhatsApp message template on the business account, following Graph's paging to exhaustion.

<h3 id="delete-whatsapp-template">
  delete\_whatsapp\_template
</h3>

`Tool` · group `message-templates` — Delete a WhatsApp message template by name and return Graph's response.

<h3 id="subscribe-whatsapp-app">
  subscribe\_whatsapp\_app
</h3>

`Tool` — Subscribe the app to the business account's webhooks, optionally overriding the callback URI and verify token, and return Graph's response.

Four tools that provision a WhatsApp Business Account through the Meta Graph API: register,
list and delete message templates, and subscribe the app to the account's webhooks. They talk
direct Graph REST through tai42-kit's curl client (no vendor SDK); the Graph host and pinned
API version ride the settings below. This page is the per-tool index and the settings.

## Configuration

| Variable                                | Default                            | Effect                                                                                             |
| --------------------------------------- | ---------------------------------- | -------------------------------------------------------------------------------------------------- |
| `CHANNEL_WHATSAPP_ACCESS_TOKEN`         | unset                              | Graph API bearer token. Missing or empty raises on every tool call.                                |
| `CHANNEL_WHATSAPP_WABA_ID`              | unset                              | WhatsApp Business Account id the endpoints hang under. Missing or empty raises on every tool call. |
| `CHANNEL_WHATSAPP_API_BASE_URL`         | `https://graph.facebook.com/v23.0` | Graph API origin with a pinned version.                                                            |
| `CHANNEL_WHATSAPP_HTTP_TIMEOUT_SECONDS` | `30`                               | Per-request HTTP timeout in seconds.                                                               |

The token and WABA id share the `CHANNEL_WHATSAPP_` env group with the rest of the WhatsApp
deployment; the access token is held as a secret and never appears in a log or a raised error.
Every non-2xx from Graph raises loudly with Graph's status and body — never a silent default.

## register\_whatsapp\_template

Registers a message template on the account and returns Graph's response (the template id and
review status). `components` is the Graph-shaped component list, passed through unchanged; `name`,
`language`, `category` and `components` are all required and non-empty.

## list\_whatsapp\_templates

Lists every message template on the account, following Graph's paging cursors to exhaustion, and
returns the concatenated entries.

## delete\_whatsapp\_template

Deletes a message template by name (percent-encoded into the query) and returns Graph's response.

## subscribe\_whatsapp\_app

Subscribes the app to the account's webhooks. With both `callback_uri` and `verify_token` given it
sends Meta's override pair; with neither it subscribes to the app's configured webhook; supplying
exactly one of the two raises.
