tai42-tools-whatsapp
WhatsApp provisioning tools for the TAI ecosystem — manifest-loaded Meta Graph tools that register a message template, list the business account's message templates, delete a template by name, and subscribe the app to a WhatsApp Business Account's webhooks.
All Graph traffic is direct REST through tai42-kit's curl client (no vendor
SDK); the Graph host and pinned API version ride the settings below. The package
registers its tools through the tai42_app handle from tai42_contract.app and
never imports the skeleton.
The TAI ecosystem
TAI is an open-source runtime for MCP tools, agents, and workflows. A tool is a callable the host loads from a plugin manifest; this package supplies the WhatsApp provisioning tools. The ecosystem is open-ended, so this repo is these tools' own full doc home, and the documentation site covers the platform-level story:
- Tools concept: https://tai42.ai/concepts/tools
- Build a tool (author guide): https://tai42.ai/guides/authors/tool
- Ecosystem catalog: https://tai42.ai/reference/catalog
Install
Requires Python 3.13+. Install from PyPI into the environment that runs the server:
uv add tai42-tools-whatsapp
Or from source — clone this repo and add it as an editable dependency; the
tai42-* dependencies resolve in-tree from the workspace.
git clone https://github.com/tai42ai/tai42 # next to your app checkout
cd /path/to/your/app
uv add --editable ../tai42/plugins/tools-whatsapp
Catalog
| Tool | Description |
|---|---|
register_whatsapp_template |
Registers a message template on the account and returns Graph's id and review status. |
list_whatsapp_templates |
Lists every message template on the account, following Graph's paging cursors to exhaustion. |
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, optionally overriding the callback URI and verify token. |
Registering templates
register_whatsapp_template takes name, language, category, and a
Graph-shaped components list (all required and non-empty). components is
passed through unchanged — Graph validates its shape and rejects a malformed one
with its own error, which propagates. The tool returns Graph's response (the new
template's id and review status).
list_whatsapp_templates returns the concatenated data across every page,
following Graph's paging.next cursor until Graph stops sending one, so a long
template catalog is never silently truncated. delete_whatsapp_template takes a
single name, percent-encoded into the delete query.
Subscribing webhooks
subscribe_whatsapp_app subscribes the app to the account's webhooks. With both
callback_uri and verify_token supplied it overrides the app's configured
webhook with Meta's override_callback_uri + verify_token pair; with neither
it subscribes to the app's configured webhook. Supplying exactly one of the two
raises.
Configuration
| Setting | Env var | Default | Purpose |
|---|---|---|---|
| Access token | CHANNEL_WHATSAPP_ACCESS_TOKEN |
— | Graph API bearer token. Required. |
| Business account | CHANNEL_WHATSAPP_WABA_ID |
— | WhatsApp Business Account id the endpoints hang under. Required. |
| API base | CHANNEL_WHATSAPP_API_BASE_URL |
https://graph.facebook.com/v23.0 |
Graph API origin with a pinned version. |
| Request timeout | CHANNEL_WHATSAPP_HTTP_TIMEOUT_SECONDS |
30 |
Per-request HTTP timeout. |
The token and WABA id share the CHANNEL_WHATSAPP_ env group with the rest of
the WhatsApp deployment. Secrets live only in the environment; the access token
is held as a secret and never appears in a log or a raised error. A missing or
empty required credential raises loudly (fails closed), and every non-2xx from
Graph raises with Graph's status and body — never a silent default.
Development
uv venv --python 3.13
uv pip install --no-sources --extra dev --editable .
uv run --no-sync pytest --cov --cov-report=term-missing
uv run --no-sync ruff check .
uv run --no-sync ruff format --check .
uv run --no-sync pyright
License
Apache-2.0. See LICENSE and NOTICE.
Metadata
Release files for tai42-tools-whatsapp 1.1.9
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tai42_tools_whatsapp-1.1.9.tar.gz | 16.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tai42_tools_whatsapp-1.1.9-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 35.1 kB
Release files / tai42_tools_whatsapp-1.1.9.tar.gz
| Download URL | tai42_tools_whatsapp-1.1.9.tar.gz |
|---|---|
| Size | 16.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d07fc1217a25cff924d8c711e9122635a8f699dbfb8e69b80574c66a6b12561f
|
|
BLAKE2b-256 checksum How to use checksums |
10ecc7ebda49e94c37c9e4cb3e0c404e6af441c6a49d9d255d5ac2e5617467bb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / tai42_tools_whatsapp-1.1.9-py3-none-any.whl
| Download URL | tai42_tools_whatsapp-1.1.9-py3-none-any.whl |
|---|---|
| Size | 18.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
85bb9d50166492d35867d972c279c8aabb4fdfd2d1c1ea9eb24c160121efccc0
|
|
BLAKE2b-256 checksum How to use checksums |
444a36946a0356dda1c7f5284373f9928cdf5c1718eb27cf405374fdf0f8f498
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|