@chat-adapter/whatsapp
WhatsApp Business Cloud adapter for Chat SDK, using the WhatsApp Business Cloud API.
Installation
Usage
When using createWhatsAppAdapter() without arguments, credentials are auto-detected from environment variables.
WhatsApp Business setup
1. Create a Meta app
- Go to developers.facebook.com/apps
- Click Create App, select Business type
- Add the WhatsApp product to your app
- Go to WhatsApp > API Setup and note your Phone Number ID and Access Token
2. Configure webhooks
- Go to WhatsApp > Configuration in your Meta app
- Set Callback URL to
https://your-domain.com/api/webhooks/whatsapp - Set Verify Token to a secret string of your choice (this becomes
WHATSAPP_VERIFY_TOKEN) - Subscribe to the
messageswebhook field
3. Get credentials
From your Meta app dashboard, copy:
- App Secret (under App Settings > Basic) as
WHATSAPP_APP_SECRET - Access Token (under WhatsApp > API Setup) as
WHATSAPP_ACCESS_TOKEN - Phone Number ID (under WhatsApp > API Setup) as
WHATSAPP_PHONE_NUMBER_ID
For production, generate a permanent System User Token instead of the temporary access token.
Configuration
All options are auto-detected from environment variables when not provided. You can call createWhatsAppAdapter() with no arguments if the env vars are set.
*Required at runtime — either via config or environment variable.
Environment variables
Webhook setup
WhatsApp uses two webhook mechanisms:
- Verification handshake (GET) — Meta sends a
hub.verify_tokenchallenge that must match yourWHATSAPP_VERIFY_TOKEN. - Event delivery (POST) — incoming messages, reactions, and interactive responses, verified via
X-Hub-Signature-256.
Features
Messaging
Rich content
Conversations
Incoming message types
Message history
Interactive messages
Card elements are automatically converted to WhatsApp interactive messages:
- 3 or fewer buttons — rendered as WhatsApp reply buttons (max 20 chars per title)
- More than 3 buttons — falls back to formatted text
- Max body text — 1024 characters
Thread ID format
Example: whatsapp:1234567890:15551234567
Troubleshooting
Webhook verification failing
- Confirm
WHATSAPP_VERIFY_TOKENmatches the value you entered in the Meta dashboard - Ensure your endpoint returns the
hub.challengevalue for GET requests
Messages not arriving
- Check that you subscribed to the
messageswebhook field in Meta app settings - Verify
WHATSAPP_APP_SECRETis correct — signature verification silently rejects invalid payloads - Ensure your phone number is registered and verified in the WhatsApp Business dashboard
"Invalid signature" errors
- Double-check
WHATSAPP_APP_SECRETmatches the value under App Settings > Basic - The adapter uses HMAC-SHA256 to verify the
X-Hub-Signature-256header
Token expired
- Temporary tokens from the API Setup page expire after 24 hours
- For production, create a System User in Meta Business Suite and generate a permanent token
License
MIT