# API Reference
Source: https://docs.whatsable.app/api-reference/introduction
Whatsable API documentation — RESTful APIs for WhatsApp messaging. Choose Whatsable or Notifyer System.
Build WhatsApp-powered workflows with Whatsable's suite of APIs. Whether you're a developer integrating via REST or a business user connecting through Zapier, Make, or n8n — we've got you covered.
## Choose your API
Select the Whatsable product that matches your use case. Each API has distinct capabilities and authentication.
### Whatsable
Internal team messaging and business alerts. Unlimited WhatsApp messages with Zapier and Make integration.
POST
Send WhatsApp messages with optional attachments
### Notifyer System
Full business messaging platform with real-time chat, brand messaging, and two-way communication.
GET
Retrieve all templates for your account
POST
Send template-based messages to users
## Why Whatsable
Official WhatsApp Business API integration backed by Meta's technology partner approval.
Send customized messages in real-time with webhooks and event-driven workflows.
REST APIs for custom integrations, plus ready-made connectors for Zapier, Make, and n8n.
Alerts, confirmations, reminders, and team updates — all over WhatsApp.
## Connect your way
Integrate through no-code automation platforms or call our APIs directly.
Connect 6,000+ apps with pre-built Zaps. No coding required.
Build visual automation scenarios with drag-and-drop workflows.
Self-hosted or cloud workflows with full control over your automation.
RESTful endpoints with API keys. Full programmatic access for custom integrations.
## Get started
Choose [Whatsable](https://dashboard.whatsable.app/signup) or [Notifyer System](https://console.notifyer-systems.com/) based on your messaging needs.
Get your API key from the dashboard. See [Authentication](/authentication) for header format and request examples.
Use our API endpoints or follow the Zapier, Make, or n8n guides for no-code setup.
**Security:** Never expose API keys in client-side code or public repositories. Use environment variables and server-side requests only.
# Get Templates
Source: https://docs.whatsable.app/api-reference/notifier-system/templates/get-templates
/openapi/notifier-system-api.json get /api:AFRA_QCy/get_templates
Retrieve a list of all templates associated with your account
# Send Template Message
Source: https://docs.whatsable.app/api-reference/notifier-system/templates/send-template-message
/openapi/notifier-system-api.json post /api:hFrjh8a1/send_template_message_by_api
Send a template-based message to users via their phone numbers
# Send a WhatsApp message
Source: https://docs.whatsable.app/api-reference/whatsable/messages/send-a-whatsapp-message
/openapi/whatsable-api.json post /send
Send a WhatsApp message with optional attachments (images, videos, documents)
# Authentication
Source: https://docs.whatsable.app/authentication
Authenticate with Whatsable APIs using API keys, Bearer tokens, and request headers.
# Authentication
All Whatsable APIs require authentication using API keys. This guide explains how to authenticate your requests.
## API Keys
Each API solution uses a different authentication method:
### Whatsable API
Uses an API key in the `X-API-Key` header:
```bash theme={null}
curl -X POST https://api.whatsable.app/v1/messages \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"to": "+1234567890", "message": "Hello!"}'
```
### Notifyer System
Uses a Bearer token in the Authorization header:
```bash theme={null}
curl -X POST https://api.insightssystem.com/api:hFrjh8a1/send_template_message_by_api \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"template": "template_id", "variables": {}, "phone_number": "+1234567890"}'
```
## Getting Your API Keys
1. Log in to your Whatsable dashboard
2. Navigate to the API section
3. Generate a new API key or token
4. Store it securely - it won't be shown again!
## Security Best Practices
* Never share your API keys
* Use environment variables to store keys
* Rotate keys periodically
* Use HTTPS for all API requests
* Implement proper error handling
# Error Handling
Source: https://docs.whatsable.app/guides/error-handling
Handle errors when using Whatsable APIs: HTTP status codes, error format, and retry strategies.
# Error Handling
This guide explains how to handle errors when using Whatsable APIs.
## HTTP Status Codes
All Whatsable APIs use standard HTTP status codes:
* `200 OK`: Request successful
* `400 Bad Request`: Invalid request parameters
* `401 Unauthorized`: Invalid or missing API key
* `403 Forbidden`: Insufficient permissions
* `404 Not Found`: Resource not found
* `429 Too Many Requests`: Rate limit exceeded
* `500 Internal Server Error`: Server-side error
## Error Response Format
All error responses follow this format:
```json theme={null}
{
"error": {
"code": "error_code",
"message": "Human-readable error message"
}
}
```
## Common Error Codes
### Authentication Errors
* `invalid_api_key`: API key is invalid or expired
* `missing_api_key`: API key is missing from request
### Request Errors
* `invalid_phone_number`: Phone number format is incorrect
* `invalid_template`: Template ID is invalid or not found
* `missing_required_field`: Required field is missing
* `invalid_variables`: Template variables are invalid
### Rate Limit Errors
* `rate_limit_exceeded`: Too many requests in a time period
* `quota_exceeded`: Monthly quota exceeded
## Best Practices
1. **Always Check Status Codes**: Don't assume success
2. **Implement Retry Logic**: For 429 and 500 errors
3. **Log Errors**: For debugging and monitoring
4. **Handle Timeouts**: Set appropriate timeout values
5. **Validate Input**: Before making API calls
## Example Error Handling
```javascript theme={null}
async function sendMessage() {
try {
const response = await fetch('https://api.insightssystem.com/api:hFrjh8a1/send_template_message_by_api', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_TOKEN'
},
body: JSON.stringify({
template: 'template_id',
variables: {},
phone_number: '+1234567890'
})
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error.message);
}
const data = await response.json();
return data;
} catch (error) {
console.error('Error sending message:', error);
// Handle error appropriately
}
}
```
# Embedding Process
Source: https://docs.whatsable.app/guides/notifier-system/embedding-process
Connect your WhatsApp Business Account to the Notifyer System to enable automated messaging capabilities
# WhatsApp Business Account Integration
## Overview
Notifyer System enables businesses to send automated WhatsApp messages to customers through a direct integration with the WhatsApp Business Platform. This guide walks you through the embedding process to connect your WhatsApp Business Account with Notifyer System.
This process uses Meta's Embedded Signup flow, which allows you to create or connect your WhatsApp Business Account directly within Notifyer System.
## Prerequisites
Active Notifyer System account with a subscription plan or pay-as-you-go credit
Meta Business Portfolio (or willingness to create one during the process)
A business phone number you control. If that number already uses the **WhatsApp Business app**, keep the app — Notifyer supports Meta WhatsApp Coexistence
Coexistence applies to the **WhatsApp Business app**. You do **not** delete that app to work with Notifyer. If the number is on the consumer WhatsApp app instead, migrate it to WhatsApp Business or use a different number.
## Integration Process
1. Log in to your Notifyer System dashboard
2. Navigate to **Your Templates** section
3. Make sure you're on the **Connect to WhatsApp** tab
4. Click the **Connect your WhatsApp Number** button in the center of the page
You can track your progress through the onboarding process using the steps indicator in the bottom-left corner of the screen.
1. Log in with your Facebook account when prompted
2. If already logged in, click **Continue as \[your Facebook username]**
3. Review the permissions Notifyer System is requesting
4. Click **Get Started** to begin the configuration process
Select an existing business portfolio or create a new one
If you choose to create a new business portfolio, fill out the required fields:
Your official business name (must be unique among your portfolios)
A valid email that can receive verification messages
Your business website URL or social media profile
Country where your business is located
Choose a business portfolio you've already configured in Meta Business Suite
See how to [create a business portfolio in Meta Business Suite and Business Manager.](https://www.facebook.com/business/help/1710077379203657)
If you select an existing portfolio, your business name, website, and country will be automatically populated from your Meta Business configuration.
Select whether to create a new account or use an existing one
**Recommended** for first-time users (default option)
Only available if you have existing WhatsApp Business accounts
Select whether to create a new profile or use an existing one
**Recommended** for first-time users (default option)
Only available if you connect an existing WhatsApp Business profile
The internal name of your account (used for management purposes)
The name your customers will see when receiving messages from your business
This is the name your customers will see when receiving messages from your business. Choose carefully as it impacts brand recognition.
Business category that best represents your industry (will be displayed on your profile)
Choose how to add your phone number
Use your own business phone number
WhatsApp will generate a +1 555 number (limited functionality)
Choose how to receive your verification code
Receive verification code via SMS
Receive verification code via automated call
Enter the verification code received via your selected method
1. After verification, you'll see a "You're now ready to chat with people on WhatsApp" screen
2. Click the **Add Payment Method** button
3. You'll be redirected to the Facebook Business "Billing & Payments" page
4. Select "Payment Methods" from the left menu
5. Ensure you're on the "WhatsApp Business accounts" tab
6. Select your WhatsApp account from the dropdown (verify WhatsApp account ID)
7. Click "Add Payment Method" and provide the required information
8. Set your payment method as the default option
This step is critical for ensuring you can send messages without restrictions. Unverified businesses may experience limited functionality.
1. Navigate to Settings in your Facebook Business Manager
2. Select "WhatsApp accounts" under the "Accounts" section
3. Scroll down to the "Business verification" section
4. Click "Start verification" to access the Security Center
5. Complete the business verification process by providing the requested business information and documentation
## Account Dashboard Overview
Once your WhatsApp Business Account is connected, you'll have access to the following tabs in the "Your Templates" section:
Connect your WhatsApp Business Account using the "Sign up with Facebook" option
Design message templates and submit them to Meta for approval
View, manage, and monitor the approval status of your message templates
## Integration Options
After successfully embedding your WhatsApp Business Account, you can integrate Notifyer System with your preferred automation platform:
Connect Notifyer System with Make to create powerful automation workflows.
[View Make Documentation →](https://docs.whatsable.app/guides/notifier-system/make-overview)
Integrate with Zapier to connect WhatsApp messaging with thousands of applications.
[View Zapier Documentation →](https://docs.whatsable.app/guides/notifier-system/zapier-overview)
Use n8n for advanced workflow automation with WhatsApp messaging.
[View n8n Documentation →](https://docs.whatsable.app/guides/notifier-system/n8n-overview)
Implement custom integrations using our comprehensive API.
[Try API Reference →](https://docs.whatsable.app/api-reference/introduction)
## API Reference
Retrieve all your approved message templates
Send messages using your approved templates
Handle incoming messages from customers
Experiment with the Get Templates API and view responses in real-time
## Alternative Option: Notifier
If the embedding process is too complex for your needs, you can use Notifier by Whatsable instead, which allows you to send automated messages through our WhatsApp bot without going through the full embedding process.
Discover a simpler way to send automated WhatsApp messages using Notifier by Whatsable
## Troubleshooting
If your phone number verification fails:
1. You do **not** need to delete the WhatsApp Business app. Coexistence is supported — keep using that app on your phone
2. Wait 24 hours before trying again with the same number
3. Try a different verification method (SMS vs. call)
4. Contact support if issues persist
If you encounter problems with business verification:
1. Ensure all business information is accurate and matches official documents
2. Provide clear, high-quality images of requested documentation
3. Allow 1-2 business days for verification review
4. Submit an appeal if verification is rejected
## Resources
Manage your Meta business profiles and portfolios
Learn more about the WhatsApp Business Platform
Meta's official documentation on embedded signup
## Need help?
Our support team is ready to assist you:
Contact [team@whatsable.app](mailto:team@whatsable.app)
Book a personalized walkthrough
Click the chat button in the bottom right corner of the Notifyer System dashboard
# Notifier System Features
Source: https://docs.whatsable.app/guides/notifier-system/features
Explore the enterprise features of Notifier System
# Notifier System Features
Notifier System provides comprehensive enterprise-grade features for WhatsApp messaging.
## Core Features
### Message Types
* Text messages
* Media messages (images, documents, audio, video)
* Location sharing
* Contact sharing
* Interactive messages
* List messages
* Button messages
* Product messages
* Order messages
### Message Management
* Message status tracking
* Delivery receipts
* Read receipts
* Message history
* Message templates
* Bulk messaging
* Scheduled messages
* Priority queuing
* Message routing
### Security
* End-to-end encryption
* API key authentication
* Rate limiting
* IP whitelisting
* Two-factor authentication
* Audit logs
* Data encryption at rest
* Compliance monitoring
## Enterprise Features
### Multi-tenant Support
* Multiple business units
* Separate message queues
* Custom branding
* Independent analytics
* Role-based access
### Advanced Templates
* Pre-approved message templates
* Dynamic variables
* Multi-language support
* Template analytics
* Template versioning
* Template approval workflow
* Template categories
### Automation
* Workflow automation
* Conditional messaging
* Event-based triggers
* Custom webhooks
* Integration with third-party services
* Business rules engine
* Custom scripting
### Analytics
* Message delivery rates
* Response times
* User engagement
* Template performance
* Custom reports
* Real-time dashboards
* Export capabilities
* API access
## Best Practices
### Enterprise Setup
* Define clear workflows
* Set up proper monitoring
* Implement security measures
* Configure backup systems
* Document processes
### Message Strategy
* Use approved templates
* Implement proper error handling
* Monitor message status
* Follow WhatsApp guidelines
* Regular template updates
* A/B testing
* Performance optimization
## Next Steps
* Learn about [Integrations](/guides/notifier-system/integrations)
* Explore [Enterprise Features](/guides/notifier-system/enterprise/security)
* Check out our [API Reference](/api-reference/notifier-system)
* Read our [Getting Started](/guides/notifier-system/getting-started) guide
# Getting Started with Notifier System
Source: https://docs.whatsable.app/guides/notifier-system/getting-started
Learn how to get started with Notifier System, the flagship WhatsApp messaging solution
# Getting Started with Notifier System
Notifier System is our flagship WhatsApp messaging solution, designed for enterprise-level communication needs.
## Prerequisites
* WhatsApp Business API account
* Business verification
* Technical team for integration
* Understanding of enterprise messaging
* Your Notifier System API credentials
## Quick Setup
1. Contact our sales team for enterprise setup
2. Complete business verification
3. Set up your WhatsApp Business API account
4. Configure your Notifier System instance
5. Get your API credentials
6. Set up webhooks and monitoring
## First Message
Here's a quick example of sending your first message:
```bash theme={null}
curl -X POST https://api.notifiersystem.com/v1/messages \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "+1234567890",
"template": "enterprise_welcome",
"variables": {
"name": "John",
"company": "Enterprise Corp",
"department": "Sales"
},
"metadata": {
"campaign_id": "welcome_2024",
"segment": "enterprise",
"priority": "high"
}
}'
```
## Enterprise Features
* Multi-tenant support
* Role-based access control
* Advanced security features
* Custom integrations
* Enterprise-grade support
## Next Steps
* Learn about [Features](/guides/notifier-system/features)
* Explore [Integrations](/guides/notifier-system/integrations)
* Check out [Enterprise Features](/guides/notifier-system/enterprise/security)
* Review our [API Reference](/api-reference/notifier-system)
# Notifier System Integrations
Source: https://docs.whatsable.app/guides/notifier-system/integrations
Learn how to integrate Notifier System with your enterprise applications
# Notifier System Integrations
Integrate Notifier System with your enterprise tools and platforms.
## Available Integrations
### Enterprise Platforms
* Salesforce
* SAP
* Oracle
* Microsoft Dynamics
* ServiceNow
### CRM Systems
* Salesforce
* HubSpot
* Zoho CRM
* Pipedrive
* Microsoft Dynamics
* Custom CRM solutions
### E-commerce Platforms
* Shopify Plus
* Magento Enterprise
* SAP Commerce
* Oracle Commerce
* Custom e-commerce solutions
### Marketing Tools
* Adobe Marketing Cloud
* Salesforce Marketing Cloud
* Oracle Marketing Cloud
* HubSpot Enterprise
* Custom marketing platforms
## Custom Integration
### REST API
```javascript theme={null}
const axios = require('axios');
const sendEnterpriseMessage = async (message) => {
try {
const response = await axios.post(
'https://api.notifiersystem.com/v1/messages',
message,
{
headers: {
'Authorization': `Bearer ${process.env.NOTIFIER_SYSTEM_API_KEY}`,
'Content-Type': 'application/json',
'X-Tenant-ID': process.env.TENANT_ID
}
}
);
return response.data;
} catch (error) {
console.error('Error sending message:', error);
throw error;
}
};
```
### Webhooks
Configure webhooks for enterprise-level monitoring:
```json theme={null}
{
"event": "message.status",
"data": {
"message_id": "msg_123",
"status": "delivered",
"template": "enterprise_welcome",
"variables": {
"name": "John",
"company": "Enterprise Corp",
"department": "Sales"
},
"metadata": {
"campaign_id": "welcome_2024",
"segment": "enterprise",
"priority": "high"
},
"timestamp": "2024-03-20T10:00:00Z"
}
}
```
## Enterprise Features
### Multi-tenant Support
* Separate API keys per tenant
* Custom webhook endpoints
* Tenant-specific templates
* Independent analytics
* Custom branding
### Security
* IP whitelisting
* API key rotation
* Audit logging
* Data encryption
* Compliance monitoring
### Monitoring
* Real-time status
* Error tracking
* Performance metrics
* Usage analytics
* Cost tracking
## Best Practices
### Integration
* Use environment variables
* Implement retry logic
* Handle rate limits
* Monitor webhook delivery
* Use template variables
* Implement proper error handling
* Set up monitoring
* Regular security audits
### Development
* Follow API guidelines
* Use SDK when available
* Test thoroughly
* Document integration
* Version control
* CI/CD pipeline
* Regular updates
## Next Steps
* Read our [Getting Started](/guides/notifier-system/getting-started) guide
* Explore [Features](/guides/notifier-system/features)
* Check out [Enterprise Features](/guides/notifier-system/enterprise/security)
* Review our [API Reference](/api-reference/notifier-system)
# Make
Source: https://docs.whatsable.app/guides/notifier-system/make-overview
Learn how to seamlessly integrate Make with the Notifyer System for enterprise-level WhatsApp automation
# Notifyer System Integration with Make
This guide walks you through connecting Notifyer System with Make to create powerful automated WhatsApp messaging workflows for your business
## Prerequisites
Before getting started, make sure you have:
Active Notifyer System account with a subscription plan (Monthly or Pay-as-you-go)
Access to [Make](https://www.make.com/en/register) workflow automation platform
New to Notifyer System? [Sign up here](https://console.notifyer-systems.com/)
## Setting up your Notifyer System account
Before sending WhatsApp messages, you must complete the platform embedding process, which connects your WhatsApp Business account to Notifyer System.
The embedding process is required by Meta to ensure proper business verification and compliance with WhatsApp Business Platform policies.
Notifyer System provides two methods for sending WhatsApp messages:
WhatsApp templates are pre-approved message formats that allow for personalization while maintaining compliance with WhatsApp policies.
Go to **Your Templates** in your Notifyer dashboard
Click the **Create Template** tab at the top of the page
Complete the template creation form with the following details:
Choose a descriptive name for internal reference
Choose your template's primary language
Select the appropriate message category
Optional: Add an image, document, or video header
Craft your message content
Add placeholders using `{{1}}`, `{{2}}` format for personalization
Optional: Configure call-to-action buttons
Click **Preview and Submit**
Templates typically get reviewed within 24 hours. Creating compliant templates that avoid promotional language increases approval chances.
For simpler communications, you can send non-template messages that include:
Plain text messages within the 24-hour window
Photos and graphics in supported formats
PDFs, Word docs, and other file types
MP4 and other supported video formats
Non-template messages can only be sent within the 24-hour customer service window after a customer initiates contact with your business.
To connect Notifyer System with Make, you'll need an API key:
1. In your Notifyer dashboard, navigate to [**API Keys**](https://console.notifyer-systems.com/api-key)
2. Copy your unique API key
3. Store it securely—you'll need it for the integration
Never share your API key publicly or commit it to version control systems.
## Connect Notifyer System to Make
Now that you have Notifyer System set up, let's connect it to Make to automate your scenarios.
1. Log in to your Make account
2. Navigate to Notifyer System dashboard and select **Connect to Make** in the side menu
3. Click **Continue** in the connection guide popup
4. Click **Install**, select your organization at the bottom of the screen, then click **Install** again. (Note: You need Admin, Owner, or App Developer role in your organization to install apps.)
You're now ready to create scenarios with the Notifyer System app
1. Log in to your Make account
2. Create a new scenario by clicking **+ Create a new scenario**
3. (Optional) Add a trigger module of your choice:
* Popular triggers include Google Forms, Jotform, ClickUp, or a Schedule trigger
* Connect and configure your trigger according to your use case
1. Click the **+** button to add a new module
2. Search for **Notifyer System** in the apps or modules library
3. Select the module with the official Notifyer System logo
1. Once you click on Notifyer System module, select '**Send a WhatsApp Message with Your Template**' or '**Send a WhatsApp Message without Template**' from the **ACTIONS**
2. Click **Create a connection** in the **Connection** section of Notifyer System module and you will be prompted to enter your API Key
3. Enter your Notifyer System API key that you copied earlier
4. Rename your connection name if needed
5. Click **Save** to store your credential
Depending on your messaging needs, choose one of the following operations:
Complete the required fields:
Enter the recipient's phone number with country code (e.g., +1234567890) or use dynamic data from previous nodes
Select from your pre-approved templates in the dropdown
Enter publicly accessible media URL for Media (image/video/document) header.
This field will only appear if you have a Media (image/video/document) header configured in your selected template.
Fill in values for each variable in your template, mapping them to dynamic data when applicable
Add note for internal tracking. This data won't be sent to the recipient
Select label(s) for internal tracking. This data won't be sent to the recipient
Complete the required fields:
Enter the recipient's phone number with country code (e.g., +1234567890) or use dynamic data from previous nodes
Choose from the following message types:
For plain text messages
For sending images (JPEG, PNG, etc.)
For sending videos (MP4, 3GP, etc.)
For sending documents (PDF, Word, etc.)
For sending videos (MP3, OGG, etc.)
For messages with button that contain URL or dynamic URL
Keep the option at the default 'No'. If there is a link/URL in the text body and you want the recipient to see a preview, select 'Yes'
Enter the text message content
Enter the publicly accessible URL for your image file
Optional caption for the image
Enter the publicly accessible URL for your video file
Optional caption for the video
Enter the publicly accessible URL for your document
Optional caption for the document
Enter the filename (e.g., report.pdf)
Enter the publicly accessible URL for your audio file (MP3, OGG)
Enter optional text to show at the top
Enter the main content of the message
Enter the text to display on button
Enter the URL for the button
Enter the optional text to show at bottom
Select label(s) for internal tracking. This data won't be sent to the recipient
1. Click **Save** to save your message configuration
2. Right click on the Whatsable module and select **Run this module only** to verify the module is working correctly
* or click **Run once** in the bottom-left corner of the screen to test the entire scenario
3. If the test is successful, you'll see a confirmation message
4. Click **Save** icon in the bottom-left corner to save your scenario (You can also set timer intarval for the scenario)
5. Toggle the **Active** switch in the bottom-left corner with time to activate your scenario
## Example use cases
Send automatic order confirmations when new orders are placed
Schedule reminders before upcoming appointments
Alert your sales team when new leads come in
Route support inquiries to the appropriate team member
Keep customers informed about their delivery status
Send automatic payment reminders for overdue accounts
## Best practices
Always test your workflows with test phone numbers before activating them for production use.
Whenever possible, use pre-approved templates for better deliverability and compliance.
Include customer names and specific details to increase engagement and response rates.
Ensure all message content complies with WhatsApp Business policies to avoid account restrictions.
Regularly check your message delivery rates in your Notifyer dashboard.
## Troubleshooting
Ensure your API key is entered correctly in the Make credentials
Confirm phone numbers are in the correct international format (e.g., +14155552671)
Verify your Notifyer subscription is active and has available credits
For template messages, ensure you're using an approved template
Verify all required variables are included in your template message
Check that variable formats match the expected values (text, number, date, etc.)
Ensure you're using the correct template name exactly as it appears in your dashboard
Confirm your media URLs are publicly accessible (test in an incognito browser)
Verify the file format is supported by WhatsApp
Check that file sizes are within WhatsApp limits:
* Images: up to 5MB
* Videos: up to 16MB
* Documents: up to 100MB
## Need help?
Our support team is ready to assist you:
Contact [team@whatsable.app](mailto:team@whatsable.app)
Book a personalized walkthrough
Click the green chat button in the bottom right corner of the Notifyer System dashboard
For additional automation platform integrations (Make.com, Zapier, etc.), please contact our support team or check our integration documentation.
# n8n
Source: https://docs.whatsable.app/guides/notifier-system/n8n-overview
Learn how to seamlessly integrate n8n with the Notifyer System for enterprise-level WhatsApp automation
# Notifyer System Integration with n8n
This guide walks you through connecting Notifyer System with n8n to create powerful automated WhatsApp messaging workflows for your business
## Prerequisites
Before getting started, make sure you have:
Active Notifyer System account with a subscription plan (Monthly or Pay-as-you-go)
Access to [n8n](https://app.n8n.cloud/login) workflow automation platform
New to Notifyer System? [Sign up here](https://console.notifyer-systems.com/)
## Setting up your Notifyer System account
Before sending WhatsApp messages, you must complete the platform embedding process, which connects your WhatsApp Business account to Notifyer System.
The embedding process is required by Meta to ensure proper business verification and compliance with WhatsApp Business Platform policies.
Notifyer System provides two methods for sending WhatsApp messages:
WhatsApp templates are pre-approved message formats that allow for personalization while maintaining compliance with WhatsApp policies.
Go to **Your Templates** in your Notifyer dashboard
Click the **Create Template** tab at the top of the page
Complete the template creation form with the following details:
Choose a descriptive name for internal reference
Choose your template's primary language
Select the appropriate message category
Optional: Add an image, document, or video header
Craft your message content
Add placeholders using `{{1}}`, `{{2}}` format for personalization
Optional: Configure call-to-action buttons
Click **Preview and Submit**
Templates typically get reviewed within 24 hours. Creating compliant templates that avoid promotional language increases approval chances.
For simpler communications, you can send non-template messages that include:
Plain text messages within the 24-hour window
Photos and graphics in supported formats
PDFs, Word docs, and other file types
MP4 and other supported video formats
Non-template messages can only be sent within the 24-hour customer service window after a customer initiates contact with your business.
To connect Notifyer System with n8n, you'll need an API key:
1. In your Notifyer dashboard, navigate to [**API Keys**](https://console.notifyer-systems.com/api-key)
2. Copy your unique API key
3. Store it securely—you'll need it for the integration
Never share your API key publicly or commit it to version control systems.
## Integrating with n8n
1. Log in to your n8n account
2. Create a new workflow by clicking **Create Workflow**
3. Add a trigger node of your choice:
* Popular triggers include Google Forms, Jotform, ClickUp, or a Schedule trigger
* Connect and configure your trigger according to your use case
The Whatsable trigger node enables your workflow to respond automatically to incoming WhatsApp messages. This setup is optional but recommended for building reactive communication flows.
Follow these steps to add the Whatsable trigger node to your workflow:
1. Click the **+** button in your workflow canvas to add a new node
2. Search for "Whatsable" in the node library search bar
3. Select the node displaying the official Whatsable logo
4. From the available trigger options, choose **On new Incoming message event**
The trigger node will automatically listen for incoming messages and initiate your workflow when a new message is received.
Set up your Whatsable API credentials to establish a secure connection:
**Webhook URL Configuration:**
1. In the Whatsable Trigger node parameters, locate the **Webhook URLs** section at the top
2. Select **Production URL** and copy the generated URL by clicking on it
3. Store this URL securely as you'll need it for the credential setup
**Credential Creation:**
1. In the **Credential to connect with** dropdown, click **+ Create new credential**
2. Select **Whatsable Notifyer System API** as your connection method
3. Enter your Notifyer System API key in the **API Key** field
4. Paste the Production URL you copied earlier into the **Production URL** field
5. Assign a descriptive name to your credential (e.g., "Whatsable Production")
6. Click **Save** to securely store your credentials
Your API credentials are encrypted and stored securely. Never share your API key publicly or commit it to version control.
Complete the setup by testing and activating your trigger:
**Response Configuration:**
1. In the **Respond** dropdown, select your preferred response timing:
* **Immediately**: Responds as soon as the trigger fires
* **When Last Node Finishes**: Waits for the entire workflow to complete before responding
**Testing:**
1. Click **Execute step** on the Whatsable node to run a test
2. Verify the connection is working by checking for a success confirmation
3. Review any error messages if the test fails and adjust your configuration accordingly
Once activated, your workflow will automatically process incoming messages according to your configured logic.
Remember to test your workflow thoroughly before activating it in production to ensure it behaves as expected.
1. Click the **+** button after your trigger node
2. Search for "Whatsable" in the nodes panel
3. Select the node with the official Whatsable logo
4. After selecting the Whatsable node, choose 'Send template via Notifyer' or 'Send non-template via Notifyer' as needed.
1. In the Whatsable node **Parameters**, find the **Credential to connect with** dropdown
2. Select **+ Create new credential**
3. Enter your Notifyer System API key that you copied earlier
4. Name your credential (e.g., "Notifyer Production")
5. Click **Save** to store your credential
1. In **Resource** dropdown, select **Send Message**
2. In the **Operation** dropdown, choose **Send template via Notifyer** for template messages or **Send non‑template via Notifyer** for regular messages (only works within the 24‑hour window).
3. Complete the required fields:
Complete the required fields:
Enter the recipient's phone number with country code (e.g., +14155552671) or use dynamic data from previous nodes
Select from your pre-approved templates in the dropdown
Based on your selected Template message type, fill in the required fields:
* For text messages: Enter your message content
* For media messages: Provide a publicly accessible URL to your file
* Optional caption (for media files)
For all media types, ensure your file URLs are publicly accessible and match the supported file formats.
(Optional) Include a note in the template message for internal tracking
(Optional) Select the label(s) you created in Chat Notifyer for internal tracking
(Optional) Select the date and time to schedule when your message will be sent
Enter the **Phone Number** with country code
Choose from the following message types:
For plain text messages
For sending documents (PDF, Word, etc.)
For sending images (JPEG, PNG, etc.)
For sending videos (MP4, 3GP, etc.)
Based on your selected message type, fill in the required fields:
* For text messages: Enter your message content
* For media messages: Provide a publicly accessible URL to your file
* Optional caption (for media files)
For all media types, ensure your file URLs are publicly accessible and match the supported file formats.
(Optional) Select the label(s) you created in Chat Notifyer for internal tracking
(Optional) Select the date and time to schedule when your message will be sent
1. Click **Test Step** on the Notifyer node to verify it's working correctly
2. If the test is successful, you'll see a confirmation message
3. Return to your workflow
4. Click **Save** to save your entire workflow
5. Toggle the **Active** switch in the top-right corner to activate your workflow
Your automated messaging workflow is now operational! Whenever your trigger conditions are met, n8n will automatically send WhatsApp messages through Notifyer System.
## Example use cases
Send automatic order confirmations when new orders are placed
Schedule reminders before upcoming appointments
Alert your sales team when new leads come in
Route support inquiries to the appropriate team member
Keep customers informed about their delivery status
Send automatic payment reminders for overdue accounts
## Best practices
Always test your workflows with test phone numbers before activating them for production use.
Whenever possible, use pre-approved templates for better deliverability and compliance.
Include customer names and specific details to increase engagement and response rates.
Ensure all message content complies with WhatsApp Business policies to avoid account restrictions.
Regularly check your message delivery rates in your Notifyer dashboard.
## Troubleshooting
Ensure your API key is entered correctly in the n8n credentials
Confirm phone numbers are in the correct international format (e.g., +14155552671)
Verify your Notifyer subscription is active and has available credits
For template messages, ensure you're using an approved template
Verify all required variables are included in your template message
Check that variable formats match the expected values (text, number, date, etc.)
Ensure you're using the correct template name exactly as it appears in your dashboard
Confirm your media URLs are publicly accessible (test in an incognito browser)
Verify the file format is supported by WhatsApp
Check that file sizes are within WhatsApp limits:
* Images: up to 5MB
* Videos: up to 16MB
* Documents: up to 100MB
## Need help?
Our support team is ready to assist you:
Contact [team@whatsable.app](mailto:team@whatsable.app)
Book a personalized walkthrough
Click the green chat button in the bottom right corner of the Notifyer dashboard
For additional automation platform integrations (Make.com, Zapier, etc.), please contact our support team or check our integration documentation.
# Pipedrive
Source: https://docs.whatsable.app/guides/notifier-system/pipedrive-overview
Learn how to seamlessly integrate Pipedrive with the Notifyer System for automated WhatsApp messaging
# Notifyer System Integration with Pipedrive
This guide walks you through connecting Notifyer System with Pipedrive to create powerful automated WhatsApp messaging workflows for your sales and CRM processes
## Prerequisites
Before getting started, make sure you have:
Active Notifyer System account with a subscription plan (Monthly or Pay-as-you-go)
Access to [Pipedrive](https://www.pipedrive.com/) CRM platform
New to Notifyer System? [Sign up here](https://console.notifyer-systems.com/)
## Setting up your Notifyer System account
Before sending WhatsApp messages, you must complete the platform [embedding process](/guides/notifier-system/embedding-process), which connects your WhatsApp Business account to Notifyer System.
The embedding process is required by Meta to ensure proper business verification and compliance with WhatsApp Business Platform policies.
Notifyer System provides two methods for sending WhatsApp messages:
WhatsApp templates are pre-approved message formats that allow for personalization while maintaining compliance with WhatsApp policies.
Go to **Your Templates** in your Notifyer dashboard
Click the **Create Template** tab at the top of the page
Complete the template creation form with the following details:
Choose a descriptive name for internal reference
Choose your template's primary language
Select the appropriate message category
Optional: Add an image, document, or video header
Craft your message content
Add placeholders using `{{1}}`, `{{2}}` format for personalization
Optional: Configure call-to-action buttons
Click **Preview and Submit**
Templates typically get reviewed within 24 hours. Creating compliant templates that avoid promotional language increases approval chances.
For simpler communications, you can send non-template messages that include:
Plain text messages within the 24-hour window
Photos and graphics in supported formats
PDFs, Word docs, and other file types
MP4 and other supported video formats
Non-template messages can only be sent within the 24-hour customer service window after a customer initiates contact with your business.
Follow these simple steps to integrate your Pipedrive account with Notifyer System:
In your Notifyer dashboard, go to [**Connect to Pipedrive**](https://console.notifyer-systems.com/pipedrive).
Click the 'Connect Pipedrive Organization' button.
You'll be redirected to Pipedrive's authorization page. Review the permissions and click 'Authorize' to grant Notifyer System access to your Pipedrive organization.
After authorization, you'll be automatically redirected back to your Notifyer System dashboard. Look for the connection status showing 'Connected to Pipedrive' to confirm the integration was successful.
## Sending WhatsApp Messages from Pipedrive
Whatsable's integration with Pipedrive allows you to send WhatsApp messages directly from your deals and contacts without leaving your CRM. This guide will walk you through the complete process.
### Verifying Prerequisites
Before sending WhatsApp messages, ensure the following requirements are met:
Must show as **PAID**
Must show as **ACTIVE**
Must be properly synced with Whatsable
You can verify these settings in the Whatsable Integration section of any deal or contact.
## Sending Messages from Deals
### Accessing the Whatsable Integration Panel
1. Go to your **Pipedrive Dashboard**
2. Open your desired **Pipeline**
3. Select a **Deal** from your pipeline
1. On the right-hand panel, scroll down past the Summary section
2. Find the **Whatsable Integration** section
### Understanding the Integration Panel
The Whatsable Integration panel displays important connection information:
Confirms your subscription is active
Shows which WhatsApp Business account is connected
Indicates if your WhatsApp connection is active
Displays the date and time of the most recent message
Provides a direct link to the conversation
### Sending Options
Within the Whatsable Integration section, you'll find a green **"Live Chat"** button with a dropdown menu offering three options:
Opens the Whatsable chat interface directly within Pipedrive
Schedule a message to be sent at a specific date and time
Send a pre-configured template message immediately
## Option 1: Send Scheduled Message
Use this option when you want to send a message at a specific future date and time.
1. Click the dropdown next to the **Live Chat** button
2. Select **"Send Scheduled Message"**
3. A modal window will appear with the following fields
The recipient's phone number(s) associated with the deal. This field is automatically populated from the deal's contact information.
Your connected WhatsApp Business account. This field is pre-filled and cannot be modified from this interface.
Choose from your pre-created message templates. These templates must be created beforehand in the **Notifyer by Whatsable** dashboard.
Once you select a template, all required placeholder fields will appear dynamically. Fill in each field carefully to personalize your message (e.g., customer name, appointment time, order details).
Select the exact date and time you want the message to be sent.
Specify the timezone from which you're scheduling the message to ensure accurate delivery timing.
Include an internal note for your team. This note is only visible within Pipedrive and helps with tracking and context.
Assign labels to categorize and organize your communications for easier filtering and reporting.
At the top of the modal, you'll see your **most recent messages** with this contact (if any previous conversations exist), providing helpful context before sending.
1. Review all information carefully
2. Click the **"Schedule Template"** button at the bottom of the modal
3. Your message is now scheduled and will be sent automatically at the specified time
Message successfully scheduled! It will be sent at the specified time.
## Option 2: Send Template (Immediate)
Use this option to send a pre-configured template message immediately without scheduling.
1. Click the dropdown next to the **Live Chat** button
2. Select **"Send Template"**
3. A modal window will appear with the following fields
The recipient's phone number(s) associated with the deal. This field is automatically populated from the deal's contact information.
Your connected WhatsApp Business account. This field is pre-filled and cannot be modified from this interface.
Choose from your pre-created message templates. These templates must be created beforehand in the **Notifyer by Whatsable** dashboard.
Once you select a template, all required placeholder fields will appear dynamically. Fill in each field carefully to personalize your message (e.g., customer name, product details, tracking numbers).
Include an internal note for your team. This note is only visible within Pipedrive and helps with tracking and context.
Assign labels to categorize and organize your communications for easier filtering and reporting.
At the top of the modal, you'll see your **most recent messages** with this contact (if any previous conversations exist), providing helpful context before sending.
1. Review all information carefully
2. Click the **"Send Template"** button at the bottom of the modal
3. Your message will be sent immediately
Message sent successfully!
## Sending Messages from Contacts
The process for sending WhatsApp messages from contacts is nearly identical to sending from deals, with minor differences noted below.
### Accessing the Whatsable Integration Panel
1. Go to your **Pipedrive Dashboard**
2. Navigate to the **Contacts** menu
3. Select your desired **Contact**
1. On the right-hand panel, scroll down past the Summary section
2. Find the **Whatsable Integration** section
### Understanding the Integration Panel
The Whatsable Integration panel displays the same connection information as in deals:
Confirms your subscription is active
Shows which WhatsApp Business account is connected
Indicates if your WhatsApp connection is active
Displays the date and time of the most recent message
Provides a direct link to the conversation
### Sending Options
The same three options are available:
Opens the Whatsable chat interface directly within Pipedrive
Schedule a message for a specific date and time
Send a template message immediately
**Key Difference**: Phone numbers are pulled from the contact's information rather than deal-specific numbers. All other fields and processes remain identical to sending from deals.
## Best Practices
**Before Sending Messages**
Always check that your WhatsApp connection shows as ACTIVE before attempting to send messages to avoid delivery failures.
**Template Management**
* Ensure your message templates are up-to-date in the Notifyer dashboard
* Test templates with yourself before using them with customers
* Create templates in advance for different scenarios
**Phone Number Verification**
* Confirm the recipient's phone number is correct
* Verify the number includes the country code (e.g., +1 for US)
* Update contact information if numbers are missing or incorrect
**Message Organization**
* Develop a clear labeling system for easier tracking
* Apply consistent labels across your team
* Use labels for reporting and analytics purposes
**Documentation Best Practices**
* Document the purpose of each message for future reference
* Include context that will help team members understand the communication
* Keep notes concise but informative
**Maintain Context**
* Always check conversation history before sending new messages
* Avoid sending duplicate or redundant information
* Ensure message continuity for better customer experience
**Timing Considerations**
* Consider your recipient's timezone when scheduling messages
* Avoid sending messages during off-hours or weekends unless necessary
* Set reminders to follow up if no response is received
**Template Creation**
* Make placeholder fields intuitive for anyone on your team
* Use descriptive variable names (e.g., customer\_name, order\_date)
* Test variable population before mass sending
## Troubleshooting
Reconnect your WhatsApp Business account in the Whatsable dashboard
Verify your WhatsApp Business account is properly configured
Contact Whatsable support if the issue persists after reconnection
Create templates in the Notifyer by Whatsable dashboard first
Ensure templates are approved by WhatsApp (if required for your template type)
Refresh your Pipedrive page after creating new templates to see them appear
Verify your WhatsApp connection was active at the scheduled time
Check that the timezone was set correctly when scheduling
Review the message logs in Whatsable for error details and delivery status
Ensure the contact or deal has a valid phone number in Pipedrive
Verify the phone number format includes the country code (e.g., +1234567890)
Update the contact information if the phone number is missing or incorrect
Ensure variable names in your template match the fields you're filling
Confirm the data source (contact or deal) has the required information
Send a test message to yourself to verify variable population before sending to customers
Confirm the recipient has an active WhatsApp account on that number
Ensure your message complies with WhatsApp's business messaging policies
Verify your Whatsable account has sufficient credits or an active subscription
If issues persist, contact Whatsable support with the message details
For more information about template creation and management, visit the Notifyer by Whatsable dashboard or contact our support team.
## Need help?
Our support team is ready to assist you:
Contact [team@whatsable.app](mailto:team@whatsable.app)
Book a personalized walkthrough
Click the green chat button in the bottom right corner of the Notifyer System dashboard
For additional automation platform integrations and advanced configurations, please contact our support team or check our integration documentation.
# Zapier
Source: https://docs.whatsable.app/guides/notifier-system/zapier-overview
Learn how to seamlessly integrate Zapier with the Notifyer System for enterprise-level WhatsApp automation
# Notifyer System Integration with Zapier
This guide walks you through connecting Notifyer System with Zapier to create powerful automated WhatsApp messaging workflows for your business
## Prerequisites
Before getting started, make sure you have:
Active Notifyer System account with a subscription plan (Monthly or Pay-as-you-go)
Access to [Zapier](https://zapier.com/sign-up/) workflow automation platform
New to Notifyer System? [Sign up here](https://console.notifyer-systems.com/)
## Setting up your Notifyer System account
Before sending WhatsApp messages, you must complete the platform embedding process, which connects your WhatsApp Business account to Notifyer System.
The embedding process is required by Meta to ensure proper business verification and compliance with WhatsApp Business Platform policies.
Notifyer System provides two methods for sending WhatsApp messages:
WhatsApp templates are pre-approved message formats that allow for personalization while maintaining compliance with WhatsApp policies.
Go to **Your Templates** in your Notifyer dashboard
Click the **Create Template** tab at the top of the page
Complete the template creation form with the following details:
Choose a descriptive name for internal reference
Choose your template's primary language
Select the appropriate message category
Optional: Add an image, document, or video header
Craft your message content
Add placeholders using `{{1}}`, `{{2}}` format for personalization
Optional: Configure call-to-action buttons
Click **Preview and Submit**
Templates typically get reviewed within 24 hours. Creating compliant templates that avoid promotional language increases approval chances.
For simpler communications, you can send non-template messages that include:
Plain text messages within the 24-hour window
Photos and graphics in supported formats
PDFs, Word docs, and other file types
MP4 and other supported video formats
Non-template messages can only be sent within the 24-hour customer service window after a customer initiates contact with your business.
To connect Notifyer System with Zapier, you'll need an API key:
1. In your Notifyer dashboard, navigate to [**API Keys**](https://console.notifyer-systems.com/api-key)
2. Copy your unique API key
3. Store it securely—you'll need it for the integration
Never share your API key publicly or commit it to version control systems.
## Connect Notifyer System to Zapier
Now that you have your Notifyer System account configured, let's connect it to Zapier to automate your messaging workflows.
1. Log in to your Zapier account
2. Navigate to Notifyer System dashboard and select **Connect to Zapier** in the side menu
3. Click **Continue** in the connection guide popup
4. Click **Accept & Build a Zap** on the invitation page
You're now ready to create Zaps with the Notifyer System app
1. Log in to your Zapier account
2. Create a new workflow/Zap by clicking **+ Create** and select **Zaps**/**New Zap**
3. Add a trigger step of your choice:
* Popular triggers include Google Forms, Jotform, ClickUp, or a Schedule trigger
* Connect and configure your trigger according to your use case
1. Select the next **Action** step or click the **+** button to add a new step
2. Search for "Notifyer System" in the apps and tools library
3. Select the app with the official Notifyer System logo
1. In the Notifyer System app Setup, select [**Send a WhatsApp Message with your template**](/guides/notifier-system/zapier-overview#template-messages) or [**Send WhatsApp Message Without Template**](/guides/notifier-system/zapier-overview#non-template-messages) in the **Action event** dropdown depending on your messaging needs
2. Click **Sign In** in the **Account** field and you will be prompted to enter your API Key
3. Enter your Notifyer System API key that you copied earlier
4. Click **Yes, Continue to Notifyer System** to store your credential
5. Next, click the **Continue** button in the Setup screen to proceed to the **Configure** section
Depending on your messaging needs, choose one of the following operations:
In the **Setup** section, select **Send a WhatsApp Message with your template** in the **Action event** dropdown and continue to the **Configure** section
Complete the required fields in the **Configure** section:
Select from your pre-approved templates in the dropdown
Enter the recipient's phone number with country code (e.g., +14155552671) or use dynamic data from previous nodes
Add note for internal tracking. This data won't be sent to the recipient
Select label(s) for internal tracking. This data won't be sent to the recipient
Enter publicly accessible media URL for Media (image/video/document) header.
This field will only appear if you have a Media (image/video/document) header configured in your selected template.
Fill in values for each Body(s) in your template, mapping them to dynamic data when applicable
Fill in values for each button in your template, mapping them to dynamic data when applicable.
This field(s) will only appear if you have configured button(s) in your selected template. You will see the button name as the field name.
Based on your selected message type, fill in the required fields:
* For text messages: Enter your message content
* For media messages: Provide a publicly accessible URL to your file
* Optional caption (for media files)
In the **Operation Name or ID** dropdown, select **Send Non Template Message**
Enter the **Phone Number** with country code
Choose from the following message types:
For plain text messages
For sending documents (PDF, Word, etc.)
For sending images (JPEG, PNG, etc.)
For sending videos (MP4, 3GP, etc.)
Based on your selected message type, fill in the required fields:
* For text messages: Enter your message content
* For media messages: Provide a publicly accessible URL to your file
* Optional caption (for media files)
For all media types, ensure your file URLs are publicly accessible and match the supported file formats.
1. Click **Continue** and then click **Test step** in the **Test** to verify it's working correctly
2. If the test is successful, you'll see a confirmation message
3. Click **Publish** to save your entire Zap
4. Toggle the **Active** switch in the top-left corner to activate your Zap
## Example use cases
Send a welcome message when a new customer signs up
Update customers when their order status changes
Automatically send reminders before scheduled appointments
Send personalized messages to new leads from your form submissions
Notify customers when their support ticket status changes
## Workflow Diagram
```mermaid theme={null}
flowchart LR
A[Trigger Step] --> B[Data Transformation]
B --> C[Notifyer System App]
C --> D{Message Sent?}
D -->|Yes| E[Success Path]
D -->|No| F[Error Handling]
E --> G[Additional Actions]
F --> H[Retry Logic]
```
## Example use cases
Send automatic order confirmations when new orders are placed
Schedule reminders before upcoming appointments
Alert your sales team when new leads come in
Route support inquiries to the appropriate team member
Keep customers informed about their delivery status
Send automatic payment reminders for overdue accounts
## Best practices
Always test your workflows with test phone numbers before activating them for production use.
Whenever possible, use pre-approved templates for better deliverability and compliance.
Include customer names and specific details to increase engagement and response rates.
Ensure all message content complies with WhatsApp Business policies to avoid account restrictions.
Regularly check your message delivery rates in your Notifyer dashboard.
## Troubleshooting
Ensure your API key is entered correctly in the Zapier credentials
Confirm phone numbers are in the correct international format (e.g., +14155552671)
Verify your Notifyer subscription is active and has available credits
For template messages, ensure you're using an approved template
Verify all required variables are included in your template message
Check that variable formats match the expected values (text, number, date, etc.)
Ensure you're using the correct template name exactly as it appears in your dashboard
Confirm your media URLs are publicly accessible (test in an incognito browser)
Verify the file format is supported by WhatsApp
Check that file sizes are within WhatsApp limits:
* Images: up to 5MB
* Videos: up to 16MB
* Documents: up to 100MB
## Need help?
Our support team is ready to assist you:
Contact [team@whatsable.app](mailto:team@whatsable.app)
Book a personalized walkthrough
Click the green chat button in the bottom right corner of the Notifyer System dashboard
For additional automation platform integrations (Make.com, n8n, etc.), please contact our support team or check our integration documentation.
# Message Analytics
Source: https://docs.whatsable.app/guides/notifier/advanced/analytics
Learn how to track and analyze your WhatsApp messages with Notifier by Whatsable
# Message Analytics
Track and analyze your WhatsApp messaging performance with comprehensive analytics.
## Key Metrics
### Message Performance
* Delivery rates
* Read rates
* Response rates
* Response times
* Error rates
### Template Performance
* Usage by template
* Success rates
* Response patterns
* Conversion rates
* Cost per message
### User Engagement
* Active users
* Message frequency
* Response patterns
* User segments
* Retention rates
## Analytics Dashboard
### Real-time Monitoring
```javascript theme={null}
// Example: Track message status
app.post('/webhook/message-status', async (req, res) => {
const { message_id, status, timestamp } = req.body;
await updateMessageStatus({
message_id,
status,
timestamp,
metrics: {
delivery_time: calculateDeliveryTime(message_id),
response_time: calculateResponseTime(message_id)
}
});
});
```
### Custom Reports
```javascript theme={null}
// Example: Generate daily report
async function generateDailyReport() {
const report = {
date: new Date(),
metrics: {
total_messages: await getTotalMessages(),
delivered_messages: await getDeliveredMessages(),
read_messages: await getReadMessages(),
response_rate: await calculateResponseRate(),
average_response_time: await calculateAverageResponseTime()
},
templates: await getTemplatePerformance(),
errors: await getErrorSummary()
};
return report;
}
```
## Data Export
### Export Formats
* CSV
* JSON
* Excel
* PDF
* API endpoints
### Export Options
* Date range
* Metrics selection
* Template filtering
* User segmentation
* Custom fields
## Best Practices
### Data Collection
* Track all relevant metrics
* Use consistent naming
* Validate data quality
* Store historical data
* Implement data retention
### Analysis
* Set clear KPIs
* Monitor trends
* Compare performance
* Identify patterns
* Make data-driven decisions
## Integration
### Third-party Tools
* Google Analytics
* Mixpanel
* Amplitude
* Custom dashboards
* Business intelligence tools
### API Access
```javascript theme={null}
// Example: Fetch analytics data
const getAnalytics = async (params) => {
const response = await axios.get(
'https://api.insightssystem.com/api:-GWQv5aM/analytics',
{
params,
headers: {
'Authorization': `Bearer ${process.env.NOTIFIER_API_KEY}`
}
}
);
return response.data;
};
```
## Next Steps
* Learn about [Templates](/guides/notifier/advanced/templates)
* Explore [Automation](/guides/notifier/advanced/automation)
* Check out our [API Reference](/api-reference/notifier)
* Read our [Getting Started](/guides/notifier/getting-started) guide
# Message Automation
Source: https://docs.whatsable.app/guides/notifier/advanced/automation
Learn how to automate your WhatsApp messages with Notifier by Whatsable
# Message Automation
Automate your WhatsApp messaging workflows to save time and improve efficiency.
## Workflow Types
### Event-Based Triggers
```javascript theme={null}
// Example: Send welcome message on user signup
app.post('/webhook/signup', async (req, res) => {
const { user } = req.body;
await sendTemplateMessage({
to: user.phone,
template: 'welcome_message',
variables: {
name: user.name,
company: 'Acme Inc'
}
});
});
```
### Scheduled Messages
```javascript theme={null}
// Example: Send appointment reminder
const schedule = require('node-schedule');
schedule.scheduleJob('0 9 * * *', async () => {
const appointments = await getTodaysAppointments();
for (const appointment of appointments) {
await sendTemplateMessage({
to: appointment.patient.phone,
template: 'appointment_reminder',
variables: {
name: appointment.patient.name,
time: appointment.time,
doctor: appointment.doctor.name
}
});
}
});
```
## Automation Features
### Conditional Logic
* If/else conditions
* Switch statements
* Multiple conditions
* Nested conditions
### Workflow Steps
1. Trigger
2. Conditions
3. Actions
4. Delays
5. Notifications
### Integration Points
* Webhooks
* API endpoints
* Database triggers
* Third-party services
## Best Practices
### Workflow Design
* Keep workflows simple
* Use clear naming conventions
* Document your workflows
* Test thoroughly
* Monitor performance
### Error Handling
* Implement retry logic
* Set up error notifications
* Log all actions
* Handle timeouts
* Validate inputs
## Monitoring
Track your automated workflows:
* Success rates
* Error rates
* Response times
* Resource usage
* Cost analysis
## Next Steps
* Learn about [Templates](/guides/notifier/advanced/templates)
* Explore [Analytics](/guides/notifier/advanced/analytics)
* Check out our [API Reference](/api-reference/notifier)
* Read our [Getting Started](/guides/notifier/getting-started) guide
# Message Templates
Source: https://docs.whatsable.app/guides/notifier/advanced/templates
Learn how to use and manage message templates in Notifier by Whatsable
# Message Templates
Message templates are pre-approved message formats that you can use to send WhatsApp messages to your customers.
## Template Types
### Text Templates
```json theme={null}
{
"name": "welcome_message",
"language": "en",
"category": "UTILITY",
"components": [
{
"type": "BODY",
"text": "Welcome to {{company}}! We're excited to have you on board, {{name}}."
}
]
}
```
### Media Templates
```json theme={null}
{
"name": "product_announcement",
"language": "en",
"category": "MARKETING",
"components": [
{
"type": "HEADER",
"format": "IMAGE",
"example": {
"header_url": ["https://example.com/image.jpg"]
}
},
{
"type": "BODY",
"text": "Check out our new product: {{product_name}}! Only {{price}} for a limited time."
},
{
"type": "BUTTON",
"sub_type": "URL",
"index": "0",
"parameters": [
{
"type": "text",
"text": "Shop Now"
}
]
}
]
}
```
## Template Management
### Creating Templates
1. Go to the Templates section in your dashboard
2. Click "Create New Template"
3. Choose the template type
4. Add your content and variables
5. Submit for approval
### Template Variables
* Use `{{variable_name}}` syntax
* Variables are case-sensitive
* Maximum 10 variables per template
* Supported types: text, currency, date, time
### Best Practices
* Keep templates concise
* Use clear variable names
* Test templates before submission
* Monitor template performance
* Update templates regularly
## Template Analytics
Track your template performance:
* Delivery rates
* Response rates
* Conversion rates
* User engagement
* Error rates
## Next Steps
* Learn about [Automation](/guides/notifier/advanced/automation)
* Explore [Analytics](/guides/notifier/advanced/analytics)
* Check out our [API Reference](/api-reference/notifier)
* Read our [Getting Started](/guides/notifier/getting-started) guide
# API Documentation
Source: https://docs.whatsable.app/guides/notifier/api-documentation
Notifier by Whatsable API Documentation
# API
# 📚 Notifier by Whatsable API Documentation
Welcome to the Notifier by Whatsable API Documentation! This guide provides comprehensive details on how to use the Notifier API to send WhatsApp messages programmatically. Below, you'll find information on the API endpoint, authentication, request and response structures, error handling, and supported attachment types.
***
## 🚀 API Overview
The Notifier API allows you to send WhatsApp messages, including text and attachments, to customers. It's designed to be simple and easy to integrate into your applications or workflows.
***
## 📌 API Endpoint
* **POST**: `https://api.insightssystem.com/api:-GWQv5aM/send`
***
## 🔑 Authentication
To use the API, you need to include an Authorization Token in the request headers. The token must be prefixed with Bearer.
### Headers
* `Content-Type`: `application/json`
* `Authorization`: `Bearer YOUR_TOKEN_HERE`
***
## 📤 Request Payload
The request body should be a JSON object with the following fields:
| Field | Type | Description |
| - | - | - |
| `phone` | String | The recipient's phone number in **international format** (e.g., `+1234567890`). |
| `text` | String | The message content you want to send. |
| `attachment` | String | (Optional) A public URL to an attachment (e.g., image, PDF, video). |
| `filename` | String | (Optional) The name of the attachment file. |
### Example Request Body
```json theme={null}
{
"phone": "+1234567890",
"text": "Hello, this is a test message from Notifier!",
"attachment": "https://example.com/image.jpg",
"filename": "image.jpg"
}
```
***
## 📥 Response Structure
The API responds with a JSON object. Below are examples of
success and
error responses.
### Success Response
```json theme={null}
{
"message": "Message sent successfully"
}
```
### Error Response
```json theme={null}
{
"message": "Message sending failed | Reason: Message limit for this number reached."
}
```
***
## 🛠️ Error Handling
The API provides detailed error messages to help you troubleshoot issues. Common errors include:
1. Invalid Phone Number: Ensure the phone number is in E.164 format.
2. Message Limit Reached: You've exceeded the allowed number of messages for a specific phone number.
3. Attachment Issues: Ensure the attachment URL is public and accessible.
4. Authentication Failure: Verify that the `Authorization` token is correct.
5. Insufficient Credits: Your account balance is insufficient to send the message.
6. Subscription Expired: Your subscription has ended, and you need to renew it.
7. Rate Limit Exceeded: You've exceeded the allowed number of messages per minute or hour.
8. Unique Number Limit Reached: You've reached the limit of unique phone numbers you can message.
9. File Size or Type Error: The attachment does not meet WhatsApp's size or type requirements.
10. No WhatsApp Account: The recipient does not have an active WhatsApp account.
***
## 📋 Code Examples
### 1. cURL
```bash theme={null}
curl -X POST https://api.insightssystem.com/api:-GWQv5aM/send \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-d '{
"phone": "+1234567890",
"text": "Hello, this is a test message from Notifier!",
"attachment": "https://example.com/image.jpg",
"filename": "image.jpg"
}'
```
### 2. JavaScript (Fetch API)
```javascript theme={null}
fetch("https://api.insightssystem.com/api:-GWQv5aM/send", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer YOUR_TOKEN_HERE",
},
body: JSON.stringify({
phone: "+1234567890",
text: "Hello, this is a test message from Notifier!",
attachment: "https://example.com/image.jpg",
filename: "image.jpg",
}),
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error(error));
```
### 3. Python (Requests Library)
```python theme={null}
import requests
import json
url = "https://api.insightssystem.com/api:-GWQv5aM/send"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_TOKEN_HERE"
}
payload = {
"phone": "+1234567890",
"text": "Hello, this is a test message from Notifier!",
"attachment": "https://example.com/image.jpg",
"filename": "image.jpg"
}
response = requests.post(url, headers=headers, data=json.dumps(payload))
print(response.json())
```
### 4. Go
```go theme={null}
package main
import (
"bytes"
"fmt"
"net/http"
)
func main() {
url := "https://api.insightssystem.com/api:-GWQv5aM/send"
payload := []byte(`{
"phone": "+1234567890",
"text": "Hello, this is a test message from Notifier!",
"attachment": "https://example.com/image.jpg",
"filename": "image.jpg"
}`)
req, err := http.NewRequest("POST", url, bytes.NewBuffer(payload))
if err != nil {
fmt.Println("Error creating request:", err)
return
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer YOUR_TOKEN_HERE")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Println("Error sending request:", err)
return
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
```
### 5. Java (HttpURLConnection)
```java theme={null}
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class Main {
public static void main(String[] args) {
try {
URL url = new URL("https://api.insightssystem.com/api:-GWQv5aM/send");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("Authorization", "Bearer YOUR_TOKEN_HERE");
conn.setDoOutput(true);
String payload = "{\"phone\": \"+1234567890\", \"text\": \"Hello, this is a test message from Notifier!\", \"attachment\": \"https://example.com/image.jpg\", \"filename\": \"image.jpg\"}";
try (OutputStream os = conn.getOutputStream()) {
byte[] input = payload.getBytes("utf-8");
os.write(input, 0, input.length);
}
int responseCode = conn.getResponseCode();
System.out.println("Response Code: " + responseCode);
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
***
## 📌 Attachment Support
The Notifier API supports sending attachments with WhatsApp messages. Below are the supported file types and their size limits:
### Supported Media Types
| **Media Type** | **File Extensions** | **MIME Types** | **Max Size** |
| - | - | - | - |
| **Images** | `.jpeg`, `.png` | `image/jpeg`, `image/png` | 5 MB |
| **Videos** | `.mp4`, `.3gp` | `video/mp4`, `video/3gpp` | 16 MB |
| **Documents** | `.pdf`, `.doc`, `.xls`, `.ppt`, `.txt` | `application/pdf`, `application/msword`, `application/vnd.ms-excel`, `application/vnd.ms-powerpoint`, `text/plain` | 100 MB |
| **Audio** | `.mp3`, `.aac`, `.m4a`, `.ogg` | `audio/mpeg`, `audio/aac`, `audio/mp4`, `audio/ogg` | 16 MB |
***
## 📌 Key Points to Remember
* **Phone Number Format**: Always use the **E.164 format** (e.g., `+1234567890`).
* **Attachment URL**: Ensure the attachment URL is public and accessible.
* **Authorization Token**: Include the `Bearer` token in the `Authorization` header.
* **Error Handling**: Check the `message` field in the response for detailed error information.
* **Line Break**: In the message for line break or for starting a new line, `\n` needs to be added before the new line. Example:
Input:
`Hi there,\nThis is John from Acme Co.`
Output:
Hi there,
This is John from Acme Co.
***
## ❓ Need Help?
If you encounter any issues or need further assistance, feel free to reach out to our support team:
* **Email Support**: [support@whatsable.app](mailto:support@whatsable.app)
* **Documentation**: [Notifier API Documentation](https://www.notion.so/Documentation-for-Whatsable-Notifier-API-871f707adcd1451bb437f47db27e8abb?pvs=21)
***
🚀 Start Sending WhatsApp Messages Today!
***
**Disclaimer**: This service is not affiliated with nor endorsed by WhatsApp Inc. The tool uses the WhatsApp API but is not affiliated with WhatsApp.
# Notifier by Whatsable Features
Source: https://docs.whatsable.app/guides/notifier/features
Explore the advanced features of Notifier by Whatsable
# Notifier by Whatsable Features
Notifier by Whatsable provides a comprehensive set of features for complex WhatsApp messaging needs.
## Core Features
### Message Types
* Text messages
* Media messages (images, documents, audio, video)
* Location sharing
* Contact sharing
* Interactive messages
* List messages
* Button messages
### Message Management
* Message status tracking
* Delivery receipts
* Read receipts
* Message history
* Message templates
* Bulk messaging
* Scheduled messages
### Security
* End-to-end encryption
* API key authentication
* Rate limiting
* IP whitelisting
* Two-factor authentication
* Audit logs
## Advanced Features
### Templates
* Pre-approved message templates
* Dynamic variables
* Multi-language support
* Template analytics
* Template versioning
### Automation
* Workflow automation
* Conditional messaging
* Event-based triggers
* Custom webhooks
* Integration with third-party services
### Analytics
* Message delivery rates
* Response times
* User engagement
* Template performance
* Custom reports
## Best Practices
* Use approved templates
* Implement proper error handling
* Monitor message status
* Follow WhatsApp guidelines
* Regular template updates
## Next Steps
* Learn about [Integrations](/guides/notifier/integrations)
* Explore [Advanced Features](/guides/notifier/advanced/templates)
* Check out our [API Reference](/api-reference/notifier)
* Read our [Getting Started](/guides/notifier/getting-started) guide
# Getting Started with Notifier by Whatsable
Source: https://docs.whatsable.app/guides/notifier/getting-started
Learn how to get started with Notifier by Whatsable, the complex WhatsApp messaging solution
# Getting Started with Notifier by Whatsable
Notifier by Whatsable provides advanced WhatsApp messaging capabilities for businesses. This guide will help you get started with our complex solution.
## Prerequisites
* A WhatsApp Business account
* Understanding of API integration
* Your Notifier API key
* Basic knowledge of webhooks
## Quick Setup
1. Sign up for a Notifier by Whatsable account
2. Configure your WhatsApp Business account
3. Get your API key from the dashboard
4. Set up webhooks for message status updates
## First Message
Here's a quick example of sending your first message:
```bash theme={null}
curl -X POST https://api.insightssystem.com/api:-GWQv5aM/send \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "+1234567890",
"message": "Hello from Notifier by WhatsAble!",
"template": "welcome_message",
"variables": {
"name": "John",
"company": "Acme Inc"
}
}'
```
## Next Steps
* Learn about [Features](/guides/notifier/features)
* Explore [Integrations](/guides/notifier/integrations)
* Check out [Advanced Features](/guides/notifier/advanced/templates)
* Review our [API Reference](/api-reference/notifier)
# Notifier by Whatsable Integrations
Source: https://docs.whatsable.app/guides/notifier/integrations
Learn how to integrate Notifier by Whatsable with your applications
# Notifier by Whatsable Integrations
Integrate Notifier by Whatsable with your business tools and platforms.
## Available Integrations
### No-Code Platforms
* Zapier
* Make (formerly Integromat)
* n8n
* Pipedream
* Microsoft Power Automate
### CRM Systems
* Salesforce
* HubSpot
* Zoho CRM
* Pipedrive
* Microsoft Dynamics
### E-commerce Platforms
* Shopify
* WooCommerce
* Magento
* BigCommerce
* PrestaShop
### Marketing Tools
* Mailchimp
* ActiveCampaign
* Klaviyo
* SendGrid
* HubSpot Marketing
## Custom Integration
### REST API
```javascript theme={null}
const axios = require('axios');
const sendTemplateMessage = async (to, template, variables) => {
try {
const response = await axios.post(
'https://api.insightssystem.com/api:-GWQv5aM/send',
{
to,
template,
variables
},
{
headers: {
'Authorization': `Bearer ${process.env.NOTIFIER_API_KEY}`,
'Content-Type': 'application/json'
}
}
);
return response.data;
} catch (error) {
console.error('Error sending message:', error);
throw error;
}
};
```
### Webhooks
Configure webhooks to receive real-time updates:
```json theme={null}
{
"event": "message.status",
"data": {
"message_id": "msg_123",
"status": "delivered",
"template": "welcome_message",
"variables": {
"name": "John",
"company": "Acme Inc"
},
"timestamp": "2024-03-20T10:00:00Z"
}
}
```
## Best Practices
* Use environment variables for API keys
* Implement retry logic with exponential backoff
* Handle rate limits appropriately
* Monitor webhook delivery
* Use template variables for dynamic content
## Next Steps
* Read our [Getting Started](/guides/notifier/getting-started) guide
* Explore [Features](/guides/notifier/features)
* Check out [Advanced Features](/guides/notifier/advanced/templates)
* Review our [API Reference](/api-reference/notifier)
# Make
Source: https://docs.whatsable.app/guides/notifier/make
Connect Notifier with Make to automate powerful WhatsApp messaging scenarios
# Notifier Integration with Make
Notifier enables you to send automated WhatsApp messages through your favorite scenario automation tools. This guide walks you through integrating Notifier with Make to create powerful messaging scenarios
## Prerequisites
Before getting started, make sure you have:
Active Notifier account with a subscription plan (Monthly or Pay-as-you-go)
Access to [Make](https://www.make.com/en/register/) scenario automation platform
New to Notifier? [Sign up here](https://notifier.whatsable.app/)
## Set up your Notifier account
First, let's set up your business profile in Notifier:
1. Log in to your Notifier dashboard
2. Navigate to **Business Information**
3. Complete all required fields:
* **Business Name**: Enter the name that will appear in messages sent to recipients
* **Business Website or Social Media**: Add your website or social media URL
* **Preferred Language**: Select the language for standard WhatsApp message elements
* **Default Reply Text**: Create a template message that appears when recipients click "Reply"
* **WhatsApp Number**: Add your business WhatsApp number where replies will be directed
After entering your WhatsApp number, Notifier will send a verification code to this number. Enter the code to verify ownership.
Once saved, you'll see a preview of how your messages will appear to recipients. The actual message structure may vary slightly based on variables and attachments you include.
To connect Notifier with Make, you'll need your API key:
1. In your Notifier dashboard, go to **API Keys**
2. Copy your unique API key
3. Store it securely—you'll need it for the integration
Never share your API key publicly or commit it to version control systems.
## Connect Notifier to Make
Now that you have Notifier set up, let's connect it to Make to automate your scenarios.
1. Log in to your Make account
2. Navigate to Notifier dashboard and select **Connect to Make** in the side menu
3. Click **Continue** in the connection guide popup
4. Click **Install**, select your organization at the bottom of the screen, then click **Install** again. (Note: You need Admin, Owner, or App Developer role in your organization to install apps.)
You're now ready to create scenarios with the Notifier app
1. Log in to your Make account
2. Create a new scenario by clicking **+ Create a new scenario**
3. (Optional) Add a trigger module of your choice:
* Popular triggers include Google Forms, Jotform, ClickUp, or a Schedule trigger
* Connect and configure your trigger according to your use case
1. Click the **+** button to add a new module
2. Search for **Notifier Whatsable** in the apps or modules library
3. Select the module with the official Notifer logo
1. Once you click on Notifier module, select **Send a WhatsApp Message** from the **ACTIONS**
2. Click **Create a connection** in the **Connection** section of Notifier module and you will be prompted to enter your API Key
3. Enter your Notifier API key that you copied earlier
4. Rename your connection name if needed
5. Click **Save** to store your credential
Complete the required fields:
Enter the recipient’s phone number (with country code) or use dynamic data from previous module (*Make sure that the phone number is valid and that you are only sending to one phone number per step.*)
Type your message text or use variables from previous module
Enter public URL of a file, image, or video to send with your message
Specify a custom filename for your attachment
Customize advanced options as needed
1. Click **Save** to save your message configuration
2. Right click on the Whatsable module and select **Run this module only** to verify the module is working correctly
* or click **Run once** in the bottom-left corner of the screen to test the entire scenario
3. If the test is successful, you'll see a confirmation message
4. Click **Save** icon in the bottom-left corner to save your scenario (You can also set timer intarval for the scenario)
5. Toggle the **Active** switch in the bottom-left corner with time to activate your scenario
## Example use cases
Send a welcome message when a new customer signs up
Update customers when their order status changes
Automatically send reminders before scheduled appointments
Send personalized messages to new leads from your form submissions
Notify customers when their support ticket status changes
## Scenario Diagram
```mermaid theme={null}
flowchart LR
A[Trigger Module] --> B[Data Transformation]
B --> C[Notifier Module]
C --> D{Message Sent?}
D -->|Yes| E[Success Path]
D -->|No| F[Error Handling]
E --> G[Additional Actions]
F --> H[Retry Logic]
```
## Best practices
For optimal results when using Notifier with Make:
Use data from previous modules in your workflow to create personalized, relevant messages for each recipient.
Focus on a single call-to-action and keep your messages brief to maintain recipient engagement.
Always run complete tests of your workflow before deploying to production to catch any potential issues.
Regularly check your Notifier dashboard to monitor delivery rates and optimize your messaging strategy.
Always provide clear opt-out instructions and respect recipient preferences regarding messaging.
## Troubleshooting
Verify that your Notifier account is active and has available credits
Ensure your business information is complete and properly verified
Double-check that your API key is entered correctly in Make
Confirm that the recipient's phone number is in the correct format (including country code)
Check your message template for any invalid characters or formatting issues
Ensure variables from previous modules are properly formatted
Verify your message doesn't exceed WhatsApp's length limitations
## Need help?
Our support team is ready to assist you:
Contact [team@whatsable.app](mailto:team@whatsable.app)
Book a personalized walkthrough
Click the green chat button in the bottom right corner of the Notifier dashboard
For additional automation platform integrations (Zapier, n8n, etc.), please contact our support team or check our integration documentation.
# n8n
Source: https://docs.whatsable.app/guides/notifier/n8n
Connect Notifier with n8n to automate powerful WhatsApp messaging workflows
# Notifier Integration with n8n
Notifier enables you to send automated WhatsApp messages through your favorite workflow automation tools. This guide walks you through integrating Notifier with n8n to create powerful messaging workflows
## Prerequisites
Before getting started, make sure you have:
Active Notifier account with a subscription plan (Monthly or Pay-as-you-go)
Access to [n8n](https://app.n8n.cloud/login) workflow automation platform
New to Notifier? [Sign up here](https://notifier.whatsable.app/)
## Set up your Notifier account
First, let's set up your business profile in Notifier:
1. Log in to your Notifier dashboard
2. Navigate to **Business Information**
3. Complete all required fields:
* **Business Name**: Enter the name that will appear in messages sent to recipients
* **Business Website or Social Media**: Add your website or social media URL
* **Preferred Language**: Select the language for standard WhatsApp message elements
* **Default Reply Text**: Create a template message that appears when recipients click "Reply"
* **WhatsApp Number**: Add your business WhatsApp number where replies will be directed
After entering your WhatsApp number, Notifier will send a verification code to this number. Enter the code to verify ownership.
Once saved, you'll see a preview of how your messages will appear to recipients. The actual message structure may vary slightly based on variables and attachments you include.
To connect Notifier with n8n, you'll need your API key:
1. In your Notifier dashboard, go to **API Keys**
2. Copy your unique API key
3. Store it securely—you'll need it for the integration
Never share your API key publicly or commit it to version control systems.
## Connect Notifier to n8n
Now that you have your Notifier account configured, let's connect it to n8n to automate your messaging workflows.
1. Log in to your n8n account
2. Create a new workflow/Zap by clicking **+ Create**
3. Add a trigger node of your choice:
* Popular triggers include Google Forms, Jotform, ClickUp, or a Schedule trigger
* Connect and configure your trigger according to your use case
The Whatsable trigger node enables your workflow to respond automatically to incoming WhatsApp messages. This setup is optional but recommended for building reactive communication flows.
Follow these steps to add the Whatsable trigger node to your workflow:
1. Click the **+** button in your workflow canvas to add a new node
2. Search for "Whatsable" in the node library search bar
3. Select the node displaying the official Whatsable logo
4. From the available trigger options, choose **On new Incoming message event**
The trigger node will automatically listen for incoming messages and initiate your workflow when a new message is received.
Set up your Whatsable API credentials to establish a secure connection:
**Webhook URL Configuration:**
1. In the Whatsable Trigger node parameters, locate the **Webhook URLs** section at the top
2. Select **Production URL** and copy the generated URL by clicking on it
3. Store this URL securely as you'll need it for the credential setup
**Credential Creation:**
1. In the **Credential to connect with** dropdown, click **+ Create new credential**
2. Select **Whatsable Notifier API** as your connection method
3. Enter your Notifier by Whatsable API key in the **API Key** field
4. Paste the Production URL you copied earlier into the **Production URL** field
5. Assign a descriptive name to your credential (e.g., "Whatsable Production")
6. Click **Save** to securely store your credentials
Your API credentials are encrypted and stored securely. Never share your API key publicly or commit it to version control.
Complete the setup by testing and activating your trigger:
**Response Configuration:**
1. In the **Respond** dropdown, select your preferred response timing:
* **Immediately**: Responds as soon as the trigger fires
* **When Last Node Finishes**: Waits for the entire workflow to complete before responding
**Testing:**
1. Click **Execute step** on the Whatsable node to run a test
2. Verify the connection is working by checking for a success confirmation
3. Review any error messages if the test fails and adjust your configuration accordingly
Once activated, your workflow will automatically process incoming messages according to your configured logic.
Remember to test your workflow thoroughly before activating it in production to ensure it behaves as expected.
1. Click the **+** button to add a new node
2. Search for "Whatsable" in the node library
3. Select the node with the official Whatsable logo
4. After selecting the Whatsable node, choose 'Send message via notifier' from the available actions menu
1. In the Whatsable node **Parameters**, find the **Credential to connect with** dropdown
2. Select **+ Create new credential**
3. Enter your Notifier API key that you copied earlier
4. Name your credential (e.g., "Notifier Production")
5. Click **Save** to store your credential
1. In **Resource** dropdown, select **Send Message**
2. In the **Operation** dropdown, select **Send Message Via Notifier**
3. Complete the required fields:
Enter the recipient's phone number (with country code) or use dynamic data from previous nodes
Type your message text or use variables from previous nodes
Enter the URL of the file, image, or video you want to send with your message or use variables from previous nodes
Specify a custom filename for your attachment
1. Click **Test Step** on the Notifier node to verify it's working correctly
2. If the test is successful, you'll see a confirmation message
3. Return to your workflow
4. Click **Save** to save your entire workflow
5. Toggle the **Active** switch in the top-right corner to activate your workflow
Congratulations! Your Notifier and n8n integration is now complete! Your automated messaging workflow is now operational! Whenever your trigger conditions are met, n8n will automatically send WhatsApp messages through Notifier.
## Example workflows
Here are some powerful automation workflows you can build with Notifier and n8n:
Send personalized WhatsApp messages to new leads who fill out your contact form
Automatically notify customers when their order is placed, shipped, or delivered
Send timely WhatsApp reminders before scheduled events or appointments
Request feedback via WhatsApp after a customer interaction or purchase
Keep customers informed about the status of their support requests
## Workflow Diagram
```mermaid theme={null}
flowchart LR
A[Trigger node] --> B[Data Transformation]
B --> C[Notifier App]
C --> D{Message Sent?}
D -->|Yes| E[Success Path]
D -->|No| F[Error Handling]
E --> G[Additional Actions]
F --> H[Retry Logic]
```
## Best practices
For optimal results when using Notifier with n8n:
Use data from previous nodes in your workflow to create personalized, relevant messages for each recipient.
Focus on a single call-to-action and keep your messages brief to maintain recipient engagement.
Always run complete tests of your workflow before deploying to production to catch any potential issues.
Regularly check your Notifier dashboard to monitor delivery rates and optimize your messaging strategy.
Always provide clear opt-out instructions and respect recipient preferences regarding messaging.
## Troubleshooting
Verify that your Notifier account is active and has available credits
Ensure your business information is complete and properly verified
Double-check that your API key is entered correctly in n8n
Confirm that the recipient's phone number is in the correct format (including country code)
Check your message template for any invalid characters or formatting issues
Ensure variables from previous nodes are properly formatted
Verify your message doesn't exceed WhatsApp's length limitations
## Need help?
Our support team is ready to assist you:
Contact [team@whatsable.app](mailto:team@whatsable.app)
Book a personalized walkthrough
Click the green chat button in the bottom right corner of the Notifier dashboard
For additional automation platform integrations (Make.com, Zapier, etc.), please contact our support team or check our integration documentation.
# Zapier
Source: https://docs.whatsable.app/guides/notifier/zapier
Connect Notifier with Zapier to automate powerful WhatsApp messaging workflows
# Notifier Integration with Zapier
Notifier enables you to send automated WhatsApp messages through your favorite workflow automation tools. This guide walks you through integrating Notifier with Zapier to create powerful messaging workflows
## Prerequisites
Before getting started, make sure you have:
Active Notifier account with a subscription plan (Monthly or Pay-as-you-go)
Access to [Zapier](https://zapier.com/sign-up) workflow automation platform
New to Notifier? [Sign up here](https://notifier.whatsable.app/)
## Set up your Notifier account
First, let's set up your business profile in Notifier:
1. Log in to your Notifier dashboard
2. Navigate to **Business Information**
3. Complete all required fields:
* **Business Name**: Enter the name that will appear in messages sent to recipients
* **Business Website or Social Media**: Add your website or social media URL
* **Preferred Language**: Select the language for standard WhatsApp message elements
* **Default Reply Text**: Create a template message that appears when recipients click "Reply"
* **WhatsApp Number**: Add your business WhatsApp number where replies will be directed
After entering your WhatsApp number, Notifier will send a verification code to this number. Enter the code to verify ownership.
Once saved, you'll see a preview of how your messages will appear to recipients. The actual message structure may vary slightly based on variables and attachments you include.
To connect Notifier with Zapier, you'll need your API key:
1. In your Notifier dashboard, go to **API Keys**
2. Copy your unique API key
3. Store it securely—you'll need it for the integration
Never share your API key publicly or commit it to version control systems.
## Connect Notifier to Zapier
Now that you have your Notifier account configured, let's connect it to Zapier to automate your messaging workflows.
1. Log in to your Zapier account
2. Navigate to Notifier dashboard and select **Connect to Zapier** in the side menu
3. Click **Continue** in the connection guide popup
4. Select Accept & Build a Zap on the invitation page
You're now ready to create Zaps with the Notifier app
1. Log in to your Zapier account
2. Create a new workflow/Zap by clicking **+ Create** and select **Zaps**/**New Zap**
3. Add a trigger step of your choice:
* Popular triggers include Google Forms, Jotform, ClickUp, or a Schedule trigger
* Connect and configure your trigger according to your use case
1. Select the next **Action** step or click the **+** button to add a new step
2. Search for "Notifier by Whatsable" in the apps and tools library
3. Select the app with the official Notifier logo
1. In the Notifier app Setup, select **Send WhatsApp Message** in the **Action event** dropdown
2. Click **Sign In** in the **Account** field and you will be prompted to enter your API Key
3. Enter your Notifier API key that you copied earlier
4. Click **Yes, Continue to Notifier** to store your credential
5. Next, click the **Continue** button in the Setup screen to proceed to the **Configure** section
Complete the required fields:
Enter the recipient’s phone number (with country code) or use dynamic data from previous steps
Type your message text or use variables from previous steps
Enter public URL of a file, image, or video to send with your message
Specify a custom filename for your attachment
Customize advanced options as needed
1. Click **Continue** and then click **Test step** in the **Test** to verify it's working correctly
2. If the test is successful, you'll see a confirmation message
3. Click **Publish** to save your entire Zap
4. Toggle the **Active** switch in the top-left corner to activate your Zap
## Example use cases
Send a welcome message when a new customer signs up
Update customers when their order status changes
Automatically send reminders before scheduled appointments
Send personalized messages to new leads from your form submissions
Notify customers when their support ticket status changes
## Workflow Diagram
```mermaid theme={null}
flowchart LR
A[Trigger Step] --> B[Data Transformation]
B --> C[Notifier App]
C --> D{Message Sent?}
D -->|Yes| E[Success Path]
D -->|No| F[Error Handling]
E --> G[Additional Actions]
F --> H[Retry Logic]
```
## Best practices
For optimal results when using Notifier with Zapier:
Use data from previous steps in your workflow to create personalized, relevant messages for each recipient.
Focus on a single call-to-action and keep your messages brief to maintain recipient engagement.
Always run complete tests of your workflow before deploying to production to catch any potential issues.
Regularly check your Notifier dashboard to monitor delivery rates and optimize your messaging strategy.
Always provide clear opt-out instructions and respect recipient preferences regarding messaging.
## Troubleshooting
Verify that your Notifier account is active and has available credits
Ensure your business information is complete and properly verified
Double-check that your API key is entered correctly in Zapier
Confirm that the recipient's phone number is in the correct format (including country code)
Check your message template for any invalid characters or formatting issues
Ensure variables from previous steps are properly formatted
Verify your message doesn't exceed WhatsApp's length limitations
## Need help?
Our support team is ready to assist you:
Contact [team@whatsable.app](mailto:team@whatsable.app)
Book a personalized walkthrough
Click the green chat button in the bottom right corner of the Notifier dashboard
For additional automation platform integrations (Make.com, n8n, etc.), please contact our support team or check our integration documentation.
# Auth & environment
Source: https://docs.whatsable.app/guides/notifyer-system/agent-skills/auth-and-env
Environment variables, auth header modes (Console vs Chat vs Developer), and origin/CORS behavior used by Notifyer Agent Skills.
Never commit tokens or API keys to Git. Treat `NOTIFYER_API_TOKEN` and the Developer API key as production secrets.
## Required environment variables
| Variable | Required | Default | Used for |
| - | -: | - | - |
| `NOTIFYER_API_BASE_URL` | **yes** | — | Base API host (must be HTTPS), e.g. `https://api.insightssystem.com` |
| `NOTIFYER_API_TOKEN` | **yes** (most scripts) | — | JWT returned by `setup-notifyer/scripts/login.js` |
| `NOTIFYER_CHAT_ORIGIN` | no | `https://chat.notifyer-systems.com` | Origin header for chat endpoints when overridden |
```bash theme={null}
export NOTIFYER_API_BASE_URL="https://api.insightssystem.com"
export NOTIFYER_API_TOKEN="eyJ..."
```
## Auth modes (critical)
Notifyer has **three auth modes** depending on the API surface. **The same JWT** is used for Console and Chat modes — only the header formatting differs.
| Mode | Header | Where it’s used |
| - | - | - |
| **Console** | `Authorization: Bearer ` | `setup-notifyer` and `automate-notifyer` (most endpoints) |
| **Chat** | `Authorization: ` (raw) | `chat-notifyer` and some web endpoints (labels/recipients/chat) |
| **Developer** | `Authorization: ` (raw) | Make/Zapier/n8n modules + direct developer send APIs |
If you see HTTP 401 across many scripts, your JWT likely expired. Re-run `setup-notifyer/scripts/login.js` and re-export `NOTIFYER_API_TOKEN`.
## Origin headers & CORS behavior
Many Xano endpoints enforce allowed origins. The skills’ shared HTTP client automatically sends a correct `Origin` header per mode:
* Console-mode requests use `Origin: https://console.notifyer-systems.com`
* Chat-mode requests use `Origin: https://chat.notifyer-systems.com` (override with `NOTIFYER_CHAT_ORIGIN`)
This is important because “missing Origin” can cause silent or confusing auth failures on endpoints that validate it.
## Persisting environment variables
Add these exports to your shell profile:
```bash theme={null}
# ~/.zshrc
export NOTIFYER_API_BASE_URL="https://api.insightssystem.com"
export NOTIFYER_API_TOKEN="eyJ..."
```
```bash theme={null}
# ~/.bashrc
export NOTIFYER_API_BASE_URL="https://api.insightssystem.com"
export NOTIFYER_API_TOKEN="eyJ..."
```
## Security notes for CLI usage
Passing secrets via CLI flags (like `--password`) can expose them via process lists (`ps aux`) on shared machines. Prefer using a password manager/secure terminal, and avoid logging stdout in shared CI environments.
## Related pages
* [`setup-notifyer`](/guides/notifyer-system/agent-skills/setup-notifyer) (login, doctor, API key)
* [`chat-notifyer`](/guides/notifyer-system/agent-skills/chat-notifyer) (chat origin and 24h window policy)
* [Security](/guides/notifyer-system/agent-skills/security)
# automate-notifyer
Source: https://docs.whatsable.app/guides/notifyer-system/agent-skills/automate-notifyer
Automation scripts for templates, AI bots, broadcasts, analytics, and webhooks — including outgoing WhatsApp Business app messages (coexistence).
`automate-notifyer` builds on `setup-notifyer`. Always run `setup-notifyer/scripts/doctor.js` before sending templates, creating broadcasts, or configuring webhooks.
## What this skill covers
* **Templates**: create/list/get/delete; monitor Meta approval lifecycle
* **AI bots**: create/update/delete bots; set default bot
* **Broadcasts**: create/schedule campaigns using template + recipient CSV
* **Analytics & logs**: read rates, delivery rates, message logs
* **Webhooks**: create/update/delete **dev** and **IO** webhooks; optional HMAC signatures; `--incoming` and `--outgoing` so events include messages typed in the WhatsApp Business app
## Prerequisites
Some features require a Pro or Agency plan (and an OpenAI key configured in Notifyer settings for bots). If you’re not sure, check with `setup-notifyer/scripts/get-user-plan.js`.
## Setup
```bash theme={null}
cd skills/automate-notifyer
export NOTIFYER_API_BASE_URL="https://api.insightssystem.com"
export NOTIFYER_API_TOKEN="eyJ..."
```
## Templates
List templates:
```bash theme={null}
node scripts/list-templates.js --pretty
node scripts/list-templates.js --status approved --pretty
```
Create a template (text with variables):
```bash theme={null}
node scripts/create-template.js \
--name order_confirmation \
--category MARKETING \
--body "Hello {{1}}, your order #{{2}} is confirmed." \
--variables '{"1":"John","2":"12345"}'
```
`list-templates.js` auto-syncs `PENDING` template statuses from Meta on each call — you can re-run it to observe approval changes.
Delete a template:
```bash theme={null}
node scripts/delete-template.js --id 987654321 --confirm
```
## AI bots
```bash theme={null}
node scripts/list-bots.js --pretty
node scripts/create-bot.js --name "Support Bot" \
--mission "Help users resolve support issues." \
--knowledge-base "Return policy: 30 days. Shipping: 3-5 days." \
--tone "Friendly" --delay 3 \
--trigger-keywords "agent,human" --notification --default
node scripts/update-bot.js --id 12 --tone "Professional" --delay 5
node scripts/set-default-bot.js --id 12 --pretty
node scripts/delete-bot.js --id 12 --confirm --pretty
```
## Broadcasts
Create and schedule a broadcast (3-step flow):
```bash theme={null}
node scripts/create-broadcast.js \
--name "January Sale" \
--template-id 42 \
--test-phone "+14155550123" \
--recipients ./recipients.csv \
--schedule "25/01/2025 14:00" \
--delivery-mode smart \
--delivery-size 4
```
Phone numbers in the CSV must be **integers without `+`**. The schedule format is strictly `DD/MM/YYYY HH:mm` and is timezone-sensitive.
## Analytics & logs
```bash theme={null}
node scripts/get-message-analytics.js --days 30 --pretty
node scripts/get-message-analytics.js --from 2025-01-01 --to 2025-01-31 --pretty
node scripts/get-message-logs.js --filter broadcast --phone 14155550123 --pretty
```
## Webhooks
List webhooks:
```bash theme={null}
node scripts/list-webhooks.js --type dev --pretty
node scripts/list-webhooks.js --type io --pretty
```
Create a dev webhook (Make/Zapier/n8n style) that receives **incoming and outgoing** messages, including replies typed in the WhatsApp Business app:
```bash theme={null}
node scripts/create-webhook.js --type dev \
--url "https://hook.eu2.make.com/abc" \
--incoming --outgoing --signature
```
`--outgoing` is required if an automation must react to messages sent from the phone app, the Notifyer chat inbox, or other integrations. Payload fields: `incoming_message`, `send_by`, `was_message_by_human`. Full reference: [Message webhooks](/guides/notifyer-system/api/incoming-message).
## Incoming and outgoing WhatsApp messages
Notifyer delivers **both incoming and outgoing** messages to your webhook or automation trigger — including messages typed by hand in the **WhatsApp Business app** on your phone.
This is possible because Notifyer supports [Meta WhatsApp Coexistence](/guides/notifyer-system/embedding-process#whatsapp-coexistence). You keep using WhatsApp Business on your phone; those hand-typed replies still reach an external webhook and can start an automation. They are not limited to the Notifyer web inbox.
The payload is the same whether you use [n8n](/guides/notifyer-system/n8n-overview), [Make](/guides/notifyer-system/make-overview), [Zapier](/guides/notifyer-system/zapier-overview), or a [custom webhook](/guides/notifyer-system/api/incoming-message). [Watch the walkthrough on YouTube](https://www.youtube.com/watch?v=UfW-KwS4gBI).
### Direction, sending system, and team member
Use these three fields to tell *what happened* and *who sent it*:
`true` when a contact sent a message **to** your business. `false` when your business sent a message **to** the contact (outgoing). Filter on this field to run logic only for one direction.
Which system or person sent an **outgoing** message:
| `send_by` value | Meaning |
| - | - |
| `WhatsApp App` | Typed by hand in the WhatsApp Business app on a phone |
| A team member's name (for example `Axel Meta`) | Sent from the Notifyer chat inbox by that logged-in user |
| An automation or app name (Make, Zapier, n8n, API, bot) | Sent by that integration or bot |
Empty or omitted on incoming messages.
`true` when a person sent the message (WhatsApp Business app or Notifyer chat inbox). `false` when a bot or automation sent it. Combine with `send_by` to see both *whether* a human sent it and *which teammate or system* did.
### Example payload: message typed on the phone
This is the JSON Notifyer POSTs when someone types a reply in the WhatsApp Business app. `incoming_message` is `false`, `send_by` is `"WhatsApp App"`, and `was_message_by_human` is `true`.
```json theme={null}
{
"last_messages": "[{\"type\":\"bot\",\"content\":\"Hello n8n\",\"timestamp\":\"2026-08-15T12:24:47.000Z\",\"content_type\":\"text\"},{\"type\":\"user\",\"content\":\"hi\",\"timestamp\":\"2026-08-12T12:27:42.746Z\",\"content_type\":\"text\"}]",
"conversation_paragraph": "Bot (12:24:47 PM): Hello n8n ; User (12:27:42 PM): hi",
"phone_number": 14155552671,
"recipient_name": "Alex Martinez",
"user_id": "158c59e1-ea85-4d0b-b70c-65328ba67a8e",
"last_message_of_user": "hi",
"last_message_of_bot": "Hello n8n",
"message_type": "text",
"user_last_message_time": 1786722580,
"bot_last_message_time": 1786797014,
"attachment_url": null,
"note": "email: alex\nName: Alex",
"note_automation": "email: alex\nName: Alex",
"labels": "n8n, webhook-test",
"incoming_message": false,
"send_by": "WhatsApp App",
"was_message_by_human": true
}
```
`last_message_of_bot` is the last message **your business** sent — whether a human typed it in the WhatsApp Business app or the Notifyer inbox, or a bot/automation sent it. `last_messages` is a JSON **string** of the last \~20 messages (parse it before iterating). `phone_number` may arrive as a number rather than a string.
When the same person sends from the Notifyer chat inbox instead of the phone app, the payload is identical except:
```json theme={null}
{
"incoming_message": false,
"send_by": "Axel Meta",
"was_message_by_human": true
}
```
Create an IO webhook (bidirectional pipeline style):
```bash theme={null}
node scripts/create-webhook.js --type io \
--url "https://myapp.com/webhook" \
--signature
```
Update/delete:
```bash theme={null}
node scripts/update-webhook.js --type dev --id 5 --status false
node scripts/delete-webhook.js --type dev --id 5 --confirm
```
Dev webhook `id` is an integer. IO webhook `id` is a **text UUID** — treat it as a string.
## Next
* Operate conversations: [`chat-notifyer`](/guides/notifyer-system/agent-skills/chat-notifyer)
* See end-to-end automation flows: [Use cases](/guides/notifyer-system/agent-skills/use-cases)
# chat-notifyer
Source: https://docs.whatsable.app/guides/notifyer-system/agent-skills/chat-notifyer
Live chat operations: recipients, messaging (text/template/attachments), labels, handoff, scheduling, notes, and conversation history.
Use `chat-notifyer` when you want an agent to operate active WhatsApp conversations (similar to `chat.notifyer-systems.com`) via scripts.
## Prerequisites
* You have a valid JWT in `NOTIFYER_API_TOKEN` (from `setup-notifyer/scripts/login.js`)
* WhatsApp connection is active (verify with `setup-notifyer/scripts/get-connection-status.js`)
## Auth mode difference (don’t miss this)
Chat endpoints use **raw JWT** auth: `Authorization: ` (no `Bearer` prefix). Console endpoints use `Authorization: Bearer `.
The shared client handles this automatically. See [Auth & environment](/guides/notifyer-system/agent-skills/auth-and-env).
## The 24-hour window rule (critical)
WhatsApp allows **free text** and **attachments** only within **24 hours** of a user’s last inbound message.
| Window | Allowed |
| - | - |
| Open | Text ✓, Template ✓, Attachment ✓ |
| Closed | Template only ✓ |
Check window state:
```bash theme={null}
node scripts/get-recipient.js --phone 14155550123 --pretty
```
`send-text.js` enforces this automatically and will refuse if the window is closed.
## Common workflows
### List/search recipients
```bash theme={null}
node scripts/list-recipients.js --pretty
node scripts/list-recipients.js --search "John" --pretty
node scripts/list-recipients.js --status unread --pretty
```
### Filter recipients by label
```bash theme={null}
node scripts/filter-recipients-by-label.js --labels "Support" --status unread --pretty
```
### Send a text message
```bash theme={null}
node scripts/send-text.js --phone 14155550123 --text "Hello! How can I help?"
```
### Send a template message (works any time)
```bash theme={null}
node scripts/send-template.js --list
node scripts/send-template.js --phone 14155550123 --name order_confirm \
--variables '{"body1":"John","body2":"#12345"}'
node scripts/send-template.js --phone 14155550123 --name order_confirm --dry-run
```
### Send an attachment
```bash theme={null}
node scripts/send-attachment.js --phone 14155550123 --file ./invoice.pdf --pretty
node scripts/send-attachment.js --phone 14155550123 --file ./photo.jpg --caption "Your order photo"
```
### Schedule a send
```bash theme={null}
node scripts/send-template.js --phone 14155550123 --name order_confirm --schedule "25/01/2025 14:00"
node scripts/list-scheduled.js --pretty
node scripts/delete-scheduled.js --id 7 --confirm
```
### Labels (assign/remove)
```bash theme={null}
node scripts/assign-label.js --phone 14155550123 --label "Support" --pretty
node scripts/remove-label.js --phone 14155550123 --label "Support" --pretty
```
Labels must exist first (create via `setup-notifyer/create-label.js`).
### AI ↔ Human handoff
```bash theme={null}
node scripts/set-handoff.js --phone 14155550123 --mode human --pretty
node scripts/set-handoff.js --phone 14155550123 --mode bot --pretty
```
Assign a specific bot:
```bash theme={null}
node scripts/list-bots.js --pretty
node scripts/assign-bot.js --phone 14155550123 --bot-id 5 --pretty
```
### Conversation + notes
```bash theme={null}
node scripts/get-conversation.js --phone 14155550123 --pretty
node scripts/get-conversation-log.js --phone 14155550123 --pretty
node scripts/get-notes.js --phone 14155550123 --pretty
node scripts/add-note.js --phone 14155550123 --append "Requested callback on 15 Feb"
```
`get-conversation.js` returns the **full** thread (sent + received). `get-conversation-log.js` is **outbound-only** delivery history.
## Next
* End-to-end operational playbooks: [Use cases](/guides/notifyer-system/agent-skills/use-cases)
* If you hit send failures: [Troubleshooting](/guides/notifyer-system/agent-skills/troubleshooting)
# Agent Skills (Notifyer)
Source: https://docs.whatsable.app/guides/notifyer-system/agent-skills/overview
Notifyer Agent Skills for setup, automation, chat, and webhooks. Coexistence is supported — you do not delete the WhatsApp Business app. Webhooks include outgoing messages with send_by and was_message_by_human.
Agent Skills let AI coding agents (Cursor, OpenClaw, Claude Code, Copilot, etc.) authenticate into Notifyer and operate your workspace programmatically — using the same backend API surface as the Notifyer Console and Chat apps.
**Meta WhatsApp Coexistence is supported on Notifyer System.** You do **not** need to delete the WhatsApp Business app or stop using the number on your phone. After Embedded Signup, the same number works in the WhatsApp Business app, the Notifyer chat inbox, and automations (Make, Zapier, n8n, API, and webhooks) at the same time.
## What are Agent Skills?
**Notifyer Agent Skills** are a set of **Node.js scripts + a `SKILL.md` instruction file** that teach compatible AI agents how to:
* Authenticate into a Notifyer workspace
* Validate prerequisites (connection, plan, token health)
* Configure workspace infrastructure (labels, team, API key)
* Manage automation primitives (templates, AI bots, broadcasts, webhooks, analytics)
* Operate live chat workflows (recipients, messages, handoff, notes, scheduling)
They follow the open [AgentSkills standard](https://agentskills.io/specification), which allows many agents to discover and load skills on demand.
## How this fits inside Notifyer System docs
Notifyer System can be operated via:
Use API keys for Make/Zapier/n8n or your backend services. This is the best choice when you’re building **event-driven automations** and do not need to manage workspace configuration.
Use Agent Skills when you want an AI coding agent to **set up**, **configure**, or **operate** a Notifyer workspace end-to-end: onboarding, template lifecycle, broadcasts, webhooks, and live chat operations.
Use the web apps when you’re doing the initial WhatsApp onboarding, billing changes, or manual team operations.
## Skill set overview (3 phases)
The skills are designed as a progressive sequence.
| Phase | Skill | Primary purpose |
| - | - | - |
| 1 | `setup-notifyer` | Authentication, workspace identity, WhatsApp connection status, plans, team/roles, labels, Developer API key |
| 2 | `automate-notifyer` | Templates, AI bots, broadcasts, analytics/logs, webhooks |
| 3 | `chat-notifyer` | Recipients, messaging, labels, AI/human handoff, scheduled sends, notes, conversation history |
## What you can automate (examples)
* **Workspace onboarding**: create labels, invite members, verify connection and plan, fetch the Developer API key.
* **Template lifecycle**: create templates, monitor Meta approval status, use approved templates in broadcasts.
* **Customer support ops**: fetch conversation context, take over from bot, respond, label, add notes, return to bot.
* **Webhook configuration**: create dev and IO webhooks with HMAC signature; enable `--incoming` and `--outgoing` so events include messages typed in the WhatsApp Business app. Payload fields: `incoming_message`, `send_by` (system or teammate), `was_message_by_human`. See [Message webhooks](/guides/notifyer-system/api/incoming-message).
For end-to-end workflows, see [Use cases](/guides/notifyer-system/agent-skills/use-cases).
## Important constraints (read before you automate)
Some actions are intentionally not scriptable:
* First-time WhatsApp connection (embedded signup / QR scan) is **browser-only**. You do **not** need to delete the WhatsApp Business app — [coexistence](/guides/notifyer-system/embedding-process#whatsapp-coexistence) is supported.
* Billing changes and Stripe flows are **browser-only**.
* Meta template approval timing is **not controllable** via API.
## Next steps
* Start with [Quickstart](/guides/notifyer-system/agent-skills/quickstart)
* Configure [Auth & environment](/guides/notifyer-system/agent-skills/auth-and-env)
* Dive into each skill:
* [`setup-notifyer`](/guides/notifyer-system/agent-skills/setup-notifyer)
* [`automate-notifyer`](/guides/notifyer-system/agent-skills/automate-notifyer)
* [`chat-notifyer`](/guides/notifyer-system/agent-skills/chat-notifyer)
Official repository for Notifyer Agent Skills, including scripts, reference material, and `SKILL.md` entrypoints.
# Using with Base44
Source: https://docs.whatsable.app/guides/notifyer-system/agent-skills/platforms/base44
Install Notifyer Agent Skills so your AI coding assistant can build and operate Notifyer integrations inside Base44 apps.
Base44 follows the open [AgentSkills specification](https://agentskills.io/specification). Notifyer Agent Skills can be installed globally so any AI coding assistant you use with Base44 — Claude, Cursor, Copilot, or others — knows how to call the Notifyer API.
## How skills work in Base44
Base44 uses Agent Skills to give external AI coding tools reusable instructions for platform-specific tasks. When you install Notifyer skills globally, your AI assistant gains:
* Knowledge of all Notifyer API endpoints, auth modes, and CORS rules
* Ready-to-run Node.js scripts for every Notifyer operation
* Reference documentation on templates, broadcasts, recipients, webhooks, and chat
The skills are loaded from `~/.agents/skills/` (global) or `.agents/skills/` (project-level) and are used by the AI when you ask it to add Notifyer functionality to a Base44 app or backend function.
***
## Install the skills
Makes the skills available across all your Base44 projects. Use `--all` to install all three skills at once without an interactive prompt:
```bash theme={null}
npx skills add whatsable/whatsapp-business-agent-skills --all -g
```
This installs `setup-notifyer`, `automate-notifyer`, and `chat-notifyer` together.
To install interactively (choose which skills to include):
```bash theme={null}
npx skills add whatsable/whatsapp-business-agent-skills -g
```
To install a single skill only:
```bash theme={null}
npx skills add whatsable/whatsapp-business-agent-skills --skill chat-notifyer -g
```
Installs only into the current project directory:
```bash theme={null}
npx skills add whatsable/whatsapp-business-agent-skills --all
```
Base44 skills themselves are installed with `npx skills add base44/skills -g`. Notifyer skills are a separate add-on — install both if you're building a Base44 app that sends WhatsApp messages via Notifyer.
***
## Set up environment variables
The Notifyer scripts need these variables:
| Variable | Required | Description |
| - | - | - |
| `NOTIFYER_API_BASE_URL` | **yes** | Always `https://api.insightssystem.com`. Must start with `https://` — all scripts enforce this at startup. |
| `NOTIFYER_API_TOKEN` | **yes** | JWT token obtained via `setup-notifyer/scripts/login.js` |
| `NOTIFYER_CHAT_ORIGIN` | no | CORS Origin override for Phase 3 chat endpoints. Defaults to `https://chat.notifyer-systems.com`. |
```bash theme={null}
export NOTIFYER_API_BASE_URL="https://api.insightssystem.com"
export NOTIFYER_API_TOKEN="eyJ..." # obtained via setup-notifyer/scripts/login.js
```
For Base44 backend functions that call the Notifyer API directly, store these as **project secrets** using the Base44 CLI:
```bash theme={null}
base44 secrets set NOTIFYER_API_BASE_URL=https://api.insightssystem.com
base44 secrets set NOTIFYER_API_TOKEN=eyJ...
```
Inside your backend function code, access them with `Deno.env.get("NOTIFYER_API_TOKEN")`.
Never hardcode `NOTIFYER_API_TOKEN` in your Base44 app source. Use `base44 secrets set` to store it securely — it will be available as an environment variable in your deployed backend functions.
***
## Two ways to use Notifyer in a Base44 app
### 1. AI-assisted integration (skills-guided)
Tell your AI coding assistant to add Notifyer functionality to a Base44 backend function. With the skills installed, the AI already knows the correct API endpoints, auth headers, and payload shapes:
```
Add a Base44 backend function called sendWhatsAppTemplate that accepts a phone number
and template name, authenticates with the Notifyer API using NOTIFYER_API_TOKEN,
and sends the matching approved template.
```
```
Create a Base44 backend function that checks if a recipient's 24-hour WhatsApp
messaging window is open before sending a text message via Notifyer.
```
The AI will reference the skill's reference docs (`references/messaging-reference.md`, `references/recipients-reference.md`, etc.) to produce accurate code.
### 2. Calling the Notifyer API directly from a Base44 backend function
Base44 backend functions run on **Deno** — not Node.js. Call the Notifyer REST API directly using the built-in `fetch()`. The Notifyer scripts (which require Node.js 18+) cannot be executed from within a Deno backend function.
The example below sends a WhatsApp template message using the Notifyer Chat API (`POST /api:bVXsw_FD/web/send/template`). Template messages work at any time — no 24-hour window required. Get the `templateId` from `automate-notifyer/scripts/list-templates.js`.
```typescript theme={null}
// Inside a Base44 backend function (Deno)
Deno.serve(async (req) => {
try {
const { phone, templateId, variables } = await req.json();
const token = Deno.env.get("NOTIFYER_API_TOKEN");
const baseUrl = Deno.env.get("NOTIFYER_API_BASE_URL");
const res = await fetch(`${baseUrl}/api:bVXsw_FD/web/send/template`, {
method: "POST",
headers: {
"Authorization": token, // Chat auth — raw JWT, no Bearer prefix
"Origin": "https://chat.notifyer-systems.com",
"Content-Type": "application/json",
},
body: JSON.stringify({
template: templateId, // Template ID string from list-templates.js
variables: variables ?? {}, // e.g. { "body1": "John", "body2": "#12345" }
current_recipient: {
phone_number: parseInt(String(phone).replace(/^\+/, ""), 10),
},
scheduled_time: 0, // 0 = send immediately
}),
});
const result = await res.json();
// Notifyer (Xano) can return HTTP 200 with success: false on Meta rejections
if (!res.ok || result.success === false) {
return Response.json(
{ ok: false, error: result },
{ status: res.ok ? 400 : res.status }
);
}
return Response.json({ ok: true, result });
} catch (error) {
return Response.json({ ok: false, error: error.message }, { status: 500 });
}
});
```
Base44 backend functions use the Deno runtime. Do not import Node.js-specific modules like `child_process`. Use `fetch()` to call the Notifyer REST API directly, and use `Deno.env.get()` to read secrets.
***
## Example AI prompts for Base44 projects
With Notifyer skills installed, give your AI assistant these kinds of instructions:
### Send WhatsApp messages from a Base44 app
```
Build a Base44 backend function called notifyCustomer.
It should accept { phone, templateName, variables } and send a WhatsApp template
message via the Notifyer API. Use NOTIFYER_API_BASE_URL and NOTIFYER_API_TOKEN
from environment variables. Handle errors and return { ok, message_id } or { ok: false, error }.
```
### Trigger a broadcast from a Base44 automation
```
Add a Base44 automation that runs daily at 9am, fetches all customers from the
Customers entity with status = "trial_expiring", and triggers a Notifyer broadcast
using the trial_reminder template for each one.
```
### Webhook receiver in Base44
```
Create a Base44 backend function to receive incoming Notifyer IO webhook events.
Validate the HMAC signature using NOTIFYER_WEBHOOK_SECRET.
When a new inbound message arrives, create or update a record in the Conversations entity.
```
### Chat handoff from a Base44 agent
```
When a user sends the message "talk to a human" to our Base44 AI agent,
perform a human handover for that contact's WhatsApp conversation in Notifyer.
Use the assign-label workflow: first get the bot's handoff_label from list-bots.js,
then assign that label to the recipient — this automatically stops the AI bot and
routes the conversation to the human agent queue.
```
The correct handover method is **always label-based**: assign the bot's configured `handoff_label` to the recipient. Notifyer automatically sets `is_ai_assistant = false` when the handoff label is detected. Do not use a direct PATCH to flip `is_ai_assistant` — it stops the bot but does not route to the human label queue.
***
## API reference for Base44 backend functions
When building backend functions that call Notifyer directly, these are the key details:
| | Console API | Chat API |
| - | - | - |
| **Base URL** | `NOTIFYER_API_BASE_URL` | `NOTIFYER_API_BASE_URL` |
| **Auth header** | `Authorization: Bearer ` | `Authorization: ` (no Bearer) |
| **Origin** | `https://console.notifyer-systems.com` | `https://chat.notifyer-systems.com` |
| **Used for** | Templates, bots, broadcasts, webhooks | Recipients, messaging, labels, handoff |
There is also a **Developer API key** mode (`Authorization: ` — no Bearer prefix) used by external tools such as Make, Zapier, and n8n. Retrieve the key with `setup-notifyer/scripts/get-api-key.js`. This is a separate long-lived credential, distinct from the JWT token.
For complete endpoint reference, see the skills' `references/` directory after install:
* `~/.agents/skills/automate-notifyer/references/`
* `~/.agents/skills/chat-notifyer/references/`
***
## Keeping skills up to date
```bash theme={null}
npx skills add whatsable/whatsapp-business-agent-skills --all -g
```
Re-running the install command pulls the latest version from the repository.
***
## Related pages
* [Quickstart](/guides/notifyer-system/agent-skills/quickstart)
* [Auth & environment](/guides/notifyer-system/agent-skills/auth-and-env)
* [Use cases](/guides/notifyer-system/agent-skills/use-cases)
* [Base44 Skills docs](https://docs.base44.com/developers/backend/overview/skills)
* [Base44 Backend Functions](https://docs.base44.com/developers/backend/resources/backend-functions/overview)
* [Base44 Secrets (`secrets set`)](https://docs.base44.com/developers/references/cli/commands/secrets-set)
# Using with Cursor
Source: https://docs.whatsable.app/guides/notifyer-system/agent-skills/platforms/cursor
Install Notifyer Agent Skills into Cursor and have its Agent operate your Notifyer workspace from inside your IDE.
Cursor has **native support** for the AgentSkills standard. Skills installed via `npx skills add` are automatically discovered by Cursor Agent — no manual configuration needed.
## How it works in Cursor
Cursor Agent loads skills from these directories and presents them as available capabilities:
| Location | Scope |
| - | - |
| `.cursor/skills//` | Current project only |
| `.agents/skills//` | Current project only |
| `~/.cursor/skills//` | All projects (global) |
| `~/.agents/skills//` | All projects (global) |
When a skill is installed, Agent reads its `SKILL.md` file and automatically decides when to apply it based on what you ask. You can also invoke any skill explicitly by typing `/skill-name` in the Agent chat.
Skills are visible in **Cursor Settings → Rules → Agent Decides**.
***
## Install the skills
Installs the skills for all your projects. Run once:
```bash theme={null}
npx skills add whatsable/whatsapp-business-agent-skills -g
```
This puts all 3 skills under `~/.agents/skills/`:
* `~/.agents/skills/setup-notifyer/`
* `~/.agents/skills/automate-notifyer/`
* `~/.agents/skills/chat-notifyer/`
Installs only into the current project's `.agents/skills/` directory:
```bash theme={null}
npx skills add whatsable/whatsapp-business-agent-skills
```
When prompted, select the skills you want, or select **All 3 skills** to install everything at once.
```bash theme={null}
npx skills add whatsable/whatsapp-business-agent-skills --skill setup-notifyer
npx skills add whatsable/whatsapp-business-agent-skills --skill automate-notifyer
npx skills add whatsable/whatsapp-business-agent-skills --skill chat-notifyer
```
The scripts in these skills are **Node.js CLI tools** that run in your terminal, not inside Cursor's chat UI. Cursor Agent reads the skill instructions and executes scripts using its terminal tool when needed.
***
## Set up environment variables
The scripts need two variables before Agent can use them:
```bash theme={null}
export NOTIFYER_API_BASE_URL="https://api.insightssystem.com"
export NOTIFYER_API_TOKEN="eyJ..." # obtained via setup-notifyer/scripts/login.js
```
Add these to your shell profile (`~/.zshrc` or `~/.bashrc`) so they're always available when Cursor's terminal runs scripts. Alternatively, add a `.env` file to your project — Cursor Agent can read it if you reference it in your prompt.
Never commit `NOTIFYER_API_TOKEN` to Git. The `.gitignore` in the agent-skills repo already excludes `.env` and `.env.*` files.
For full environment variable reference, see [Auth & environment](/guides/notifyer-system/agent-skills/auth-and-env).
***
## Verify discovery
After installing, confirm Cursor can see the skills:
1. Open **Cursor Settings** → **Rules**
2. Look for `setup-notifyer`, `automate-notifyer`, and `chat-notifyer` in the **Agent Decides** section
Or run in Cursor Agent chat:
```
/setup-notifyer
```
Agent will display the skill instructions and confirm it's loaded.
***
## Example Agent prompts
Once installed, use natural language in Cursor Agent chat. Agent will identify the relevant skill and execute the appropriate scripts.
### Workspace setup
```
Log in to Notifyer with email=me@company.com and run a full health check.
Tell me if the WhatsApp connection is active and what plan we're on.
```
```
Create three labels: Sales, Support, and VIP.
For each one, set up relevant keywords (e.g. "pricing, quote" for Sales).
```
### Template management
```
List all our approved WhatsApp templates and show me which ones have variables.
```
```
Create a new template called order_shipped in the UTILITY category.
Body: "Hi {{1}}, your order {{2}} has shipped and will arrive by {{3}}."
```
### Live chat operations
```
Find all unread conversations labeled VIP and show me the full context for each one.
```
```
Check if the 24-hour messaging window is open for +14155550123, then send them
"Hi! Just following up on your recent enquiry." if it is.
```
```
Assign the Support label to +14155550123, take over from the bot, and add a note:
"Customer escalated — awaiting approval from billing team."
```
### Broadcast campaigns
```
Create a broadcast called Feb Promo using template ID 42.
Test it on +14155550123 first, then schedule it for 01/02/2026 at 10:00.
```
***
## Manually invoking a skill
If Agent doesn't pick up a skill automatically, invoke it with the `/` command:
```
/setup-notifyer Run doctor.js and tell me what's wrong.
```
```
/chat-notifyer Get the last 20 messages from the conversation with +14155550123.
```
```
/automate-notifyer List all webhooks and show me which ones have signatures enabled.
```
***
## How Agent runs the scripts
When you give Agent a task, it:
1. Reads the relevant `SKILL.md` to understand available scripts and their flags
2. Opens a terminal in the skill's directory (`skills/setup-notifyer/`, etc.)
3. Runs the script with the correct flags
4. Parses the JSON output (`ok`/`err` structure) and summarises the result
All scripts output structured JSON, which Agent can read and act on — for example, it can check if `isConnected: false` and automatically suggest running `refresh-connection.js`.
***
## Keeping skills up to date
```bash theme={null}
# Re-run the install command to pull the latest version
npx skills add whatsable/whatsapp-business-agent-skills -g
```
***
## Related pages
* [Quickstart](/guides/notifyer-system/agent-skills/quickstart)
* [Auth & environment](/guides/notifyer-system/agent-skills/auth-and-env)
* [Use cases](/guides/notifyer-system/agent-skills/use-cases)
* [Cursor Agent Skills docs](https://cursor.com/docs/skills)
# Using with Lovable
Source: https://docs.whatsable.app/guides/notifyer-system/agent-skills/platforms/lovable
Teach Lovable's AI agent how to build Notifyer WhatsApp integrations. Coexistence is supported; webhooks include outgoing messages with send_by and was_message_by_human.
**Meta WhatsApp Coexistence is supported on Notifyer System.** You do **not** need to delete the WhatsApp Business app or stop using the number on your phone. After Embedded Signup, the same number works in the WhatsApp Business app, the Notifyer chat inbox, and automations (Make, Zapier, n8n, API, and webhooks) at the same time.
Lovable's web agent does not read skill files from `.agents/skills/` or `.cursor/skills/` — it only reads **Project knowledge**, **Workspace knowledge**, `AGENTS.md`, and `CLAUDE.md` from your GitHub repo. The `npx skills add` CLI has no direct effect on what Lovable sees.
However, Lovable projects are GitHub-backed. If you also work on the same project locally in **Cursor** (a common hybrid workflow), you should install the skills there too — see the [Cursor guide](/guides/notifyer-system/agent-skills/platforms/cursor).
## How Lovable reads context
Lovable's agent considers several context sources when generating code:
| Source | How to set it | Scope |
| - | - | - |
| **Project knowledge** | Project settings → Knowledge | One project |
| **Workspace knowledge** | Settings → Knowledge | All projects in workspace |
| **`AGENTS.md` / `CLAUDE.md`** | Root of the GitHub repo linked to the project | Always loaded regardless of session length |
| **Integration knowledge** | Via connected services (e.g. Supabase) | Per integration |
`AGENTS.md` and `CLAUDE.md` at the repo root are always read by Lovable, even in very long sessions where project or workspace knowledge may not always be followed consistently. Use them for rules that must never be lost.
For Notifyer integrations, the most reliable approach is to put the critical API context in **Project knowledge** and keep the `AGENTS.md` file for structural rules that must persist across long sessions.
***
## Option 1 — Project Knowledge (recommended)
Add the following to your project's **Project settings → Knowledge**. This tells Lovable's agent exactly how to call the Notifyer API when building your app.
```text theme={null}
Notifyer WhatsApp API integration
Base URL: stored in env var NOTIFYER_API_BASE_URL (e.g. https://api.insightssystem.com)
Auth token: stored in env var NOTIFYER_API_TOKEN (JWT from login)
Auth headers:
- Console API (templates, bots, broadcasts, webhooks):
Authorization: Bearer
Origin: https://console.notifyer-systems.com
- Chat API (recipients, messaging, labels, handoff):
Authorization: (no Bearer prefix)
Origin: https://chat.notifyer-systems.com
Key API groups:
- /api:AFRA_QCy/ — templates
- /api:ox_LN9zX/ — bots
- /api:Mk_r6mq0/ — broadcasts
- /api:bVXsw_FD/ — chat recipients and messaging
- /api:qh9OQ3OW/ — message logs and analytics
- /api:0hqyGRIz/ — webhooks (enable incoming AND outgoing)
Critical rules:
- Never hardcode NOTIFYER_API_TOKEN in source code — always use env vars.
- Text and attachment messages require the recipient to have messaged in the last 24 hours.
If window is closed, use a template message instead.
- global_label is a string[] of label names, not IDs.
- PATCH /web/recipient/:id requires the full recipient body (fetch first, then patch).
- Schedule timestamp is ms since epoch; 0 means immediate send.
- NOTIFYER_API_BASE_URL must be HTTPS — reject any http:// value.
- Meta WhatsApp Coexistence is supported. Do NOT tell users to delete the WhatsApp Business app.
- Webhooks fire for incoming AND outgoing messages (including hand-typed WhatsApp Business app replies).
Payload fields: incoming_message (boolean), send_by ("WhatsApp App" | teammate name | automation name),
was_message_by_human (boolean). last_messages is often a JSON string — parse it.
- Full webhook reference: https://docs.whatsable.app/guides/notifyer-system/api/incoming-message
- Coexistence / embedding: https://docs.whatsable.app/guides/notifyer-system/embedding-process
Reference:
- Full API documentation: https://github.com/Whatsable/whatsapp-business-agent-skills
- Script reference: skills/chat-notifyer/scripts/ and skills/automate-notifyer/scripts/
```
Project Knowledge supports up to **10,000 characters**. The block above is intentionally concise. Expand it with specific endpoint shapes or payload examples if your project needs precise API call generation.
***
## Option 2 — AGENTS.md in your GitHub repo
For rules that must survive long Lovable chat sessions, add an `AGENTS.md` file to the root of the GitHub repository linked to your Lovable project. Lovable always reads root-level `AGENTS.md` files regardless of session length.
Create `AGENTS.md` in your repo root:
```markdown theme={null}
# Notifyer WhatsApp Integration Rules
## Authentication
- Console API: `Authorization: Bearer ${NOTIFYER_API_TOKEN}` + `Origin: https://console.notifyer-systems.com`
- Chat API: `Authorization: ${NOTIFYER_API_TOKEN}` (no Bearer) + `Origin: https://chat.notifyer-systems.com`
- Base URL from `NOTIFYER_API_BASE_URL` env var (always HTTPS)
## 24-hour messaging window
- Free-text and media can only be sent if the recipient messaged us within the last 24 hours
- If window is closed, use a template message
- Check window via GET /api:bVXsw_FD/web/recipient — look at expiration_timestamp
## Coexistence and webhooks
- Do NOT tell users to delete the WhatsApp Business app. Meta WhatsApp Coexistence is supported.
- Webhooks fire for incoming AND outgoing messages, including hand-typed WhatsApp Business app replies.
- Payload: `incoming_message` (boolean), `send_by` (`WhatsApp App` | teammate name | automation), `was_message_by_human` (boolean)
- Docs: https://docs.whatsable.app/guides/notifyer-system/api/incoming-message
## Safe PATCH pattern
- Before PATCH /web/recipient/:id, always GET the full record first
- Include all existing fields in the PATCH body (name, phone_number, phone_number_string,
global_label, is_ai_assistant, note) to prevent accidental data wipe
## Environment variables
- NOTIFYER_API_BASE_URL — required
- NOTIFYER_API_TOKEN — required, JWT from login
- Never commit tokens to Git
```
***
## Example Lovable prompts
With the project knowledge or `AGENTS.md` in place, use Lovable's Agent mode to build Notifyer-powered features:
### Send a WhatsApp message from a form
```
Add a "Send WhatsApp" button to the CustomerDetail page.
When clicked, it should call a Supabase Edge Function that sends a WhatsApp text message
via the Notifyer Chat API to the customer's phone number.
Use NOTIFYER_API_BASE_URL and NOTIFYER_API_TOKEN from environment variables.
Only send if the 24-hour window is open; otherwise show an error: "Window closed — use a template."
```
### Send a template when window is closed
```
In the CustomerDetail page, add a "Send Reminder" button.
The Edge Function should first check the recipient's expiration_timestamp.
If the 24h window is open, send a free-text message.
If closed, send the payment_reminder WhatsApp template instead.
Both paths use the Notifyer Chat API with the correct auth header (no Bearer prefix).
```
### Broadcast from the dashboard
```
Add a "Send Broadcast" section to the Marketing page.
It should let the user pick an approved template from a dropdown (fetched from
GET /api:AFRA_QCy/templates_web on the Notifyer Console API with Bearer auth),
upload a CSV of phone numbers, and trigger a broadcast via the Notifyer API.
```
### Webhook receiver
```
Create a Supabase Edge Function at /notifyer-webhook that receives POST requests
from Notifyer's IO webhook. Validate the HMAC-SHA256 signature using NOTIFYER_WEBHOOK_SECRET.
The webhook fires for incoming AND outgoing messages (including replies typed in the
WhatsApp Business app — coexistence is supported; do not tell users to delete the app).
Insert a row into the messages table with:
{ phone, body, direction: incoming_message ? "inbound" : "outbound",
send_by, was_message_by_human, received_at }
When incoming_message is false, send_by is "WhatsApp App" (phone), a teammate name
(Notifyer inbox), or an automation name.
```
### Label and handoff from the app UI
```
In the ConversationView component, add two buttons:
1. "Assign to Human" — calls PATCH /api:bVXsw_FD/web/recipient/:id with is_ai_assistant: false
using the Notifyer Chat API (Authorization: without Bearer).
2. "Assign Label" — shows a dropdown of available labels and calls the same PATCH endpoint
with the updated global_label array.
Both should fetch the full recipient record first before patching.
```
## Incoming and outgoing WhatsApp messages
Notifyer delivers **both incoming and outgoing** messages to your webhook or automation trigger — including messages typed by hand in the **WhatsApp Business app** on your phone.
This is possible because Notifyer supports [Meta WhatsApp Coexistence](/guides/notifyer-system/embedding-process#whatsapp-coexistence). You keep using WhatsApp Business on your phone; those hand-typed replies still reach an external webhook and can start an automation. They are not limited to the Notifyer web inbox.
The payload is the same whether you use [n8n](/guides/notifyer-system/n8n-overview), [Make](/guides/notifyer-system/make-overview), [Zapier](/guides/notifyer-system/zapier-overview), or a [custom webhook](/guides/notifyer-system/api/incoming-message). [Watch the walkthrough on YouTube](https://www.youtube.com/watch?v=UfW-KwS4gBI).
### Direction, sending system, and team member
Use these three fields to tell *what happened* and *who sent it*:
`true` when a contact sent a message **to** your business. `false` when your business sent a message **to** the contact (outgoing). Filter on this field to run logic only for one direction.
Which system or person sent an **outgoing** message:
| `send_by` value | Meaning |
| - | - |
| `WhatsApp App` | Typed by hand in the WhatsApp Business app on a phone |
| A team member's name (for example `Axel Meta`) | Sent from the Notifyer chat inbox by that logged-in user |
| An automation or app name (Make, Zapier, n8n, API, bot) | Sent by that integration or bot |
Empty or omitted on incoming messages.
`true` when a person sent the message (WhatsApp Business app or Notifyer chat inbox). `false` when a bot or automation sent it. Combine with `send_by` to see both *whether* a human sent it and *which teammate or system* did.
### Example payload: message typed on the phone
This is the JSON Notifyer POSTs when someone types a reply in the WhatsApp Business app. `incoming_message` is `false`, `send_by` is `"WhatsApp App"`, and `was_message_by_human` is `true`.
```json theme={null}
{
"last_messages": "[{\"type\":\"bot\",\"content\":\"Hello n8n\",\"timestamp\":\"2026-08-15T12:24:47.000Z\",\"content_type\":\"text\"},{\"type\":\"user\",\"content\":\"hi\",\"timestamp\":\"2026-08-12T12:27:42.746Z\",\"content_type\":\"text\"}]",
"conversation_paragraph": "Bot (12:24:47 PM): Hello n8n ; User (12:27:42 PM): hi",
"phone_number": 14155552671,
"recipient_name": "Alex Martinez",
"user_id": "158c59e1-ea85-4d0b-b70c-65328ba67a8e",
"last_message_of_user": "hi",
"last_message_of_bot": "Hello n8n",
"message_type": "text",
"user_last_message_time": 1786722580,
"bot_last_message_time": 1786797014,
"attachment_url": null,
"note": "email: alex\nName: Alex",
"note_automation": "email: alex\nName: Alex",
"labels": "n8n, webhook-test",
"incoming_message": false,
"send_by": "WhatsApp App",
"was_message_by_human": true
}
```
`last_message_of_bot` is the last message **your business** sent — whether a human typed it in the WhatsApp Business app or the Notifyer inbox, or a bot/automation sent it. `last_messages` is a JSON **string** of the last \~20 messages (parse it before iterating). `phone_number` may arrive as a number rather than a string.
When the same person sends from the Notifyer chat inbox instead of the phone app, the payload is identical except:
```json theme={null}
{
"incoming_message": false,
"send_by": "Axel Meta",
"was_message_by_human": true
}
```
***
## Using Plan mode before building
For complex integrations, click **Plan** next to the message input to switch to Plan mode before any code is written. Plan mode never modifies your code — it only reasons and proposes an approach.
```
I want to integrate Notifyer WhatsApp messaging into this app.
We need to: send template messages when a new order is created, receive inbound
AND outbound messages via webhook (including WhatsApp Business app replies;
incoming_message, send_by, was_message_by_human), and show chat history in the CustomerDetail page.
What's the best architecture using Supabase Edge Functions?
```
When you're happy with the plan, approve it and Lovable automatically switches to **Agent mode** to implement each piece. The approved plan is saved to `.lovable/plan.md` in your project.
***
## Environment variables by backend
Lovable supports two distinct backends. The env var workflow is different for each.
Lovable Cloud is Lovable's own full-stack hosting platform — no external Supabase account needed. It handles the backend automatically.
When Lovable generates an Edge Function that calls the Notifyer API, instruct it to read secrets from environment variables:
```
Store NOTIFYER_API_BASE_URL and NOTIFYER_API_TOKEN as secrets in
Lovable Cloud and read them inside the Edge Function with
Deno.env.get("NOTIFYER_API_TOKEN").
```
Lovable Cloud manages the secret injection automatically as part of the Cloud environment. You can review and manage Cloud settings via **Connectors → App connectors → Lovable Cloud → Manage permissions**.
If your project uses the Supabase integration (you connected your own Supabase project via **Project settings → Integrations → Supabase**):
1. Open your **Supabase dashboard** → **Settings → Edge Functions → Secrets**
2. Add `NOTIFYER_API_BASE_URL` and `NOTIFYER_API_TOKEN` as secrets
3. Reference them in Edge Functions with `Deno.env.get("NOTIFYER_API_TOKEN")`
Never pass `NOTIFYER_API_TOKEN` as a hardcoded string in Edge Function code — it would be visible in your GitHub repository.
If you've exported your Lovable project to GitHub and are hosting it yourself, configure environment variables through your host's standard mechanism (e.g. Vercel env vars, Railway secrets, `.env` on a VPS).
***
## Important constraints
These operations **cannot** be done via Lovable or any API — they require the Notifyer Console web UI:
* Initial WhatsApp number connection (embedded signup / QR scan)
* Billing and Stripe plan changes
* Meta template approval (timing is controlled by Meta, not the API)
***
## Related pages
* [Quickstart](/guides/notifyer-system/agent-skills/quickstart)
* [Auth & environment](/guides/notifyer-system/agent-skills/auth-and-env)
* [Security](/guides/notifyer-system/agent-skills/security)
* [Using with Cursor](/guides/notifyer-system/agent-skills/platforms/cursor) — install skills locally if you work on the Lovable project in Cursor
* [Lovable Agent mode docs](https://docs.lovable.dev/features/agent-mode)
* [Lovable Knowledge docs](https://docs.lovable.dev/features/knowledge)
* [Lovable Plan mode docs](https://docs.lovable.dev/features/plan-mode)
# Quickstart
Source: https://docs.whatsable.app/guides/notifyer-system/agent-skills/quickstart
Install Notifyer Agent Skills and run the first health checks and API calls.
This guide assumes **Node.js 18+**. The skills use native `fetch` and ESM and intentionally avoid third-party dependencies.
## Choose an installation path
If your agent supports the AgentSkills ecosystem, install directly from the repository:
```bash theme={null}
# Interactive — choose which skills to install
npx skills add whatsable/whatsapp-business-agent-skills
```
```bash theme={null}
# Install all 3 skills at once (no prompt)
npx skills add whatsable/whatsapp-business-agent-skills --all
```
```bash theme={null}
# Install only one skill
npx skills add whatsable/whatsapp-business-agent-skills --skill chat-notifyer
```
If your goal is “just make my agent fully capable in Notifyer”, use `--all` so it can load `setup-notifyer`, `automate-notifyer`, and `chat-notifyer` as needed.
```bash theme={null}
git clone https://github.com/Whatsable/whatsapp-business-agent-skills
cd whatsapp-business-agent-skills
```
Each skill is self-contained under `skills//`.
## Set required environment variables
You need:
* `NOTIFYER_API_BASE_URL`
* `NOTIFYER_API_TOKEN` (JWT from `setup-notifyer/scripts/login.js`)
```bash theme={null}
export NOTIFYER_API_BASE_URL="https://api.insightssystem.com"
export NOTIFYER_API_TOKEN="eyJ..." # set after login
```
For deeper detail (auth modes, origins, and safety), see [Auth & environment](/guides/notifyer-system/agent-skills/auth-and-env).
## Log in and capture a token
```bash theme={null}
cd skills/setup-notifyer
node scripts/login.js --email you@example.com --password "YourPassword@1"
```
The output includes `authToken`. Export it:
```bash theme={null}
export NOTIFYER_API_TOKEN="eyJ..."
```
If you’re also running the Notifyer Chat frontend locally for UI testing, use the pinned dev URL `http://localhost:5173/` as documented in `chat.notifyer_frontend/README.md`.
## Run a pre-flight health check
Before running any automation or chat script, validate the account is in a healthy state.
```bash theme={null}
cd skills/setup-notifyer
node scripts/doctor.js --pretty
```
`doctor.js` validates, in one command:
* Base URL is set and HTTPS
* Token is valid (`/auth/me`)
* WhatsApp connection is usable (`isConnected` + degraded detection)
* Subscription is in an allowed state
## Verify identity + WhatsApp connection
```bash theme={null}
node scripts/get-me.js --pretty
node scripts/get-connection-status.js --pretty
```
## Next steps (pick your goal)
* **Workspace setup & infra**: [`setup-notifyer`](/guides/notifyer-system/agent-skills/setup-notifyer)
* **Automation primitives**: [`automate-notifyer`](/guides/notifyer-system/agent-skills/automate-notifyer)
* **Live chat ops**: [`chat-notifyer`](/guides/notifyer-system/agent-skills/chat-notifyer)
If you’re stuck, see [Troubleshooting](/guides/notifyer-system/agent-skills/troubleshooting).
# Security
Source: https://docs.whatsable.app/guides/notifyer-system/agent-skills/security
Security model and best practices for using Notifyer Agent Skills, JWTs, Developer API keys, and webhook signatures.
## Secrets you must protect
| Secret | What it does | Treat as |
| - | - | - |
| `NOTIFYER_API_TOKEN` (JWT) | Authenticates Console + Chat script access | Session secret |
| Developer API key | Authenticates Make/Zapier/n8n + developer send endpoints | Long-lived API secret |
| Webhook signature secret | Validates inbound webhook authenticity (HMAC) | Long-lived signing secret |
Do not store any of these in Git, client-side code, screenshots, or public pastebins.
## Recommended storage
* **Local dev**: `.env` (gitignored) or your shell profile + a password manager
* **CI/CD**: secrets manager (GitHub Actions secrets, Vercel env, 1Password, etc.)
* **Servers**: environment variables provisioned at deploy time
## CLI operational security
### Avoid leaking passwords via process lists
When using `--password` flags, be aware flags can show up in process lists while the script is running. On shared machines, consider running login in a private terminal session and avoid persistent command history.
### Avoid logging tokens
Some scripts print structured JSON to stdout by design. If you pipe outputs into logs, redact secrets.
## Webhook authenticity
If you enable `--signature` during webhook creation, Notifyer generates an HMAC secret. You should:
* Store it immediately
* Verify webhook payload signatures on your server
* Rotate by creating a new webhook (if rotation is needed)
If you lose the signature secret, you generally cannot retrieve it again. Create a new webhook.
## Least privilege + operational controls
* Prefer using an **Admin** token only when required (team, labels, bot defaults).
* Use `setup-notifyer/scripts/doctor.js` as a gating step before production automation runs.
* For incident response, revoke/rotate credentials in the UI where available and update your secrets store.
# setup-notifyer
Source: https://docs.whatsable.app/guides/notifyer-system/agent-skills/setup-notifyer
Account + workspace setup scripts: login, health checks, WhatsApp connection status, plans, team/roles, labels, and Developer API key.
Start here. `setup-notifyer` provides authentication and **pre-flight validation** used by all other skills.
## What this skill covers
`setup-notifyer` is used for:
* Creating accounts and logging in (JWT acquisition)
* Verifying token, plan status, and WhatsApp connection health
* Managing team members, roles, and label assignment
* Creating and managing workspace labels + keywords
* Retrieving the **Developer API key** used by Make/Zapier/n8n modules
## Setup
```bash theme={null}
cd skills/setup-notifyer
```
Set env vars (see [Auth & environment](/guides/notifyer-system/agent-skills/auth-and-env)):
```bash theme={null}
export NOTIFYER_API_BASE_URL="https://api.insightssystem.com"
export NOTIFYER_API_TOKEN="eyJ..." # after login
```
## Core workflows
### 1) Login (get a JWT)
```bash theme={null}
node scripts/login.js --email you@example.com --password "YourPassword@1"
```
Export `authToken` into `NOTIFYER_API_TOKEN`.
### 2) Pre-flight health check (recommended before any automation)
```bash theme={null}
node scripts/doctor.js --pretty
```
This checks:
* Base URL is HTTPS
* Token is valid via `/auth/me`
* WhatsApp connection is **connected** and not **degraded**
* Plan is in an allowed state
### 3) WhatsApp connection checks
```bash theme={null}
node scripts/get-connection-status.js --pretty
```
If connection state is stale after UI onboarding:
```bash theme={null}
node scripts/refresh-connection.js --pretty
```
Initial WhatsApp connection (embedded signup / QR scan) is **browser-only**. Scripts can manage a connection *after* it exists, but cannot complete first-time setup. You do **not** need to delete the WhatsApp Business app — [coexistence](/guides/notifyer-system/embedding-process#whatsapp-coexistence) is supported.
### 4) Plans & usage
```bash theme={null}
node scripts/list-plans.js --pretty
node scripts/get-user-plan.js --pretty
```
If you’re guiding an automation that needs integrations or bots, gate it by plan status first using `get-user-plan.js`.
### 5) Team & roles
```bash theme={null}
node scripts/list-members.js --labels --pretty
node scripts/invite-member.js --name "John" --email john@co.com --password "Pass@1" --role "Team Member" --labels "Sales,Support"
node scripts/update-member.js --id --role Admin
node scripts/remove-member.js --id --confirm
```
Roles:
* `Admin`
* `Team Member (All Labels)`
* `Team Member`
### 6) Labels & keywords
```bash theme={null}
node scripts/list-labels.js --pretty
node scripts/create-label.js --label "Support" --keywords "help,issue,ticket"
node scripts/update-label-keywords.js --id 5 --add "urgent"
node scripts/delete-label.js --id 5 --confirm
```
## Developer API key (Make/Zapier/n8n)
Retrieve the Developer API key:
```bash theme={null}
node scripts/get-api-key.js --pretty
```
The Developer API key is **not** the JWT token. It is used as `Authorization: ` (raw) by external tools and developer endpoints.
## Script index (high-signal)
* **Auth**: `create-account.js`, `login.js`, `get-me.js`
* **Health**: `doctor.js`
* **Connection**: `get-connection-status.js`, `refresh-connection.js`
* **Plans**: `list-plans.js`, `get-user-plan.js`
* **Team**: `list-members.js`, `invite-member.js`, `update-member.js`, `remove-member.js`
* **Labels**: `list-labels.js`, `create-label.js`, `update-label-keywords.js`, `delete-label.js`
* **API key**: `get-api-key.js`
## Next
* Move to automation: [`automate-notifyer`](/guides/notifyer-system/agent-skills/automate-notifyer)
* Or operate live chat: [`chat-notifyer`](/guides/notifyer-system/agent-skills/chat-notifyer)
# Troubleshooting
Source: https://docs.whatsable.app/guides/notifyer-system/agent-skills/troubleshooting
Diagnose common failures (401, degraded WhatsApp connection, plan blocks, template status, 24h window, webhooks).
## First command to run
Before debugging anything else:
```bash theme={null}
cd skills/setup-notifyer
node scripts/doctor.js --pretty
```
It validates the most common root causes in one pass (base URL, token, connection, plan).
## Authentication failures (HTTP 401 / 403)
### Token expired or missing
Symptoms:
* Most scripts return 401
* `get-me.js` fails
Fix:
```bash theme={null}
cd skills/setup-notifyer
node scripts/login.js --email you@example.com --password "YourPassword@1"
export NOTIFYER_API_TOKEN="eyJ..."
node scripts/get-me.js --pretty
```
### Wrong auth mode header
Symptoms:
* Console scripts work, chat scripts fail (or vice versa)
What to know:
* Console uses `Authorization: Bearer `
* Chat uses `Authorization: ` (raw)
The skills handle this automatically, but custom wrappers often get it wrong. See [Auth & environment](/guides/notifyer-system/agent-skills/auth-and-env).
## WhatsApp connection issues
### `isConnected: false`
Run:
```bash theme={null}
cd skills/setup-notifyer
node scripts/get-connection-status.js --pretty
```
If the number was just connected in the UI, refresh:
```bash theme={null}
node scripts/refresh-connection.js --pretty
```
If this is a first-time setup, you must complete the embedded signup / QR scan in the console UI. It is not scriptable.
### `degraded: true`
This can mean Meta returned hidden errors that may cause silent send failures. Treat it as “not healthy” until resolved. Use the console UI to resolve Meta-side issues, then re-check status.
## Plan blocks (features not available)
Symptoms:
* Developer API key exists but integrations/bots fail
* Bot creation fails due to missing OpenAI key/settings
Check:
```bash theme={null}
cd skills/setup-notifyer
node scripts/get-user-plan.js --pretty
```
## Template issues
### Template not usable yet
Templates must be `APPROVED` by Meta before use in automation/broadcasts.
```bash theme={null}
cd skills/automate-notifyer
node scripts/list-templates.js --pretty
node scripts/list-templates.js --status approved --pretty
```
## Message send failures in chat
### 24-hour window is closed
If free text fails, check:
```bash theme={null}
cd skills/chat-notifyer
node scripts/get-recipient.js --phone 14155550123 --pretty
```
Fix: use a template send (`send-template.js`) until the recipient messages again.
## Webhook issues
### Wrong webhook type / id
* Dev webhook id is **integer**
* IO webhook id is a **text UUID**
```bash theme={null}
cd skills/automate-notifyer
node scripts/list-webhooks.js --type dev --pretty
node scripts/list-webhooks.js --type io --pretty
```
### Signature secret lost
If you created a webhook with `--signature`, the secret is shown only once. If you didn’t store it, create a new webhook and deprecate the old one.
# Use cases
Source: https://docs.whatsable.app/guides/notifyer-system/agent-skills/use-cases
End-to-end playbooks: onboarding, templates, broadcasts, chat triage, and webhook-driven operations.
## Workspace onboarding automation
Goal: create a clean, operational workspace baseline that’s ready for automation and live chat.
```bash theme={null}
# 1) Authenticate
cd skills/setup-notifyer
node scripts/login.js --email you@example.com --password "YourPassword@1"
export NOTIFYER_API_TOKEN="eyJ..."
# 2) Validate health
node scripts/doctor.js --pretty
# 3) Create labels
node scripts/create-label.js --label "Sales" --keywords "pricing,quote,buy"
node scripts/create-label.js --label "Support" --keywords "help,issue,ticket"
node scripts/create-label.js --label "VIP"
# 4) Invite team
node scripts/invite-member.js --name "Amina" --email amina@co.com --password "Pass@1" --role "Team Member" --labels "Support"
node scripts/invite-member.js --name "Omar" --email omar@co.com --password "Pass@1" --role "Team Member" --labels "Sales"
# 5) Fetch Developer API key (for Make/Zapier/n8n)
node scripts/get-api-key.js --pretty
```
## Template lifecycle management
Goal: submit a template, track approval, then use it in a broadcast.
```bash theme={null}
cd skills/automate-notifyer
# Create template
node scripts/create-template.js \
--name order_shipped \
--category UTILITY \
--body "Hi {{1}}, your order {{2}} has shipped!" \
--variables '{"1":"John","2":"#12345"}'
# Poll status (also syncs PENDING from Meta)
node scripts/list-templates.js --pretty
# Use only after approved
node scripts/list-templates.js --status approved --pretty
```
## Broadcast campaign management
Goal: test + upload audience + schedule a bulk send.
```bash theme={null}
cd skills/automate-notifyer
node scripts/create-broadcast.js \
--name "Feb Promo" \
--template-id 42 \
--test-phone "+14155550123" \
--recipients ./recipients.csv \
--schedule "01/02/2026 10:00" \
--delivery-mode smart \
--delivery-size 4
node scripts/list-broadcasts.js --status upcoming --pretty
```
## Live support triage loop
Goal: find unread high-priority conversations, take over, respond, document, and return to bot.
```bash theme={null}
cd skills/chat-notifyer
# 1) Find unread VIP
node scripts/filter-recipients-by-label.js --labels "VIP" --status unread --pretty
# 2) Load context
node scripts/get-recipient.js --phone 14155550123 --pretty
node scripts/get-notes.js --phone 14155550123 --pretty
node scripts/get-conversation.js --phone 14155550123 --pretty
# 3) Take over + respond
node scripts/set-handoff.js --phone 14155550123 --mode human
node scripts/send-text.js --phone 14155550123 --text "Hi — I’m looking into this now."
# 4) Record internal context + route
node scripts/add-note.js --phone 14155550123 --append "Escalated — awaiting refund approval"
node scripts/assign-label.js --phone 14155550123 --label "Escalated"
# 5) Return to bot
node scripts/set-handoff.js --phone 14155550123 --mode bot
```
## Pre-flight gating before any send
These checks prevent most “why didn’t it send?” incidents.
```bash theme={null}
# Workspace health: token + connection + plan
cd skills/setup-notifyer
node scripts/doctor.js --pretty
# Recipient window state (templates always allowed; text/media need window open)
cd ../chat-notifyer
node scripts/get-recipient.js --phone 14155550123 --pretty
```
## Webhook-driven automation setup
Goal: configure a webhook endpoint that receives **incoming and outgoing** WhatsApp messages (including replies typed in the WhatsApp Business app) and secure it with HMAC signature.
```bash theme={null}
cd skills/automate-notifyer
node scripts/create-webhook.js --type dev \
--url "https://my.app/webhook" \
--incoming --outgoing --signature
node scripts/list-webhooks.js --type dev --pretty
```
`--outgoing` is required for phone-app and inbox replies. Payload fields: `incoming_message`, `send_by`, `was_message_by_human`. See [Message webhooks](/guides/notifyer-system/api/incoming-message) and [coexistence](/guides/notifyer-system/embedding-process#whatsapp-coexistence).
# Bot Configuration
Source: https://docs.whatsable.app/guides/notifyer-system/ai-chatbot/configuration
Field-by-field reference for every AI agent setting in Whatsable — identity, knowledge, sendable files, instructions, response, labels, handoff, and follow-ups.
You can create as many agents as your plan allows and assign them per WhatsApp number. The configuration form is the same whether you are creating a new agent or editing an existing one.
## Opening the form
* **Create**: From the [AI Chatbots](/guides/notifyer-system/ai-chatbot/overview) dashboard, click **Create agent**.
* **Edit**: Click **Edit** on any existing agent. The form loads with saved values pre-filled.
The editor sidebar follows this order:
1. **Agent identity**
2. **Knowledge base**
3. **Files it can send**
4. **Custom instructions**
5. **Response settings**
6. **Labels**
7. **Notifications**
8. **Follow-ups**
9. **Review** (readiness checklist — not a separate saved field)
New agents start as **Draft**. Activate or archive them from the dashboard list, not from this form body.
***
## Agent identity
Defines who the agent is for your team. Customers never see these fields.
An internal label operators see in the inbox and on the assign menu (for example `Sales concierge`). Max **60** characters.
Customers never see this name.
One sentence the agent works from on every reply — what the job is (pricing, booking, qualifying leads). Max **20,000** characters.
Rules and exceptions belong in **Custom instructions**, not here.
**Good example:** `Qualify inbound leads, answer pricing questions from our published tiers, and book a demo when the customer is ready.`
“Default” is **per WhatsApp number**, not a single flag on the agent itself. An agent becomes the org-wide default when every connected number points at it (dashboard **Set as default** / number assignment).
***
## Knowledge base
Price lists, policies, and product sheets the agent answers from. Knowledge is **optional for Save** — an agent can still be saved with only Name, Mission, and Instructions — but without knowledge it answers only from the mission and custom instructions.
### Data sources (file uploads)
Upload documents Whatsable parses into text for the agent. Supported formats:
| Format | Notes |
| - | - |
| `.pdf` | Text is extracted; image-only PDFs yield no content |
| `.txt` | Plain text, read as-is |
| `.md` | Markdown |
| `.csv` | Useful for catalogues or FAQ tables |
| `.docx` | Word documents; text extracted automatically |
**Limits:** each file must be within the media size cap (typically **10 MB**). On create, files stay **staged** until the first successful save, then upload.
Statuses you may see: **Processing**, **Ready**, **Failed**, or **Waiting** (staged). Failed reasons are closed classes such as unsupported type, timeout, unreadable, or empty — never a raw parser dump.
If the agent is **Archived**, knowledge uploads are disabled until you restore it.
### Written knowledge
Short facts that belong in text rather than a file: hours, a delivery price, a promise you never make. Max **200,000** characters.
Leave this empty if uploads cover everything. Empty knowledge does **not** block Save (it only affects the readiness score).
***
## Files the agent can send
Distinct from the knowledge base. **Knowledge is what the agent knows. Files are what it can send** — the agent never reads the file bytes; it chooses a file only from the description you write.
Cap: **10** sendable files per agent.
Required to add a file. Max **1,000** characters. This sentence is the only thing the model uses to decide when to send the attachment.
**Example:** `The 2026 price list, with delivery times for each region — send when a customer asks for pricing in writing.`
A sendable file **without a description** cannot be chosen by the agent. Write a clear description before you rely on the agent to send that file.
Optional display name (max **120** characters). Falls back to the original filename when empty. Editable later without re-uploading.
Per-file switch. Turn off to keep the file uploaded but stop the agent from sending it, without deleting the row.
Archived agents cannot accept new sendable files until restored. On create, chosen files stay staged until the first save.
***
## Custom instructions
Rules for every reply this agent sends. The mission says what the job is; these lines say how to do it. **Required to Save** in the current editor. Max **80,000** characters.
Write **one rule per line**. Typical uses:
* Topics the agent must never discuss
* Questions it must ask before booking or quoting
* Formatting preferences
* When to add or remove a label (name the label exactly as it appears under **Labels**)
**Example:**
```
Always ask for the customer's order number before discussing a refund.
Never mention competitor products.
If you do not know, say so — do not invent a price.
Add Hot lead when they ask to reserve or hold stock.
```
***
## Response settings
Controls how the agent communicates and when it returns after a human reply — not what facts it knows.
### How should the agent sound?
Free-text voice for ordinary replies (max **300** characters). Blank is allowed; when blank at runtime the platform falls back to a friendly default.
Four presets fill the input (you can still edit the text afterward):
| Preset | Feel |
| - | - |
| **Friendly** | Warm, informal |
| **Professional** | Clipped, precise |
| **Balanced** | Middle ground |
| **Enthusiastic** | High energy |
Follow-up voice is steered separately under **Follow-ups** → **What to say in a follow-up**.
### How long should the agent wait before it sends a reply?
Debounce after the customer writes, before the agent’s answer goes out. Range **0–300** seconds (slider). Default **5**.
**0 is legal** — the turn can start immediately. A short wait feels more human and lets several quick messages batch into one reply.
This wait **does not** apply to proactive follow-ups.
**Recommended starting point:** about 8–12 seconds for most businesses. Use a low value for high-volume queues; raise it when customers tend to send several short messages before finishing their question.
### Once you reply by hand
What happens after you or a teammate reply manually (including from the WhatsApp Business app). Options:
| Option | Behaviour |
| - | - |
| **The agent stays off until someone turns it back on** (`never`) | Default. Agent stays quiet on that chat until re-enabled. |
| **The agent resumes when the customer starts a new conversation** (`new_session`) | Stays off for the current session; returns on a new conversation. |
| **The agent resumes after a set time** (`timer`) | Stays quiet for the duration you set, then can answer again. |
Shown only when the policy is **The agent resumes after a set time**. Range **1–10,080** minutes (1 minute to 7 days). Required when that policy is selected.
The quiet period restarts if you write again. Replies from the Whatsable dashboard vs the mobile app may differ in how the timer is started — see [Shared team inbox](/guides/notifyer-system/team-inbox) for operator behaviour in the live chat.
***
## Labels
Lets the agent add or remove conversation labels you grant it. Powers default **on**.
When on, the agent may tag conversations according to your label instructions and grants.
When on, the agent may remove granted labels when instructions say so.
Shown when add is enabled. Range **1–5**. Leave unset (**Use the maximum**) to use the platform max of **5**.
Same pattern as the add cap: **1–5**, or unset for the platform max of **5**.
| Mode | Behaviour |
| - | - |
| **Every label** (`all`) | May use any label in the organization, including ones created later. Grant checkboxes appear selected and disabled. |
| **Only the ones I pick** (`listed`) | May use only the labels you tick (max **20**). |
If label powers are **on**, grant mode is **Only the ones I pick**, and **no labels are ticked**, the agent has nothing it can apply. The editor shows a readiness warning — labels will look broken until you grant at least one label or switch to **Every label**.
Policy text the model reads every turn (max **10,000** characters). Describe the moment in plain language.
**Example:** `Add Hot lead when they ask to hold stock. Remove it once they pay.`
***
## Notifications
When a customer wants a person, the agent steps back, the thread can be left unassigned, and a teammate can pick it up. Keywords catch explicit phrases; the situations box catches the rest.
There is **no** separate notification toggle on this form (including no “Human Agent Request Notification” control). Configure keywords and situations here; team alerting follows product handoff behaviour.
### Which words mean they want a person?
Words or short phrases that, when present in a customer message, signal human assistance. Matching is **case-insensitive**.
Limits: up to **25** keywords, each up to **120** characters.
**Common examples:** `agent`, `human`, `speak to someone`, `real person`, `talk to a person`
Add rows with **Add keyword**; remove with the control on each chip.
### Besides those words, when should it hand over?
Plain-language situational escalation — anger, a large refund, a safety issue — even when no keyword matched. Max **10,000** characters. This is **policy for the model**, not a WhatsApp message body.
**Example:** `Hand over when the customer is frustrated or angry; when discussing refunds over $500; when a product safety issue is reported; when three exchanges have not resolved the issue.`
Leave blank if you only want keyword-based handoff.
Keywords and situations work together. Keywords catch explicit asks; situations catch contextual ones.
***
## Follow-ups
Outbound chase when a conversation goes quiet after your side (or the agent) sent a WhatsApp message. Cadence fields appear only while follow-ups are enabled; turning the master switch off hides them in the UI but stored values are kept for when you turn it back on.
### Master switch
Master switch. Off by default. When on, an unanswered outbound message can start a follow-up sequence inside the budget and window you set.
### Cadence
Enter delays as **days + hours + minutes** (they add up to a single minute total stored by the API).
Delay from the unanswered outbound before the first follow-up. Range **1–43,200** minutes (**30 days**). Default **4 hours**. Must be **strictly less than** **Stop following up after**.
Hard stop window from that same unanswered outbound. Range **2–129,600** minutes (**90 days**). Default **120 hours** (5 days).
Every follow-up in the stretch must go out before this deadline.
Some on-screen validation copy may still mention a **30-day** window maximum. The platform contract allows up to **90 days**.
Budget for **one quiet stretch**, not a lifetime cap. Range **1–15**. Default **3**. If the customer replies and later goes quiet again, the budget can restart for the new stretch.
Minimum spacing between one follow-up and the next. Range **0–43,200** minutes. Default **0**.
| Option | Behaviour |
| - | - |
| **Evenly** | Same gap between each follow-up |
| **Sooner rather than later** | More of them early in the window (default) |
| **Later rather than sooner** | More of them toward the deadline |
A slot that would land in quiet hours or on a quiet day is **skipped**, not moved to the next open slot.
### Quiet hours, quiet days, and timezone
Quiet-hour start and end (hours **0–23**). Leave **both** empty to allow any hour. Setting only one side clears both on save.
Whole calendar days with no follow-ups (Sunday–Saturday), evaluated in the follow-up timezone.
You cannot mark **all seven** weekdays as quiet. That would make every follow-up impossible; leave at least one day open, or turn follow-ups off.
Timezone for quiet hours and quiet days (for example `Europe/Madrid`). Curated list plus stored or browser zones. Default **UTC**.
### Follow-up content and risky toggles
Used **only** when composing a follow-up, not ordinary replies. Max **12,000** characters. Say what to offer, what never to promise, and not to repeat the last message.
**On by default.** The agent can still follow up when a customer goes quiet after your side replied — from the inbox, the WhatsApp phone app, or your own API integration.
**Keep following up even after a reply from your side** defaults to **on**. That is easy to miss: follow-ups can continue after a human, phone-app, or API outbound. Turn **off** so any outbound from your side ends follow-ups on that conversation for good.
**Off by default.**
Turning **Also follow up after a broadcast** on can start a follow-up sequence for every recipient of a large blast. Keep it off unless you intentionally want that blast radius.
**Off by default.** Outside the customer **24-hour** service window, WhatsApp only allows an approved template. With this on, the agent may propose a new template for Meta review on your WhatsApp account — enabling it is that consent. Templates it wrote are marked in your template list.
A follow-up sent **outside the 24-hour window** is treated as **marketing**. It is subject to per-country limits and can affect your number’s quality rating. Enable **Let the agent write templates** only if you understand that trade-off; turning authoring on is Meta template-submit consent.
Shown only when template authoring is on. Range **0–20**. Default **2**.
***
## Saving the configuration
Click **Save** when ready. The editor blocks save until:
1. **Name** is not empty
2. **Mission** is not empty
3. **Instructions** are not empty
Knowledge text and knowledge files are **not** save blockers (they affect readiness score only). Follow-up cadence fields are validated when follow-ups are enabled (ranges, first delay inside the window, quiet-day rules).
On success the agent is created or updated and you return to the AI agents list. New agents are not automatically the default — assign numbers or use **Set as default** on the dashboard.
Editing an agent does **not** rewrite conversations already in progress. Changes apply to the **next** message processed after save.
### Related tools (not config fields)
* **Improve my agent** — helps organize mission, knowledge, instructions, handoff, and follow-up text before you apply them to the form.
* **Test your agent** — sandbox preview; nothing is sent to WhatsApp.
* **Review** — live readiness checklist before save.
***
## Next steps
Dashboard actions, plan requirements, and how an agent processes messages end-to-end.
How operators take over a chat, resume policies, and live inbox behaviour.
Connect a WhatsApp number to your workspace before an agent can go live.
# AI Chatbots
Source: https://docs.whatsable.app/guides/notifyer-system/ai-chatbot/overview
Create and manage AI-powered WhatsApp assistants that handle customer conversations automatically — 24/7, on-brand, and with built-in human handoff.
AI Chatbots are available on the **Pro** and **Agency** plans. Bulk Message subscribers will see an upgrade prompt instead of the bot dashboard.
## What are AI Chatbots?
Whatsable AI Chatbots are intelligent WhatsApp assistants powered by OpenAI. Each bot is trained with your business's own knowledge base and configured with a distinct personality, response style, and escalation rules — so customers get accurate, on-brand answers around the clock without any manual effort.
Once live, your bot:
* Reads each incoming WhatsApp message and generates a contextually accurate reply from your knowledge base
* Waits a configurable delay before sending (to feel human, not robotic)
* Detects human-handoff keywords and notifies your team the moment a customer asks to speak with someone
* Follows your custom escalation instructions for edge cases that go beyond the knowledge base
## Dashboard overview
The AI Chatbots dashboard (`/ai-bots`) lists every bot in your workspace as cards. The default bot always appears first with a **Default** star badge.
| Action | How |
| - | - |
| **Create a bot** | Click **Create New Bot** in the top-right corner |
| **Search** | Type in the search bar to filter bots by name |
| **Sort** | Use the sort dropdown to switch between **Newest** and **Oldest** |
| **Edit** | Click **Edit** on a bot card to open the full configuration form |
| **Set as default** | Click **Set Default** on any non-default bot card |
| **Duplicate** | Open the ⋮ menu → **Duplicate** — clones all settings as a new bot named `(Copy)` |
| **Delete** | Open the ⋮ menu → **Delete** — requires confirmation |
Only one bot can be **default** at a time. The default bot is the one Whatsable uses when no specific bot is assigned to an incoming conversation.
## Plan requirements
AI Chatbots require a **Pro** or **Agency** subscription. Workspace owners on the Bulk Message plan will see an upgrade notice in place of the bot dashboard. Visit your [Pricing Plans](/pricing-plans) page to upgrade.
| Plan | AI Chatbot access |
| - | - |
| Bulk Message | ✗ Not included |
| Pro | ✓ Full access |
| Agency | ✓ Full access + multiple phone numbers |
## How a bot processes a message
A customer sends a WhatsApp message to your connected number.
The bot waits for the configured **Response Delay** (5–60 seconds). If the customer sends more messages in that window, they are batched and answered together.
The bot constructs a response using your **Business Mission**, **Knowledge Base**, **Custom Instructions**, and selected **Tone**.
If any **Trigger Keyword** is detected, or the **Custom Handoff Scenarios** condition is met, the bot stops replying and (optionally) sends you a notification.
The response is delivered to the customer over WhatsApp.
***
## Bot assignment in Notifyer Chat
Once you have bots configured, you control which bot handles each conversation from the [Notifyer Chat](https://chat.notifyer-systems.com/) interface. Assignment can be automatic (via the default bot) or manually overridden per conversation.
### Auto-assignment — the default bot
When a new inbound WhatsApp message starts a conversation and no specific bot has been manually assigned to that contact, the system automatically uses the bot marked as **Default** in your AI Chatbots dashboard.
Only one bot can be the default at a time. To change which bot handles new conversations automatically, go to the [AI Chatbots dashboard](/guides/notifyer-system/ai-chatbot/overview) and click **Set Default** on the bot you want.
### Manual assignment per conversation
Every conversation in Notifyer Chat has a right-side contact panel. Inside that panel, under the **AI Assistant** section, is a **Bot Assign** dropdown.
In [Notifyer Chat](https://chat.notifyer-systems.com/), select any conversation. The contact details panel opens on the right.
Scroll to the **AI Assistant** section. Below the AI / Human Agent toggle you will see a **Bot Assign** selector showing either the currently assigned bot name or **Select Bot**.
Click the dropdown and choose any bot from your workspace. The assignment updates immediately — the selected bot takes over responses for that conversation from the next incoming message.
A checkmark appears next to the currently assigned bot so you always know which one is active.
If a bot is already assigned, the dropdown shows an **Unassign Bot** option at the top. Selecting it removes the bot assignment from that contact entirely and falls back to the default bot for any future messages.
### AI Assistant / Human Agent toggle
Alongside bot assignment, each conversation has a **Human Agent ↔ AI Assistant** toggle.
| Position | Behaviour |
| - | - |
| **AI Assistant** (on) | The assigned bot handles replies automatically; messages are also synced with connected automation tools (Zapier, Make, n8n, etc.) |
| **Human Agent** (off) | The bot stops replying; a team member takes over manually; automation sync is paused |
When a customer triggers a **handoff keyword** or the bot's **Custom Handoff Scenarios** are met, flip this toggle to **Human Agent** to mute the bot and take control of the conversation yourself.
### Assignment priority summary
| Scenario | Bot used |
| - | - |
| New conversation, no manual assignment | Default bot |
| Manual assignment set in the contact panel | Manually assigned bot |
| Bot unassigned in the contact panel | Default bot (fallback) |
| Toggle switched to Human Agent | No bot — human only |
***
## Next steps
A field-by-field breakdown of every setting in the bot configuration form — identity, knowledge base, tone, delay, and handoff.
Connect a WhatsApp number to your workspace before deploying a bot.
# What Click-to-WhatsApp fields appear on Whatsable webhooks?
Source: https://docs.whatsable.app/guides/notifyer-system/api/ctwa-referral-fields
Map Click-to-WhatsApp referral on Whatsable webhooks: source_type, source_id, source_url, headline, body, media, ctwa_clid, and first-message context fields.
When someone taps **Send message** on a Click-to-WhatsApp ad (Facebook, Instagram, or WhatsApp Status) and writes to your number, Meta attaches a `referral` object to that inbound event. Whatsable forwards it on your custom webhook and on n8n, Make, and Zapier triggers — so you can see which creative, platform, and click produced the lead.
This page is the **dedicated field dictionary** for that `referral` object (and the first-message fields that ride alongside it). For the full inbound/outbound webhook payload, signature verification, and management API, use [Message webhooks](/guides/notifyer-system/api/incoming-message) — including the live [Click-to-WhatsApp ads](/guides/notifyer-system/api/incoming-message#click-to-whatsapp-ads) section.
## Prerequisites
* **Whatsable account** with a connected WhatsApp Business number (Embedded Signup / Coexistence supported — keep the WhatsApp Business app; do not uninstall it after connect).
* **Incoming** webhook or automation trigger enabled so contact → business messages reach your endpoint (custom HTTPS webhook, or [n8n](/guides/notifyer-system/n8n-overview) / [Make](/guides/notifyer-system/make-overview) / [Zapier](/guides/notifyer-system/zapier-overview)).
* **HTTPS endpoint** that accepts `POST` JSON and returns 2xx within \~10 seconds (same requirements as [Message webhooks](/guides/notifyer-system/api/incoming-message)).
* Optional: a CRM or Conversions API destination ready to store `ctwa_clid` and `source_id` as soon as they arrive (they usually appear **once**).
Integrations (Zapier / Make / n8n) require **Pro** or **Agency**. Custom webhooks follow your Developer settings. This page does not invent plan gates beyond that — see [plans Bulk Message / Pro / Agency](/guides/notifyer-system/plans-bulk-message-pro-agency).
***
## What `referral` is for
| Goal | Fields to use |
| - | - |
| Group leads by campaign or creative | `source_id`, `headline` |
| See Facebook vs Instagram vs other | `source_url` (host is `instagram.com`, `facebook.com`, `fb.me`, …) |
| Show agents the ad the lead saw | `headline`, `body`, `image_url` / `video_url`, `media_type` |
| Send conversions back to Meta | `ctwa_clid` |
`referral` is typically present only on the **first inbound message** after the ad click. Later messages in the same chat usually omit it. Persist `ctwa_clid` and `source_id` (keyed on the contact's phone) as soon as they arrive.
WhatsApp Status ad placements may omit `ctwa_clid`. Organic posts use `source_type: "post"` instead of `"ad"`.
***
## Referral object — field dictionary
Look for `referral` as a **top-level** field on the Whatsable webhook payload, or at `entry[].changes[].value.messages[].referral` if the delivery includes the Meta Cloud API envelope.
| Exact key | Type | Meaning |
| - | - | - |
| `referral` | object | Present on incoming CTWA / post events; omitted on ordinary chats and most follow-ups |
| `referral.source_type` | string | `"ad"` or `"post"` |
| `referral.source_id` | string | Meta ad or post ID |
| `referral.source_url` | string | URL of the ad or post (platform is in the host) |
| `referral.headline` | string | Ad or post headline |
| `referral.body` | string | Ad or post body copy (may include emoji shortcodes such as `:fire:`) |
| `referral.media_type` | string | `"image"` or `"video"` |
| `referral.image_url` | string | Image creative URL when `media_type` is `"image"` (URLs can expire — copy assets you need to keep) |
| `referral.video_url` | string | Video creative URL when `media_type` is `"video"` |
| `referral.thumbnail_url` | string | Thumbnail URL for video creatives |
| `referral.ctwa_clid` | string | Click ID for Meta Conversions API attribution (`action_source: "business_messaging"`, `messaging_channel: "whatsapp"`) |
| `referral.welcome_message` | object | Optional. Welcome message configured on the ad, when Meta includes it. **Nested keys are not documented** — treat as an opaque object until product publishes children |
Do **not** invent nested keys under `welcome_message` (for example `text` or `type`). Docs name the object only. Do **not** invent Meta-only names (`ads_context_data`, `source_app`, …) as Whatsable webhook fields. Do **not** confuse Facebook Lead Ads form webhooks with WhatsApp CTWA `referral`.
***
## First-message fields on the same event
Creative and attribution live under `referral.*`. The contact's first text rides on the **same** inbound payload in the usual message fields — useful for CRM notes and routing, not a separate inbox creative UI schema.
| Exact key | Role alongside `referral` |
| - | - |
| `incoming_message` | `true` on contact → business |
| `last_message_of_user` | Latest user text (sample: `"Quiero información"`) |
| `last_messages` | Recent thread (array or JSON string — parse before iterating) |
| `message_type` | e.g. `text` |
| `phone_number` | Contact digits (string or number) |
| `recipient_name` | Display name if available |
| `conversation_paragraph` | Human-readable summary |
Do **not** invent inbox-only creative field names. Whatsable documents webhook / trigger forwarding of `referral`; it does not publish a separate inbox “creative card” field list.
***
## Sample payload (Whatsable flattened shape)
```json theme={null}
{
"last_messages": [
{
"type": "user",
"content": "Quiero información",
"timestamp": "2026-08-15T18:18:36.000Z",
"content_type": "text"
}
],
"conversation_paragraph": "User (6:18:36 PM): Quiero información",
"phone_number": "50655550100",
"recipient_name": "Maria Lopez",
"user_id": "9232fcef-a570-4a2c-b46b-6cab53aec304",
"last_message_of_user": "Quiero información",
"last_message_of_bot": "",
"message_type": "text",
"incoming_message": true,
"send_by": "",
"was_message_by_human": true,
"referral": {
"source_type": "ad",
"source_id": "52540693396957",
"source_url": "https://www.instagram.com/p/DZiVBz7gAF9/",
"headline": "Expo Nissan",
"body": "Aprovechá la EXPONISSAN y llevate tu nuevo Nissan Kicks Play Sense MT con condiciones que juegan a tu favor.",
"media_type": "image",
"image_url": "https://scontent.xx.fbcdn.net/v/t45.1600-4/example.jpg",
"ctwa_clid": "AfhN-JKvx8HeFTmfB-Tu11zktQRJ-MNdMV1mwvDNxHnpYrGl-jVf3OEFhLva_MP41zYRe5ErUteWFn3v4gkkjzfIEVr9J_u8GAo3-o6DqShykM4Zsl14FcU5MyThsCoQ"
}
}
```
`video_url`, `thumbnail_url`, and `welcome_message` are documented LIVE keys; they may be absent from a given sample when Meta did not send them.
***
## Delivery paths
| Destination | How `referral` arrives |
| - | - |
| Custom HTTPS webhook | Whatsable POSTs the payload including `referral` when present |
| n8n / Make / Zapier triggers | Same object on the trigger; filter when `referral` exists |
| Agent Skills `create-webhook.js --incoming` | Creates a webhook that receives incoming (and `--outgoing` if set) — payload reference stays on Message webhooks |
Field companions when mapping in each tool: [Zapier fields](/guides/notifyer-system/zapier-fields) · [Make fields](/guides/notifyer-system/make-fields) · [n8n fields](/guides/notifyer-system/n8n-fields).
In n8n, Make, or Zapier, add a filter or router: only treat the event as ad-attributed when `referral` exists (or `referral.source_type` is `"ad"`). Map `referral.headline`, `referral.source_url`, and `referral.source_id` into your CRM so reporting matches Meta Ads Manager.
***
## Limits and what this does NOT do
**First inbound only (typical).** Do not expect `referral` on every message in the thread. Store `ctwa_clid` and `source_id` immediately.
**Status ads may omit `ctwa_clid`.** Other referral fields can still be present. Organic posts use `source_type: "post"`.
* **No invent nested `welcome_message` children** — object only until verified.
* **No invent inbox creative UI schema** beyond webhook forwarding of `referral.*`.
* **No Facebook Lead Ads form** payload as CTWA — different Meta product.
* **No legacy Bot / legacy `/guides/webhooks`** envelope as the CTWA shape — use [Message webhooks](/guides/notifyer-system/api/incoming-message).
* **No pixel / CAPI claims beyond** documented use of `ctwa_clid` with Meta Conversions API for Business Messaging.
* Typing-indicator dots and a native drip builder are out of scope for this page.
***
## Related features and next steps
Full inbound/outbound payload, signatures, and CTWA section
Trigger output dictionary including nested `referral`
Module field dictionary for Make
Node field dictionary for n8n
Also: [n8n overview](/guides/notifyer-system/n8n-overview) · [Make overview](/guides/notifyer-system/make-overview) · [Zapier overview](/guides/notifyer-system/zapier-overview) · [Click-to-WhatsApp ads (anchor)](/guides/notifyer-system/api/incoming-message#click-to-whatsapp-ads).
***
## FAQ
### Do Whatsable webhooks include Click-to-WhatsApp ad details?
Yes. When the contact's message comes from a Click-to-WhatsApp ad (or organic post with referral), the payload includes a `referral` object (`source_id`, `source_url`, `source_type`, `headline`, `body`, `media_type`, creative URLs, and usually `ctwa_clid`). Full field list is on this page; parent payload reference: [Message webhooks](/guides/notifyer-system/api/incoming-message#click-to-whatsapp-ads).
### Why is `referral` missing on later messages?
Meta / Whatsable typically attach `referral` only on the **first** inbound after the tap. Persist `ctwa_clid` and `source_id` keyed on `phone_number` when you first see them.
### Where do I look in a Cloud API–shaped delivery?
Use `entry[].changes[].value.messages[].referral`. On the flattened Whatsable webhook body, look for top-level `referral`.
### Can I send `ctwa_clid` to Meta Conversions API?
Yes — that is the documented purpose of `ctwa_clid` (Business Messaging / WhatsApp). Status placements may omit the click ID; do not invent other pixel fields on this webhook.
# Get Templates
Source: https://docs.whatsable.app/guides/notifyer-system/api/get-templates
Retrieve and manage your WhatsApp message templates
Templates are pre-approved message formats that ensure your WhatsApp communications comply with WhatsApp Business policies while maintaining consistent messaging with your audience.
WhatsApp templates are essential for business messaging, enabling you to send structured communications to customers while complying with WhatsApp's policies. This guide covers how to retrieve your templates using our API.
## Overview
Templates serve as the foundation for all non-session messages on WhatsApp Business. Each template:
* Must be pre-approved by WhatsApp before use
* Belongs to a specific category (Marketing, Utility, Authentication)
* Can include variables that personalize messages for each recipient
* Supports multiple languages and formats (text, media, interactive components)
Experiment with the Get Templates API and view responses in real-time
## Get Templates
Retrieve all WhatsApp templates associated with your account, including approval status, variables, and other key properties.
### Endpoint
```
GET https://api.insightssystem.com/api:AFRA_QCy/get_templates
```
### Authentication
All API requests require authentication using your API key. Never share your API keys in client-side code.
Include your API key in all requests using Bearer authentication:
```bash theme={null}
Authorization: Bearer YOUR_API_KEY
```
```javascript theme={null}
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
}
```
### Response
The API returns an array of template objects, each containing detailed information about your WhatsApp templates.
Unique identifier for the template
UUID of the account that owns the template
Unique name identifier of the template
Promotional content and offers
Transactional messages like order confirmations
Security codes and verification messages
Format type of the template (text, media, etc.)
Language code (e.g., "en", "en\_US")
Template is ready to use
Template is awaiting WhatsApp review
Template was rejected by WhatsApp
Number of variable placeholders in the template
Format string showing variable placement (e.g., "\[b:7]")
UUID of the template in our system
### Example Request
```bash cURL theme={null}
curl -X GET \
https://api.insightssystem.com/api:AFRA_QCy/get_templates \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY'
```
```javascript Node.js theme={null}
const axios = require('axios');
async function getTemplates() {
try {
const response = await axios.get(
'https://api.insightssystem.com/api:AFRA_QCy/get_templates',
{
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
}
}
);
console.log(response.data);
return response.data;
} catch (error) {
console.error('Error fetching templates:', error);
}
}
getTemplates();
```
```python Python theme={null}
import requests
url = "https://api.insightssystem.com/api:AFRA_QCy/get_templates"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_KEY"
}
response = requests.get(url, headers=headers)
print(response.json())
```
### Example Response
```json Response theme={null}
[
{
"id": 300,
"user_id": "a9d7c221-62d2-43b5-810a-8a1a71c7820c",
"name": "exclusive_offer_alert",
"category": "MARKETING",
"type": "text",
"language": "en",
"status": "APPROVED",
"variable_counts": 7,
"template_formate": "[b:7]",
"template_id": "6f6e4113-cc8a-4fbe-b98d-2c631d299c6b"
},
{
"id": 150,
"user_id": "a9d7c221-62d2-43b5-810a-8a1a71c7820c",
"name": "general_communication_message",
"category": "UTILITY",
"type": "text",
"language": "en",
"status": "REJECTED",
"variable_counts": 0,
"template_formate": "[]",
"template_id": "75521873-72cd-4c33-9072-c8b901d6f687"
}
]
```
## Response Codes
Your request was successful and the templates have been returned.
Authentication failed. Check that you're using a valid API key.
```json theme={null}
{
"error": {
"code": "unauthorized",
"message": "Invalid API key provided"
}
}
```
Your account doesn't have permission to access templates.
You've exceeded the rate limit. Implement exponential backoff in your requests.
Something went wrong on our end. Please contact support if the issue persists.
```json theme={null}
{
"error": {
"code": "server_error",
"message": "An internal server error occurred"
}
}
```
## Working with Templates
Use the Get Templates API to fetch all templates associated with your account.
Verify that your templates are in the "APPROVED" status before using them.
Note the `variable_counts` and `template_formate` to understand how many variables need to be provided when sending a message.
Use the template ID and required variables to send messages via the [Send Template API](/api-reference/notifier-system/send-template).
## Template Best Practices
Keep track of which variables correspond to which placeholders in your template. Consider creating a mapping in your application.
Templates can't be edited after submission, but you can create new versions. Use a versioning system in your template names (e.g., welcome\_v2).
Regularly check the status of your templates, as WhatsApp can change approval statuses based on user feedback.
Create templates in multiple languages to communicate with your global audience in their preferred language.
## FAQs
WhatsApp typically reviews templates within 24-48 hours, but this can vary depending on template content and current review volumes.
Templates may be rejected if they violate WhatsApp's Business Policy, contain prohibited content, or don't match the selected category. Check our [Template Guidelines](/guides/whatsapp/template-guidelines) for more information.
No, once submitted, templates cannot be modified. You'll need to create a new template with your desired changes.
Text-only templates have a limit of 1,024 characters. Templates with media have different limits based on the header type.
Our support team is available 24/7 to assist with template issues, API integration, or any other questions.
# Message webhooks
Source: https://docs.whatsable.app/guides/notifyer-system/api/incoming-message
Receive incoming and outgoing WhatsApp messages via webhooks — including replies typed in the WhatsApp Business app and Click-to-WhatsApp ad referral data (creative, platform, ctwa_clid).
Message webhooks POST a JSON payload to your HTTPS endpoint whenever a WhatsApp message is **received or sent** on your connected number — including messages typed by hand in the WhatsApp Business app.
**Meta WhatsApp Coexistence is supported on Notifyer System.** You do **not** need to delete the WhatsApp Business app or stop using the number on your phone. After Embedded Signup, the same number works in the WhatsApp Business app, the Notifyer chat inbox, and automations (Make, Zapier, n8n, API, and webhooks) at the same time.
Configure an endpoint once, then use it from n8n, Make, Zapier, or your own server. This page is the full payload reference.
## Overview
Webhooks are HTTP callbacks that Notifyer sends to your server when a message event occurs. They cover:
* **Incoming messages** — a contact writes to your business
* **Outgoing messages** — your business sends a message, including:
* Hand-typed replies in the **WhatsApp Business app** on a phone
* Messages sent from the **Notifyer chat inbox** (with the teammate's name)
* Messages sent by **Make, Zapier, n8n, the API, or a bot**
* **Click-to-WhatsApp ads** — when the inbound message came from a Facebook, Instagram, or WhatsApp Status ad, a `referral` object identifies the creative, platform, and click (`ctwa_clid`)
Use this to trigger automations, sync CRMs, attribute ad leads, and log full conversation history — not only inbound chat.
## Webhook Configuration
### Managing Endpoints
Navigate to the Developer section in your dashboard sidebar to manage webhook configurations.
Add a new webhook URL. Enable **incoming**, **outgoing**, or both depending on which events your endpoint should receive.
### Endpoint Requirements
All webhook endpoints must be publicly accessible via HTTPS and configured to accept POST requests with JSON payloads. HTTP endpoints are not supported in production environments.
Your webhook endpoint must:
1. Accept HTTP POST requests
2. Process JSON payloads
3. Return a 2xx status code within 10 seconds
4. Implement idempotency handling (see best practices below)
## Incoming and outgoing WhatsApp messages
Notifyer delivers **both incoming and outgoing** messages to your webhook or automation trigger — including messages typed by hand in the **WhatsApp Business app** on your phone.
This is possible because Notifyer supports [Meta WhatsApp Coexistence](/guides/notifyer-system/embedding-process#whatsapp-coexistence). You keep using WhatsApp Business on your phone; those hand-typed replies still reach an external webhook and can start an automation. They are not limited to the Notifyer web inbox.
The payload is the same whether you use [n8n](/guides/notifyer-system/n8n-overview), [Make](/guides/notifyer-system/make-overview), [Zapier](/guides/notifyer-system/zapier-overview), or a [custom webhook](/guides/notifyer-system/api/incoming-message). [Watch the walkthrough on YouTube](https://www.youtube.com/watch?v=UfW-KwS4gBI).
### Direction, sending system, and team member
Use these three fields to tell *what happened* and *who sent it*:
`true` when a contact sent a message **to** your business. `false` when your business sent a message **to** the contact (outgoing). Filter on this field to run logic only for one direction.
Which system or person sent an **outgoing** message:
| `send_by` value | Meaning |
| - | - |
| `WhatsApp App` | Typed by hand in the WhatsApp Business app on a phone |
| A team member's name (for example `Axel Meta`) | Sent from the Notifyer chat inbox by that logged-in user |
| An automation or app name (Make, Zapier, n8n, API, bot) | Sent by that integration or bot |
Empty or omitted on incoming messages.
`true` when a person sent the message (WhatsApp Business app or Notifyer chat inbox). `false` when a bot or automation sent it. Combine with `send_by` to see both *whether* a human sent it and *which teammate or system* did.
### Example payload: message typed on the phone
This is the JSON Notifyer POSTs when someone types a reply in the WhatsApp Business app. `incoming_message` is `false`, `send_by` is `"WhatsApp App"`, and `was_message_by_human` is `true`.
```json theme={null}
{
"last_messages": "[{\"type\":\"bot\",\"content\":\"Hello n8n\",\"timestamp\":\"2026-08-15T12:24:47.000Z\",\"content_type\":\"text\"},{\"type\":\"user\",\"content\":\"hi\",\"timestamp\":\"2026-08-12T12:27:42.746Z\",\"content_type\":\"text\"}]",
"conversation_paragraph": "Bot (12:24:47 PM): Hello n8n ; User (12:27:42 PM): hi",
"phone_number": 14155552671,
"recipient_name": "Alex Martinez",
"user_id": "158c59e1-ea85-4d0b-b70c-65328ba67a8e",
"last_message_of_user": "hi",
"last_message_of_bot": "Hello n8n",
"message_type": "text",
"user_last_message_time": 1786722580,
"bot_last_message_time": 1786797014,
"attachment_url": null,
"note": "email: alex\nName: Alex",
"note_automation": "email: alex\nName: Alex",
"labels": "n8n, webhook-test",
"incoming_message": false,
"send_by": "WhatsApp App",
"was_message_by_human": true
}
```
`last_message_of_bot` is the last message **your business** sent — whether a human typed it in the WhatsApp Business app or the Notifyer inbox, or a bot/automation sent it. `last_messages` is a JSON **string** of the last \~20 messages (parse it before iterating). `phone_number` may arrive as a number rather than a string.
When the same person sends from the Notifyer chat inbox instead of the phone app, the payload is identical except:
```json theme={null}
{
"incoming_message": false,
"send_by": "Axel Meta",
"was_message_by_human": true
}
```
## Webhook payload
When a message is received or sent on your connected number, Notifyer sends a `POST` request to your endpoint with a JSON body.
### Sample payloads
```json Incoming Text Message theme={null}
{
"last_messages": [
{
"type": "user",
"content": "Thank you for the quick response. Can you provide more details about your premium service plans?",
"timestamp": "2025-06-09T22:08:11.990Z",
"content_type": "text"
},
{
"type": "bot",
"content": "I'd be happy to help you explore our premium service options. Let me connect you with a specialist who can provide detailed information.",
"timestamp": "2025-06-09T21:45:30.417Z",
"content_type": "text"
}
],
"conversation_paragraph": "User (10:08:11 PM): Thank you for the quick response. Can you provide more details about your premium service plans? ; Bot (9:45:30 PM): I'd be happy to help you explore our premium service options. Let me connect you with a specialist who can provide detailed information.",
"phone_number": "14155552671",
"recipient_name": "Sarah Johnson",
"user_id": "9232fcef-a570-4a2c-b46b-6cab53aec304",
"last_message_of_user": "Thank you for the quick response. Can you provide more details about your premium service plans?",
"last_message_of_bot": "I'd be happy to help you explore our premium service options. Let me connect you with a specialist who can provide detailed information.",
"message_type": "text",
"user_last_message_time": 1749506891,
"bot_last_message_time": 1749504330,
"attachment_url": null,
"note": "",
"note_automation": "",
"labels": "sales, premium-inquiry",
"incoming_message": true,
"send_by": "",
"was_message_by_human": true
}
```
```json Incoming Media Message theme={null}
{
"last_messages": [
{
"type": "user",
"content": "",
"timestamp": "2025-06-09T14:05:12.000Z",
"content_type": "document",
"media_url": "https://api.insightssystem.com/vault/LSMumRx1/VR-1aHOci6nP28eHWHJH7JauJkc/Ew7R9w../contract_proposal_v2.pdf"
},
{
"type": "bot",
"content": "Please upload the signed contract document when ready, and I'll process it immediately.",
"timestamp": "2025-06-09T14:03:20.000Z",
"content_type": "text"
}
],
"conversation_paragraph": "User (2:05:12 PM): [Document] ; Bot (2:03:20 PM): Please upload the signed contract document when ready, and I'll process it immediately.",
"phone_number": "14155552671",
"recipient_name": "Sarah Johnson",
"user_id": "9232fcef-a570-4a2c-b46b-6cab53aec304",
"last_message_of_user": "",
"last_message_of_bot": "Please upload the signed contract document when ready, and I'll process it immediately.",
"message_type": "document",
"user_last_message_time": 1749472312,
"bot_last_message_time": 1749472200,
"attachment_url": "https://api.insightssystem.com/vault/LSMumRx1/VR-1aHOci6nP28eHWHJH7JauJkc/Ew7R9w../contract_proposal_v2.pdf",
"note": "",
"note_automation": "",
"labels": "contracts, document-processing",
"incoming_message": true,
"send_by": "",
"was_message_by_human": true
}
```
```json Outgoing — typed in WhatsApp Business app theme={null}
{
"last_messages": "[{\"type\":\"bot\",\"content\":\"Hello n8n\",\"timestamp\":\"2026-08-15T12:24:47.000Z\",\"content_type\":\"text\"},{\"type\":\"user\",\"content\":\"hi\",\"timestamp\":\"2026-08-12T12:27:42.746Z\",\"content_type\":\"text\"}]",
"conversation_paragraph": "Bot (12:24:47 PM): Hello n8n ; User (12:27:42 PM): hi",
"phone_number": 14155552671,
"recipient_name": "Alex Martinez",
"user_id": "158c59e1-ea85-4d0b-b70c-65328ba67a8e",
"last_message_of_user": "hi",
"last_message_of_bot": "Hello n8n",
"message_type": "text",
"user_last_message_time": 1786722580,
"bot_last_message_time": 1786797014,
"attachment_url": null,
"note": "email: alex\nName: Alex",
"note_automation": "email: alex\nName: Alex",
"labels": "n8n, webhook-test",
"incoming_message": false,
"send_by": "WhatsApp App",
"was_message_by_human": true
}
```
```json Outgoing — teammate in Notifyer chat theme={null}
{
"last_messages": "[{\"type\":\"bot\",\"content\":\"Hi, I can help with that.\",\"timestamp\":\"2026-08-15T14:02:10.000Z\",\"content_type\":\"text\"}]",
"conversation_paragraph": "Bot (2:02:10 PM): Hi, I can help with that.",
"phone_number": 14155552671,
"recipient_name": "Alex Martinez",
"user_id": "158c59e1-ea85-4d0b-b70c-65328ba67a8e",
"last_message_of_user": "Can you help with scheduling?",
"last_message_of_bot": "Hi, I can help with that.",
"message_type": "text",
"user_last_message_time": 1786722580,
"bot_last_message_time": 1786802530,
"attachment_url": null,
"note": "",
"note_automation": "",
"labels": "support",
"incoming_message": false,
"send_by": "Axel Meta",
"was_message_by_human": true
}
```
```json Incoming — Click-to-WhatsApp ad theme={null}
{
"last_messages": [
{
"type": "user",
"content": "Quiero información",
"timestamp": "2026-08-15T18:18:36.000Z",
"content_type": "text"
}
],
"conversation_paragraph": "User (6:18:36 PM): Quiero información",
"phone_number": "50655550100",
"recipient_name": "Maria Lopez",
"user_id": "9232fcef-a570-4a2c-b46b-6cab53aec304",
"last_message_of_user": "Quiero información",
"last_message_of_bot": "",
"message_type": "text",
"user_last_message_time": 1781734716,
"bot_last_message_time": 0,
"attachment_url": null,
"note": "",
"note_automation": "",
"labels": "",
"incoming_message": true,
"send_by": "",
"was_message_by_human": true,
"referral": {
"source_type": "ad",
"source_id": "52540693396957",
"source_url": "https://www.instagram.com/p/DZiVBz7gAF9/",
"headline": "Expo Nissan",
"body": "Aprovechá la EXPONISSAN y llevate tu nuevo Nissan Kicks Play Sense MT con condiciones que juegan a tu favor.",
"media_type": "image",
"image_url": "https://scontent.xx.fbcdn.net/v/t45.1600-4/example.jpg",
"ctwa_clid": "AfhN-JKvx8HeFTmfB-Tu11zktQRJ-MNdMV1mwvDNxHnpYrGl-jVf3OEFhLva_MP41zYRe5ErUteWFn3v4gkkjzfIEVr9J_u8GAo3-o6DqShykM4Zsl14FcU5MyThsCoQ"
}
}
```
### Payload Fields
Recent messages in the conversation (about the last 20). On webhook deliveries this is typically a **JSON string** — parse it before iterating. Each item includes `type` (`user` or `bot`), `content`, `timestamp`, and `content_type`. Includes messages from the WhatsApp Business app, the Notifyer inbox, automations, and templates.
Sender type ("user" or "bot")
Message content (empty for media messages)
ISO 8601 timestamp when the message was sent
Type of content (text, image, audio, video, document, location)
URL to media file if applicable (valid for 24 hours)
Human-readable summary of the recent conversation
WhatsApp number of the contact in this conversation (digits, often without `+`). On outgoing events this is the person your business messaged. May arrive as a number or a string.
The name of the recipient if available
Unique identifier for the user in your system
The last message sent by the user
The last message your business sent — whether a human typed it in the WhatsApp Business app or Notifyer inbox, or a bot/automation sent it
The type of the latest message (text, image, audio, video, document, location)
Unix timestamp of the user's last message
Unix timestamp of your system's last message
URL to media file if the latest message contains media (null for text messages)
Custom note field for additional context
Automation-related notes
Comma-separated labels for categorizing the conversation
`true` when the contact sent this message to your business. `false` when your business sent it (outgoing). Outgoing events include messages typed in the WhatsApp Business app, sent from the Notifyer chat inbox, or sent by Make, Zapier, n8n, the API, or a bot.
Which system or person sent an outgoing message. `"WhatsApp App"` when typed in the WhatsApp Business app; the logged-in teammate's name when sent from the Notifyer chat inbox; the automation or app name for Make, Zapier, n8n, API, or a bot. Empty on incoming messages.
`true` when a person sent the message (WhatsApp Business app or Notifyer chat inbox). `false` when a bot or automation sent it.
Present on **incoming** events that originated from a Click-to-WhatsApp ad or post. Omitted on ordinary chats and on most follow-up messages after the first ad-attributed inbound. See [Click-to-WhatsApp ads](#click-to-whatsapp-ads).
`"ad"` or `"post"`
Meta ad or post ID
URL of the ad or post (platform is in the host)
Ad or post headline
Ad or post body copy
`"image"` or `"video"`
Image creative URL
Video creative URL
Video thumbnail URL
Click ID for Meta Conversions API attribution
## Click-to-WhatsApp ads
When someone taps **Send message** on a Click-to-WhatsApp ad (Facebook, Instagram, or WhatsApp Status) and writes to your number, Meta attaches a `referral` object to that inbound message. Notifyer passes it through to your [custom webhook](#webhook-payload) and to [n8n](/guides/notifyer-system/n8n-overview), [Make](/guides/notifyer-system/make-overview), and [Zapier](/guides/notifyer-system/zapier-overview) triggers.
Use it to optimize campaigns: see **which creative**, **which platform**, and **which ad** produced the lead, then label the conversation, route it to the right team, or send `ctwa_clid` to Meta's Conversions API.
`referral` is typically present only on the **first inbound message** after the ad click. Later messages in the same chat usually omit it. Persist `ctwa_clid` and `source_id` (keyed on the contact's phone) as soon as they arrive.
WhatsApp Status ad placements may omit `ctwa_clid`. Organic posts use `source_type: "post"` instead of `"ad"`.
### What each field is for
| Goal | Fields |
| - | - |
| Group leads by campaign or creative | `source_id`, `headline` |
| See Facebook vs Instagram vs other | `source_url` (host is `instagram.com`, `facebook.com`, `fb.me`, …) |
| Show agents the ad the lead saw | `headline`, `body`, `image_url` / `video_url`, `media_type` |
| Send conversions back to Meta | `ctwa_clid` |
### Referral object
Look for `referral` as a top-level field on the Notifyer payload, or at `entry[].changes[].value.messages[].referral` if the delivery includes the Cloud API envelope.
`"ad"` when the lead tapped an ad. `"post"` when they came from an organic post.
Meta ID of the ad or post. Use this to group and compare creatives.
URL of the ad or post the contact tapped. The host tells you the platform (for example Instagram permalink vs Facebook/ad link).
Headline shown on the ad or post.
Body copy of the ad or post. May include emoji shortcodes such as `:fire:`.
Creative type: `"image"` or `"video"`.
URL of the image creative when `media_type` is `"image"`. These URLs can expire — copy any asset you need to keep.
URL of the video creative when `media_type` is `"video"`.
Thumbnail URL for video creatives.
Click-to-WhatsApp click ID. Pass this to Meta Conversions API for Business Messaging (`action_source: "business_messaging"`, `messaging_channel: "whatsapp"`) so purchases and qualified leads attribute back to the ad.
Optional. Welcome message configured on the ad, when Meta includes it.
### Cloud API envelope example
This is the Meta WhatsApp Business Account shape. The attribution lives on `messages[].referral`. Contact identifiers in this example are anonymized; the referral fields match a real Instagram Click-to-WhatsApp ad.
```json theme={null}
{
"object": "whatsapp_business_account",
"entry": [
{
"id": "1824807628200899",
"changes": [
{
"field": "messages",
"value": {
"messaging_product": "whatsapp",
"metadata": {
"display_phone_number": "50660039931",
"phone_number_id": "1070485179471457"
},
"contacts": [
{
"profile": {
"name": "Maria Lopez"
},
"wa_id": "50655550100",
"user_id": "CR.10162597228035267"
}
],
"messages": [
{
"from": "50655550100",
"id": "wamid.HBgLNTA2NTU1NTAxMDAVAgASGBQzEXAMPLE",
"timestamp": "1781734716",
"type": "text",
"text": {
"body": "Quiero información"
},
"from_user_id": "CR.10162597228035267",
"referral": {
"source_type": "ad",
"source_id": "52540693396957",
"source_url": "https://www.instagram.com/p/DZiVBz7gAF9/",
"headline": "Expo Nissan",
"body": ":soccer::fire: ¡Llegó el momento de hacer la mejor jugada! :fire:Aprovechá la EXPONISSAN y llevate tu nuevo Nissan Kicks Play Sense MT con condiciones que juegan a tu favor:\n\n:car: Precio de fábrica: $23,900\n:moneybag: Ahorro de $3,000\n:package: Entrega inmediata\n:zap: Financiamiento especial disponible\n\n:hourglass_flowing_sand: Promoción por tiempo limitado.\n\nReservá y cotizá a través de nuestro punto de venta digital:\n:point_right: www.nissancr.com/servicios/solicitar-cotizacion.html\nO contactános por WhatsApp:\n:point_right: https://wa.me/50660039931",
"media_type": "image",
"image_url": "https://scontent.xx.fbcdn.net/v/t45.1600-4/example.jpg",
"ctwa_clid": "AfhN-JKvx8HeFTmfB-Tu11zktQRJ-MNdMV1mwvDNxHnpYrGl-jVf3OEFhLva_MP41zYRe5ErUteWFn3v4gkkjzfIEVr9J_u8GAo3-o6DqShykM4Zsl14FcU5MyThsCoQ"
}
}
]
}
}
]
}
]
}
```
In n8n, Make, or Zapier, add a filter or router: only treat the event as ad-attributed when `referral` exists (or `referral.source_type` is `"ad"`). Map `referral.headline`, `referral.source_url`, and `referral.source_id` into your CRM so reporting matches Meta Ads Manager.
## Webhook Management API
You can programmatically manage your webhook endpoints using our API.
### Create Webhook Endpoint
`POST https://api.insightssystem.com/api:qh9OQ3OW/webhook/dev/create`
Register a new webhook endpoint to receive incoming message notifications. Send a valid **Bearer** token (same credential used for the dashboard).
#### Request Body
Full HTTPS URL of your endpoint.
Whether the webhook is enabled.
Incoming message trigger on/off. When `true`, your endpoint receives messages contacts send to your business.
Outgoing message trigger on/off. When `true`, your endpoint also receives messages your business sends — including hand-typed replies in the WhatsApp Business app, Notifyer chat inbox messages, and messages sent by Make, Zapier, n8n, the API, or a bot. Set this to `true` if an automation must react to messages typed on the phone.
Schedule activity trigger on/off. When enabled, your bot can send multiple sequential messages with natural delays between them — useful for simulating human-like conversation flow.
**How to enable in the dashboard**
Navigate to **Incoming Webhooks**, click the settings icon next to your webhook, then enable **Schedule Activity**. A dropdown will appear where you can select your preferred delay duration between messages.
**Example workflow**
When a user sends an incoming message, you can respond with a sequence of messages each sent after a specified delay:
```json theme={null}
{
"messages": [
{
"text": "Great! Let me check available slots for you...",
"delay": 0
},
{
"text": "I can see openings on Monday and Wednesday.",
"delay": 2000
},
{
"text": "Which day works better for you?",
"delay": 3500
}
]
}
```
Set `waiting_duration` to the maximum delay window you need. When `schedule_activity` is `false`, set `waiting_duration` to `0`.
How long (in **seconds**) to wait for schedule activity when `schedule_activity` is `true`. Set to `0` when schedule activity is off.
Dashboard presets: `15`, `30`, `60`, `1800`, `3600`, `18000`, `36000`, `86400`, `172800`, `259200`, `432000`, `604800`, `1209600`, `2592000`, `5184000` (15 seconds → 2 months). Prefer these values if mirroring the app UI.
If `true`, enables request signing. The server returns a `signature_secret` **once** in the response — copy and store it immediately, as it will not be shown again.
```bash cURL theme={null}
curl -X POST \
https://api.insightssystem.com/api:qh9OQ3OW/webhook/dev/create \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-d '{
"webhooks": "https://your-domain.com/api/webhooks/whatsapp",
"status": true,
"incoming": true,
"outgoing": true,
"schedule_activity": false,
"waiting_duration": 0,
"active_signature": false
}'
```
```javascript Node.js theme={null}
const axios = require('axios');
async function createWebhook() {
try {
const response = await axios.post(
'https://api.insightssystem.com/api:qh9OQ3OW/webhook/dev/create',
{
webhooks: "https://your-domain.com/api/webhooks/whatsapp",
status: true,
incoming: true,
outgoing: true,
schedule_activity: false,
waiting_duration: 0,
active_signature: false
},
{
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_TOKEN'
}
}
);
console.log(response.data);
return response.data;
} catch (error) {
console.error('Error creating webhook:', error);
}
}
createWebhook();
```
```python Python theme={null}
import requests
url = "https://api.insightssystem.com/api:qh9OQ3OW/webhook/dev/create"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_TOKEN"
}
data = {
"webhooks": "https://your-domain.com/api/webhooks/whatsapp",
"status": True,
"incoming": True,
"outgoing": True,
"schedule_activity": False,
"waiting_duration": 0,
"active_signature": False
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
```
#### Response
Returns a JSON object for the created webhook row.
Webhook ID.
Whether the webhook is enabled.
Incoming message trigger.
Outgoing message trigger. When `true`, the endpoint receives messages your business sends, including WhatsApp Business app replies.
Stored endpoint URL.
Unix timestamp in milliseconds.
Schedule activity wait time in seconds.
Schedule activity flag.
When `active_signature` was `true`: a **one-time** secret string — copy and store it immediately, it will not be retrievable again. When `active_signature` was `false`: `null`.
```json With Signature (active_signature: true) theme={null}
{
"id": 1205,
"status": true,
"incoming": true,
"outgoing": true,
"webhooks": "https://your-domain.com/api/webhooks/whatsapp",
"created_at": 1775471874139,
"signature_secret": "",
"waiting_duration": 0,
"schedule_activity": false
}
```
```json Without Signature (active_signature: false) theme={null}
{
"id": 1205,
"status": true,
"incoming": true,
"outgoing": true,
"webhooks": "https://your-domain.com/api/webhooks/whatsapp",
"created_at": 1775471874139,
"signature_secret": null,
"waiting_duration": 0,
"schedule_activity": false
}
```
When `active_signature` is `true`, the `signature_secret` is returned **only once** at creation time. Store it securely — it cannot be retrieved again. Use it to verify the authenticity of incoming webhook requests.
### Webhook Signature Verification
When a webhook is created with `active_signature: true`, every request our system sends to your endpoint will include an **`X-Webhook-Signature`** header. Use it to confirm the request genuinely came from us and was not tampered with.
| Header | Example value |
| - | - |
| `X-Webhook-Signature` | `RNEefV2V_tiDZeiOpeqMzWsR3X4zGOxIYARIF5-Ia2MXWIgT48jO-M4A1-bgr9bxdoHy5vb7azy_Vd-Gsp4qoAVhQCVyWZxhD1ZNJTQi9VNezJ6C7mnPy--osqcDSq1bfjjppAXBlyenWIa8_506ez5Z92p-eGucalu3-1g6wOk` |
The value is derived from the `signature_secret` returned at creation time. Compare it in your endpoint handler to validate each incoming request.
If `active_signature` was `false` when the webhook was created, this header will **not** be present in requests sent to your endpoint.
Never log or expose your `signature_secret` in client-side code or public repositories. If it is compromised, delete the webhook and create a new one with a fresh secret.
## Troubleshooting
* Verify your endpoint is publicly accessible
* Check for HTTP 4xx or 5xx responses
* Ensure proper SSL certificate configuration
* Verify your webhook is enabled in the dashboard
* Confirm **outgoing** is enabled if you expect events for messages you send (including the WhatsApp Business app)
* `referral` is usually only on the **first inbound message** after the ad click. Store `ctwa_clid` and `source_id` immediately.
* Organic messages (not from an ad or post) have no `referral` object.
* WhatsApp Status ad placements may omit `ctwa_clid` even when other referral fields are present.
* Confirm you are looking at `referral` (Notifyer payload) or `messages[].referral` (Cloud API envelope), not a Facebook Lead Ad form submission — that is a different Meta product.
Each endpoint URL must be unique. If you submit a `webhooks` URL that is already registered, the API will return a **"Same webhook exist"** error.
To resolve this:
* Check your existing webhooks in the **Developer → Incoming Webhooks** tab of the dashboard to confirm whether the URL is already registered.
* If you want to update settings on an existing webhook (e.g. toggle `incoming`, change `waiting_duration`), use the update/edit endpoint instead of re-creating it.
* If you genuinely need a fresh webhook at the same URL, delete the existing one first, then create a new one.
## FAQs
Yes. When the contact's message comes from a Click-to-WhatsApp ad, the payload includes a `referral` object (`source_id`, `source_url`, `source_type`, `headline`, `body`, `media_type`, creative URLs, and `ctwa_clid`). Use it to see which creative and platform produced the lead. Full reference: [Click-to-WhatsApp ads](#click-to-whatsapp-ads).
Yes. With [Meta WhatsApp Coexistence](/guides/notifyer-system/embedding-process#whatsapp-coexistence) you keep the WhatsApp Business app on your phone. Enable the **outgoing** trigger. Those messages arrive with `incoming_message: false`, `send_by: "WhatsApp App"`, and `was_message_by_human: true`. They are POSTed to your webhook — they are not limited to the Notifyer web UI.
Read `send_by`. When the message was sent from the Notifyer chat inbox, `send_by` is that user's name (for example `"Axel Meta"`). When it was typed in the WhatsApp Business app, `send_by` is `"WhatsApp App"`. `was_message_by_human` is `true` in both human cases.
Check `message_type` (text, image, audio, video, document, location). For audio, the transcription appears in the text fields when available.
Yes. Return a 2xx HTTP status code for every request so Notifyer does not retry unnecessarily.
Use the Test Webhook feature in the Developer section of your dashboard, or send a message from the WhatsApp Business app after enabling outgoing events.
Our technical support team is available to assist with webhook configuration, payload handling, and integration questions.
# Non-Template Message
Source: https://docs.whatsable.app/guides/notifyer-system/api/non-template-message
Send direct WhatsApp messages with text, media, and rich content without templates
Send instant WhatsApp messages directly to your customers without requiring pre-approved templates. Perfect for quick responses, customer support, and media sharing during ongoing conversations.
The Send Non-Template Message API enables you to send immediate WhatsApp messages including text, images, videos, audio, and documents. This is ideal for customer support scenarios and ongoing conversations where template approval is not required.
## Overview
The Send Non-Template Message API enables you to:
* Send instant text messages with URL previews
* Share images, videos, and documents with captions
* Send audio files and voice messages
* Organize messages with custom labels for analytics
* Respond quickly in customer support scenarios
* Continue conversations without template restrictions
## Send Non-Template Message
Send various types of WhatsApp messages directly to a specific phone number without requiring pre-approved templates.
### Endpoint
```
POST https://api.insightssystem.com/api:U9ztporN/send/message
```
### Authentication
All API requests require authentication using your API key. Never share your API keys in client-side code or public repositories.
Include your API key in all requests using Bearer authentication:
```bash theme={null}
Authorization: Bearer YOUR_API_KEY
```
```javascript theme={null}
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
}
```
### Request Body
The recipient's phone number in international format with country code (e.g., "+15551234567").
The type of message to send. Must be one of: `text`, `image`, `video`, `audio`, `document`.
The type of recipient. Always use "individual" for single recipients.
The messaging platform. Always use "whatsapp".
Array of strings for message categorization and analytics (e.g., \["support", "urgent"]).
### Message Type-Specific Parameters
Text message configuration
The text content of the message (max 4096 characters)
Whether to show URL previews for links in the message
Image message configuration
Public URL to the image file (JPG, JPEG, PNG)
Text caption for the image (max 1024 characters)
Video message configuration
Public URL to the video file (MP4, 3GPP)
Text caption for the video (max 1024 characters)
Audio message configuration
Public URL to the audio file (MP3, AAC, AMR, OGG)
Document message configuration
Public URL to the document file
Text caption for the document (max 1024 characters)
Custom filename for the document (with extension)
### Response
The API returns a detailed response indicating whether the message was accepted for delivery and provides WhatsApp message identifiers for tracking.
Indicates if the request was successfully processed
Details from the WhatsApp Business API about the message delivery
Always "whatsapp" for WhatsApp messages
Information about the message recipient
The phone number that was provided in the request
WhatsApp's unique identifier for the recipient
Details about the sent message
Unique message identifier (wamid) for tracking status
Initial status of the message (typically "accepted")
Present only when an error occurs
Error code identifier
Human-readable error description
### Example Requests
```bash cURL theme={null}
curl -X POST \
https://api.insightssystem.com/api:U9ztporN/send/message \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-d '{
"to": "+15551234567",
"type": "text",
"text": {
"body": "Hello! Thank you for contacting our support team. How can we help you today?",
"preview_url": true
},
"recipient_type": "individual",
"messaging_product": "whatsapp",
"labels": ["support", "greeting"]
}'
```
```javascript Node.js theme={null}
const apiKey = 'YOUR_API_KEY';
async function sendTextMessage() {
try {
const response = await fetch('https://api.insightssystem.com/api:U9ztporN/send/message', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${apiKey}`
},
body: JSON.stringify({
to: '+15551234567',
type: 'text',
text: {
body: 'Hello! Thank you for contacting our support team. How can we help you today?',
preview_url: true
},
recipient_type: 'individual',
messaging_product: 'whatsapp',
labels: ['support', 'greeting']
})
});
const result = await response.json();
console.log(result);
return result;
} catch (error) {
console.error('Error sending message:', error);
}
}
sendTextMessage();
```
```python Python theme={null}
import requests
url = "https://api.insightssystem.com/api:U9ztporN/send/message"
api_key = "YOUR_API_KEY"
payload = {
"to": "+15551234567",
"type": "text",
"text": {
"body": "Hello! Thank you for contacting our support team. How can we help you today?",
"preview_url": True
},
"recipient_type": "individual",
"messaging_product": "whatsapp",
"labels": ["support", "greeting"]
}
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
```
```bash cURL theme={null}
curl -X POST \
https://api.insightssystem.com/api:U9ztporN/send/message \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-d '{
"to": "+15551234567",
"type": "image",
"image": {
"link": "https://storage.googleapis.com/your-bucket/product-demo.jpg",
"caption": "Here'\''s a visual guide to help you get started with our product!"
},
"recipient_type": "individual",
"messaging_product": "whatsapp",
"labels": ["support", "tutorial"]
}'
```
```javascript Node.js theme={null}
const apiKey = 'YOUR_API_KEY';
async function sendImageMessage() {
try {
const response = await fetch('https://api.insightssystem.com/api:U9ztporN/send/message', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${apiKey}`
},
body: JSON.stringify({
to: '+15551234567',
type: 'image',
image: {
link: 'https://storage.googleapis.com/your-bucket/product-demo.jpg',
caption: 'Here\'s a visual guide to help you get started with our product!'
},
recipient_type: 'individual',
messaging_product: 'whatsapp',
labels: ['support', 'tutorial']
})
});
const result = await response.json();
console.log(result);
return result;
} catch (error) {
console.error('Error sending image:', error);
}
}
sendImageMessage();
```
```bash cURL theme={null}
curl -X POST \
https://api.insightssystem.com/api:U9ztporN/send/message \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-d '{
"to": "+15551234567",
"type": "video",
"video": {
"link": "https://storage.googleapis.com/your-bucket/tutorial-video.mp4",
"caption": "Watch this step-by-step tutorial to get started quickly!"
},
"recipient_type": "individual",
"messaging_product": "whatsapp",
"labels": ["support", "tutorial"]
}'
```
```javascript Node.js theme={null}
const apiKey = 'YOUR_API_KEY';
async function sendVideoMessage() {
try {
const response = await fetch('https://api.insightssystem.com/api:U9ztporN/send/message', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${apiKey}`
},
body: JSON.stringify({
to: '+15551234567',
type: 'video',
video: {
link: 'https://storage.googleapis.com/your-bucket/tutorial-video.mp4',
caption: 'Watch this step-by-step tutorial to get started quickly!'
},
recipient_type: 'individual',
messaging_product: 'whatsapp',
labels: ['support', 'tutorial']
})
});
const result = await response.json();
console.log(result);
return result;
} catch (error) {
console.error('Error sending video:', error);
}
}
sendVideoMessage();
```
```python Python theme={null}
import requests
url = "https://api.insightssystem.com/api:U9ztporN/send/message"
api_key = "YOUR_API_KEY"
payload = {
"to": "+15551234567",
"type": "video",
"video": {
"link": "https://storage.googleapis.com/your-bucket/tutorial-video.mp4",
"caption": "Watch this step-by-step tutorial to get started quickly!"
},
"recipient_type": "individual",
"messaging_product": "whatsapp",
"labels": ["support", "tutorial"]
}
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
```
```bash cURL theme={null}
curl -X POST \
https://api.insightssystem.com/api:U9ztporN/send/message \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-d '{
"to": "+15551234567",
"type": "audio",
"audio": {
"link": "https://storage.googleapis.com/your-bucket/voice-instructions.mp3"
},
"recipient_type": "individual",
"messaging_product": "whatsapp",
"labels": ["support", "voice-note"]
}'
```
```javascript Node.js theme={null}
const apiKey = 'YOUR_API_KEY';
async function sendAudioMessage() {
try {
const response = await fetch('https://api.insightssystem.com/api:U9ztporN/send/message', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${apiKey}`
},
body: JSON.stringify({
to: '+15551234567',
type: 'audio',
audio: {
link: 'https://storage.googleapis.com/your-bucket/voice-instructions.mp3'
},
recipient_type: 'individual',
messaging_product: 'whatsapp',
labels: ['support', 'voice-note']
})
});
const result = await response.json();
console.log(result);
return result;
} catch (error) {
console.error('Error sending audio:', error);
}
}
sendAudioMessage();
```
```python Python theme={null}
import requests
url = "https://api.insightssystem.com/api:U9ztporN/send/message"
api_key = "YOUR_API_KEY"
payload = {
"to": "+15551234567",
"type": "audio",
"audio": {
"link": "https://storage.googleapis.com/your-bucket/voice-instructions.mp3"
},
"recipient_type": "individual",
"messaging_product": "whatsapp",
"labels": ["support", "voice-note"]
}
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
```
```bash cURL theme={null}
curl -X POST \
https://api.insightssystem.com/api:U9ztporN/send/message \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-d '{
"to": "+15551234567",
"type": "document",
"document": {
"link": "https://storage.googleapis.com/your-bucket/user-manual.pdf",
"caption": "Here is the complete user manual you requested.",
"filename": "Product_User_Manual_v2.1.pdf"
},
"recipient_type": "individual",
"messaging_product": "whatsapp",
"labels": ["support", "documentation"]
}'
```
```javascript Node.js theme={null}
const apiKey = 'YOUR_API_KEY';
async function sendDocumentMessage() {
try {
const response = await fetch('https://api.insightssystem.com/api:U9ztporN/send/message', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${apiKey}`
},
body: JSON.stringify({
to: '+15551234567',
type: 'document',
document: {
link: 'https://storage.googleapis.com/your-bucket/user-manual.pdf',
caption: 'Here is the complete user manual you requested.',
filename: 'Product_User_Manual_v2.1.pdf'
},
recipient_type: 'individual',
messaging_product: 'whatsapp',
labels: ['support', 'documentation']
})
});
const result = await response.json();
console.log(result);
return result;
} catch (error) {
console.error('Error sending document:', error);
}
}
sendDocumentMessage();
```
```python Python theme={null}
import requests
url = "https://api.insightssystem.com/api:U9ztporN/send/message"
api_key = "YOUR_API_KEY"
payload = {
"to": "+15551234567",
"type": "document",
"document": {
"link": "https://storage.googleapis.com/your-bucket/user-manual.pdf",
"caption": "Here is the complete user manual you requested.",
"filename": "Product_User_Manual_v2.1.pdf"
},
"recipient_type": "individual",
"messaging_product": "whatsapp",
"labels": ["support", "documentation"]
}
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
```
### Example Response
```json Success Response theme={null}
{
"success": true,
"whatsapp_response_info": {
"messaging_product": "whatsapp",
"contacts": [
{
"input": "+15551234567",
"wa_id": "15551234567"
}
],
"messages": [
{
"id": "wamid.HBgLMTU1NTEyMzQ1NjcVAgAERgINQTlEOEJDNzM5QzQwAA==",
"message_status": "accepted"
}
]
}
}
```
```json Error Response theme={null}
{
"success": false,
"error": {
"code": "invalid_phone_number",
"message": "The phone number format is invalid. Please use international format with country code."
}
}
```
## Response Codes
Your request was successful and the message has been accepted for delivery.
The request was invalid. Check the error message for details about missing or invalid parameters.
```json theme={null}
{
"success": false,
"error": {
"code": "missing_required_field",
"message": "The 'to' field is required and must be a valid phone number"
}
}
```
Authentication failed. Verify that you're using a valid API key in the Authorization header.
```json theme={null}
{
"success": false,
"error": {
"code": "unauthorized",
"message": "Invalid API key provided"
}
}
```
Your account doesn't have permission to send messages or has reached its usage limit.
The media file or message content exceeds size limits.
```json theme={null}
{
"success": false,
"error": {
"code": "file_too_large",
"message": "The media file exceeds the maximum allowed size"
}
}
```
The request contains invalid data or the media URL is not accessible.
```json theme={null}
{
"success": false,
"error": {
"code": "invalid_media_url",
"message": "The provided media URL is not accessible"
}
}
```
You've exceeded the rate limit. Implement exponential backoff and retry logic.
An internal server error occurred. Contact support if the issue persists.
```json theme={null}
{
"success": false,
"error": {
"code": "server_error",
"message": "An internal server error occurred. Please try again later."
}
}
```
## Message Types Guide
Understanding the different message types and their optimal use cases will help you choose the right format for your communication needs.
### Text Messages
* Keep messages concise and actionable
* Use URL previews for important links
* Break long messages into multiple shorter ones
* Include clear call-to-action when needed
* Customer support responses
* Order confirmations
* Quick updates and notifications
* FAQ responses
### Media Messages
* **Formats**: JPG, JPEG, PNG
* **Max Size**: 5MB
* **Optimal**: 1080x1080px or 16:9 ratio
* **Use for**: Product photos, screenshots, infographics
* **Formats**: MP4, 3GPP
* **Max Size**: 16MB
* **Max Duration**: 90 seconds
* **Use for**: Tutorials, product demos, explanations
* **Formats**: MP3, AAC, AMR, OGG
* **Max Size**: 16MB
* **Max Duration**: 30 minutes
* **Use for**: Voice messages, audio instructions
* **Formats**: PDF, DOC, DOCX, PPT, PPTX, XLS, XLSX
* **Max Size**: 100MB
* **Use for**: Manuals, invoices, reports, contracts
## Media Requirements
All media URLs must be publicly accessible via HTTPS without requiring authentication. For security-sensitive content, consider using signed URLs with expiration times.
### URL Requirements
Ensure your media URLs are publicly accessible without authentication headers or login requirements.
All media URLs must use HTTPS protocol. HTTP URLs will be rejected.
URLs should point directly to the file, not to a page that contains the file or requires redirects.
Your server should return appropriate Content-Type headers for media files to ensure proper handling.
### Supported Formats
| Media Type | Supported Formats | Max Size | Notes |
| - | - | - | - |
| Images | JPG, JPEG, PNG | 5MB | Animated GIFs not supported |
| Videos | MP4, 3GPP | 16MB | H.264 codec recommended |
| Audio | MP3, AAC, AMR, OGG | 16MB | Stereo or mono |
| Documents | PDF, DOC, DOCX, PPT, PPTX, XLS, XLSX | 100MB | Password-protected files not supported |
## Best Practices
Keep messages concise and actionable. Use rich media when it adds value. Always include clear next steps or calls-to-action when appropriate.
Implement comprehensive error handling with retries. Store failed messages for later retry. Monitor success rates and investigate patterns in failures.
Use CDN for media hosting to ensure fast loading. Implement media validation before sending. Consider file size optimization for better delivery rates.
Use labels consistently for message categorization. Track message IDs for delivery status monitoring. Implement webhook handling for real-time status updates.
## Security Considerations
* Never expose API keys in client-side code
* Use environment variables for key storage
* Rotate keys regularly
* Implement IP whitelisting when possible
* Avoid sending sensitive data in message content
* Use secure, time-limited URLs for confidential documents
* Implement proper access controls
* Follow GDPR and other privacy regulations
## FAQs
Non-template messages can only be sent to users who have initiated a conversation with your WhatsApp Business account within the last 24 hours. For proactive messaging, use the [Template Message API](/api-reference/notifier-system/templates/send-template-message).
Common reasons include: media URL not publicly accessible, incorrect file format, file size exceeding limits, or missing Content-Type headers. Ensure your media URLs return proper HTTP responses and correct MIME types.
Use the message ID returned in the response to track status via webhooks or the [Message Status API](/api-reference/notifier-system/message-status). The initial response only confirms WhatsApp accepted the message, not final delivery.
This API sends messages immediately. For scheduled messaging, implement your own scheduling logic or use our [Scheduled Messages API](/api-reference/notifier-system/scheduled-messages).
Messages will fail if sent to phone numbers without active WhatsApp accounts. The API will return an error indicating the recipient is not reachable on WhatsApp.
Consider implementing timezone-aware sending in your application logic. Send messages during business hours in the recipient's local timezone for better engagement rates.
Our support team is available 24/7 to help with API integration, troubleshooting, or any questions about sending messages.
# Phone replies in WhatsApp Business app still hit your webhook
Source: https://docs.whatsable.app/guides/notifyer-system/api/outbound-whatsapp-app
Keep answering on your phone in the WhatsApp Business app — your n8n, Make, or Zapier webhook still receives the message. Learn the three fields that identify it and how to filter for it.
A reply typed by hand in the **WhatsApp Business app** is still POSTed to your webhook. Your n8n, Make, or Zapier automation still runs.
## The job
You (or a teammate) can keep answering customers directly from the phone, in the WhatsApp Business app — you don't need to delete it. [Meta WhatsApp Coexistence](/guides/notifyer-system/embedding-process#whatsapp-coexistence) keeps that number working in the app and in Notifyer System at once.
Those phone replies are **outgoing** messages, and Notifyer sends them to your webhook or automation trigger when outgoing events are enabled — even though no bot, template, or Notifyer chat inbox was involved. This page shows the exact fields that mark a reply as "typed in the app," and how to filter on them in n8n, Make, or Zapier.
## The three fields
A WhatsApp Business app reply carries this exact combination — `incoming_message: false` (outgoing), `send_by: "WhatsApp App"` (sent from the phone app, not a teammate or an automation), `was_message_by_human: true` (a person typed it, not a bot):
| Field | Value |
| - | - |
| `incoming_message` | `false` |
| `send_by` | `"WhatsApp App"` |
| `was_message_by_human` | `true` |
### Sample payload
Trimmed to the fields you need for filtering — same sanitized sample as the full payload reference:
```json theme={null}
{
"last_messages": "[{\"type\":\"bot\",\"content\":\"Hello n8n\",\"timestamp\":\"2026-08-15T12:24:47.000Z\",\"content_type\":\"text\"},{\"type\":\"user\",\"content\":\"hi\",\"timestamp\":\"2026-08-12T12:27:42.746Z\",\"content_type\":\"text\"}]",
"phone_number": 14155552671,
"recipient_name": "Alex Martinez",
"user_id": "158c59e1-ea85-4d0b-b70c-65328ba67a8e",
"message_type": "text",
"incoming_message": false,
"send_by": "WhatsApp App",
"was_message_by_human": true
}
```
The webhook sends more fields than shown here (`conversation_paragraph`, `last_message_of_user`, `note`, `labels`, and others) — see the [full payload reference](/guides/notifyer-system/api/incoming-message#payload-fields) for every field.
## How to filter for it
### n8n
The Whatsable trigger is labeled **On new Incoming message event** — that's the node's name, not the direction of every event it fires. With outgoing enabled (credential **Notifyer System incoming and outgoing messages**), it also fires for phone-typed replies.
Add the Whatsable node, pick **On new Incoming message event**, and connect the credential covering **Notifyer System incoming and outgoing messages** so outgoing events are included.
Add a **Filter** (or **IF**) node immediately after the trigger.
To match **only** phone-typed replies, add these conditions:
```text theme={null}
{{ $json.incoming_message }} is false
{{ $json.send_by }} is equal to "WhatsApp App"
```
To match **any** human-sent message (phone app or Notifyer chat inbox), use `{{ $json.was_message_by_human }}` is `true` instead, then branch on `{{ $json.send_by }}` to tell them apart.
Full walkthrough: [n8n overview](/guides/notifyer-system/n8n-overview).
### Make and Zapier
Same payload, same field names. Add a **Filter** (Zapier) or **Filter**/**Router** (Make) right after your trigger module, using the three fields above. See [Make overview](/guides/notifyer-system/make-overview) and [Zapier overview](/guides/notifyer-system/zapier-overview).
## Full payload reference
This page only covers filtering. For every field (`last_messages`, `conversation_paragraph`, `note`, `labels`, Click-to-WhatsApp `referral`, and more), see [Message webhooks](/guides/notifyer-system/api/incoming-message).
## Agent Skills
Automating webhook setup instead of using the dashboard? The `automate-notifyer` skill's `create-webhook.js` takes `--incoming` and `--outgoing` flags — enable both so your endpoint also receives WhatsApp Business app replies:
```bash theme={null}
node scripts/create-webhook.js --type dev \
--url "https://your-endpoint.example.com/webhook" \
--incoming --outgoing --signature
```
See [automate-notifyer](/guides/notifyer-system/agent-skills/automate-notifyer) for the full script reference.
## FAQs
No — it's just the node's label. See [filtering in n8n](#n8n) above; check `incoming_message` for the actual direction, not the trigger name.
Both are outgoing and human-sent — `send_by` is what separates them: `"WhatsApp App"` for the phone, or the teammate's name (for example `"Axel Meta"`) for the chat inbox.
No. [Meta WhatsApp Coexistence](/guides/notifyer-system/embedding-process#whatsapp-coexistence) keeps the app and Notifyer System working on the same number at once.
Confirm **outgoing** is enabled on the webhook or credential, then confirm your filter step isn't excluding `incoming_message: false` events by mistake. See [Message webhooks troubleshooting](/guides/notifyer-system/api/incoming-message#troubleshooting).
Our technical support team is available to assist with webhook configuration, payload handling, and integration questions.
# Template Message
Source: https://docs.whatsable.app/guides/notifyer-system/api/template-message
Send personalized WhatsApp messages using pre-approved templates
Templates enable personalized communication while ensuring compliance with WhatsApp's business policies. This API lets you send template-based messages to your customers with dynamic content.
WhatsApp requires businesses to use pre-approved templates for initiating conversations. This API allows you to send template messages with personalized variables, media attachments, and interactive components to your customers.
## Overview
The Send Template Message API enables you to:
* Send WhatsApp messages using your pre-approved templates
* Dynamically replace variables with personalized content
* Attach media (images, videos, documents) when supported by the template
* Include interactive elements like buttons and quick replies
* Track delivery status through WhatsApp response information
Experiment with the Send Template Message API and view responses in real-time
## Send Template Message
Send a personalized WhatsApp template message to a specific phone number.
### Endpoint
```
POST https://api.insightssystem.com/api:hFrjh8a1/send_template_message_by_api
```
### Authentication
All API requests require authentication using your API key. Never share your API keys in client-side code.
Include your API key in all requests using Bearer authentication:
```bash theme={null}
Authorization: Bearer YOUR_API_KEY
```
```javascript theme={null}
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
}
```
### Request Body
The unique identifier of the template to use. You can retrieve this from the [Get Templates API](/api-reference/notifier-system/templates/get-templates).
The recipient's phone number in international format with country code (e.g., "+123476529999").
Object containing key-value pairs for template variables. The keys must match the variable names defined in your template.
Text variables that replace placeholders in the message body (e.g., body1, body2, etc.)
Text variables that replace placeholders in the message header
Public URL to media content (image, video, or document) for templates with media support
Set to "1" to enable dynamic button links in interactive templates
### Response
The API returns a detailed response indicating whether the message was accepted for delivery and provides WhatsApp message identifiers for tracking.
Indicates if the request was successfully processed
Details from the WhatsApp Business API about the message delivery
Always "whatsapp" for WhatsApp messages
Information about the message recipient
The phone number that was provided in the request
WhatsApp's unique identifier for the recipient
Details about the sent message
Unique message identifier (wamid) for tracking status
Initial status of the message (typically "accepted")
Present only when an error occurs
Error code identifier
Human-readable error description
### Example Request
```bash cURL theme={null}
curl -X POST \
'https://api.insightssystem.com/api:hFrjh8a1/send_template_message_by_api' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-d '{
"template": "f10695a9-38d6-4f5f-8444-1f7bf52c6164",
"phone_number": "+123476529999",
"variables": {
"body1": "Axel",
"body2": "Shampoo",
"body3": "$1",
"media": "https://drive.google.com/file/d/1D35uTbceRPmCgwxVfBJZ2yxD2lQgs0bi/view?usp=sharing",
"visit_website": "1"
}
}'
```
```javascript Node.js theme={null}
const fetch = require("node-fetch");
async function sendTemplateMessage() {
try {
const response = await fetch(
'https://api.insightssystem.com/api:hFrjh8a1/send_template_message_by_api',
{
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer YOUR_API_KEY",
},
body: JSON.stringify({
template: "f10695a9-38d6-4f5f-8444-1f7bf52c6164",
phone_number: "+123476529999",
variables: {
body1: "Axel",
body2: "Shampoo",
body3: "$1",
media: "https://drive.google.com/file/d/1D35uTbceRPmCgwxVfBJZ2yxD2lQgs0bi/view?usp=sharing",
visit_website: "1"
}
}),
}
);
const data = await response.json();
console.log(data);
return data;
} catch (error) {
console.error('Error sending template message:', error.response?.data || error.message);
}
}
sendTemplateMessage();
```
```python Python theme={null}
import requests
url = "https://api.insightssystem.com/api:hFrjh8a1/send_template_message_by_api"
payload = {
"template": "f10695a9-38d6-4f5f-8444-1f7bf52c6164",
"phone_number": "+123476529999",
"variables": {
"body1": "Axel",
"body2": "Shampoo",
"body3": "$1",
"media": "https://drive.google.com/file/d/1D35uTbceRPmCgwxVfBJZ2yxD2lQgs0bi/view?usp=sharing",
"visit_website": "1"
}
}
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_KEY"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
```
```go Go theme={null}
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
url := "https://api.insightssystem.com/api:hFrjh8a1/send_template_message_by_api"
// Create request payload
payload := map[string]interface{}{
"template": "f10695a9-38d6-4f5f-8444-1f7bf52c6164",
"phone_number": "+123476529999",
"variables": map[string]interface{}{
"body1": "Axel",
"body2": "Shampoo",
"body3": "$1",
"media": "https://drive.google.com/file/d/1D35uTbceRPmCgwxVfBJZ2yxD2lQgs0bi/view?usp=sharing",
"visit_website": "1",
},
}
// Convert payload to JSON
jsonPayload, err := json.Marshal(payload)
if err != nil {
fmt.Println("Error creating JSON payload:", err)
return
}
// Create request
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonPayload))
if err != nil {
fmt.Println("Error creating request:", err)
return
}
// Add headers
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
// Send request
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Println("Error sending request:", err)
return
}
defer resp.Body.Close()
// Read response
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error reading response:", err)
return
}
fmt.Println("Response:", string(body))
}
```
### Example Response
```json Success Response theme={null}
{
"success": true,
"whatsapp_response_info": {
"messaging_product": "whatsapp",
"contacts": [
{
"input": "+123476529999",
"wa_id": "123476529999"
}
],
"messages": [
{
"id": "wamid.HBgLMTIzNDc2NTI5OTk5FQIAERgSNUU2RjM4NzM1M0Q5OEIwQTQwAA==",
"message_status": "accepted"
}
]
}
}
```
```json Error Response theme={null}
{
"success": false,
"error": {
"code": "invalid_template",
"message": "The template ID provided does not exist or is not approved"
}
}
```
## Response Codes
Your request was successful and the message has been accepted for delivery.
The request was invalid. Check the error message for details.
```json theme={null}
{
"success": false,
"error": {
"code": "invalid_request",
"message": "Missing required field: template"
}
}
```
Authentication failed. Check that you're using a valid API key.
```json theme={null}
{
"success": false,
"error": {
"code": "unauthorized",
"message": "Invalid API key provided"
}
}
```
Your account doesn't have permission to send messages.
The template specified doesn't exist.
```json theme={null}
{
"success": false,
"error": {
"code": "template_not_found",
"message": "Template with ID 'f10695a9-38d6-4f5f-8444-1f7bf52c6164' not found"
}
}
```
The request was well-formed but contains invalid parameters.
```json theme={null}
{
"success": false,
"error": {
"code": "invalid_phone_number",
"message": "The phone number format is invalid"
}
}
```
You've exceeded the rate limit. Implement exponential backoff in your requests.
Something went wrong on our end. Please contact support if the issue persists.
```json theme={null}
{
"success": false,
"error": {
"code": "server_error",
"message": "An internal server error occurred"
}
}
```
## Working with Template Variables
Templates contain placeholders that are replaced with dynamic content when sending messages. Understanding how to map your data to these variables is essential.
### Variable Types
Body and header variables replace text placeholders in your template. They are named `body1`, `body2`, etc., or `header1`, `header2`, etc.
Media variables allow you to attach images, videos, or documents to your template. Provide a public URL in the `media` property.
Used for dynamic buttons in interactive templates. Use `visit_website` set to "1" to enable dynamic button URLs.
For templates with quick reply buttons, provide the text to display on each button.
### Variable Mapping
Examine your template structure to identify which variables are required. You can find this information using the [Get Templates API](/api-reference/notifier-system/templates/get-templates).
Format your data to match the expected variable structure. Ensure values meet any length or format requirements.
Create a `variables` object with keys matching your template's variable names and values from your data.
For media templates, ensure your media URL is publicly accessible and in a WhatsApp-supported format.
## Media Guidelines
When including media in your templates, follow these guidelines for optimal delivery:
* Supported formats: JPG, JPEG, PNG
* Max size: 5MB
* Recommended aspect ratio: 1.91:1
* Supported formats: MP4, 3GPP
* Max size: 16MB
* Max duration: 1 minute
* Supported formats: PDF, DOC, DOCX, PPT, PPTX, XLS, XLSX
* Max size: 100MB
* Must be publicly accessible
* Direct file links (no redirects)
* HTTPS required
Media URLs must be publicly accessible without requiring authentication. For security, we recommend using signed URLs with limited-time access.
## Best Practices
Implement comprehensive error handling to manage API failures gracefully. Always check the `success` field in responses and handle various error scenarios.
Store the returned `message_id` values to track delivery status using the [Message Status API](/api-reference/notifier-system/message-status).
Implement request throttling when sending to multiple recipients to avoid hitting rate limits and ensure reliable delivery.
Test your templates with various inputs to ensure variables are correctly replaced and messages appear as expected.
## FAQs
Messages may fail to deliver for several reasons: invalid phone number, recipient has blocked your WhatsApp Business number, template issues, or WhatsApp temporary service interruptions. Check the error code returned for specific details.
No, recipients must have an active WhatsApp account associated with the phone number you're sending to.
The initial response only confirms that WhatsApp accepted the message. For actual delivery status, implement webhook handling using our [Webhooks API](/api-reference/webhook) or query the [Message Status API](/api-reference/notifier-system/message-status).
No, WhatsApp messages cannot be edited once sent. You would need to send a new message with the corrected information.
Our support team is available 24/7 to assist with template issues, API integration, or any other questions.
# Attio
Source: https://docs.whatsable.app/guides/notifyer-system/attio-overview
Learn how to sync WhatsApp conversations with Attio CRM using the Notifyer System
# Notifyer System Integration with Attio
This guide walks you through connecting Notifyer System with Attio so WhatsApp conversations show up inside your CRM — matched to the right contact, logged as a note, and kept up to date as messages are sent and received.
## Prerequisites
Before getting started, make sure you have:
Active Notifyer System account with a connected WhatsApp number and subscription plan (Pro or Agency)
Access to an [Attio](https://attio.com/) workspace, with permission to install and authorize third-party apps
Your WhatsApp number must already be connected inside Notifyer before you start the Attio integration. If you haven't done that yet, complete the [embedding process](/guides/notifyer-system/embedding-process) first.
New to Notifyer System? [Sign up here](https://console.notifyer-systems.com/)
## What you get with this integration
Every WhatsApp message is matched to the right Attio record by phone number — no manual lookup needed
New WhatsApp senders that don't exist in your CRM yet can be created automatically, with their name and phone number filled in
Incoming and outgoing messages are written into an Attio Note on the matching record, so your team can read conversation history without leaving Attio
Last message, timestamps, labels, country, and more update on the record — visible in your People list
A Live Chat Link field on every record opens the complete WhatsApp thread in Notifyer's live console, already matched to that contact
You choose which Attio object and which attributes receive WhatsApp data — nothing is hard-coded to People only
## Setting up your Notifyer System account
Before any WhatsApp message can sync anywhere, you must complete the platform [embedding process](/guides/notifyer-system/embedding-process), which connects your WhatsApp Business account to Notifyer System.
The embedding process is required by Meta to ensure proper business verification and compliance with WhatsApp Business Platform policies.
Unlike the Pipedrive and Monday.com integrations, the Attio integration does not currently include an action to send WhatsApp template messages from inside Attio. Attio is a sync-in integration today: WhatsApp conversations flow into Attio automatically, but sending messages still happens from the Notifyer chat console, Zapier, Make, n8n, or the Whatsable API. You do not need to set up message templates specifically for Attio.
## Connect Notifyer System to Attio
1. Log in to your **Notifyer Console**
2. In the left sidebar, look for **Attio** in your list of connected tools (you'll see a **New** badge next to it)
3. Click **Attio**, or open it directly at [notifyer.whatsable.app/attio](https://notifyer.whatsable.app/attio)
If you're going through the onboarding checklist for the first time, you'll also find an **Attio** card under **Connect Tools** with the description "See your messages inside Attio Notes and schedule follow-ups."
On the Attio integration page, click **Connect Attio** (it may read **Authorize Attio** if your workspace was already installed but not yet authorized by you — both start the same OAuth flow).
You'll be redirected to Attio's authorization screen. Review the requested access and approve the connection so Notifyer can read and write records, attributes, and notes in your workspace.
After you approve, Attio redirects you back to the Notifyer Console. You'll land on a green **Attio workspace connected** card showing:
* **Workspace** — your Attio workspace name, slug, and logo
* **Authorized by** — the name and email of the teammate who connected the account
* **Connected at** — the date and time the connection was made
If you see this card, your Attio workspace is linked to Notifyer System. Continue below to configure how WhatsApp data flows into it.
Until **Sync Settings** and **Attribute Mapping** are fully configured and saved, Notifyer will not sync WhatsApp messages into Attio. Required fields are marked with a red asterisk (**\***). If anything is missing, **Save settings** shows a validation error.
## Sync Settings reference
Once connected, scroll to **Sync Settings**. This is where you tell Notifyer which Attio object and fields should receive your WhatsApp data.
| Setting | Options | Description |
| - | - | - |
| **Object** (CRM Record Matching) | Person / Company / Deal / User / Workspace, or any custom object | The Attio object incoming WhatsApp numbers are matched against. This also drives auto-create |
| **Phone field** (CRM Record Matching) | Any phone-number attribute on the selected object | Field used to match a WhatsApp number to a record. Only phone-type attributes appear here |
| **Note Destination** | Any object in your workspace | Which Attio object receives the synced WhatsApp conversation note |
| **Note grouping** | Date-wise notes / Combined note | Whether messages are split into a new note per calendar day, or kept in one ongoing note |
| **Auto-create person** | On / Off | Whether Notifyer creates a new record when an incoming WhatsApp number has no match |
| **Timezone** | Any IANA timezone (e.g. `Asia/Dhaka`, `America/New_York`) | Used for message timestamps and for where one "day" starts and ends in date-wise mode |
### CRM Record Matching
Open the **Object** dropdown and pick the Attio object you want WhatsApp contacts matched against. Every object in your workspace appears here — native ones like **Person**, **Company**, **Deal**, **User**, and **Workspace** are labeled **Native**, and anything you built yourself is labeled **Custom**.
Most teams should choose **Person**. It's Attio's default object for individual contacts, and it has the most built-in features (activity feed, emails, calls, tasks) compared to a custom object.
After you pick an object, Notifyer shows: *"This object drives later sync actions, including auto-create."* That means new contacts are created on this object, and later settings (like Auto-create) refer back to it.
Open the **Phone field** dropdown. It only lists attributes on your chosen object whose type is **phone number**. Attio stores phone numbers in that dedicated field type (with a country code selector), so only those attributes can reliably match a WhatsApp number.
If the object you picked has no phone-number field yet, the dropdown is empty (common on **Deal** or some custom objects). In Attio, add a phone-number attribute to that object — or use the built-in **Phone numbers** field on Person — then return to Notifyer and refresh.
Once selected, Notifyer confirms: *"WhatsApp numbers will be matched using the \[field] field on \[object]."*
### Note Destination and Note grouping
In **Note Destination**, choose the object that should receive the WhatsApp conversation note. In most setups this is the same object you picked for CRM Record Matching (for example Person), but you can point it elsewhere when contacts are linked to another object and you want the conversation there.
Notifyer explains the behavior: *"If a contact is linked to \[match object], notes go to \[note destination]. With no link, notes are saved on \[match object]."*
Pick one of the two **Note grouping** options:
* **Date-wise notes** — a new note is created for each calendar day, titled like "WhatsApp Conversation - Jul 30, 2026." Useful for busy conversations you want to scan by day.
* **Combined note** — every message with that contact lives in one growing note, with each line timestamped (for example "at 9:10 pm: message"). Useful when you want the full history in one place.
### Auto-create person
Turn this toggle **on** if you want Notifyer to create a new record on your matched object whenever a WhatsApp number that doesn't exist in Attio messages you for the first time. Notifyer fills in the recipient's name (or "Unnamed person" if WhatsApp doesn't provide one) and their phone number, then logs the first message as a note.
Leave it **off** if you only want to sync conversations for contacts already in Attio — messages from unknown numbers are skipped, with no error and no partial record created.
Despite the label **Auto-create person**, creation always uses the object you selected under **CRM Record Matching** — not only Attio's Person object.
### Timezone Settings
Select your timezone from the dropdown (for example `(GMT+6) Asia/Dhaka`). This controls how message times appear in Attio notes and mapped timestamp fields, and — for date-wise notes — where the boundary between "today" and "tomorrow" falls.
When every Sync Settings field and Attribute Mapping field below is complete, click **Save settings**. You'll see a **Configuration Updated** confirmation when the save succeeds.
## Attribute Mapping reference
Scroll to **Attribute Mapping**. Instead of writing WhatsApp data into fixed columns, you choose which Attio attribute each Notifyer data point should update.
| WhatsApp / Notifyer data point | What gets written | Allowed attribute type |
| - | - | - |
| **Name column** | The contact's display name | `personal-name` (when the object is People/Person) or `text` (other objects) |
| **Last incoming message** | Most recent message text received from this contact | `text` |
| **Last outgoing message** | Most recent message text your team or AI sent | `text` |
| **Last incoming message time/date** | Timestamp of the last received message | `timestamp` |
| **Last outgoing message time/date** | Timestamp of the last sent message | `timestamp` |
| **Labels** | Labels assigned to the conversation in Notifyer | `text` |
| **Country** | Country detected from the contact's phone number | `text` |
| **Note** | The chat note from Notifyer for that contact (if any) | `text` |
| **Automation Note** | A note injected by an upstream automation rule, if one applies | `text` |
| **Live chat link** | Clickable link that opens this contact's full conversation in Notifyer's live console | `text` |
For every row, open the dropdown and choose an attribute on your matched object. If you need a purpose-built field (for example a custom "Last incoming message" text attribute), create it in Attio first, then refresh Notifyer.
Each option shows a badge: **System** for Attio built-in attributes, **Custom** for attributes you or your team created.
Each Attio attribute can be used only once across the mapping. If it's already assigned elsewhere, it shows as **Already used** and can't be selected again.
When every required field in **Sync Settings** and **Attribute Mapping** is filled in, click **Save settings**. You'll see **Configuration Updated** / *Sync settings have been saved successfully.*
Your Attio sync is configured. Send yourself a test WhatsApp message before rolling it out to your team.
If any required field is empty, Notifyer highlights incomplete fields with a red border and shows **"Please complete all required fields."**
## How matching and auto-create work
Notifyer checks the phone number against the **Phone field** on your **Object** in CRM Record Matching.
The message is logged to that record's note (per Note Destination and Note grouping), and every mapped attribute is updated on the record.
A new record is created on your matched object with the sender's name and phone number. Future messages from that number sync to this record — Notifyer does not create a second record for the same number.
The message is skipped. No record is created and no error is raised. Sync for that number starts only after the contact exists in Attio.
## Message logging behavior
Every incoming and outgoing WhatsApp message is written into an Attio Note on the matching record:
* **Sender is shown correctly.** Incoming messages show the contact's name (or phone number if no name is available). Outgoing messages show the teammate who sent it, or **AI Assistant** when your AI bot replied.
* **Timestamps use your configured timezone.** In date-wise mode, the date is in the note title, so lines inside the note show time only. In combined mode, lines include a fuller time stamp (for example "at 8:41 pm, Jul 29, 2026").
* **Media-only messages** (image, document, or voice note with no caption) show the media link instead of a blank line.
* **Date-wise mode** creates a fresh note per day, titled "WhatsApp Conversation - \[date]."
* **Combined mode** keeps one ongoing note per contact. New messages are appended; the newest line is shown in bold so recent activity is easy to spot.
## Field auto-update reference
Beyond the conversation note, these mapped fields update on the matched (or newly created) record when a message is sent or received:
Text of the most recent message in each direction
Exact time of the most recent message in each direction, in your configured timezone
Labels Notifyer has assigned to the conversation
Country detected from the contact's phone number
Chat note from Notifyer for that contact, when one exists
Populated only when a Notifyer automation rule injects a note; otherwise blank
Always-current link to the full conversation for that contact
## The Live Chat Link
Every synced record can include a **Live chat link** attribute — a clickable link that opens that contact's full WhatsApp conversation in Notifyer's live chat console.
Click the **Live chat link** value on the record. It opens Notifyer's live console (for example at `chat.notifyer-systems.com`).
The link includes a phone-number reference. Notifyer opens the correct conversation automatically — you don't need to search for the contact.
After the conversation loads, the URL parameter is removed so the address bar shows a clean URL with nothing exposed.
If you're not signed in to Notifyer in that browser, you'll be asked to log in first. After you sign in, open the link again from Attio to land on the conversation.
This is one click into the full conversation, not an embedded chat window inside Attio. Attio does not support embedding external apps via iframe, so the conversation opens in Notifyer's console in a new tab. From there, your team can see AI activity, hand off to a human, assign the chat, and manage labels — in Notifyer, not inside Attio itself.
## Automation and workflows
Unlike the Monday.com integration, Attio does not yet expose native Whatsable triggers or actions inside Attio's Workflow Builder.
**Coming soon.** Attio's Workflows SDK does not currently pass authentication context (such as a user or account ID) to workflow-triggered actions — only an API key is available, with no way to tie the run back to a specific Notifyer account. Until that is supported, we cannot ship the equivalent of Monday's "when a new WhatsApp message arrives → do something in Attio" workflow triggers and actions.
Today, build automation around Attio + WhatsApp through:
Connect Attio and Notifyer System through your automation platform — see the [Zapier](/guides/notifyer-system/zapier-overview), [Make](/guides/notifyer-system/make-overview), and [n8n](/guides/notifyer-system/n8n-overview) guides
Call the [Notifyer System API](/guides/notifyer-system/api/template-message) from your backend or from an Attio automation that can reach external webhooks
## Known limitations
Whatsable triggers and actions inside Attio Workflows are not available yet because Attio's workflow runtime does not provide the user/account authentication context Notifyer needs. Use Zapier, Make, n8n, or the Whatsable API for automation today.
Attio does not support iframe embeds, so Notifyer cannot render a live chat window inside Attio. Use the **Live chat link** attribute to open the full conversation in Notifyer's console instead.
Attio's note API does not support editing an existing note. Notifyer works around this by finding the note by title, reading its content, and rewriting it with the new message appended. Day to day this is invisible, but it can cause small formatting differences between older and newer lines. If someone deletes a WhatsApp conversation note in Attio, Notifyer creates a new one on the next message.
You cannot send WhatsApp templates or schedule messages from inside Attio yet. Reply, schedule, and broadcast from the Notifyer chat console (or Zapier / Make / n8n / API).
## Disconnecting
To remove the connection, open **Attio** in your Notifyer Console and click **Disconnect Attio** on the connected workspace card.
Disconnecting stops the sync immediately — no further WhatsApp messages are written to Attio until you reconnect.
To reconnect, repeat the [connection steps](#connect-notifyer-system-to-attio). After authorizing again, open **Sync Settings** and **Attribute Mapping**, confirm every required field, and click **Save settings** before relying on sync again.
## Best practices
Person is Attio's native contact object and usually already has a system **Phone numbers** field. Custom objects work too, but they need a phone-number attribute before matching can work.
Matching only uses Attio phone-number attributes (with country code). Don't store WhatsApp numbers in a plain text field if you need reliable matching.
Create purpose-built text and timestamp attributes in Attio (for example "Last incoming message", "Live chat link") before you map them in Notifyer. That keeps your People list easy to scan.
After saving settings, send a test message from a known phone number and confirm the Attio record, note, and mapped fields update as expected.
## Troubleshooting
Open **Sync Settings** and confirm **Object** and **Phone field** under **CRM Record Matching** are set, and that the phone field holds the number you're testing with.
Every required Sync Settings and Attribute Mapping field must be filled. Click **Save settings** and wait for **Configuration Updated** before testing again.
Notifyer matches by phone number and should not create duplicates for the same number. If you see duplicates, check whether the same contact exists twice in Attio with different phone formats (with and without country code, for example).
If duplicates persist, contact Whatsable support with both record IDs so we can investigate.
Open **Sync Settings** and confirm **Timezone** matches the timezone your team expects when reading messages.
Attio does not support patching an existing note. Notifyer finds the note by title and rewrites it with new content appended. Small bold/spacing differences between older and newer lines can appear because of that workaround.
If someone deletes a WhatsApp conversation note in Attio, Notifyer creates a new one on the next message for that contact.
The **Phone field** dropdown only lists phone-number attributes on the selected object. If none exist (common on custom objects or Deal), add a phone-number attribute in Attio, then refresh the Notifyer settings page.
The Live Chat Link opens Notifyer's live console and requires a signed-in Notifyer session in that browser. Log in once, then open the link again from the Attio record.
Each mapping field only lists compatible types (for example `timestamp` for time/date fields, `text` for message fields, `personal-name` for Name on Person). Create an attribute of the correct type in Attio if needed.
Attributes already used elsewhere show as **Already used**. Clear the other mapping first if you want to reuse that attribute.
## Need help?
Our support team is ready to assist you:
Contact [team@whatsable.app](mailto:team@whatsable.app)
Book a personalized walkthrough
Click the green chat button in the bottom right corner of the Notifyer System dashboard
For additional automation platform integrations (Make, Zapier, n8n, Pipedrive, Monday.com), please contact our support team or check our integration documentation.
# Can I send WhatsApp template broadcasts with Whatsable?
Source: https://docs.whatsable.app/guides/notifyer-system/broadcasts
Send WhatsApp template broadcasts with Whatsable: CSV bulk recipients, delivery modes, scheduled send, basic stats, and Meta cold-outreach fences.
Yes. Whatsable sends **Meta-approved WhatsApp template broadcasts** to a CSV (or audience) list from your connected WhatsApp Business number. Broadcasting is the main job of the **Bulk Message** plan and is also on **Pro** and **Agency**. Use this page when you need the operator path: prepare the CSV, test, choose a delivery mode, launch or schedule, and read basic delivery stats.
Broadcasting is **not** the same as creating templates, and it is **not** a native multi-day drip builder. Templates are a separate topic; day-0 / day-3 / day-6 sequences run only through **Make, Zapier, or n8n**.
## Prerequisites
* **Whatsable account** on **Bulk Message**, **Pro**, or **Agency** — sign in at [dashboard.whatsable.app/signin](https://dashboard.whatsable.app/signin).
* **WhatsApp Business number connected** through Whatsable (Embedded Signup / Coexistence supported — keep the WhatsApp Business app; do not uninstall it after connect).
* **At least one Meta-approved message template** for that number. Only **super-admins** create templates; Meta must approve before the template appears in send flows. Editing an existing template is not supported — recreate and resubmit if you need changes.
* **Meta payment method** on the WhatsApp / Business Manager side. Template sends fail when Meta has no billing method for the number.
* **Active plan** (or trial) with enough **unique-contact** headroom for the recipient list. Whatsable bills unique contacts per month; Meta bills delivery fees separately at Meta rates (Whatsable **0% markup**).
* **CSV ready** (or list you will export): phone numbers with country code. Exact column rules are below.
How-to video (EN): [How to broadcast](https://youtu.be/_upLw2kKxLo). Broadcasting and templates are different topics — do not swap the videos.
***
## Operator path — send a template broadcast
Open **Broadcasts** in the Whatsable console and follow the steps below. Menu labels can vary by workspace; use the Broadcasts area you see in the console.
### 1. Open Broadcasts and pick an approved template
In the Whatsable console, open **Broadcasts**. Start a new broadcast and select a **Meta-approved** template only. Pending templates will not send reliably; Graph “unsupported post request” on test send is often an unapproved template, not a disconnected number.
If the template uses body variables (`{{1}}`, `{{2}}`, …), you will map them from CSV columns in the next step.
### 2. Prepare the recipient CSV
Whatsable expects a CSV whose **phone column is named exactly `phone_number`**. Include the country code. Support troubleshooting locks this name; if the broadcast fails after upload, check formatting first.
**Required**
| Column | Rule |
| - | - |
| `phone_number` | Exact header. Digits with country code. In the upload path used by console/API tooling, omit the `+` prefix (example: `14155550101`, not `+14155550101`). |
**Optional (when the template needs them)**
| Column | Maps to |
| - | - |
| `body1`, `body2`, `body3`, … | Template body variables `{{1}}`, `{{2}}`, `{{3}}`, … per recipient |
| `media` | Public URL for per-recipient media when the template has a media header |
| `button_dynamic_url_value` | Per-recipient URL suffix for dynamic CTA buttons |
Example:
```csv theme={null}
phone_number,body1,body2
14155550101,John,12345
14155550102,Jane,67890
```
After you select a template in the console, download the **template CSV** from the broadcast UI when available — that file matches the variables Meta approved for that template.
**Upload behavior:**
* Duplicate phone numbers in the same CSV are **deduplicated** (kept once).
* Re-uploading recipients for the same broadcast **replaces** the previous list.
* The system returns **unique recipient count** and an estimated **cost of broadcast** (Meta-side country pricing) before you finalize.
Use the `phone_number` header above — do not substitute alternate names such as camelCase `phoneNumber`.
### 3. Send a test message
Before the full list, send a **test** to a number you control. Confirm the template renders (variables, media, buttons). Fix CSV or template issues here — not after a 10k launch.
### 4. Upload recipients and review counts
Upload the CSV. Confirm:
* Unique numbers match expectations (duplicates dropped).
* Estimated cost looks sane for the countries on the list.
* Unique count fits your Whatsable **unique-contact** tier (or accept overage — see plans page).
Some console flows let you scope recipients with labels when that control is present. Use the labels UI in your console when available.
### 5. Choose delivery mode
Whatsable paces outbound template traffic with three delivery modes (API/console values):
| Mode | Behavior | When to use |
| - | - | - |
| **smart** | Sends in batches; paces toward a target **read rate** before advancing | Default for larger lists — safer warm-up |
| **regular** | Fixed batch size at a steady pace (batch size is an integer; the console may expose a per-minute range — use the bounds shown in your console) | Predictable pace without read-rate feedback |
| **risk** | No batching — sends the list as a blast (confirm when prompted) | Tiny urgent lists only — large blasts can trigger Meta spam detection and temporarily disable the number |
Do **not** invent a Whatsable numeric RPM or “messages per second” product limit on this page. Meta messaging tier caps (business-initiated conversations per 24 hours) still apply — see rate-limits docs when published and Meta’s own tier rules.
### 6. Launch now or schedule
* **Send / launch** is available on **Bulk Message**, **Pro**, and **Agency**.
* **Scheduled broadcasts** (future send time) are available on **Bulk Message**, **Pro**, and **Agency**. Scheduling is **not** the same as a native drip delay chain.
Schedule strings on the finalize path use `DD/MM/YYYY HH:mm`. Timezone resolution can follow the caller’s environment — **always verify the resulting time in the console** after you save.
### 7. Monitor basic delivery stats
After launch, Whatsable shows **basic delivery analytics**: **sent / delivered / read** (Bulk Message and up). **Block rate** is **not** a Whatsable dashboard metric — check **Meta Business Manager**. Advanced analytics are a **Pro / Agency** surface, not Bulk Message.
Pause, resume, and cancel for an **ongoing** broadcast are **not** available in the current console path. Track basic **sent / delivered / read** stats and download results when your role allows. Upcoming scheduled sends can be removed on the API path when that endpoint is in use.
***
## Plan gates (broadcast-related)
| Capability | Bulk Message | Pro | Agency |
| - | - | - | - |
| Broadcast / CSV bulk with approved templates | Yes | Yes | Yes |
| Basic sent / delivered / read | Yes | Yes | Yes |
| Scheduled broadcast (future send) | Yes | Yes | Yes |
| Shared 2-way inbox / seats / AI / integrations | No | Yes | Yes |
Canonical money and full unique-contact tiers: [whatsable.app/pricing](https://whatsable.app/pricing). Plan matrix docs: [plans Bulk Message / Pro / Agency](/guides/notifyer-system/plans-bulk-message-pro-agency).
***
## Cold outreach and deliverability (Meta)
For **cold** lists (contacts who have never messaged the business), **especially US numbers**, Meta may choose **not** to deliver if the recipient has not engaged before. Ideally the contact has messaged first. European numbers often fare somewhat better than US for cold reach, but **any** fully cold list still risks poor deliverability or flags.
**Warm gradually:** for cold or new-number campaigns, prefer **smart** (or modest **regular**) pacing over **risk** blasts. Gradual send helps warm the number and reduces throttling / block risk. This is Meta deliverability behavior — not a Whatsable “US block” product toggle.
***
## Limits and what broadcasts are NOT
**Scheduled broadcast ≠ drip.** Future send time is available on broadcast plans; multi-day drip delays are **not** “schedule” — see below.
* **No native drip builder.** Day-0 / day-3 / day-6 (or similar) sequences are built in **Make, Zapier, or n8n**; Whatsable sends each template when the automation fires. Do not describe an in-product drip / delay campaign builder.
* **No typing-indicator dots** claim for broadcast (or product-wide as a Whatsable surface).
* **Do not invent Whatsable RPM** numbers here.
* **Do not invent UI chrome** (library redesign tabs, Craft wizard labels, Upcoming wrap, Switch, Numbers Meta reports) that is not present in your console.
* **Broadcast ≠ templates.** Creating / approving templates is a separate operator page. Only approved templates send.
* **Bulk Message** has no team inbox, AI, or integrations — replies to broadcast recipients are not a Bulk Message inbox workflow.
* **Group Messaging** is unavailable / waitlist only — not a live broadcast substitute.
* **Competitor comparisons** and Meta per-country cent tables are out of scope; Meta fees pass through at **0%** markup.
***
## Related
Who gets broadcast, schedule, inbox, AI, and unique-contact billing.
Live prices, contact tiers, overage, and annual toggle.
Create and approve WhatsApp templates (separate from broadcasting).
Programmatic single-recipient template send (not the CSV broadcast wizard).
External sequences / drips — Pro and Agency.
External sequences / drips — Pro and Agency.
Keep the Business app while using the API.
Shared 2-way inbox on Pro and Agency (not Bulk Message).
***
## FAQ
### Which plans can send CSV / template broadcasts?
**Bulk Message**, **Pro**, and **Agency**. Broadcasting is the main Bulk Message use case. **Scheduled** future sends are included on those plans.
### What CSV columns does Whatsable require?
The phone column must be named exactly **`phone_number`** (country code; omit `+` on the upload path). Add **`body1`**, **`body2`**, … for template variables, plus **`media`** or **`button_dynamic_url_value`** when the template needs them. Prefer the downloadable template CSV from the broadcast UI after you pick a template.
### Why did my broadcast fail after I uploaded a CSV?
Almost always **CSV formatting**: wrong header (not `phone_number`), missing country code, or variable columns not named `body1`, `body2`, …. Also confirm the template is **approved** and Meta has a **payment method**.
### Can I build a day-0 / day-3 / day-6 drip inside Whatsable?
**No native drip builder.** Build the delays in **Make, Zapier, or n8n**; Whatsable sends each message. Scheduled broadcast is a **single** future send time, not a drip chain.
### Will Meta deliver cold US campaigns?
Meta **may not deliver** cold outreach to US numbers when recipients have never engaged. Warm gradually (prefer **smart** / modest **regular** over **risk** blasts). Ideally contacts message you first.
### Where do I see block rate?
In **Meta Business Manager**, not as a Whatsable analytics metric. Whatsable basic stats = **sent / delivered / read**.
### Is broadcasting the same as the template API?
No. The console **CSV broadcast** flow uploads a list and paces delivery. The [template message API](/guides/notifyer-system/api/template-message) sends to one recipient per request. Agent-skills / automation scripts can orchestrate the same three backend steps the console uses; that is advanced automation, not a substitute for reading this operator page.
# Can I assign WhatsApp chats to teammates in Whatsable?
Source: https://docs.whatsable.app/guides/notifyer-system/chat-assignment
Assign WhatsApp chats to teammates in Whatsable via Zapier, Make, API, keywords, or AI content. Pro/Agency seats, assigned-only push, and limits.
Yes. On **Pro** and **Agency**, Whatsable lets you **assign a WhatsApp conversation to a teammate** so the right person owns the thread. Assignment is available through **Zapier**, **Make**, the **API**, **keyword rules** on labels, and **AI** that routes by conversation content. Use this page when you need the inventory of those assign paths — not a rewrite of the shared inbox UI.
**Bulk Message** has **no** shared 2-way inbox and **no** team seats, so chat assignment does not apply there. Extra inbox seats (when you need more people than the plan includes) are **\$12 per seat per month** on Pro and Agency and include native Android/iOS apps plus **mobile push only for chats assigned to that person**.
For how the shared inbox looks day to day (who sees what, labels vs notes, AI ↔ human handoff), see [Team inbox](/guides/notifyer-system/team-inbox).
## Prerequisites
* **Whatsable plan:** **Pro** or **Agency** (shared inbox, seats, AI, and integrations). **Bulk Message** = broadcast-only — no inbox / seats / assign.
* **Connected WhatsApp Business number** through Whatsable (Embedded Signup / Coexistence supported — keep the WhatsApp Business app; do not uninstall it after connect).
* **Teammates on the account** (or extra seats added when you need more people in the inbox). Plan price covers the included team; buy seats when you need more.
* **For automation assign:** a **Zapier**, **Make**, **n8n**, or **API** connection authenticated with your Whatsable API key — integrations are Pro/Agency only.
* **For keyword / AI assign:** labels (and AI chatbot / handoff settings) configured in the console so routing rules and the bot have something to act on.
Canonical seat money: **\$12 / seat / mo** on Pro and Agency. Do not confuse seats with unique-contact overage or Group Messaging (**\$16 / group**, unavailable / waitlist). Live pricing: [whatsable.app/pricing](https://whatsable.app/pricing).
***
## Assign paths — full inventory
Whatsable does **not** document a separate named “Assign to” control on every surface the same way. You **can** assign a chat to a teammate via the paths below, and you can **add or remove labels** from the same automation partners. Inbox operators often route work with **labels** (for example a teammate name label or a routing label your automations watch). Treat labels and teammate assignment as related ownership tools.
### 1. Zapier — Update a Contact
From a Zap, use Whatsable **Update a Contact**. The Zapier action description states you can **assign the conversation to someone on your team**, add notes, and **add/remove labels**.
**Documented fields on this page’s field dictionary:** Phone Number, Display Name, Add a Note, Add Label Names or IDs, Remove Label Names or IDs.
Update a Contact can assign the conversation to a teammate — confirm any assignee control in your live Zap editor.
Typical pattern: a form, CRM stage change, or Lead Ad trigger decides the owner in Zapier, then Update a Contact assigns (and optionally labels) the WhatsApp chat in Whatsable.
### 2. Make — Update a Contact
Make’s Update a Contact description also covers **assign to a teammate**, notes, and **add/remove labels**.
**Documented module fields today:** Phone Number, Display Name, Note, Add Labels, Remove Labels.
Confirm any assignee control in your live Make module.
### 3. API and Agent Skills
Assignment via **API** works alongside Zapier and Make. Operator scripts under **chat-notifyer** Agent Skills update conversation **labels** on the recipient (`assign-label.js` / `remove-label.js`) and can drive handoff by applying the bot’s **handoff label**. Labels on the Whatsable chat are string names on the recipient record.
Use Agent Skills when you are building or operating from code / an IDE agent — not as a substitute customer mobile app. Point developers to [chat-notifyer](/guides/notifyer-system/agent-skills/chat-notifyer) for script-level label and handoff operations.
### 4. n8n (partner flow)
From an n8n workflow you can **add/remove labels** and **assign the chat to a teammate** the same way as Zapier and Make. Confirm any assignee control in your live n8n node.
### 5. Keywords in chat
**Assignment by keywords in chat** rides on **label keyword rules**: when you create a label with keyword rules, Whatsable can automatically apply that label when an incoming message matches. Teams use keyword labels (and teammate / routing labels) so the right people see and own the thread — including label-scoped Team Member visibility in the inbox.
Manual label assign from automations or Agent Skills can override auto-applied labels; keyword auto-labelling continues on later messages.
### 6. AI by conversation content
**AI can assign by conversation content.** The AI chatbot (and ProactiveBot on Pro/Agency) can **create, edit, and remove conversation labels** from what the customer says — for example applying a routing or handoff label when the conversation matches your plain-language instructions (“if they mention a fleet of 10+ vehicles, hand to a human”).
Distinguish carefully:
| Concept | What it means |
| - | - |
| **Teammate / chat assignment** | Which person on your team owns the WhatsApp thread (this page). |
| **Bot Assign** | Which AI bot is attached to a conversation in the contact panel — required for the bot to reply on pre-existing chats. See [AI chatbot configuration](/guides/notifyer-system/ai-chatbot/configuration). |
| **Chat Handoff / Let the agent reply** | Whether the AI or a human is actively answering that chat. Covered on [Team inbox](/guides/notifyer-system/team-inbox) and AI docs — not rewritten here. |
### 7. Partner-flow owner routing (examples only)
You can **build** owner routing in Zapier, Make, or n8n — for example **round-robin across sales**, or map a **Facebook Lead Ad / form / ad source** to the right teammate — then **assign and label** the WhatsApp chat in Whatsable.
Whatsable does **not** ship a native “round-robin engine” or built-in Lead-Ad→teammate UI — build that routing in the partner tool, then assign in Whatsable.
### 8. Inbox + mobile (how assignment shows up)
* **Shared team inbox** (Pro/Agency): teammates collaborate in the Whatsable inbox. Labels organize and scope visibility; see [Team inbox](/guides/notifyer-system/team-inbox) for access layers (number · Admin vs chat-only · label scope).
* **Native Android / iOS apps** (with extra seats): **push notifications only for chats assigned to that person**. Push-only does **not** mean the app hides other chats.
***
## Limits and what assignment is NOT
**Bulk Message = no seats / no shared inbox.** Chat assignment, team seats, and assigned-only push start at **Pro** and **Agency**.
* **No CRM ↔ Whatsable bidirectional label / tag mirror** product. Labels live on the Whatsable chat; Monday, Pipedrive, Zapier, Make, n8n, Agent Skills, and the AI can read or write Whatsable labels so inbox + mobile + automations stay aligned — that is **not** a two-way sync of CRM tags as one store.
* On Agency, up to 100 WhatsApp numbers sit on one subscription, and each additional number added to that same subscription is \$5. The inbox can show all numbers or one number, and you can limit each teammate to specific numbers.
* **Push-only ≠ app hides other chats.** Assigned-only push notifies for owned work; it does not claim a visibility lockdown that removes unassigned chats from the app.
* **No WhatsApp typing-indicator dots** claim. Response Delay 5–60s is a separate AI setting — not assignment.
* A full roles / permissions matrix beyond the locked facts on this page (super-admin creates templates; Admin vs chat-only / label scope on team-inbox) is not documented here.
* **Bot Assign ≠ teammate assign.** Do not conflate AI bot attachment with human ownership.
* **Native round-robin / Lead-Ad router** requires naming Zapier, Make, or n8n — Whatsable does not ship that router UI.
* **Group Messaging \$16** is unavailable — not a team-assign substitute.
***
## Related
Shared 2-way inbox on Pro and Agency — who sees what, labels, AI ↔ human handoff.
Update a Contact — labels, notes, assign capability.
Update a Contact — labels, notes, assign capability.
Field dictionary — assign capability.
Field dictionary — assign capability.
Bot Assign, knowledge, handoff — distinct from teammate chat assignment.
Plan gates for inbox, seats, AI, and integrations.
Script-level labels, handoff, and conversation ops.
Also: [Pricing](https://whatsable.app/pricing) · [n8n overview](/guides/notifyer-system/n8n-overview) · [Message webhooks](/guides/notifyer-system/api/incoming-message).
***
## FAQ
### Can I assign WhatsApp chats to teammates in Whatsable?
**Yes — on Pro and Agency.** Assign via **Zapier**, **Make**, the **API**, **keyword** label rules, or **AI** by conversation content. Bulk Message has no shared inbox or seats.
### Does Bulk Message include chat assignment or seats?
**No.** Bulk Message is one-way broadcast / CSV. Shared inbox, seats, assign, AI, and integrations start at **Pro** (and Agency).
### Is there a named “Assign to” field in Zapier or Make?
**Yes, as a capability.** Update a Contact’s product description includes assigning a teammate. Documented dictionary fields today are phone, display name, note, and add/remove labels. Confirm any assignee control in your live editor.
### Do mobile push notifications fire for every chat?
**No.** Extra seats include push **only for chats assigned to that person**. That does **not** mean the mobile app hides other chats.
### Is teammate assignment the same as Bot Assign?
**No.** **Bot Assign** picks which AI bot is attached to a conversation. **Teammate assignment** decides which human owns the thread. Both can matter on the same chat.
### Can Whatsable round-robin chats natively?
**Not as a built-in Whatsable router UI.** Build round-robin (or Lead Ad → owner) in **Zapier, Make, or n8n**, then assign and label the chat in Whatsable.
### Do CRM tags stay in two-way sync with Whatsable labels?
**No bidirectional CRM↔Whatsable label mirror product.** Labels live on the Whatsable conversation; partners and the AI can read/write those Whatsable labels so inbox, mobile, and automations stay aligned.
### How much is an extra inbox seat?
**\$12 per seat per month** on Pro and Agency (native Android/iOS + assigned-only push + assign paths above). Confirm on [pricing](https://whatsable.app/pricing).
# Embedding Process
Source: https://docs.whatsable.app/guides/notifyer-system/embedding-process
Connect your WhatsApp Business Account to Notifyer System. Meta WhatsApp Coexistence is supported — you do not need to delete the WhatsApp Business app on your phone.
# WhatsApp Business Account Integration
## Overview
Notifyer System enables businesses to send automated WhatsApp messages to customers through a direct integration with the WhatsApp Business Platform. This guide walks you through the embedding process to connect your WhatsApp Business Account with Notifyer System.
This process uses Meta's Embedded Signup flow, which allows you to create or connect your WhatsApp Business Account directly within Notifyer System.
## Prerequisites
A Notifyer System account. No active subscription required. You can add a plan or pay-as-you-go credit later.
Meta Business Portfolio (or willingness to create one during the process)
A business phone number you control. If that number already uses the **WhatsApp Business app**, keep the app — Notifyer supports Meta WhatsApp Coexistence
## WhatsApp Coexistence
**Meta WhatsApp Coexistence is supported on Notifyer System.** You do **not** need to delete the WhatsApp Business app or stop using the number on your phone. After Embedded Signup, the same number works in the WhatsApp Business app, the Notifyer chat inbox, and automations (Make, Zapier, n8n, API, and webhooks) at the same time.
You can connect a number that is **already active** in the WhatsApp Business app. After Embedded Signup:
* Keep chatting with customers from the WhatsApp Business app on your phone
* Use the Notifyer chat inbox and team inboxes in the browser
* Send and receive through Make, Zapier, n8n, the API, and [webhooks](/guides/notifyer-system/api/incoming-message)
Messages typed by hand in the WhatsApp Business app are delivered to your webhook. See `incoming_message`, `send_by`, and `was_message_by_human` in the [message webhook payload](/guides/notifyer-system/api/incoming-message).
Coexistence is a **Notifyer System** capability (your own WhatsApp Business number on the Cloud API). It is available on Notifyer System plans that complete Embedded Signup — not limited to a specific integration. Whatsable's own support number also runs on coexistence.
Coexistence applies to the **WhatsApp Business app** (the business client). If the number is registered on the consumer WhatsApp app instead, migrate it to WhatsApp Business or use a different number. You still do **not** delete the WhatsApp Business app to work with Notifyer.
## Integration Process
1. Log in to your Notifyer System dashboard
2. Navigate to **Your Templates** section
3. Make sure you're on the **Connect to WhatsApp** tab
4. Click the **Connect your WhatsApp Number** button in the center of the page
You can track your progress through the onboarding process using the steps indicator in the bottom-left corner of the screen.
1. Log in with your Facebook account when prompted
2. If already logged in, click **Continue as \[your Facebook username]**
3. Review the permissions Notifyer System is requesting
4. Click **Get Started** to begin the configuration process
Select an existing business portfolio or create a new one
If you choose to create a new business portfolio, fill out the required fields:
Your official business name (must be unique among your portfolios)
A valid email that can receive verification messages
Your business website URL or social media profile
Country where your business is located
Choose a business portfolio you've already configured in Meta Business Suite
See how to [create a business portfolio in Meta Business Suite and Business Manager.](https://www.facebook.com/business/help/1710077379203657)
If you select an existing portfolio, your business name, website, and country will be automatically populated from your Meta Business configuration.
Select whether to create a new account or use an existing one
**Recommended** for first-time users (default option)
Only available if you have existing WhatsApp Business accounts
Select whether to create a new profile or use an existing one
**Recommended** for first-time users (default option)
Only available if you connect an existing WhatsApp Business profile
The internal name of your account (used for management purposes)
The name your customers will see when receiving messages from your business
This is the name your customers will see when receiving messages from your business. Choose carefully as it impacts brand recognition.
Business category that best represents your industry (will be displayed on your profile)
Choose how to add your phone number
Use your own business phone number
WhatsApp will generate a +1 555 number (limited functionality)
Choose how to receive your verification code
Receive verification code via SMS
Receive verification code via automated call
Enter the verification code received via your selected method
1. After verification, you'll see a "You're now ready to chat with people on WhatsApp" screen
2. Click the **Add Payment Method** button
3. You'll be redirected to the Facebook Business "Billing & Payments" page
4. Select "Payment Methods" from the left menu
5. Ensure you're on the "WhatsApp Business accounts" tab
6. Select your WhatsApp account from the dropdown (verify WhatsApp account ID)
7. Click "Add Payment Method" and provide the required information
8. Set your payment method as the default option
This step is critical for ensuring you can send messages without restrictions. Unverified businesses may experience limited functionality.
1. Navigate to Settings in your Facebook Business Manager
2. Select "WhatsApp accounts" under the "Accounts" section
3. Scroll down to the "Business verification" section
4. Click "Start verification" to access the Security Center
5. Complete the business verification process by providing the requested business information and documentation
## Account Dashboard Overview
Once your WhatsApp Business Account is connected, you'll have access to the following tabs in the "Your Templates" section:
Connect your WhatsApp Business Account using the "Sign up with Facebook" option
Design message templates and submit them to Meta for approval
View, manage, and monitor the approval status of your message templates
## Integration Options
After successfully embedding your WhatsApp Business Account, you can integrate Notifyer System with your preferred automation platform:
Connect Notifyer System with Make to create powerful automation workflows.
[View Make Documentation →](https://docs.whatsable.app/guides/notifyer-system/make-overview)
Integrate with Zapier to connect WhatsApp messaging with thousands of applications.
[View Zapier Documentation →](https://docs.whatsable.app/guides/notifyer-system/zapier-overview)
Use n8n for advanced workflow automation with WhatsApp messaging.
[View n8n Documentation →](https://docs.whatsable.app/guides/notifyer-system/n8n-overview)
Implement custom integrations using our comprehensive API.
[Try API Reference →](https://docs.whatsable.app/api-reference/introduction)
## API Reference
Retrieve all your approved message templates
Send messages using your approved templates
Incoming and outgoing messages, including replies typed in the WhatsApp Business app
Experiment with the Get Templates API and view responses in real-time
## Alternative Option: Notifier
If the embedding process is too complex for your needs, you can use Notifier by Whatsable instead, which allows you to send automated messages through our WhatsApp bot without going through the full embedding process.
Discover a simpler way to send automated WhatsApp messages using Notifier by Whatsable
## Troubleshooting
If your phone number verification fails:
1. You do **not** need to delete the WhatsApp Business app. Coexistence is supported — keep using that app on your phone
2. If the number is on the **consumer** WhatsApp app (not WhatsApp Business), switch it to WhatsApp Business or use a different number
3. Wait 24 hours before trying again with the same number
4. Try a different verification method (SMS vs. call)
5. Contact support if issues persist
If you encounter problems with business verification:
1. Ensure all business information is accurate and matches official documents
2. Provide clear, high-quality images of requested documentation
3. Allow 1-2 business days for verification review
4. Submit an appeal if verification is rejected
## Resources
Manage your Meta business profiles and portfolios
Learn more about the WhatsApp Business Platform
Meta's official documentation on embedded signup
## Need help?
Our support team is ready to assist you:
Contact [team@whatsable.app](mailto:team@whatsable.app)
Book a personalized walkthrough
Click the chat button in the bottom right corner of the Notifyer System dashboard
# Enterprise Customization
Source: https://docs.whatsable.app/guides/notifyer-system/enterprise/customization
Learn how to customize Notifyer System for your enterprise needs
# Enterprise Customization
Notifyer System provides extensive customization options for enterprise-level WhatsApp messaging.
## Customization Features
### Branding
* Custom templates
* Brand colors
* Logo integration
* Custom fonts
* Brand voice
* Message styling
* Media assets
### Workflow
* Custom workflows
* Business rules
* Automation rules
* Integration points
* Custom scripts
* Event handlers
* Process automation
### Integration
* Custom APIs
* Webhook endpoints
* SDK customization
* Plugin system
* Custom connectors
* Data mapping
* Format conversion
## Customization Implementation
### Custom Template
```javascript theme={null}
// Example: Creating a custom template
const createCustomTemplate = async (template) => {
try {
const response = await axios.post(
'https://api.notifiersystem.com/v1/templates',
{
name: template.name,
language: template.language,
category: template.category,
components: [
{
type: 'HEADER',
format: 'IMAGE',
example: {
header_url: [template.headerImage]
}
},
{
type: 'BODY',
text: template.body,
variables: template.variables
},
{
type: 'BUTTON',
sub_type: 'URL',
index: '0',
parameters: template.buttonParameters
}
],
customizations: {
branding: template.branding,
styling: template.styling,
metadata: template.metadata
}
},
{
headers: {
'Authorization': `Bearer ${process.env.NOTIFIER_SYSTEM_API_KEY}`,
'Content-Type': 'application/json',
'X-Tenant-ID': process.env.TENANT_ID
}
}
);
return response.data;
} catch (error) {
console.error('Error creating template:', error);
throw error;
}
};
```
### Custom Workflow
```javascript theme={null}
// Example: Implementing a custom workflow
const processCustomWorkflow = async (message) => {
try {
// Apply business rules
const rules = await getBusinessRules(message.tenant_id);
const processedMessage = applyBusinessRules(message, rules);
// Apply custom transformations
const transformedMessage = await applyCustomTransformations(processedMessage);
// Apply automation rules
const automationRules = await getAutomationRules(message.tenant_id);
const automatedMessage = applyAutomationRules(transformedMessage, automationRules);
// Send the message
return await sendMessage(automatedMessage);
} catch (error) {
console.error('Error processing workflow:', error);
throw error;
}
};
```
## Best Practices
### Branding
* Maintain consistency
* Follow guidelines
* Test templates
* Monitor performance
* Update regularly
* Document changes
* Version control
### Workflow
* Keep it simple
* Document processes
* Test thoroughly
* Monitor performance
* Handle errors
* Regular review
* Continuous improvement
### Integration
* Use standards
* Document APIs
* Version control
* Test integration
* Monitor performance
* Handle errors
* Regular updates
## Monitoring
### Customization Monitoring
* Template performance
* Workflow efficiency
* Integration status
* Error rates
* Response times
* User feedback
* ROI metrics
### Business Impact
* Message effectiveness
* User engagement
* Conversion rates
* Cost efficiency
* Process efficiency
* Business goals
* Success metrics
## Next Steps
* Learn about [Security](/guides/notifyer-system/enterprise/security)
* Explore [Scaling](/guides/notifyer-system/enterprise/scaling)
* Check out our [API Reference](/api-reference/notifier-system)
* Read our [Getting Started](/guides/notifyer-system/getting-started) guide
# Enterprise Scaling
Source: https://docs.whatsable.app/guides/notifyer-system/enterprise/scaling
Learn how to scale your WhatsApp messaging with Notifyer System
# Enterprise Scaling
Notifyer System provides robust scaling capabilities for enterprise-level WhatsApp messaging.
## Scaling Features
### Infrastructure
* Auto-scaling
* Load balancing
* High availability
* Geographic distribution
* Disaster recovery
* Backup systems
* Monitoring
### Performance
* Message queuing
* Priority queuing
* Rate limiting
* Caching
* CDN integration
* Database optimization
* Resource management
### Capacity
* Unlimited messages
* Multiple channels
* Concurrent processing
* Batch processing
* Bulk messaging
* Scheduled messages
* Message routing
## Scaling Implementation
### Message Queue
```javascript theme={null}
// Example: Implementing message queuing
const queueMessage = async (message) => {
try {
const queueItem = {
message,
priority: message.metadata?.priority || 'normal',
timestamp: new Date(),
retryCount: 0
};
await messageQueue.add(queueItem, {
priority: getPriorityWeight(queueItem.priority),
attempts: 3,
backoff: {
type: 'exponential',
delay: 1000
}
});
} catch (error) {
console.error('Error queueing message:', error);
throw error;
}
};
```
### Load Balancing
```javascript theme={null}
// Example: Load balanced API call
const sendScaledMessage = async (message) => {
try {
const response = await axios.post(
'https://api.notifiersystem.com/v1/messages',
message,
{
headers: {
'Authorization': `Bearer ${process.env.NOTIFIER_SYSTEM_API_KEY}`,
'Content-Type': 'application/json',
'X-Tenant-ID': process.env.TENANT_ID,
'X-Load-Balancer-Key': generateLoadBalancerKey()
}
}
);
return response.data;
} catch (error) {
console.error('Error sending message:', error);
throw error;
}
};
```
## Best Practices
### Infrastructure
* Monitor system resources
* Set up auto-scaling
* Implement load balancing
* Use CDN for media
* Optimize database
* Regular maintenance
* Backup strategy
### Performance
* Implement caching
* Use message queues
* Optimize API calls
* Monitor response times
* Handle rate limits
* Error handling
* Retry logic
### Capacity Planning
* Monitor usage
* Set up alerts
* Plan for growth
* Resource allocation
* Cost optimization
* Performance testing
* Load testing
## Monitoring
### System Monitoring
* Resource usage
* Performance metrics
* Error rates
* Response times
* Queue lengths
* Cache hit rates
* Database performance
### Business Metrics
* Message volume
* Success rates
* Response rates
* Cost per message
* User engagement
* ROI metrics
* Growth metrics
## Next Steps
* Learn about [Security](/guides/notifyer-system/enterprise/security)
* Explore [Customization](/guides/notifyer-system/enterprise/customization)
* Check out our [API Reference](/api-reference/notifier-system)
* Read our [Getting Started](/guides/notifyer-system/getting-started) guide
# Enterprise Security
Source: https://docs.whatsable.app/guides/notifyer-system/enterprise/security
Learn about enterprise-grade security features in Notifyer System
# Enterprise Security
Notifyer System provides comprehensive security features for enterprise-level WhatsApp messaging.
## Security Features
### Authentication
* API key authentication
* OAuth 2.0 support
* Two-factor authentication
* Role-based access control
* Session management
* IP whitelisting
* API key rotation
### Data Protection
* End-to-end encryption
* Data encryption at rest
* Secure data transmission
* Data backup
* Data retention policies
* Data access controls
* Audit logging
### Compliance
* GDPR compliance
* CCPA compliance
* HIPAA compliance
* SOC 2 compliance
* ISO 27001 compliance
* Regular security audits
* Compliance reporting
## Security Implementation
### API Security
```javascript theme={null}
// Example: Secure API call with multiple security headers
const sendSecureMessage = async (message) => {
try {
const response = await axios.post(
'https://api.notifiersystem.com/v1/messages',
message,
{
headers: {
'Authorization': `Bearer ${process.env.NOTIFIER_SYSTEM_API_KEY}`,
'Content-Type': 'application/json',
'X-Tenant-ID': process.env.TENANT_ID,
'X-Request-ID': uuidv4(),
'X-Security-Token': await generateSecurityToken()
}
}
);
return response.data;
} catch (error) {
console.error('Error sending message:', error);
throw error;
}
};
```
### Webhook Security
```javascript theme={null}
// Example: Secure webhook endpoint
app.post('/webhook/message-status',
validateWebhookSignature,
rateLimit,
async (req, res) => {
const { message_id, status, timestamp } = req.body;
await updateMessageStatus({
message_id,
status,
timestamp,
security: {
ip_address: req.ip,
user_agent: req.headers['user-agent'],
request_id: req.headers['x-request-id']
}
});
});
```
## Best Practices
### Security Measures
* Regular security audits
* Penetration testing
* Vulnerability scanning
* Security monitoring
* Incident response
* Security training
* Documentation
### Access Control
* Role-based access
* Least privilege principle
* Access logging
* Access reviews
* Access revocation
* Session management
* Password policies
### Data Protection
* Data classification
* Data encryption
* Data backup
* Data retention
* Data disposal
* Data access logs
* Data breach response
## Monitoring
### Security Monitoring
* Real-time alerts
* Security logs
* Access logs
* Error logs
* Performance metrics
* Compliance reports
* Security dashboards
### Incident Response
* Incident detection
* Incident investigation
* Incident containment
* Incident resolution
* Incident reporting
* Post-incident review
* Documentation
## Next Steps
* Learn about [Scaling](/guides/notifyer-system/enterprise/scaling)
* Explore [Customization](/guides/notifyer-system/enterprise/customization)
* Check out our [API Reference](/api-reference/notifier-system)
* Read our [Getting Started](/guides/notifyer-system/getting-started) guide
# Notifyer System Features
Source: https://docs.whatsable.app/guides/notifyer-system/features
Explore the enterprise features of Notifyer System
# Notifyer System Features
Notifyer System provides comprehensive enterprise-grade features for WhatsApp messaging.
## Core Features
### Message Types
* Text messages
* Media messages (images, documents, audio, video)
* Location sharing
* Contact sharing
* Interactive messages
* List messages
* Button messages
* Product messages
* Order messages
### Message Management
* Message status tracking
* Delivery receipts
* Read receipts
* Message history
* Message templates
* Bulk messaging
* Scheduled messages
* Priority queuing
* Message routing
### Security
* End-to-end encryption
* API key authentication
* Rate limiting
* IP whitelisting
* Two-factor authentication
* Audit logs
* Data encryption at rest
* Compliance monitoring
## Enterprise Features
### Multi-tenant Support
* Multiple business units
* Separate message queues
* Custom branding
* Independent analytics
* Role-based access
### Advanced Templates
* Pre-approved message templates
* Dynamic variables
* Multi-language support
* Template analytics
* Template versioning
* Template approval workflow
* Template categories
### Automation
* Workflow automation
* Conditional messaging
* Event-based triggers
* Custom webhooks
* Integration with third-party services
* Business rules engine
* Custom scripting
### Analytics
* Message delivery rates
* Response times
* User engagement
* Template performance
* Custom reports
* Real-time dashboards
* Export capabilities
* API access
## Best Practices
### Enterprise Setup
* Define clear workflows
* Set up proper monitoring
* Implement security measures
* Configure backup systems
* Document processes
### Message Strategy
* Use approved templates
* Implement proper error handling
* Monitor message status
* Follow WhatsApp guidelines
* Regular template updates
* A/B testing
* Performance optimization
## Next Steps
* Learn about [Integrations](/guides/notifyer-system/integrations)
* Explore [Enterprise Features](/guides/notifyer-system/enterprise/security)
* Check out our [API Reference](/api-reference/notifier-system)
* Read our [Getting Started](/guides/notifyer-system/getting-started) guide
# Getting Started with Notifyer System
Source: https://docs.whatsable.app/guides/notifyer-system/getting-started
Learn how to get started with Notifyer System, the flagship WhatsApp messaging solution
# Getting Started with Notifyer System
Notifyer System is our flagship WhatsApp messaging solution, designed for enterprise-level communication needs.
## Prerequisites
* WhatsApp Business API account
* Business verification
* Technical team for integration
* Understanding of enterprise messaging
* Your Notifyer System API credentials
## Quick Setup
1. Contact our sales team for enterprise setup
2. Complete business verification
3. Set up your WhatsApp Business API account
4. Configure your Notifyer System instance
5. Get your API credentials
6. Set up webhooks and monitoring
## First Message
Here's a quick example of sending your first message:
```bash theme={null}
curl -X POST https://api.notifiersystem.com/v1/messages \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "+1234567890",
"template": "enterprise_welcome",
"variables": {
"name": "John",
"company": "Enterprise Corp",
"department": "Sales"
},
"metadata": {
"campaign_id": "welcome_2024",
"segment": "enterprise",
"priority": "high"
}
}'
```
## Enterprise Features
* Multi-tenant support
* Role-based access control
* Advanced security features
* Custom integrations
* Enterprise-grade support
## Next Steps
* Learn about [Features](/guides/notifyer-system/features)
* Explore [Integrations](/guides/notifyer-system/integrations)
* Check out [Enterprise Features](/guides/notifyer-system/enterprise/security)
* Review our [API Reference](/api-reference/notifier-system)
# Notifyer System Integrations
Source: https://docs.whatsable.app/guides/notifyer-system/integrations
Learn how to integrate Notifyer System with your enterprise applications
# Notifyer System Integrations
Integrate Notifyer System with your enterprise tools and platforms.
## Available Integrations
### Enterprise Platforms
* Salesforce
* SAP
* Oracle
* Microsoft Dynamics
* ServiceNow
### CRM Systems
* Salesforce
* HubSpot
* Zoho CRM
* Pipedrive
* Microsoft Dynamics
* Custom CRM solutions
### E-commerce Platforms
* Shopify Plus
* Magento Enterprise
* SAP Commerce
* Oracle Commerce
* Custom e-commerce solutions
### Marketing Tools
* Adobe Marketing Cloud
* Salesforce Marketing Cloud
* Oracle Marketing Cloud
* HubSpot Enterprise
* Custom marketing platforms
## Custom Integration
### REST API
```javascript theme={null}
const axios = require('axios');
const sendEnterpriseMessage = async (message) => {
try {
const response = await axios.post(
'https://api.notifiersystem.com/v1/messages',
message,
{
headers: {
'Authorization': `Bearer ${process.env.NOTIFIER_SYSTEM_API_KEY}`,
'Content-Type': 'application/json',
'X-Tenant-ID': process.env.TENANT_ID
}
}
);
return response.data;
} catch (error) {
console.error('Error sending message:', error);
throw error;
}
};
```
### Webhooks
Configure webhooks for enterprise-level monitoring:
```json theme={null}
{
"event": "message.status",
"data": {
"message_id": "msg_123",
"status": "delivered",
"template": "enterprise_welcome",
"variables": {
"name": "John",
"company": "Enterprise Corp",
"department": "Sales"
},
"metadata": {
"campaign_id": "welcome_2024",
"segment": "enterprise",
"priority": "high"
},
"timestamp": "2024-03-20T10:00:00Z"
}
}
```
## Enterprise Features
### Multi-tenant Support
* Separate API keys per tenant
* Custom webhook endpoints
* Tenant-specific templates
* Independent analytics
* Custom branding
### Security
* IP whitelisting
* API key rotation
* Audit logging
* Data encryption
* Compliance monitoring
### Monitoring
* Real-time status
* Error tracking
* Performance metrics
* Usage analytics
* Cost tracking
## Best Practices
### Integration
* Use environment variables
* Implement retry logic
* Handle rate limits
* Monitor webhook delivery
* Use template variables
* Implement proper error handling
* Set up monitoring
* Regular security audits
### Development
* Follow API guidelines
* Use SDK when available
* Test thoroughly
* Document integration
* Version control
* CI/CD pipeline
* Regular updates
## Next Steps
* Read our [Getting Started](/guides/notifyer-system/getting-started) guide
* Explore [Features](/guides/notifyer-system/features)
* Check out [Enterprise Features](/guides/notifyer-system/enterprise/security)
* Review our [API Reference](/api-reference/notifier-system)
# What Make modules and fields does Whatsable expose?
Source: https://docs.whatsable.app/guides/notifyer-system/make-fields
Every Whatsable Make module and field: Incoming and Incoming & Outgoing triggers, Send, Schedule a follow-up, Update a Contact, and Get delivery status.
This page is the **field dictionary** for the Whatsable for WhatsApp Business app on Make — every unlocked trigger, action, and search module input/output you can map in a scenario. Use it when you already know you want Make and need exact labels, types, and requiredness.
For connect steps, coexistence walkthrough, examples, and troubleshooting, use [Make overview](/guides/notifyer-system/make-overview).
## Prerequisites
* **Plan:** Make requires **Pro** or **Agency** (Bulk Message does not include integrations).
* **WhatsApp number:** Connected in Whatsable. Coexistence is supported — keep the WhatsApp Business app; phone replies can fire the dual-direction trigger.
* **Make app:** Public marketplace listing **Whatsable for WhatsApp Business** ([make.com/en/integrations/whatsable-message](https://www.make.com/en/integrations/whatsable-message)). Search **Whatsable** in the Make scenario editor.
* **API key:** From the Whatsable console API Keys page. Create a **Notifyer only** connection in Make and paste that key (core product key — not a Meta Graph token).
Install via the Whatsable console **Connect to Make** flow or the public Make listing. You need Admin, Owner, or App Developer role in your Make organization to install apps.
***
## At a glance
| Kind | Exact name in Make |
| - | - |
| Trigger (instant) | **Incoming Messages from console (Notifyer System)** |
| Trigger (instant) | **Incoming & Outgoing Messages from console (Notifyer System)** |
| Action | **Send WhatsApp Message** |
| Action | **Schedule a follow-up Message** |
| Action | **Update a Contact** |
| Search | **Get delivery status of a message** |
All modules use the Whatsable for WhatsApp Business app and a Notifyer API key connection.
***
## Trigger: Incoming Messages from console (Notifyer System)
**Type:** Instant · **Connection:** Notifyer only
Fires every time an incoming message arrives in your Whatsable console. Full-featured trigger for AI chatbot workflows, lead qualification, CRM updates, and real-time automations — includes AI note, conversation history, and scheduling data.
### Configure inputs
Create or select a Make webhook bound to your Notifyer only connection (API key).
### Output fields — contact identity
The contact’s phone number (for example `14155550187`). May arrive as a number rather than a string.
Unique internal ID for this contact (UUID).
Display name used by the AI to address this contact.
Comma-separated labels on the conversation (for example `Hot Lead, Buyer Qualified`).
### Output fields — message data
Documented values: `text`, `audio`, `image`, or `document`.
`true` for this trigger — confirms an inbound message from the contact.
Empty on this incoming-only trigger. On the dual-direction trigger, identifies the sending system or teammate.
`true` when a person sent the message.
Public URL of any attached file, or empty when there is none.
`true` when this event is a scheduled delivery; `false` for real-time messages.
Present when the inbound message came from a Click-to-WhatsApp ad or post. Typically on the **first** inbound after the tap; later messages usually omit it. Nested keys:
| Key | Meaning |
| - | - |
| `source_type` | `"ad"` or `"post"` |
| `source_id` | Ad or post ID |
| `source_url` | Where they tapped |
| `headline` / `body` | Ad copy |
| `media_type` | `"image"` or `"video"` |
| `image_url` / `video_url` | Creative URLs |
| `ctwa_clid` | Click ID for Meta Conversions API |
Persist `ctwa_clid` and `source_id` as soon as you see them. See also [Incoming message — Click-to-WhatsApp ads](/guides/notifyer-system/api/incoming-message#click-to-whatsapp-ads).
### Output fields — conversation history
JSON string (or array representation) of recent messages. Each item includes `type` (`user` / `bot`), `content`, `timestamp`, and `content_type`. Parse before iterating.
The most recent message from the contact — the message that triggered this run.
The most recent message your business sent (human or automation).
Unix timestamp (milliseconds) of the contact’s last message.
Unix timestamp (milliseconds) of your business’s last message to this contact.
Flat, readable conversation history — useful for LLM prompts without parsing `last_messages`.
### Output fields — AI context and automation
AI context note stored on this contact. Update it with **Update a Contact**.
Automation instructions for the AI based on conversation events.
Description of messages currently scheduled to this contact. **Available on this Incoming-only trigger** — not on the Incoming & Outgoing trigger.
***
## Trigger: Incoming & Outgoing Messages from console (Notifyer System)
**Type:** Instant · **Connection:** Notifyer only
Fires on both incoming and outgoing messages — every message sent or received in your Whatsable console, including replies typed in the WhatsApp Business app. Use it for conversation logging, CRM sync, or automations that must react when a teammate replies on their phone.
Description in Make: "Get your sent and incoming messages data through a single webhook."
### Configure inputs
Same webhook + Notifyer only connection setup as the Incoming-only trigger.
### Output fields
Identical to **Incoming Messages from console** above, with these differences:
`true` when the contact sent a message; `false` when your business sent a message. Add a Router or Filter after this trigger to branch by direction.
On outgoing messages: `"WhatsApp App"` (phone app), a teammate’s name (inbox), or an automation/app name (Make, Zapier, n8n, API, bot). Empty or omitted on incoming messages.
`true` when a person sent the message (phone app or inbox); `false` when a bot or automation sent it.
The `scheduled_messages` field is only available on the **Incoming Messages from console** trigger — not on this dual-direction trigger.
Use a Make Filter or Router on `incoming_message`, `send_by`, and `was_message_by_human` to split incoming vs outgoing and human phone-app replies vs automations.
***
## Action: Send WhatsApp Message
**Connection:** Notifyer only
Sends a WhatsApp message using the official WhatsApp API. You can add labels and write notes that appear in Whatsable’s chat interface. Choose **Configuration**: template (start a conversation / proactive) or non-template (inside the customer service window).
### Mode A — Send WhatsApp Template (to start conversation)
Use this to initiate a new conversation or reach out proactively. Requires a Meta-approved template.
Recipient in international format — digits only, no `+` or spaces (for example `14155550187`).
Select from your approved templates. The dropdown shows a live preview of body, language, and category.
One field per template variable (`{{1}}`, `{{2}}`, …). Required when the template has variables.
Public URL for a media header (image, video, or document). Only when the selected template has a media header.
Full URL including the dynamic portion, when the template has a dynamic URL button.
AI context about this contact. Stored on the contact — **not** sent to the recipient.
Labels to apply to this conversation. Labels appear in your Whatsable console.
### Mode B — Non-template message (person must write to you first)
Only inside Meta’s customer service window after the contact’s last inbound message. Outside that window, use an approved template.
Same digit format as Phone Number above.
**Text Message**, **Image Message**, **Video Message**, **Document Message**, or **Audio Message**. Nested fields:
| Message Type | Nested fields |
| - | - |
| Text Message | **Message Content** (text, required); **Enable Link Preview** (boolean, optional, default false) |
| Image Message | **Image URL** (url, required); **Caption** (text, optional) |
| Video Message | **Video URL** (url, required); **Caption** (text, optional) |
| Document Message | **Document URL** (url, required); **Caption** (text, optional); **Filename** (text) |
| Audio Message | **Audio URL** (url, required) |
Labels to apply to this conversation.
AI context note for this contact.
Testing this action sends a **real** WhatsApp message. Use a personal test number during setup.
***
## Action: Schedule a follow-up Message
**Connection:** Notifyer only
Schedules a WhatsApp message for later, with optional reply and label conditions so it can cancel or skip when the lead is already engaged.
Message fields are the same as **Send WhatsApp Message** (template or non-template, including phone, template/variables or message type, Note, and labels), **plus** the schedule and condition fields below.
### When to send — Relative (delay from now)
Choose only: **1, 2, 3, 4, 5, 10, 15, 20, 30, 60, 90, or 120**.
**Minutes**, **Hours**, or **Days**.
### When to send — Specific date and time
Exact send time.
Timezone for the scheduled time (full global list in Make — GMT-11 through GMT+12).
### Reply Condition
Optional but recommended. Cancels the scheduled send if the contact replies within the chosen rule.
| Condition label |
| - |
| Recipient did not reply after my last message *(recommended default)* |
| Recipient never replied to any of my messages |
| Recipient did not reply within 20 minutes |
| Recipient did not reply within 45 minutes |
| Recipient did not reply within 3 hours |
| Recipient did not reply within 6 hours |
| Recipient did not reply within 12 hours |
| Recipient did not reply within 24 hours |
| Recipient did not reply within 48 hours |
| Recipient did not reply within 72 hours |
### Label condition (optional)
**Include** — only send if the contact has this label at send time. **Does Not Include** — only send if they do not.
Label evaluated when the scheduled send time arrives.
Scheduled messages are visible in the Whatsable console under the contact’s conversation — you can view or cancel them there.
This is **not** a native drip builder inside Whatsable. Day-0 / day-3 / day-6 sequences are multiple Make modules (or routers) that each schedule one message. Whatsable sends each scheduled message; the sequence logic lives in Make.
***
## Action: Update a Contact
**Connection:** Notifyer only
Updates a contact in Whatsable — display name, AI note, and labels. The Make action description also states you can **assign the conversation to a teammate**.
### Documented fields
Lookup key in international digit format. Creates a contact if none exists yet.
Display name in the Whatsable chat interface.
AI context note for this contact (name, email, preferences, language, and so on).
Labels to add. Whatsable conversation labels are the source of truth inside Whatsable.
Labels to remove. **Remove All** clears every label on this contact.
**Assign a teammate:** Update a Contact can assign the conversation to a teammate (Make action description + Zapier / Make / API). Documented fields on this page today are Phone Number, Display Name, Note, and Add/Remove Labels. Confirm any assignee control in your live Make module sample — do not rely on an undocumented field name. Operator how-to: [Chat assignment](/guides/notifyer-system/chat-assignment) and [Team inbox](/guides/notifyer-system/team-inbox).
***
## Search: Get delivery status of a message
**Connection:** Notifyer only
Checks whether a previously sent WhatsApp message was delivered — useful for fallback paths (for example email) when a number may be wrong or inactive.
Map from the output of a prior **Send WhatsApp Message** or **Schedule a follow-up Message** module in the same scenario.
Connect a Router after this search to handle delivered vs not-delivered paths (for example send a fallback Gmail or Outlook email).
If a lookup fails in scenario history, re-check the mapped Message ID and contact support if needed. Do not assume every Message ID always resolves in every environment.
***
## Limits and what this does NOT do
**No native drip builder.** Multi-day sequences use Make (or Zapier / n8n) schedule modules plus reply conditions — not a built-in drip product inside Whatsable.
**No CRM ↔ Whatsable bidirectional label mirror.** Add/Remove labels update Whatsable conversation labels. They do not sync Monday/Pipedrive (or other) CRM tags as one shared store.
**Coexistence:** Do **not** uninstall the WhatsApp Business app to “enable” API or Make. Keep using the phone; those replies can still start scenarios via the Incoming & Outgoing trigger.
* **Bulk Message** plan: no Make / integrations — upgrade to Pro or Agency.
* **Non-template** sends only inside the customer service window after the contact’s last inbound; otherwise use a template.
* **Phone format:** digits only, full international, no `+`, spaces, or dashes.
* **Group Messaging** is **unavailable** as a product add-on and is **not** a documented Make module on this fields page.
* Do not invent trigger `message_type` values beyond `text`, `audio`, `image`, and `document`.
* Typing-indicator dots are not a documented Whatsable automation claim.
* Do not invent location or sticker send types on Make modules.
***
## Related features and next steps
Connect, coexistence, examples, troubleshooting
Parallel Zapier trigger/action field dictionary
Shared inbox and human replies alongside automations
Assign chats via Make, Zapier, API, keywords, or AI
Also: [Incoming message / CTWA](/guides/notifyer-system/api/incoming-message) · [n8n overview](/guides/notifyer-system/n8n-overview) · [Plans](/guides/notifyer-system/plans-bulk-message-pro-agency).
***
## FAQ
### Does the Make trigger fire when someone replies in the WhatsApp Business app?
Yes, when coexistence is enabled and you use **Incoming & Outgoing Messages from console**. Filter on `incoming_message` (`false`), `send_by` (for example `"WhatsApp App"`), and `was_message_by_human`.
### Which trigger should I use for AI chatbot scenarios?
Prefer **Incoming Messages from console** when you only need inbound events and want `scheduled_messages` in the payload. Use the dual-direction trigger when you must also react to outgoing phone-app or inbox replies.
### Can I build day-0 / day-3 / day-6 WhatsApp drips with Whatsable and Make?
Yes, by chaining **Schedule a follow-up Message** modules (and reply conditions) in Make. Whatsable is not a native drip builder — the sequence logic lives in Make.
### Does Bulk Message include Make?
No. Make and other integrations require **Pro** or **Agency**.
### Which fields does Update a Contact document today?
**Phone Number**, **Display Name**, **Note**, **Add Labels**, and **Remove Labels**. Assigning a teammate is supported as a product capability via Make; confirm the live module for any assignee control rather than inventing a field name.
# Make
Source: https://docs.whatsable.app/guides/notifyer-system/make-overview
Notifyer System modules in Make — triggers for incoming and outgoing WhatsApp messages (including the WhatsApp Business app), actions, and search. Coexistence is supported.
# Notifyer System Integration with Make
This guide covers every module available for the Notifyer System inside Make — including all triggers, actions, and the search module — so you can build fully automated WhatsApp workflows.
**Meta WhatsApp Coexistence is supported on Notifyer System.** You do **not** need to delete the WhatsApp Business app or stop using the number on your phone. After Embedded Signup, the same number works in the WhatsApp Business app, the Notifyer chat inbox, and automations (Make, Zapier, n8n, API, and webhooks) at the same time.
## Available modules at a glance
The Notifyer System is part of the **Whatsable for WhatsApp Business** app on Make. Once installed, you get access to the following modules using your Notifyer API key:
* Incoming Messages from console (Notifyer System)
* Incoming & Outgoing Messages from console (Notifyer System)
* Send WhatsApp Message
* Schedule a follow-up Message
* Update a Contact
* Get delivery status of a message
All modules in this guide are part of the **Whatsable for WhatsApp Business** app on Make. Notifyer System users connect using their **Notifyer API key**.
***
## Prerequisites
Before getting started, make sure you have:
Active Notifyer System account with a subscription plan (Monthly or Pay-as-you-go) and a connected WhatsApp number
Access to [Make](https://www.make.com/en/register) workflow automation platform
New to Notifyer System? [Sign up here](https://console.notifyer-systems.com/)
***
## Setting up your Notifyer System account
Before sending WhatsApp messages, complete the [embedding process](/guides/notifyer-system/embedding-process), which connects your WhatsApp Business account to Notifyer System. You do **not** need to delete the WhatsApp Business app — [coexistence](/guides/notifyer-system/embedding-process#whatsapp-coexistence) is supported.
The embedding process is required by Meta to ensure proper business verification and compliance with WhatsApp Business Platform policies.
WhatsApp templates are pre-approved message formats required to initiate a new conversation with a contact. Create and get them approved in Notifyer before using them in Make.
Go to **Your Templates** in your Notifyer dashboard
Click the **Create Template** tab at the top of the page
Choose a descriptive name for internal reference
Choose your template's primary language
Select the appropriate message category (Marketing, Utility, Authentication)
Optional: Add an image, document, or video header
Craft your message content. Use `{{1}}`, `{{2}}` placeholders for dynamic variables
Optional: Configure call-to-action or quick reply buttons
Click **Preview and Submit**
Templates are typically reviewed within 24 hours. Utility and Authentication templates have the highest approval rates.
1. In your Notifyer dashboard, navigate to [**API Keys**](https://console.notifyer-systems.com/api-key)
2. Copy your unique API key
3. Store it securely — you will need it when creating the Make connection
Never share your API key publicly or commit it to version control systems.
***
## Connect Notifyer System to Make
1. Log in to your Make account
2. Navigate to your Notifyer System dashboard and select **Connect to Make** in the side menu
3. Click **Continue** in the connection guide popup
4. Click **Install**, select your Make organization at the bottom of the screen, then click **Install** again
You need Admin, Owner, or App Developer role in your Make organization to install apps.
The **Whatsable for WhatsApp Business** app is now installed and ready to use in your Make scenarios
1. Log in to your Make account at [make.com](https://www.make.com)
2. Click **+ Create a new scenario**
3. You are now ready to add your first module — follow the trigger setup guide in the [Module Reference](#setting-up-a-notifyer-trigger-in-make) section below
***
## Module Reference
### Triggers
Instant triggers fire in real time whenever a qualifying event occurs in your Notifyer console. Both triggers below use the **Whatsable for WhatsApp Business** app in Make and require a webhook plus your Notifyer API key connection.
Both triggers are **Instant** — they fire immediately when a message event occurs in your Notifyer console.
***
### Setting up a Notifyer trigger in Make
Both Notifyer triggers follow the same 5-step setup in Make. The only difference is which trigger you select in Step 1.
1. In your scenario, click the large **+** button to add a module
2. Search for **Whatsable** or **Whatsable for WhatsApp Business**
3. Open the **Whatsable for WhatsApp Business** app
4. Under **Triggers**, select the trigger you need:
| Trigger | When to use it |
| - | - |
| **Incoming Messages from console (Notifyer System)** | Fires only when a contact sends your business a message |
| **Incoming & Outgoing Messages from console (Notifyer System)** | Fires on every message — both incoming and outgoing, including replies typed in the WhatsApp Business app |
After selecting the trigger, the module configuration window opens. The first required field is **Webhook**.
1. Click the **Add** button next to the **Webhook** dropdown (the dropdown will show "Choose a hook..." if no webhook exists yet)
2. This opens the **Create a webhook** dialog
In the **Create a webhook** dialog:
1. Enter a **Webhook name** — use something descriptive so you can identify it later (e.g. `My Notifyer Systems webhook`)
2. Under **Connection**, either:
* Select an existing connection if you have already connected Notifyer to Make before, **or**
* Click **Add** next to the Connection dropdown to create a new connection (continue to Step 4)
3. If you already have a connection selected, click **Save** to create the webhook and skip to Step 5
If you clicked **Add** in Step 3, the **Create a connection** dialog opens on top of the webhook dialog.
1. Enter a **Connection name** (e.g. `My Notifyer only connection`)
2. Paste your **Notifyer API key** in the **API Key** field — get this from your [Notifyer API Keys page](https://console.notifyer-systems.com/api-key)
3. Click **Save**
Make validates your API key automatically. Once saved, you return to the **Create a webhook** dialog with your new connection selected.
You only need to create this connection once. All future Notifyer modules in Make can reuse the same saved connection.
Back in the **Create a webhook** dialog, click **Save** to finish creating the webhook.
You are now back in the main module configuration window. The webhook you created is selected and a **Webhook URL** is displayed (e.g. `https://hook.eu1.make.com/...`).
1. Confirm your webhook is selected in the **Webhook** dropdown
2. Click **Save** to finish configuring the trigger module
3. Toggle your scenario to **Active** (or click **Run once** to test first)
Your trigger is now live. When a matching message event occurs in your Notifyer console, Make will run your scenario automatically.
Set the scenario schedule to **Immediately as data arrives** (shown in the bottom toolbar) so instant triggers fire without delay.
***
#### Incoming Messages from console (Notifyer System)
**Type:** Instant Trigger | **Connection:** Notifyer only
Fires every time an **incoming message** arrives in your Notifyer console. This is the full-featured trigger for building AI chatbot workflows, lead qualification, CRM updates, and real-time automations — it exposes all conversation context fields including the AI note, conversation history, and scheduling data.
**Description in Make:** *"Incoming Messages from console (Notifyer System)"*
**How to set up:** Follow the [5-step trigger setup guide](#setting-up-a-notifyer-trigger-in-make) above. In Step 1, select **Incoming Messages from console (Notifyer System)** from the Triggers list.
**Output fields — everything your scenario receives when triggered:**
The phone number of the person who sent the message (e.g. `14155550187`)
Unique internal ID for this contact in Notifyer (UUID format)
The first name or display name used by the AI to address this contact in conversation
Comma-separated list of labels currently applied to this conversation (e.g. `Hot Lead, Buyer Qualified, Urgent`)
Type of the incoming message: `text`, `audio`, `image`, or `document`
`true` for this trigger — confirms this is an inbound message from the contact
Empty on this incoming-only trigger. On the incoming **and outgoing** trigger, this identifies the sending system or teammate (see below)
`true` when a person sent the message
Public URL of any file the contact attached (image, document, audio). Empty if no attachment
`true` if triggered by a scheduled message being delivered; `false` for real-time messages
Present when the inbound message came from a Click-to-WhatsApp ad or post. Includes `source_type`, `source_id`, `source_url` (platform), `headline`, `body`, `media_type`, creative URLs, and `ctwa_clid`. Omitted on ordinary chats and on most follow-up messages. See [Click-to-WhatsApp ads](/guides/notifyer-system/api/incoming-message#click-to-whatsapp-ads).
JSON array of recent messages. Each item includes: `type` (user/bot), `content`, `timestamp`, `content_type`. Useful for passing full history to an AI
The most recent message sent by the contact — the message that triggered this run
The most recent message your business sent to this contact — helps AI avoid repeating itself
Unix timestamp (ms) of when the contact's last message was received
Unix timestamp (ms) of when your business last messaged this contact
A flat, readable version of the full conversation history — ideal for passing directly to an AI/LLM prompt without parsing the `last_messages` JSON array
The AI context note stored on this contact in Notifyer. Contains lead details: name, email, preferences, background, language, etc. Set this via the **Update a Contact** action or directly in the Notifyer console
Automation instructions for the AI — rules the AI follows automatically based on conversation events (e.g. "If budget confirmed and timeline under 6 months, notify the agent within 1 hour")
Description of any messages currently queued/scheduled to be sent to this contact at a future time
***
#### Incoming & Outgoing Messages from console (Notifyer System)
**Type:** Instant Trigger | **Connection:** Notifyer only
Fires on **both incoming and outgoing** messages — every message sent or received in your Notifyer console triggers this, including messages **typed by hand in the WhatsApp Business app**. Use it for conversation logging, CRM sync, or automations that must react when a teammate replies on their phone.
**Description in Make:** *"Get your sent and incoming messages data through a single webhook."*
**How to set up:** Follow the same [5-step trigger setup guide](#setting-up-a-notifyer-trigger-in-make) above. In Step 1, select **Incoming & Outgoing Messages from console (Notifyer System)** instead.
**Key difference:** This trigger also fires when your business sends a message. Use the `incoming_message` field to branch your logic:
* `incoming_message = true` → a contact sent your business a message
* `incoming_message = false` → your business sent a message to a contact (phone app, Notifyer inbox, or automation)
**Output fields:** Identical to the **Incoming Messages from console** trigger above, with these differences:
`true` when the contact sent a message, `false` when your business sent a message. Add a **Router** or **Filter** module after this trigger to branch logic based on direction
Which system or person sent an outgoing message: `"WhatsApp App"` for the WhatsApp Business app, the teammate's name for the Notifyer chat inbox, or the automation/app name for Make, Zapier, n8n, or API
`true` when a person sent the message (phone app or Notifyer inbox). `false` when a bot or automation sent it
The `scheduled_messages` field is only available in the **Incoming Messages from console** trigger, not this one.
## Incoming and outgoing WhatsApp messages
Notifyer delivers **both incoming and outgoing** messages to your webhook or automation trigger — including messages typed by hand in the **WhatsApp Business app** on your phone.
This is possible because Notifyer supports [Meta WhatsApp Coexistence](/guides/notifyer-system/embedding-process#whatsapp-coexistence). You keep using WhatsApp Business on your phone; those hand-typed replies still reach an external webhook and can start an automation. They are not limited to the Notifyer web inbox.
The payload is the same whether you use [n8n](/guides/notifyer-system/n8n-overview), [Make](/guides/notifyer-system/make-overview), [Zapier](/guides/notifyer-system/zapier-overview), or a [custom webhook](/guides/notifyer-system/api/incoming-message). [Watch the walkthrough on YouTube](https://www.youtube.com/watch?v=UfW-KwS4gBI).
### Direction, sending system, and team member
Use these three fields to tell *what happened* and *who sent it*:
`true` when a contact sent a message **to** your business. `false` when your business sent a message **to** the contact (outgoing). Filter on this field to run logic only for one direction.
Which system or person sent an **outgoing** message:
| `send_by` value | Meaning |
| - | - |
| `WhatsApp App` | Typed by hand in the WhatsApp Business app on a phone |
| A team member's name (for example `Axel Meta`) | Sent from the Notifyer chat inbox by that logged-in user |
| An automation or app name (Make, Zapier, n8n, API, bot) | Sent by that integration or bot |
Empty or omitted on incoming messages.
`true` when a person sent the message (WhatsApp Business app or Notifyer chat inbox). `false` when a bot or automation sent it. Combine with `send_by` to see both *whether* a human sent it and *which teammate or system* did.
### Example payload: message typed on the phone
This is the JSON Notifyer POSTs when someone types a reply in the WhatsApp Business app. `incoming_message` is `false`, `send_by` is `"WhatsApp App"`, and `was_message_by_human` is `true`.
```json theme={null}
{
"last_messages": "[{\"type\":\"bot\",\"content\":\"Hello n8n\",\"timestamp\":\"2026-08-15T12:24:47.000Z\",\"content_type\":\"text\"},{\"type\":\"user\",\"content\":\"hi\",\"timestamp\":\"2026-08-12T12:27:42.746Z\",\"content_type\":\"text\"}]",
"conversation_paragraph": "Bot (12:24:47 PM): Hello n8n ; User (12:27:42 PM): hi",
"phone_number": 14155552671,
"recipient_name": "Alex Martinez",
"user_id": "158c59e1-ea85-4d0b-b70c-65328ba67a8e",
"last_message_of_user": "hi",
"last_message_of_bot": "Hello n8n",
"message_type": "text",
"user_last_message_time": 1786722580,
"bot_last_message_time": 1786797014,
"attachment_url": null,
"note": "email: alex\nName: Alex",
"note_automation": "email: alex\nName: Alex",
"labels": "n8n, webhook-test",
"incoming_message": false,
"send_by": "WhatsApp App",
"was_message_by_human": true
}
```
`last_message_of_bot` is the last message **your business** sent — whether a human typed it in the WhatsApp Business app or the Notifyer inbox, or a bot/automation sent it. `last_messages` is a JSON **string** of the last \~20 messages (parse it before iterating). `phone_number` may arrive as a number rather than a string.
When the same person sends from the Notifyer chat inbox instead of the phone app, the payload is identical except:
```json theme={null}
{
"incoming_message": false,
"send_by": "Axel Meta",
"was_message_by_human": true
}
```
### Click-to-WhatsApp ad attribution
When a contact messages you after tapping a **Click-to-WhatsApp** ad (Facebook, Instagram, or WhatsApp Status), Meta includes a `referral` object on that inbound event. Notifyer forwards it in [webhook](/guides/notifyer-system/api/incoming-message#click-to-whatsapp-ads) and trigger data (n8n, Make, Zapier).
Use it to see **which ad, creative, and platform** produced the lead — then label the chat, route it, or send `ctwa_clid` back to Meta for campaign optimization.
`referral` is typically present on the **first inbound message** after the ad click. Later messages in the same conversation usually omit it. Persist `ctwa_clid` and `source_id` as soon as you see them.
| Field | What it tells you |
| - | - |
| `source_type` | `"ad"` for an ad, `"post"` for an organic post |
| `source_id` | Ad or post ID — use this to group leads by creative |
| `source_url` | Where they tapped (Instagram permalink, Facebook/ad URL) |
| `headline` / `body` | Ad copy the lead saw |
| `media_type` | `"image"` or `"video"` |
| `image_url` / `video_url` | Creative asset URL |
| `ctwa_clid` | Click ID for Meta Conversions API attribution |
```json theme={null}
{
"incoming_message": true,
"last_message_of_user": "Quiero información",
"referral": {
"source_type": "ad",
"source_id": "52540693396957",
"source_url": "https://www.instagram.com/p/DZiVBz7gAF9/",
"headline": "Expo Nissan",
"body": "Aprovechá la EXPONISSAN y llevate tu nuevo Nissan Kicks Play Sense MT.",
"media_type": "image",
"image_url": "https://scontent.xx.fbcdn.net/v/t45.1600-4/example.jpg",
"ctwa_clid": "AfhN-JKvx8HeFTmfB-Tu11zktQRJ-MNdMV1mwvDNxHnpYrGl-jVf3OEFhLva_MP41zYRe5ErUteWFn3v4gkkjzfIEVr9J_u8GAo3-o6DqShykM4Zsl14FcU5MyThsCoQ"
}
}
```
If your delivery includes the Cloud API envelope instead of a flattened Notifyer payload, the same object lives at `entry[].changes[].value.messages[].referral`. Full field reference and a complete example: [Message webhooks — Click-to-WhatsApp ads](/guides/notifyer-system/api/incoming-message#click-to-whatsapp-ads).
***
### Actions
Actions perform operations in Notifyer System — sending messages, scheduling follow-ups, and updating contacts.
***
#### Send WhatsApp Message
**Type:** Action | **Connection:** Notifyer only
**Description in Make:** *"Send WhatsApp Messages using the official WhatsApp API. You can add labels to a WhatsApp conversation and also write notes about the lead that will appear in Whatsable's chat interface."*
Send a WhatsApp message immediately to any phone number. Supports both **template messages** (to start a new conversation) and **non-template messages** (within an active 24-hour window). Labels and notes set here appear directly in your Notifyer console — making this the primary send module for Notifyer System users.
**API endpoint:** `https://api.insightssystem.com/api:pqxobaAo/send`
**How to configure:**
Click **+** → search for **Whatsable** or **Whatsable for WhatsApp Business** → under **Actions**, select **Send WhatsApp Message**
Choose your existing connection or create a new one with your **Notifyer API key**
Select from the **Configuration** dropdown:
Use this to **initiate a new conversation** or reach out proactively. Requires a Meta-approved template.
Recipient's phone number in international format — digits only, no `+` or spaces (e.g. `14155550187`)
Select from your approved templates. The dropdown shows a live preview of each template's body, language, and category
If your template has variables (`{{1}}`, `{{2}}`...), a field appears for each. Map them to dynamic data from previous modules
If your template has a media header (image, video, document), enter the publicly accessible URL of that file
If your template has a dynamic URL button, enter the URL value including the dynamic portion
AI context about this contact (name, email, preferences, language). The AI reads this to personalize future replies and qualify leads more accurately
Labels to apply to this conversation for internal tracking and routing. Labels appear in your Notifyer console
Use this to send a message **within an active conversation** — only possible within 24 hours of the contact's last incoming message.
Phone number in international format — digits only (e.g. `14155550187`)
Choose the type of message to send:
The text content to send
Set to `true` to show a URL preview card when the message contains a link. Default: `false`
Publicly accessible URL of the image (JPEG, PNG, etc.)
Optional caption text below the image
Publicly accessible URL of the video (MP4, etc.)
Optional caption text below the video
Publicly accessible URL of the document (PDF, DOCX, etc.)
Optional caption for the document
Filename to display (e.g. `invoice-2026.pdf`)
Publicly accessible URL of the audio file (MP3, OGG, etc.)
Labels to apply to this conversation. Labels appear in your Notifyer console
AI context note for this contact — set or update the note that the AI reads to personalize replies
***
#### Schedule a follow-up Message
**Type:** Action | **Connection:** Notifyer only
**Description in Make:** *"Schedule a follow-up to get sent later and add conditions so it only gets sent if the lead did not reply to you."*
Schedule a WhatsApp message to be sent at a **future time**, with an optional **reply condition** that automatically cancels the message if the recipient responds before it sends. This is one of Notifyer's most powerful automation features — use it to build no-reply follow-up sequences, re-engagement drips, and smart nurture workflows.
**How to configure:**
Click **+** → search for **Whatsable** or **Whatsable for WhatsApp Business** → under **Actions**, select **Schedule a follow-up Message**
Choose your **Notifyer only** connection
Select from the **Configuration** dropdown — either a template message or a non-template message. The fields are identical to the **Send WhatsApp Message** action above (phone number, template/message type, variables, labels, note).
Send the message after a delay from the time the scenario runs:
Choose: 1, 2, 3, 4, 5, 10, 15, 20, 30, 60, 90, or 120
Choose: **Minutes**, **Hours**, or **Days**
Send the message at an exact date and time:
The exact date and time to send the message
The timezone for the scheduled time — full global timezone list available (GMT-11 through GMT+12)
The reply condition tells Notifyer to **cancel the scheduled message** if the recipient replies within the specified timeframe — preventing follow-ups to contacts who are already engaged.
| Condition | When the message is cancelled |
| - | - |
| Recipient did not reply after my last message | Cancelled if the contact replies at any point before scheduled send |
| Recipient never replied to any of my messages | Cancelled only if the contact has never replied to you at all |
| Recipient did not reply within 20 minutes | Cancelled if contact replies within 20 minutes |
| Recipient did not reply within 45 minutes | Cancelled if contact replies within 45 minutes |
| Recipient did not reply within 3 hours | Cancelled if contact replies within 3 hours |
| Recipient did not reply within 6 hours | Cancelled if contact replies within 6 hours |
| Recipient did not reply within 12 hours | Cancelled if contact replies within 12 hours |
| Recipient did not reply within 24 hours | Cancelled if contact replies within 24 hours |
| Recipient did not reply within 48 hours | Cancelled if contact replies within 48 hours |
| Recipient did not reply within 72 hours | Cancelled if contact replies within 72 hours |
**"Recipient did not reply after my last message"** is the recommended default for most follow-up sequences — it ensures no follow-up is sent to contacts who are already in conversation with you.
Restrict the scheduled message to only send if the contact has (or does not have) a specific label:
**Include** — only send if the contact has this label\
**Does Not Include** — only send if the contact does NOT have this label
The label to evaluate against
Scheduled messages are visible in your Notifyer console under the contact's conversation. You can view or cancel them there at any time.
***
#### Update a Contact
**Type:** Action | **Connection:** Notifyer only
**Description in Make:** *"Assign conversation to someone in your team, Add information in the notes, add/remove labels. Simply put the phone number and what information you want to change. This appears in the chat interface of our system."*
Update a contact's details in your Notifyer console — set their display name, add or remove labels, or update the AI context note on their conversation. Use this to keep Notifyer contacts in sync with your CRM, form responses, or other external data.
**API endpoint:** `https://api.insightssystem.com/api:hFrjh8a1/make/recipient/details/update` (PUT)
**How to configure:**
Click **+** → search for **Whatsable** or **Whatsable for WhatsApp Business** → under **Actions**, select **Update a Contact**
Choose your **Notifyer only** connection
The phone number of the contact to update, in international format — digits only (e.g. `14155550187`). This is used to look up the contact in Notifyer
Update the display name shown for this contact in the Notifyer chat interface
Set or update the AI context note for this contact. The AI reads this field to personalize conversations. A well-structured note significantly improves AI response quality.
**Recommended note format:**
```
email: john@example.com | Name: John Smith
Looking for: 3BR house, $500k budget, north suburbs
Pre-approved: Yes | Language: English
Best time to contact: evenings after 6pm
```
One or more labels to **add** to this contact. Labels appear in the Notifyer console and can be used for routing, filtering, and automation conditions
One or more labels to **remove** from this contact. Select **Remove All** to clear all labels from this contact at once
Place **Update a Contact** at the very start of your scenario — before sending any message — to populate the AI Note from form or CRM data. This ensures the AI has full context before the first message is even sent.
***
### Search
***
#### Get delivery status of a message
**Type:** Search | **Connection:** Notifyer only
**Description in Make:** *"Check if the message was delivered or not. Use this if you're not sure the number is correct and want to check if it was delivered and want to send a fallback email."*
Check whether a previously sent WhatsApp message was delivered. Use this to build fallback automation — if a message was not delivered (e.g. incorrect number), automatically trigger an alternative action such as sending a fallback email.
**API endpoint:** `https://api.insightssystem.com/api:5l-RgW1B/conversation/{{messageId}}` (GET)
**How to configure:**
Click **+** → search for **Whatsable** or **Whatsable for WhatsApp Business** → under **Searches**, select **Get delivery status of a message**
Choose your **Notifyer only** connection
The ID of the message to check. This is the ID returned in the output bundle of a previous **Send WhatsApp Message** or **Schedule a follow-up Message** action in the same scenario
Connect a **Router** module after this search to handle two paths: one for successfully delivered messages, and one for undelivered messages where you trigger a fallback (e.g. send a Gmail or Outlook email).
***
## Building a complete scenario: step-by-step example
Here is a practical end-to-end example: **New lead from a form → AI context set → Template message sent → Conditional follow-up scheduled**
Start with a **Google Forms**, **Typeform**, or **Jotform** instant trigger that fires when someone fills in your lead capture form
Add **Notifyer — Update a Contact**. Map form fields into the Note field:
```
email: {{email}} | Name: {{name}} | Budget: {{budget}} | Language: {{language}}
```
Add relevant labels: `New Lead`, `Form Submission`
This gives the AI complete context before any conversation starts
Add **Notifyer — Send WhatsApp Message** set to the template configuration. Select your approved welcome template and map the recipient's phone number and any template variables from the form data
Add **Notifyer — Schedule a follow-up Message**. Configure:
* Message: a follow-up template (e.g. `Hi {{1}}, just checking in...`)
* Schedule: 24 hours (Relative)
* Reply condition: **Recipient did not reply after my last message**
This follow-up cancels automatically if the lead responds to your first message
1. Click **Run once** to test with real data
2. Verify each module shows a green checkmark
3. Toggle the scenario **Active** switch to go live
***
## Example use cases
Trigger on incoming messages, pass the `conversation_paragraph` and `note` to OpenAI, then send the AI's reply back via Send WhatsApp Message
Schedule a series of follow-ups with reply conditions — they automatically cancel when the lead engages
When a deal stage changes in HubSpot or Pipedrive, use Update a Contact to update the AI note, then send a relevant WhatsApp template
When a form is submitted, instantly set AI context via Update a Contact, then send a personalized onboarding template message
Use Get delivery status after sending a message — if undelivered, route to a fallback email via Gmail or Outlook
Use Incoming & Outgoing Messages trigger to log every WhatsApp exchange to a Google Sheet, Airtable, or CRM
***
## Best practices
Always use **Update a Contact** before **Send WhatsApp Message** in new-lead scenarios. Setting the `note` field with structured lead data (name, email, preferences, language, budget) dramatically improves AI conversation quality and lead qualification accuracy.
Set a reply condition on every **Schedule a follow-up Message**. "Recipient did not reply after my last message" is the safest choice — it ensures no follow-up annoys contacts who are already in an active conversation with you. This also protects your WhatsApp account reputation.
The **Send WhatsApp Message** action lets you attach labels and a note alongside every message. Use labels to tag conversations (e.g. `Hot Lead`, `Form Submission`) and the note field to keep AI context current. Both appear immediately in your Notifyer console.
When building AI chatbot scenarios, pass the `conversation_paragraph` field to your AI model. It is a pre-formatted, flat text version of the conversation — much simpler to include in a prompt than parsing the `last_messages` JSON array.
If you need to log every message exchange to a CRM or database, use **Incoming & Outgoing Messages from console** and filter by `incoming_message` to handle both directions with separate scenario branches.
When `referral` is present, store `source_id`, `source_url`, `headline`, and `ctwa_clid` on the contact immediately. Later messages in the same chat usually omit `referral`. Use `source_url` to see Instagram vs Facebook, and `source_id` to compare creatives.
Always provide phone numbers in full international format — digits only, no `+`, spaces, or dashes (e.g. `14155550187` for US, `447911123456` for UK, `966501234567` for Saudi Arabia).
***
## Troubleshooting
Instant triggers only fire when the scenario is toggled **Active** in Make. Also confirm the schedule is set to **Immediately as data arrives**
Open the trigger module and confirm a webhook is selected in the **Webhook** dropdown and a **Webhook URL** is displayed. If the field is empty, follow the [trigger setup guide](#setting-up-a-notifyer-trigger-in-make) to create one
Open the connection settings and confirm your Notifyer API key is valid and the connection shows a green tick
Try deactivating and reactivating the scenario — this re-registers the webhook with Notifyer. Check your Notifyer console to confirm messages are arriving there
If messages appear in your Notifyer console but the trigger does not fire, contact support
Verify your Notifyer API key is valid and the correct connection is selected
Phone number must be digits only, full international format, no `+` or spaces (e.g. `14155550187`)
Ensure the selected template has **Approved** status in your Notifyer dashboard. Pending or rejected templates will cause an error
Non-template messages can only be sent within 24 hours of the contact's last incoming message. Outside this window you must use a template
Verify your Notifyer subscription is active and has sufficient message credits
All body variable fields (Body 1, Body 2, etc.) are required — ensure none are empty or mapped to empty values
The template dropdown shows a live preview of the body text and example variable values — use this as a reference to understand what each variable slot expects
If your template has a media header, the URL must be publicly accessible. Test it in an incognito browser window
If you set a reply condition and the contact replied before the scheduled time, the message was intentionally cancelled. Check the contact's conversation in your Notifyer console
Verify the delay value and unit are correct (minutes vs hours vs days)
Go to Make scenario history to confirm the Schedule a follow-up module executed without errors at the time the trigger fired
The phone number must exactly match the contact's number in Notifyer. If the contact doesn't exist yet, the update creates the record
Update a Contact requires the **Notifyer only** connection — make sure you are not using a different connection type
***
## Need help?
Contact [team@whatsable.app](mailto:team@whatsable.app)
Book a personalized walkthrough
Click the green chat button in the bottom right corner of the Notifyer System dashboard
# How do I create and approve WhatsApp templates in Whatsable?
Source: https://docs.whatsable.app/guides/notifyer-system/message-templates
Create and approve WhatsApp message templates in the Whatsable console: super-admin submit, variables, languages, Meta review, and recreate instead of edit.
Yes. A **super-admin** creates a WhatsApp message template in the Whatsable console, submits it to Meta, and can send it only after Meta marks it **approved**. Use this page for the operator path: who is allowed to create, which fields you fill, how status moves from pending to approved or rejected, and what to do when the text must change or you connect a new number.
Creating a template is **not** broadcasting, and it is **not** the send-template API. Those flows only use a template that already exists and is approved. Outside the 24-hour customer-service window, WhatsApp only allows approved templates for business-initiated messages.
## Prerequisites
* **Whatsable account** on **Bulk Message**, **Pro**, or **Agency**. Template management is on all three. Sign in at [dashboard.whatsable.app/signin](https://dashboard.whatsable.app/signin).
* **Super-admin role** on that account. Only super-admins can create templates. A normal admin does not have that access. If create is missing, this is the usual cause. The rest of the role matrix is not documented here.
* **WhatsApp Business number connected** through Whatsable (Embedded Signup / Coexistence — keep the WhatsApp Business app; do not uninstall it after connect). Submit uses that number’s WhatsApp credentials.
* **Meta Business Portfolio** (business.facebook.com), not a personal Facebook profile. Embedded Signup may ask for a website; an Instagram profile link or Facebook page link is enough if you have no site.
* **Meta payment method** before you **send** template messages. Meta charges per template message. A missing card is a send failure, not proof the template was rejected.
* You do **not** need Make, Zapier, n8n, or the API to create a template in the console.
How-to video (EN): [How to create a WhatsApp message template](https://youtu.be/QvnNp47txe8). Templates and broadcasts are different topics — do not swap the videos. ES / PT / FR versions exist on the same topic.
***
## Operator path — create and submit
Open **Settings → Templates** and follow the steps below. Button and sidebar labels can vary by workspace. This page documents the create and submit path that is available today — not every optional console control.
### 1. Open templates
In the Whatsable console, open **Settings → Templates**. That is where you check status. Only **Meta-approved** templates appear in send dropdowns (broadcasts, chat, monday.com Send Template, and similar).
### 2. Start a new template (super-admin)
A normal admin cannot create. There is no documented “edit and resubmit.” If you need different text, you create another template (you can delete the old one).
### 3. Fill the fields and submit to Meta
Whatsable sends the template to Meta for review. It is stored for the workspace only if Meta accepts the submission. A duplicate **name** already on the workspace is rejected (you cannot create a second template with the same name).
### 4. Read status
After submit, status is **pending** until Meta finishes review. Open **Settings → Templates** again to refresh pending items against Meta (the console list updates pending templates when it loads). You do not approve the template yourself.
* **Approved** — ready for broadcasts, inbox/API sends, and integration dropdowns.
* **Rejected** — Meta declined it. Create a new template. You cannot edit the rejected one and resubmit it. If the console does not show a rejection reason, check Meta Business Manager.
### 5. Use it only when approved
Pending templates do not send reliably. A test or template send that returns WhatsApp error (100), “Unsupported post request… object with ID 'messages'…”, is often **this template still pending**, not a disconnected number. If status is already approved and the error remains, then check that the number is still connected.
Copying an old template’s text: open **preview** on the old template, then paste into the new one. That is the supported shortcut when you change numbers or recreate. There is no transfer of approved templates onto a different WhatsApp number.
***
## Field inventory
The names below match the create payload and the rules the console enforces. On-screen labels may differ slightly from these payload names.
### Template name
One name per template, unique in the workspace.
* Lowercase letters, digits, and underscores. The console forces lowercase.
* Must start with a letter, not a digit.
* No spaces (use underscores).
* Maximum **512** characters.
* Examples that pass: `order_confirmation`, `invoice_en`. Examples that fail: `OrderConfirmation`, `2fa_code`, `promo banner`.
This is the template **name**, not a separate display name. A typed display-name field is not documented on this page.
### Category
One of:
| Category | Typical use |
| - | - |
| **Marketing** | Promotions, offers, announcements |
| **Utility** | Order updates, confirmations, service notices |
| **Authentication** | One-time verification codes |
Meta prices template conversations by category. Whatsable does not add a markup on Meta fees. Pick the category that matches the content. A mismatch is a common rejection reason; this page does not invent Meta’s policy text.
**Authentication** does not use a free-form body you write. The create payload builds a verification-code message, with an optional security line (“do not share this code”) and a code expiry in minutes (payload default **10**). An OTP button label exists on that payload (default copy is “Copy Code”). Use the authentication options shown in your console. Importing an authentication template that was created in Meta’s own manager is not covered on this page.
### Language
Each template has **one** language code (examples: `en`, `es`, `fr`). Another language is **another template** (its own name, its own Meta review). There is no documented switch that adds a language onto an existing approved template.
### Body and variables
For Marketing and Utility, you write the body. Personalization uses numbered placeholders, in order, starting at `{{1}}`:
`Hello {{1}}, your order #{{2}} is confirmed.`
Every placeholder needs an **example value** for Meta’s review (realistic dummy data, not empty). Those examples are for the reviewer. Real values are supplied later, per recipient, when you send or broadcast (`body1`, `body2`, … on the send API and on broadcast CSVs).
Do not document named placeholders such as `{{company}}` or `{{name}}` for this console. That syntax appears on an older mid-layer templates article and is not the Whatsable create payload.
Header **text** variables and a free-text footer on Marketing/Utility templates are not documented as console fields on this page. The authentication security line above is the footer this create payload actually sets.
### Header media type
| Type | Header | What you supply |
| - | - | - |
| Text | None | Body only |
| Image | Image | PNG or JPG, uploaded from a URL before submit |
| Video | Video | MP4, uploaded before submit |
| Document | Document | PDF, uploaded before submit |
The console uploads the file and stores a media handle on the template. At **send** time, a public media URL can still be passed per message when the template expects media — that is the [template message API](/guides/notifyer-system/api/template-message) and the broadcast CSV `media` column, not a second create step. Broader file types and size caps on that send page are send rules, not extra create formats.
### Buttons (optional)
The create payload accepts these kinds. Limits are from the console create path:
| Kind | Payload shape | Max |
| - | - | - |
| Quick reply | Button label text | 10 |
| Visit website | Button text, static URL, or a base URL plus a dynamic suffix | 2 |
| Call phone number | Button text and phone number | 1 |
| Copy offer code | The code to copy | 1 |
Total buttons on one template: **10**. A dynamic website URL is a fixed base plus a per-recipient suffix (broadcast column `button_dynamic_url_value`, or the send API’s dynamic website flag).
### Status values you will see
Pending, approved, or rejected. Casing in API payloads varies (`PENDING` vs `approved`); do not treat letter case as a customer-facing label. Only approved templates are offered when sending.
***
## Limits and what this is not
**Only super-admins create templates.** A normal admin cannot. **You cannot edit** a submitted template. Recreate, resubmit, and delete the old one if you no longer need it. Approved templates **do not move** to a new WhatsApp number.
* **Meta review time is not a guarantee.** Meta usually approves within a few minutes and can take up to about 24 hours. Do not promise a minute, and do not promise 24–48 hours. If it is still pending, wait and recheck **Settings → Templates** rather than creating duplicates (duplicate names are blocked anyway).
* **No in-console edit.** Rejected or outdated copy means a new template. Use **preview** on the old one to copy the text.
* **New number:** recreate and resubmit every template. Old approvals do not apply.
* **Sends need an approved template** when you are outside the 24-hour window, or when you are opening the conversation. Inside 24 hours of the contact’s last message, free-form (non-template) messages are allowed. Business-initiated template conversations also follow Meta’s portfolio tiers (unverified about 250/day, then higher tiers after verification). Those caps are Meta’s, not a Whatsable messages-per-minute number. This page does not invent a Whatsable RPM.
* **No native drip builder** and **no typing-indicator dots.** Sequences of templates over days run in Make, Zapier, or n8n.
* **Template management is not a plan upsell.** Bulk Message, Pro, and Agency all include it. Broadcasting those templates is a different page. Scheduled broadcasts are available on Bulk Message, Pro, and Agency.
* **ProactiveBot** (Pro and Agency) can generate a follow-up template when none fits. That does not replace this create flow, and it is not documented as a way around the super-admin rule.
* **Do not use** the older Notifier “advanced templates” article as the how-to for this console.
* Full permission matrix, exact Settings sidebar, and character caps beyond the **512**-character name are **not** locked. Follow Meta’s template policies for content. Whatsable does not publish a separate body character cap on this page.
***
## Related
Send an approved template to a list. Not the create flow.
List templates and status for the connected number.
One recipient, with body variables, after approval.
Free-form send inside the 24-hour window only.
Bulk Message, Pro, and Agency. Template management is on all three.
Send Template lists approved templates only.
Connect the number before you submit templates.
Plan price and unique contacts. Meta fees are separate, at 0% markup.
***
## FAQ
### Who can create a template in Whatsable?
Only a **super-admin**. A normal admin cannot. Template management itself is on **Bulk Message**, **Pro**, and **Agency**; the block is the role, not the plan.
### Where do I create and check templates?
**Settings → Templates** in the Whatsable console. Send dropdowns list **approved** templates only.
### How long does Meta approval take?
Usually a few minutes, sometimes up to about **24 hours**. That is the usual range, not an SLA. Recheck **Settings → Templates**. Do not keep submitting the same name while you wait.
### Can I edit a template after I submit it?
No. Create a new template and submit that. You can delete the old one. Open **preview** on the old template to copy its text. The same rule applies when Meta **rejects** one.
### Why did my template disappear from the send list?
It is not **approved** yet, or you are looking at a **different WhatsApp number**. Approvals belong to the number they were submitted on. Changing numbers means recreating every template.
### What variables can I put in the body?
Numbered placeholders `{{1}}`, `{{2}}`, … in order, each with an example for review. At send time those map to `body1`, `body2`, and so on. Do not use `{{name}}`-style names for this console.
### Why does a test send say “unsupported post request”?
Most often that **this** template is still pending. Confirm status under **Settings → Templates**. If it is approved and the error continues, treat it as a disconnected number and reconnect.
### Can I save a draft or test-send to an Ireland number from this page?
Not documented here. Use an **approved** template in broadcasts, the inbox, or the API when you need to see a real send.
# Monday.com
Source: https://docs.whatsable.app/guides/notifyer-system/monday-overview
Learn how to seamlessly integrate Monday.com with the Notifyer System for automated WhatsApp messaging directly inside your boards
# Notifyer System Integration with Monday.com
This guide walks you through connecting Notifyer System with Monday.com to create powerful automated WhatsApp messaging workflows — syncing conversations to your boards and triggering messages from board events, all through Monday's built-in Workflow Builder.
## Prerequisites
Before getting started, make sure you have:
Active Notifyer System account with a connected WhatsApp number and subscription plan (Pro or Agency)
Access to [Monday.com](https://monday.com/) with admin or member-level permissions
Your WhatsApp number must already be connected inside Notifyer before starting the Monday integration.
New to Notifyer System? [Sign up here](https://console.notifyer-systems.com/)
## Setting up your Notifyer System account
Before sending WhatsApp messages, you must complete the platform [embedding process](/guides/notifyer-system/embedding-process), which connects your WhatsApp Business account to Notifyer System.
The embedding process is required by Meta to ensure proper business verification and compliance with WhatsApp Business Platform policies.
To use the **Send Template Message** action in Monday workflows, configure your templates in Notifyer first. Notifyer System provides two methods for sending WhatsApp messages:
WhatsApp templates are pre-approved message formats that allow for personalization while maintaining compliance with WhatsApp policies.
Go to **Your Templates** in your Notifyer dashboard
Click the **Create Template** tab at the top of the page
Complete the template creation form with the following details:
Choose a descriptive name for internal reference
Choose your template's primary language
Select the appropriate message category
Optional: Add an image, document, or video header
Craft your message content
Add placeholders using `{{1}}`, `{{2}}` format for personalization
Optional: Configure call-to-action buttons
Click **Preview and Submit**
Templates typically get reviewed within 24 hours. Creating compliant templates that avoid promotional language increases approval chances.
For simpler communications within the 24-hour window, you can send non-template messages that include:
Plain text messages within the 24-hour window
Photos and graphics in supported formats
PDFs, Word docs, and other file types
MP4 and other supported video formats
Non-template messages can only be sent within the 24-hour customer service window after a customer initiates contact with your business.
## Connect Notifyer System to Monday.com
Now that your Notifyer System account is configured, follow these steps to connect Monday.com and start building workflows.
1. Log in to your **Notifyer Console**
2. In the left sidebar, scroll to the **Connect To** section
3. Click **Monday** from the list of available integrations (Make, Zapier, n8n, Pipedrive, Monday)
The Monday integration page opens with the **Get Started in 3 Simple Steps** panel.
1. On the integration page, click the green **Install Whatsable** button next to Step 1
2. You will be redirected to the Monday.com marketplace listing
3. Follow Monday's standard installation flow to add Whatsable to your workspace
If you are already logged into Monday.com in your browser, the installation proceeds directly. Otherwise, Monday will prompt you to log in first.
1. Sign in to Monday.com using **Email and password**, **Google**, or **Microsoft**
2. Review the permission consent screen titled **Authorize Whatsable — WhatsApp Automation with AI**
3. Click **Authorize** to grant the required permissions
Whatsable requests the following permissions exclusively for workflow automation:
| Permission | Purpose |
| - | - |
| Modify any of your boards' data | Create and update items on your boards |
| Read user's documents | Access documents for workflow actions |
| Modify user's documents | Attach files and notes to board items |
| Read all of your workspaces data | Access the correct workspace for automation |
| Modify any of your workspaces data | Configure automation within your workspace |
| Read the profile information of the users in your account | Identify users in workflow context |
| Modify the profile information of the users on the account | Update user-related workflow data |
| Read general information about your account | Link your Monday account to Whatsable |
| Send notifications on your behalf | Deliver workflow-triggered notifications |
| Post or edit updates on your behalf | Add message activity to board items |
| Read updates and replies that you can see | Sync conversation context to workflows |
| Read information of files that were uploaded to your account | Access attachments for board sync |
| Read your account's tags | Map labels and tags in workflow logic |
| Read information about teams in your account | Route workflows by team context |
| Create and modify teams in your account | Configure team-based automation |
| Create and modify webhooks | Enable real-time workflow triggers |
| Read existing webhooks configuration | Verify and manage webhook setup |
| Read your profile information | Identify the connected user |
Whatsable is an official Meta Tech Provider and the integration is safe to authorize.
After authorization, you will be redirected back to the Notifyer Console. The green **Successfully Connected to Monday** banner confirms the integration is live.
The panel displays your **User ID**, **Account ID**, and **Connected** timestamp. You can now start building workflows in Monday's Workflow Builder.
Your Notifyer System account is now linked to Monday.com. Proceed to create workflows using the triggers and actions below.
## Workflow automation
With the integration connected, Whatsable exposes **3 triggers** and **2 actions** directly inside Monday's Workflow Builder.
### What you can do
Create a Monday item automatically when a new WhatsApp contact messages your business
Update existing items when follow-up messages are sent or received
Send WhatsApp template messages when board item status changes
Map phone number, country, label, AI state, attachments, and timestamps to board columns
### Triggers
Triggers define *when* a workflow fires.
#### Trigger 1 — When New Incoming Chat Received
**Fires:** Once, the first time an unknown contact sends your business a WhatsApp message.
This trigger activates when a message arrives from a phone number that does not yet exist as a recipient in your Whatsable system. If the contact already exists, this trigger will not fire again.
**Best for:** Creating a new Monday item (lead, support ticket, customer record) the moment a brand-new contact reaches out.
**Output fields:**
| Field | Type | Description |
| - | - | - |
| `name` | Text | Contact's display name |
| `phone` | Phone | Number in international format |
| `country` | Text | Country detected from the phone number |
| `label` | Text | Label auto-assigned by Whatsable rules |
| `message` | Text | Body of the incoming message |
| `attachment_url` | URL | Direct link to any media attachment |
| `last_message_time` | Date/Time | Timestamp of the incoming message |
| `ai_enabled` | Boolean | Whether the AI agent is active for this chat |
| `automation_note` | Text | Note injected by an upstream automation rule |
`sent_by` and `is_incoming` are not available on this trigger — the message is always incoming by definition.
***
#### Trigger 2 — When New Outgoing Chat Created
**Fires:** Once, the first time you send a WhatsApp message to a contact that does not yet exist in your Whatsable system.
This trigger activates when your team initiates a conversation with a brand-new contact, whether via Whatsable's chat interface, Make, Zapier, n8n, or any connected platform.
**Best for:** Automatically logging a Monday item when your sales team reaches out to a new prospect.
**Output fields:**
| Field | Type | Description |
| - | - | - |
| `name` | Text | Contact's display name (may be blank if not yet resolved) |
| `phone` | Phone | Contact's phone number |
| `country` | Text | Detected country |
| `label` | Text | Label assigned to the contact |
| `message` | Text | Body of the outgoing message |
| `attachment_url` | URL | Link to any attached media |
| `last_message_time` | Date/Time | Timestamp of the outgoing message |
| `sent_by` | Text | Sender name — team member or automation/app name |
| `ai_enabled` | Boolean | Whether the AI agent is active |
| `automation_note` | Text | Note from an automation rule, if applicable |
`is_incoming` is not available on this trigger — the message is always outgoing by definition.
***
#### Trigger 3 — When New Message Received or Sent in WhatsApp
**Fires:** Every time, for every message — both incoming and outgoing — for any contact, new or existing.
Unlike Triggers 1 and 2, this trigger is not limited to first-time contacts. It fires on every message event, making it ideal for keeping Monday items continuously in sync with live conversations.
**Best for:** Updating an existing Monday item's status, last message time, or activity log every time a conversation progresses.
**Output fields:**
| Field | Type | Description |
| - | - | - |
| `name` | Text | Contact's display name |
| `phone` | Phone | Contact's phone number |
| `country` | Text | Detected country |
| `label` | Text | Assigned label |
| `message` | Text | Message body |
| `attachment_url` | URL | URL of any media attachment |
| `last_message_time` | Date/Time | Message timestamp |
| `sent_by` | Text | Sender identifier (outgoing messages only) |
| `is_incoming` | Boolean | `true` if received, `false` if sent |
| `ai_enabled` | Boolean | AI agent state |
| `automation_note` | Text | Automation-injected note, if any |
Map `is_incoming` to a **Checkbox** column in Monday to visually distinguish customer messages from agent replies at a glance.
***
#### Trigger quick reference
| Trigger | Fires for existing contacts? | Fires multiple times? | Direction |
| - | - | - | - |
| New Incoming Chat Received | No | First time only | Inbound |
| New Outgoing Chat Created | No | First time only | Outbound |
| New Message Received or Sent | Yes | Every message | Both |
**Rule of thumb:** Use Triggers 1 and 2 for contact *creation*. Use Trigger 3 for ongoing conversation *updates*.
***
### Actions
Actions define *what happens* when a trigger fires. Whatsable provides two actions.
#### Action 1 — Send Template Message
Sends an approved WhatsApp Business template message to a contact.
**Configuration:**
1. Select **Send Template Message** from the Whatsable action list in Workflow Builder
2. Choose the template from the dropdown — all Meta-approved templates in your WABA account are listed
3. Map each template variable (e.g. `{{1}}`, `{{2}}`) to a column value from your Monday board
4. Map the **phone number** field to your board's phone/mobile column
Only Meta-approved WhatsApp Business templates appear in the dropdown. Templates pending review will not be listed.
#### Action 2 — Send Follow-Up Message
This action is currently **in development** and will be available in a future release. It will support scheduled follow-up messages with timezone-aware delivery windows.
***
### Data field reference
**Accessing trigger data:** All trigger fields are accessible inside Monday's action configuration via the dynamic data picker. When mapping a field, click the dropdown and look for **Step 1 — \[Trigger Name]** to find Whatsable's data outputs.
**Boolean fields:** `ai_enabled` and `is_incoming` return `true` or `false`. Map these to **Checkbox** columns in Monday. They cannot be mapped to text or status columns directly.
**Attachment handling:** `attachment_url` returns a direct URL to any media file sent in the message — image, video, PDF, or audio. Map it to a **Link** column to make files accessible from the board. When mapped inside a **Create Update** action, the media appears inline in the board item's activity feed.
**`sent_by` field:** Identifies the sender of an outgoing message — `"WhatsApp App"` when typed in the WhatsApp Business app, the logged-in user's name from the Notifyer chat UI, or the automation/app name for Make, Zapier, n8n, or API. Not available on Trigger 1 (Incoming Chat). You do not need to delete the WhatsApp Business app; [coexistence](/guides/notifyer-system/embedding-process#whatsapp-coexistence) is supported.
**`automation_note` field:** Populated only when a Whatsable automation rule explicitly injects a note. Blank for manually sent messages or automations without a configured note.
***
## Workflow examples
The following examples are real working workflows you can replicate inside Monday's Workflow Builder using Whatsable triggers and actions.
***
### Example 1 — Sync Every WhatsApp Message to Your Board
**What it does:** Every time a WhatsApp message is sent or received — from any contact, new or existing — this workflow either updates the matching Monday item or creates a new one if it doesn't exist yet. This is the recommended workflow for teams who want a live, always-current view of their WhatsApp conversations inside Monday.
**Trigger:** When New Message Received or Sent in WhatsApp
**Workflow structure:**
* Step 1 — Trigger: When you receive or send any WhatsApp message
* Step 2 — Find matching item (Column: mobile)
* Found → Step 3: Create update on the matched item
* Not found → Step 4: Create item on the Development board
* Step 5: Create update on the new item
**How to build it:**
1. Open **Workflow Builder** on your Monday board → **Create Workflow**
2. Add trigger → search *Whatsable* → select **When New Message Received or Sent in WhatsApp**
3. Add **Find Matching Item** (Monday native):
* **Board:** your target board
* **Column:** your phone/mobile column
* **Value:** `{phone}` from Step 1
* **If multiple matches:** Last Created Item
4. **Found** branch → Add **Create Update**:
* **Item:** Item ID from Step 2
* **Update body:** `{message}` from Step 1
5. **Not Found** branch → Add **Create Item**:
* **Board:** your target board
* Map **Name** → `{name}`, **Phone** → `{phone}`, **Country** → `{country}`, **Label** → `{label}`, **Last Message Time** → `{last_message_time}`, **AI Active** → `{ai_enabled}`
6. Below Create Item → Add **Create Update**:
* **Item:** Item ID from Step 4
* **Update body:** `{message}` from Step 1
7. Click **Publish**
**Result:** New contacts are created automatically. Returning contacts get their board item updated with every new message. The activity feed on each item becomes a full log of the conversation.
This workflow uses Monday's **Find Matching Item** block to prevent duplicate items. Phone numbers are matched in E.164 format (e.g. `+34612345678`) — make sure your mobile column stores numbers in the same format.
***
### Example 2 — Log New Outbound Contacts as Monday Items
**What it does:** The moment your team sends a WhatsApp message to a contact that doesn't yet exist in Whatsable, this workflow automatically creates a Monday item on your board and logs the opening message as a board activity update.
**Trigger:** When New Outgoing Chat Created
**Workflow structure:**
* Step 1 — Trigger: When you send a message to a new WhatsApp contact
* Step 2 — Create item on the Development board
* Step 3 — Create update on the new item (Item ID from Step 2)
**How to build it:**
1. Open **Workflow Builder** → **Create Workflow**
2. Add trigger → search *Whatsable* → select **When New Outgoing Chat Created**
3. Add **Create Item** (Monday native):
* **Board:** your target board
* **Group:** your preferred group (e.g. Leads, Prospects)
* Map **Name** → `{name}`, **Phone** → `{phone}`, **Country** → `{country}`, **Label** → `{label}`, **Sent By** → `{sent_by}`, **Last Message Time** → `{last_message_time}`, **AI Active** → `{ai_enabled}`
4. Add **Create Update**:
* **Item:** Item ID from Step 2
* **Update body:** `{message}` from Step 1
5. Click **Publish**
**Result:** Every new outbound conversation your team initiates is instantly captured in Monday — complete with the contact's details and the first message your team sent. The `sent_by` field tells you which team member or automation initiated the conversation.
This trigger fires **only once per contact** — the first time you message them. If the contact already exists in Whatsable, this workflow will not fire. For ongoing message tracking, combine this workflow with Example 1.
***
### Example 3 — Notify Customer via WhatsApp on Status Change
**What it does:** When a Monday item's status column changes, this workflow automatically sends the contact an approved WhatsApp template message. Use it to notify customers when their order is shipped, their ticket is resolved, their proposal is ready, or any other status-driven event.
**Trigger:** Monday native — When status changes to something
**Workflow structure:**
* Step 1 — Trigger: When status changes to \[value] (Monday native)
* Step 2 — Send a template message (Whatsable action)
**How to build it:**
1. Open **Workflow Builder** → **Create Workflow**
2. Add trigger → use Monday's default **When status changes to something**:
* Select your **Status** column
* Set the value to the status that should fire the workflow (e.g. Done, Shipped, Resolved)
3. Add Whatsable action **Send a Template Message**:
* Select your approved template from the dropdown
* Map each template variable (e.g. `{{1}}`) to a board column — typically the contact's name
* Map **Phone Number** → your board's phone/mobile column
4. Click **Publish**
**Result:** The moment your team moves an item to the configured status, the contact automatically receives a WhatsApp message — no manual outreach required.
You can create multiple versions of this workflow for different status values — one for *Shipped*, another for *Resolved*, another for *Awaiting Payment* — each sending a different approved template.
Only **Meta-approved** WhatsApp Business templates can be sent via this action. Make sure your template is approved before publishing the workflow, or the action will fail silently.
***
## Example use cases
Automatically create Monday items when new WhatsApp contacts reach out
Sync support conversations to your board and track resolution status
Send template messages when order status changes to Done
Log outbound prospecting messages as new Monday items
Keep board items in sync with every message sent or received
Trigger WhatsApp reminders when board status changes
***
## Disconnecting
To remove the connection, go to **Notifyer Console → Connect To → Monday** and click the red **Disconnect Whatsable from Monday** button.
Disconnecting immediately stops all active Whatsable-powered workflows in Monday. Any workflows using Whatsable triggers or actions will fail until the integration is reconnected.
To reconnect, repeat the connection steps above. Your existing Monday workflow configurations remain intact — only the authorization needs to be re-established.
***
## Best practices
Use Monday's native **Find Matching Item** block filtering on the phone column to avoid duplicate items. Match type: `equals` | Result: `last_created_item` | Branch: `found` / `not_found`
Whatsable returns phone numbers in E.164 format (e.g. `+34612345678`). Ensure your Monday phone column stores numbers in the same format for reliable matching.
Whenever possible, use pre-approved templates for better deliverability and compliance with WhatsApp Business policies.
Always test your workflows with test phone numbers before activating them for production use.
Regularly check **Run History** in Monday's Workflow Builder to identify and resolve any failed runs.
***
## Troubleshooting
Pop-ups may be blocked in your browser. Allow popups from your Notifyer Console URL.
Refresh the Notifyer Console page. It needs a reload to detect that Step 1 is complete before enabling the Authorize button.
Ensure you are authorizing with a Monday account that has admin or sufficient member-level permissions. Guest accounts cannot authorize third-party integrations.
If using Trigger 1 or 2, verify whether the contact already exists in your Whatsable system. These triggers only fire for first-time contacts. Use Trigger 3 for existing contacts.
Whatsable returns phone numbers in E.164 format (e.g. `+34612345678`). Ensure your Monday phone column stores numbers in the same format.
Only Meta-approved templates are listed. Check the template status in Notifyer under **Settings → Templates**.
`sent_by` is only populated on outgoing messages. It is always empty on Trigger 1 (Incoming Chat), and blank for incoming messages on Trigger 3.
Open **Run History** in Monday's Workflow Builder. Expand the failed run to see which step errored. Common causes: unmapped required phone number field on Send Template, invalid template variables, or a deleted board column that was previously mapped.
***
## Technical reference
This section describes the integration's behavior in structured terms for programmatic parsing and AI-assisted automation building.
**App identifier in Monday Workflow Builder:** Search for *"Whatsable"* or *"Words"*. App category: *"Automation with AI"*.
**Trigger schemas:**
```
Trigger: when_new_incoming_chat_received
fires_once_per_contact: true
direction: inbound
output_fields: name, phone, country, label, message, attachment_url,
last_message_time, ai_enabled, automation_note
Trigger: when_new_outgoing_chat_created
fires_once_per_contact: true
direction: outbound
output_fields: name, phone, country, label, message, attachment_url,
last_message_time, sent_by, ai_enabled, automation_note
Trigger: when_new_message_received_or_sent
fires_once_per_contact: false
fires_on_every_message: true
direction: both
output_fields: name, phone, country, label, message, attachment_url,
last_message_time, sent_by, is_incoming, ai_enabled, automation_note
```
**Action schemas:**
```
Action: send_template_message
status: available
required_inputs: template_id, phone_number
optional_inputs: template_variables[] (mapped from board columns)
Action: send_follow_up_message
status: in_development
```
**Idempotency notes:**
* Triggers 1 and 2 are inherently idempotent per contact (fire at most once per phone number)
* Trigger 3 fires on every message event and requires explicit deduplication via the Find Matching Item pattern
***
## Need help?
Our support team is ready to assist you:
Contact [team@whatsable.app](mailto:team@whatsable.app)
Book a personalized walkthrough
Click the green chat button in the bottom right corner of the Notifyer System dashboard
For additional automation platform integrations (Make, Zapier, n8n, Pipedrive), please contact our support team or check our integration documentation.
# What can the Whatsable n8n node send and receive?
Source: https://docs.whatsable.app/guides/notifyer-system/n8n-fields
Every Whatsable n8n node field: On new Incoming message event outputs, Send template and non-template inputs, Schedule conditions, and Update Contact.
This page is the **field dictionary** for the Whatsable community node on n8n — every unlocked trigger and action input/output you can map in a workflow. Use it when you already know you want n8n and need exact labels, types, and requiredness.
For connect steps, coexistence walkthrough, examples, and troubleshooting, use [n8n overview](/guides/notifyer-system/n8n-overview).
## Prerequisites
* **Plan:** n8n requires **Pro** or **Agency** (Bulk Message does not include integrations).
* **WhatsApp number:** Connected in Whatsable. Coexistence is supported — keep the WhatsApp Business app; phone replies can fire the trigger when outgoing is enabled.
* **n8n node:** Verified community package [`n8n-nodes-whatsable`](https://www.npmjs.com/package/n8n-nodes-whatsable) (listing: [n8n.io/integrations/whatsable](https://n8n.io/integrations/whatsable/)). Search **Whatsable** in the n8n node library, or install with `npm install n8n-nodes-whatsable` on self-hosted.
* **API key:** From the Whatsable console API Keys page. Paste that key into the Whatsable credential (core product key — not a Meta Graph token).
Use the **Notifyer System Incoming & Outgoing Message** credential type on the trigger when you need phone-app and inbox outgoing events, not only inbound.
***
## At a glance
| Kind | Exact name in n8n / console |
| - | - |
| Trigger (instant) | **On new Incoming message event** (node: Incoming/outgoing WhatsApp message Trigger) |
| Action · Resource **Send Message** | **Send WhatsApp Message** → product ops **Send Message Template** / **Send Non Template Message** (console: Send template via Notifyer / Send non-template via Notifyer) |
| Action · Resource **Send Message** | **Schedule WhatsApp Message** → same product ops (template or non-template) |
| Action · Resource **Send Message** | **Manage Contact** → product op **Update Contact** (console: Update recipient) |
All Notifyer/core paths use a Whatsable API key credential. When outgoing is enabled, the same trigger also fires for outgoing messages — filter with `incoming_message`.
***
## Trigger: On new Incoming message event
**Type:** Instant · **Node display name:** Incoming/outgoing WhatsApp message Trigger · **App:** Whatsable
Fires when WhatsApp messages are received — and, with the incoming-and-outgoing credential, when they are sent. Outgoing events include replies typed in the WhatsApp Business app, the Whatsable inbox, and automations.
### Configure inputs
For core Whatsable (Notifyer System):
| Option | When to use |
| - | - |
| **Notifyer System Incoming Message** | Inbound only |
| **Notifyer System Incoming & Outgoing Message** | Inbound **and** outgoing (phone app, inbox, automations) |
Legacy Bot / Notifier credential types exist on the node for other products — this fields page documents the Notifyer System options only.
**POST** (only option).
**Immediately** — respond as soon as the trigger fires. **When Last Node Finishes** — wait for the workflow to complete before responding.
Copy the trigger **Production URL** into the credential’s Production URL field when creating the Notifyer System credential (see [n8n overview](/guides/notifyer-system/n8n-overview)).
### Output fields — contact identity
The contact’s phone number (for example `14155552671`). May arrive as a number rather than a string.
Unique internal ID for this contact (UUID).
Display name for this contact in Whatsable.
Comma-separated labels on the conversation (for example `n8n, webhook-test`).
### Output fields — message data
Documented values on this page: `text`, `audio`, `image`, or `document`.
`true` when the contact sent a message to your business; `false` when your business sent a message to the contact.
On outgoing messages: `"WhatsApp App"` (phone app), a teammate’s name (inbox), or an automation/app name (n8n, Make, Zapier, API, bot). Empty or omitted on incoming messages.
`true` when a person sent the message (phone app or inbox); `false` when a bot or automation sent it.
Public URL of any attached file, or empty/`null` when there is none.
Present when the inbound message came from a Click-to-WhatsApp ad or post. Typically on the **first** inbound after the tap; later messages usually omit it. Nested keys:
| Key | Meaning |
| - | - |
| `source_type` | `"ad"` or `"post"` |
| `source_id` | Ad or post ID |
| `source_url` | Where they tapped |
| `headline` / `body` | Ad copy |
| `media_type` | `"image"` or `"video"` |
| `image_url` / `video_url` | Creative URLs |
| `ctwa_clid` | Click ID for Meta Conversions API |
Persist `ctwa_clid` and `source_id` as soon as you see them. See also [Incoming message — Click-to-WhatsApp ads](/guides/notifyer-system/api/incoming-message#click-to-whatsapp-ads).
### Output fields — conversation history
JSON string of recent messages (about the last 20). Each item includes `type` (`user` / `bot`), `content`, `timestamp`, and `content_type`. Parse before iterating.
The most recent message from the contact.
The most recent message your business sent (human or automation).
Timestamp of the contact’s last message.
Timestamp of your business’s last message to this contact.
Flat, readable conversation history — useful for LLM prompts without parsing `last_messages`.
### Output fields — AI context and automation
AI context note stored on this contact. Update it with **Update Contact**.
Automation instructions for the AI based on conversation events.
Use an IF or Switch node on `incoming_message`, `send_by`, and `was_message_by_human` to split incoming vs outgoing and human phone-app replies vs automations. For rapid multi-message bursts before an AI step, add a short **Wait** node so n8n can coalesce messages from the same number into one coherent run.
***
## Action: Send WhatsApp Message (template or non-template)
**App:** Whatsable · **Resource:** Send Message · **Operation:** Send WhatsApp Message
Sends a WhatsApp message using the official WhatsApp API. After you pick the operation, choose **Product Operation**: **Send Message Template** (console / overview: **Send template via Notifyer**) or **Send Non Template Message** (console / overview: **Send non-template via Notifyer**).
### Mode A — Send Message Template (to start conversation)
Use this to initiate a new conversation or reach out proactively. Requires a Meta-approved template.
Recipient with country code (for example `+14155552671`) or map from a previous node. Prefer digits with country code as shown in the live editor.
Select from your approved templates. If n8n switches the field to Expression mode on first open, click **Fixed** to return to the dropdown.
One field per template variable (`{{1}}`, `{{2}}`, … / Body 1, Body 2, …). Required when the template has variables. Media header URL and Visit Website URL appear when the selected template needs them.
AI / internal context about this contact. Stored on the contact — **not** sent to the recipient.
Labels to apply to this conversation.
### Mode B — Send Non Template Message (person must write to you first)
Only inside Meta’s customer service window after the contact’s last inbound message. Outside that window, use an approved template.
Phone number with country code.
**Text Message**, **Image Message**, **Video Message**, **Document Message**, or **Audio Message**. Nested fields:
| Message Type | Nested fields |
| - | - |
| Text Message | **Message Content** (text, required); **Enable Link Preview** (boolean, optional) |
| Image Message | **Image URL** (url, required); **Caption** (text, optional) |
| Video Message | **Video URL** (url, required); **Caption** (text, optional) |
| Document Message | **Document URL** (url, required); **Caption** (text, optional); **Filename** (text, **required**) |
| Audio Message | **Audio URL** (url, required) |
Labels to apply to this conversation.
AI context note for this contact.
Testing this action sends a **real** WhatsApp message. Use a personal test number during setup. Media URLs must be publicly accessible.
***
## Action: Schedule WhatsApp Message
**App:** Whatsable · **Resource:** Send Message · **Operation:** Schedule WhatsApp Message
Schedules a WhatsApp message for later (template or non-template product operation), with optional reply and label conditions so it can cancel or skip when the lead is already engaged.
Message fields are the same as **Send WhatsApp Message** (template or non-template, including phone, template/variables or message type, Note, and labels), **plus** the schedule and condition fields below.
### When to send — Relative (delay from now)
Set **Schedule Type : Relative or Specific** to relative (off / false).
Choose only: **1, 2, 3, 4, 5, 10, 15, 20, 30, 60, 90, or 120**.
**Minutes**, **Hours**, or **Days**.
### When to send — Specific date and time
Set **Schedule Type : Relative or Specific** to specific (on / true).
Exact send time — map from a previous step or enter a fixed value.
Timezone for the scheduled time (global list in the n8n node).
### Recipient Reply Status : Send Only If
Optional but recommended. Cancels or skips the scheduled send if the contact replies within the chosen rule.
| Condition label |
| - |
| Recipient Did Not Reply After My Last Message *(recommended default)* |
| Recipient Never Replied to Any of My Messages |
| Recipient Did Not Reply Within 20 Minutes After My Last Message |
| Recipient Did Not Reply Within 45 Minutes After My Last Message |
| Recipient Did Not Reply Within 3 Hours After My Last Message |
| Recipient Did Not Reply Within 6 Hours After My Last Message |
| Recipient Did Not Reply Within 12 Hours After My Last Message |
| Recipient Did Not Reply Within 24 Hours After My Last Message |
| Recipient Did Not Reply Within 48 Hours After My Last Message |
| Recipient Did Not Reply Within 72 Hours After My Last Message |
### Label Status : Include or Exclude (optional)
**Include** — only send if the contact has this label at send time. **Does Not Include** — only send if they do not.
Label(s) evaluated when the scheduled send time arrives.
This is **not** a native drip builder inside Whatsable. Day-0 / day-3 / day-6 sequences are multiple n8n steps that each schedule one message. Whatsable sends each scheduled message; the sequence logic lives in n8n.
The live overview also shows an optional **Schedule Message** control on immediate Send flows. Prefer the dedicated **Schedule WhatsApp Message** operation when you need relative delay, reply conditions, or label conditions.
***
## Action: Manage Contact → Update Contact
**App:** Whatsable · **Resource:** Send Message · **Operation:** Manage Contact · **Product Operation:** Update Contact\
(Console module name: **Update recipient**)
Updates a contact in Whatsable — AI note and labels. Lookup is by phone.
### Documented fields
Lookup key — choose from the loaded phone list or map an ID/expression. Creates or updates the contact for that number.
AI context note for this contact (name, email, preferences, language, and so on).
Labels to add. Whatsable conversation labels are the source of truth inside Whatsable.
Labels to remove. **Remove All** (when present in the remove list) clears every label on this contact.
**Assign a teammate:** Chat assignment is a product capability via Zapier / Make / API / keywords / AI. The n8n **Update Contact** fields documented on this page today are Phone Number Name or ID, Add a Note, and Add/Remove Label Names or IDs — confirm any assignee control in your live editor; do not invent a field key. Operator how-to: [Chat assignment](/guides/notifyer-system/chat-assignment) and [Team inbox](/guides/notifyer-system/team-inbox).
***
## Limits and what this does NOT do
**No native drip builder.** Multi-day sequences use n8n (or Make / Zapier) schedule steps plus reply conditions — not a built-in drip product inside Whatsable.
**No CRM ↔ Whatsable bidirectional label mirror.** Add/Remove labels update Whatsable conversation labels. They do not sync Monday/Pipedrive (or other) CRM tags as one shared store.
**Coexistence:** Do **not** uninstall the WhatsApp Business app to “enable” API or n8n. Keep using the phone; those replies can still start workflows when outgoing is enabled.
* **Bulk Message** plan: no n8n / integrations — upgrade to Pro or Agency.
* **Non-template** sends only inside the customer service window after the contact’s last inbound; otherwise use a template.
* **Group messaging** via the Notifyer/core n8n path is **not** documented as LIVE on this fields page (group send on the node is a separate Whatsable Bot product path — omit as core LIVE).
* Do not invent trigger `message_type` values beyond `text`, `audio`, `image`, and `document`.
* Do not invent location or sticker send types on n8n Notifyer operations.
* Typing-indicator dots are not a documented Whatsable automation claim.
* No documented **Get delivery status** search/action on the n8n node (unlike Zapier/Make) — do not invent one.
* Do not invent Whatsable numeric RPM on this page.
***
## Related features and next steps
Connect, coexistence, examples, troubleshooting
Parallel Zapier trigger/action field dictionary
Parallel Make module field dictionary
Webhook payload and Click-to-WhatsApp referral object
Also: [Team inbox](/guides/notifyer-system/team-inbox) · [Chat assignment](/guides/notifyer-system/chat-assignment) · [Plans](/guides/notifyer-system/plans-bulk-message-pro-agency).
***
## FAQ
### Does the n8n trigger fire when someone replies in the WhatsApp Business app?
Yes, when coexistence is enabled and you use **Notifyer System Incoming & Outgoing Message**. The node may still be labelled **On new Incoming message event**. Filter on `incoming_message` (`false`), `send_by` (for example `"WhatsApp App"`), and `was_message_by_human`.
### Can I build day-0 / day-3 / day-6 WhatsApp drips with Whatsable and n8n?
Yes, by chaining **Schedule WhatsApp Message** steps (and reply conditions) in n8n. Whatsable is not a native drip builder — the sequence logic lives in n8n.
### Does Bulk Message include n8n?
No. n8n and other integrations require **Pro** or **Agency**.
### Which fields does Update Contact document today?
**Phone Number Name or ID**, **Add a Note**, **Add Label Names or IDs**, and **Remove Label Names or IDs**. Do not invent an Assign field label for n8n.
### Is there a Get delivery status action in n8n?
Not on the documented Whatsable n8n node surface for Notifyer/core. Use Zapier **Get Delivery Status** or Make **Get delivery status** if you need that lookup, or handle delivery via webhooks/API — do not invent an n8n delivery-status operation.
# n8n
Source: https://docs.whatsable.app/guides/notifyer-system/n8n-overview
Connect Notifyer System with n8n. Trigger workflows on incoming and outgoing WhatsApp messages — including replies typed in the WhatsApp Business app. Coexistence is supported; you do not delete the app on your phone.
# Notifyer System Integration with n8n
This guide walks you through connecting Notifyer System with n8n to create automated WhatsApp workflows — including triggers that fire when someone types a reply in the WhatsApp Business app, and Click-to-WhatsApp ad referral data (`source_id`, `source_url`, `ctwa_clid`) on inbound leads.
**Meta WhatsApp Coexistence is supported on Notifyer System.** You do **not** need to delete the WhatsApp Business app or stop using the number on your phone. After Embedded Signup, the same number works in the WhatsApp Business app, the Notifyer chat inbox, and automations (Make, Zapier, n8n, API, and webhooks) at the same time.
## Prerequisites
Before getting started, make sure you have:
Active Notifyer System account with a subscription plan (Monthly or Pay-as-you-go)
Access to [n8n](https://app.n8n.cloud/login) workflow automation platform
New to Notifyer System? [Sign up here](https://console.notifyer-systems.com/)
## Setting up your Notifyer System account
Before sending WhatsApp messages, complete the [embedding process](/guides/notifyer-system/embedding-process), which connects your WhatsApp Business account to Notifyer System. You do **not** need to delete the WhatsApp Business app — [coexistence](/guides/notifyer-system/embedding-process#whatsapp-coexistence) is supported.
The embedding process is required by Meta to ensure proper business verification and compliance with WhatsApp Business Platform policies.
Notifyer System provides two methods for sending WhatsApp messages:
WhatsApp templates are pre-approved message formats that allow for personalization while maintaining compliance with WhatsApp policies.
Go to **Your Templates** in your Notifyer dashboard
Click the **Create Template** tab at the top of the page
Complete the template creation form with the following details:
Choose a descriptive name for internal reference
Choose your template's primary language
Select the appropriate message category
Optional: Add an image, document, or video header
Craft your message content
Add placeholders using `{{1}}`, `{{2}}` format for personalization
Optional: Configure call-to-action buttons
Click **Preview and Submit**
Templates typically get reviewed within 24 hours. Creating compliant templates that avoid promotional language increases approval chances.
For simpler communications, you can send non-template messages that include:
Plain text messages within the 24-hour window
Photos and graphics in supported formats
PDFs, Word docs, and other file types
MP4 and other supported video formats
Non-template messages can only be sent within the 24-hour customer service window after a customer initiates contact with your business.
To connect Notifyer System with n8n, you'll need an API key:
1. In your Notifyer dashboard, navigate to [**API Keys**](https://console.notifyer-systems.com/api-key)
2. Copy your unique API key
3. Store it securely—you'll need it for the integration
Never share your API key publicly or commit it to version control systems.
## Integrating with n8n
1. Log in to your n8n account
2. Create a new workflow by clicking **Create Workflow**
3. Add a trigger node of your choice:
* Popular triggers include Google Forms, Jotform, ClickUp, or a Schedule trigger
* Connect and configure your trigger according to your use case
Use the Whatsable trigger so n8n runs when WhatsApp messages are **received or sent** — including replies typed in the WhatsApp Business app on your phone. Select the **incoming and outgoing** credential type so those events reach n8n, not only the Notifyer inbox.
Follow these steps to add the Whatsable trigger node to your workflow:
1. Click the **+** button in your workflow canvas to add a new node
2. Search for "Whatsable" in the node library search bar
3. Select the node displaying the official Whatsable logo
4. From the available trigger options, choose **On new Incoming message event**. That is the node's label — when outgoing is enabled (credential **Notifyer System incoming and outgoing messages**), the same trigger also fires for outgoing messages, including replies typed in the WhatsApp Business app. Filter with `incoming_message`.
The trigger listens for WhatsApp activity and starts your workflow. Outgoing events include messages typed in the WhatsApp Business app (`send_by`: `WhatsApp App`).
Set up your Whatsable API credentials to establish a secure connection:
**Webhook URL Configuration:**
1. In the Whatsable Trigger node parameters, locate the **Webhook URLs** section at the top
2. Select **Production URL** and copy the generated URL by clicking on it
3. Store this URL securely as you'll need it for the credential setup
**Credential Creation:**
1. In the **Credential to connect with** dropdown, click **+ Create new credential**
2. Select **Whatsable Notifyer System API** as your connection method. For phone-app and inbox replies, choose the credential that covers **Notifyer System incoming and outgoing messages**
3. Enter your Notifyer System API key in the **API Key** field
4. Paste the Production URL you copied earlier into the **Production URL** field
5. Assign a descriptive name to your credential (e.g., "Whatsable Production")
6. Click **Save** to securely store your credentials
Your API credentials are encrypted and stored securely. Never share your API key publicly or commit it to version control.
Complete the setup by testing and activating your trigger:
**Response Configuration:**
1. In the **Respond** dropdown, select your preferred response timing:
* **Immediately**: Responds as soon as the trigger fires
* **When Last Node Finishes**: Waits for the entire workflow to complete before responding
**Testing:**
1. Click **Execute step** on the Whatsable node to run a test
2. Verify the connection is working by checking for a success confirmation
3. Review any error messages if the test fails and adjust your configuration accordingly
Once activated, your workflow processes incoming **and** outgoing messages according to your configured logic. Use `incoming_message`, `send_by`, and `was_message_by_human` in later nodes to branch on direction and sender.
Remember to test your workflow thoroughly before activating it in production to ensure it behaves as expected.
1. Click the **+** button after your trigger node
2. Search for "Whatsable" in the nodes panel
3. Select the node with the official Whatsable logo
4. After selecting the Whatsable node, choose 'Send template via Notifyer' or 'Send non-template via Notifyer' as needed.
1. In the Whatsable node **Parameters**, find the **Credential to connect with** dropdown
2. Select **+ Create new credential**
3. Enter your Notifyer System API key that you copied earlier
4. Name your credential (e.g., "Notifyer Production")
5. Click **Save** to store your credential
1. In **Resource** dropdown, select **Send Message**
2. In the **Operation** dropdown, choose **Send template via Notifyer** for template messages or **Send non‑template via Notifyer** for regular messages (only works within the 24‑hour window).
3. Complete the required fields:
Complete the required fields:
Enter the recipient's phone number with country code (e.g., +14155552671) or use dynamic data from previous nodes
Select from your pre-approved templates in the dropdown
Based on your selected Template message type, fill in the required fields:
* For text messages: Enter your message content
* For media messages: Provide a publicly accessible URL to your file
* Optional caption (for media files)
For all media types, ensure your file URLs are publicly accessible and match the supported file formats.
(Optional) Include a note in the template message for internal tracking
(Optional) Select the label(s) you created in Chat Notifyer for internal tracking
(Optional) Select the date and time to schedule when your message will be sent
Enter the **Phone Number** with country code
Choose from the following message types:
For plain text messages
For sending documents (PDF, Word, etc.)
For sending images (JPEG, PNG, etc.)
For sending videos (MP4, 3GP, etc.)
Based on your selected message type, fill in the required fields:
* For text messages: Enter your message content
* For media messages: Provide a publicly accessible URL to your file
* Optional caption (for media files)
For all media types, ensure your file URLs are publicly accessible and match the supported file formats.
(Optional) Select the label(s) you created in Chat Notifyer for internal tracking
(Optional) Select the date and time to schedule when your message will be sent
1. Click **Test Step** on the Notifyer node to verify it's working correctly
2. If the test is successful, you'll see a confirmation message
3. Return to your workflow
4. Click **Save** to save your entire workflow
5. Toggle the **Active** switch in the top-right corner to activate your workflow
Your automated messaging workflow is now operational! Whenever your trigger conditions are met, n8n will automatically send WhatsApp messages through Notifyer System.
## Incoming and outgoing WhatsApp messages
Notifyer delivers **both incoming and outgoing** messages to your webhook or automation trigger — including messages typed by hand in the **WhatsApp Business app** on your phone.
This is possible because Notifyer supports [Meta WhatsApp Coexistence](/guides/notifyer-system/embedding-process#whatsapp-coexistence). You keep using WhatsApp Business on your phone; those hand-typed replies still reach an external webhook and can start an automation. They are not limited to the Notifyer web inbox.
The payload is the same whether you use [n8n](/guides/notifyer-system/n8n-overview), [Make](/guides/notifyer-system/make-overview), [Zapier](/guides/notifyer-system/zapier-overview), or a [custom webhook](/guides/notifyer-system/api/incoming-message). [Watch the walkthrough on YouTube](https://www.youtube.com/watch?v=UfW-KwS4gBI).
### Direction, sending system, and team member
Use these three fields to tell *what happened* and *who sent it*:
`true` when a contact sent a message **to** your business. `false` when your business sent a message **to** the contact (outgoing). Filter on this field to run logic only for one direction.
Which system or person sent an **outgoing** message:
| `send_by` value | Meaning |
| - | - |
| `WhatsApp App` | Typed by hand in the WhatsApp Business app on a phone |
| A team member's name (for example `Axel Meta`) | Sent from the Notifyer chat inbox by that logged-in user |
| An automation or app name (Make, Zapier, n8n, API, bot) | Sent by that integration or bot |
Empty or omitted on incoming messages.
`true` when a person sent the message (WhatsApp Business app or Notifyer chat inbox). `false` when a bot or automation sent it. Combine with `send_by` to see both *whether* a human sent it and *which teammate or system* did.
### Example payload: message typed on the phone
This is the JSON Notifyer POSTs when someone types a reply in the WhatsApp Business app. `incoming_message` is `false`, `send_by` is `"WhatsApp App"`, and `was_message_by_human` is `true`.
```json theme={null}
{
"last_messages": "[{\"type\":\"bot\",\"content\":\"Hello n8n\",\"timestamp\":\"2026-08-15T12:24:47.000Z\",\"content_type\":\"text\"},{\"type\":\"user\",\"content\":\"hi\",\"timestamp\":\"2026-08-12T12:27:42.746Z\",\"content_type\":\"text\"}]",
"conversation_paragraph": "Bot (12:24:47 PM): Hello n8n ; User (12:27:42 PM): hi",
"phone_number": 14155552671,
"recipient_name": "Alex Martinez",
"user_id": "158c59e1-ea85-4d0b-b70c-65328ba67a8e",
"last_message_of_user": "hi",
"last_message_of_bot": "Hello n8n",
"message_type": "text",
"user_last_message_time": 1786722580,
"bot_last_message_time": 1786797014,
"attachment_url": null,
"note": "email: alex\nName: Alex",
"note_automation": "email: alex\nName: Alex",
"labels": "n8n, webhook-test",
"incoming_message": false,
"send_by": "WhatsApp App",
"was_message_by_human": true
}
```
`last_message_of_bot` is the last message **your business** sent — whether a human typed it in the WhatsApp Business app or the Notifyer inbox, or a bot/automation sent it. `last_messages` is a JSON **string** of the last \~20 messages (parse it before iterating). `phone_number` may arrive as a number rather than a string.
When the same person sends from the Notifyer chat inbox instead of the phone app, the payload is identical except:
```json theme={null}
{
"incoming_message": false,
"send_by": "Axel Meta",
"was_message_by_human": true
}
```
### Click-to-WhatsApp ad attribution
When a contact messages you after tapping a **Click-to-WhatsApp** ad (Facebook, Instagram, or WhatsApp Status), Meta includes a `referral` object on that inbound event. Notifyer forwards it in [webhook](/guides/notifyer-system/api/incoming-message#click-to-whatsapp-ads) and trigger data (n8n, Make, Zapier).
Use it to see **which ad, creative, and platform** produced the lead — then label the chat, route it, or send `ctwa_clid` back to Meta for campaign optimization.
`referral` is typically present on the **first inbound message** after the ad click. Later messages in the same conversation usually omit it. Persist `ctwa_clid` and `source_id` as soon as you see them.
| Field | What it tells you |
| - | - |
| `source_type` | `"ad"` for an ad, `"post"` for an organic post |
| `source_id` | Ad or post ID — use this to group leads by creative |
| `source_url` | Where they tapped (Instagram permalink, Facebook/ad URL) |
| `headline` / `body` | Ad copy the lead saw |
| `media_type` | `"image"` or `"video"` |
| `image_url` / `video_url` | Creative asset URL |
| `ctwa_clid` | Click ID for Meta Conversions API attribution |
```json theme={null}
{
"incoming_message": true,
"last_message_of_user": "Quiero información",
"referral": {
"source_type": "ad",
"source_id": "52540693396957",
"source_url": "https://www.instagram.com/p/DZiVBz7gAF9/",
"headline": "Expo Nissan",
"body": "Aprovechá la EXPONISSAN y llevate tu nuevo Nissan Kicks Play Sense MT.",
"media_type": "image",
"image_url": "https://scontent.xx.fbcdn.net/v/t45.1600-4/example.jpg",
"ctwa_clid": "AfhN-JKvx8HeFTmfB-Tu11zktQRJ-MNdMV1mwvDNxHnpYrGl-jVf3OEFhLva_MP41zYRe5ErUteWFn3v4gkkjzfIEVr9J_u8GAo3-o6DqShykM4Zsl14FcU5MyThsCoQ"
}
}
```
If your delivery includes the Cloud API envelope instead of a flattened Notifyer payload, the same object lives at `entry[].changes[].value.messages[].referral`. Full field reference and a complete example: [Message webhooks — Click-to-WhatsApp ads](/guides/notifyer-system/api/incoming-message#click-to-whatsapp-ads).
## Example use cases
Send automatic order confirmations when new orders are placed
Schedule reminders before upcoming appointments
Read `referral.source_id`, `source_url`, and `headline` to label leads by creative and platform
Route support inquiries to the appropriate team member
Keep customers informed about their delivery status
Send automatic payment reminders for overdue accounts
## Best practices
Always test your workflows with test phone numbers before activating them for production use.
Whenever possible, use pre-approved templates for better deliverability and compliance.
Include customer names and specific details to increase engagement and response rates.
Ensure all message content complies with WhatsApp Business policies to avoid account restrictions.
Regularly check your message delivery rates in your Notifyer dashboard.
## Troubleshooting
Ensure your API key is entered correctly in the n8n credentials
Confirm phone numbers are in the correct international format (e.g., +14155552671)
Verify your Notifyer subscription is active and has available credits
Use the trigger labelled **On new Incoming message event** with the **Notifyer System incoming and outgoing messages** credential. When outgoing is enabled, that same trigger also fires for outgoing messages. Confirm `incoming_message` is `false` and `send_by` is `WhatsApp App` when you type a test reply on your phone. You do not need to delete the WhatsApp Business app.
Verify all required variables are included in your template message
Check that variable formats match the expected values (text, number, date, etc.)
Ensure you're using the correct template name exactly as it appears in your dashboard
Confirm your media URLs are publicly accessible (test in an incognito browser)
Verify the file format is supported by WhatsApp
Check that file sizes are within WhatsApp limits:
* Images: up to 5MB
* Videos: up to 16MB
* Documents: up to 100MB
## Need help?
Our support team is ready to assist you:
Contact [team@whatsable.app](mailto:team@whatsable.app)
Book a personalized walkthrough
Click the green chat button in the bottom right corner of the Notifyer dashboard
For additional automation platform integrations (Make.com, Zapier, etc.), please contact our support team or check our integration documentation.
# Pipedrive
Source: https://docs.whatsable.app/guides/notifyer-system/pipedrive-overview
Learn how to seamlessly integrate Pipedrive with the Notifyer System for automated WhatsApp messaging
# Notifyer System Integration with Pipedrive
This guide walks you through connecting Notifyer System with Pipedrive to create powerful automated WhatsApp messaging workflows for your sales and CRM processes
## Prerequisites
Before getting started, make sure you have:
Active Notifyer System account with a subscription plan (Monthly or Pay-as-you-go)
Access to [Pipedrive](https://www.pipedrive.com/) CRM platform
New to Notifyer System? [Sign up here](https://console.notifyer-systems.com/)
## Setting up your Notifyer System account
Before sending WhatsApp messages, you must complete the platform [embedding process](/guides/notifyer-system/embedding-process), which connects your WhatsApp Business account to Notifyer System.
The embedding process is required by Meta to ensure proper business verification and compliance with WhatsApp Business Platform policies.
Notifyer System provides two methods for sending WhatsApp messages:
WhatsApp templates are pre-approved message formats that allow for personalization while maintaining compliance with WhatsApp policies.
Go to **Your Templates** in your Notifyer dashboard
Click the **Create Template** tab at the top of the page
Complete the template creation form with the following details:
Choose a descriptive name for internal reference
Choose your template's primary language
Select the appropriate message category
Optional: Add an image, document, or video header
Craft your message content
Add placeholders using `{{1}}`, `{{2}}` format for personalization
Optional: Configure call-to-action buttons
Click **Preview and Submit**
Templates typically get reviewed within 24 hours. Creating compliant templates that avoid promotional language increases approval chances.
For simpler communications, you can send non-template messages that include:
Plain text messages within the 24-hour window
Photos and graphics in supported formats
PDFs, Word docs, and other file types
MP4 and other supported video formats
Non-template messages can only be sent within the 24-hour customer service window after a customer initiates contact with your business.
Follow these simple steps to integrate your Pipedrive account with Notifyer System:
In your Notifyer dashboard, go to [**Connect to Pipedrive**](https://console.notifyer-systems.com/pipedrive).
Click the 'Connect Pipedrive Organization' button.
You'll be redirected to Pipedrive's authorization page. Review the permissions and click 'Authorize' to grant Notifyer System access to your Pipedrive organization.
After authorization, you'll be automatically redirected back to your Notifyer System dashboard. Look for the connection status showing 'Connected to Pipedrive' to confirm the integration was successful.
## Sending WhatsApp Messages from Pipedrive
Whatsable's integration with Pipedrive allows you to send WhatsApp messages directly from your deals and contacts without leaving your CRM. This guide will walk you through the complete process.
### Verifying Prerequisites
Before sending WhatsApp messages, ensure the following requirements are met:
Must show as **PAID**
Must show as **ACTIVE**
Must be properly synced with Whatsable
You can verify these settings in the Whatsable Integration section of any deal or contact.
## Sending Messages from Deals
### Accessing the Whatsable Integration Panel
1. Go to your **Pipedrive Dashboard**
2. Open your desired **Pipeline**
3. Select a **Deal** from your pipeline
1. On the right-hand panel, scroll down past the Summary section
2. Find the **Whatsable Integration** section
### Understanding the Integration Panel
The Whatsable Integration panel displays important connection information:
Confirms your subscription is active
Shows which WhatsApp Business account is connected
Indicates if your WhatsApp connection is active
Displays the date and time of the most recent message
Provides a direct link to the conversation
### Sending Options
Within the Whatsable Integration section, you'll find a green **"Live Chat"** button with a dropdown menu offering three options:
Opens the Whatsable chat interface directly within Pipedrive
Schedule a message to be sent at a specific date and time
Send a pre-configured template message immediately
## Option 1: Send Scheduled Message
Use this option when you want to send a message at a specific future date and time.
1. Click the dropdown next to the **Live Chat** button
2. Select **"Send Scheduled Message"**
3. A modal window will appear with the following fields
The recipient's phone number(s) associated with the deal. This field is automatically populated from the deal's contact information.
Your connected WhatsApp Business account. This field is pre-filled and cannot be modified from this interface.
Choose from your pre-created message templates. These templates must be created beforehand in the **Notifyer by Whatsable** dashboard.
Once you select a template, all required placeholder fields will appear dynamically. Fill in each field carefully to personalize your message (e.g., customer name, appointment time, order details).
Select the exact date and time you want the message to be sent.
Specify the timezone from which you're scheduling the message to ensure accurate delivery timing.
Include an internal note for your team. This note is only visible within Pipedrive and helps with tracking and context.
Assign labels to categorize and organize your communications for easier filtering and reporting.
At the top of the modal, you'll see your **most recent messages** with this contact (if any previous conversations exist), providing helpful context before sending.
1. Review all information carefully
2. Click the **"Schedule Template"** button at the bottom of the modal
3. Your message is now scheduled and will be sent automatically at the specified time
Message successfully scheduled! It will be sent at the specified time.
## Option 2: Send Template (Immediate)
Use this option to send a pre-configured template message immediately without scheduling.
1. Click the dropdown next to the **Live Chat** button
2. Select **"Send Template"**
3. A modal window will appear with the following fields
The recipient's phone number(s) associated with the deal. This field is automatically populated from the deal's contact information.
Your connected WhatsApp Business account. This field is pre-filled and cannot be modified from this interface.
Choose from your pre-created message templates. These templates must be created beforehand in the **Notifyer by Whatsable** dashboard.
Once you select a template, all required placeholder fields will appear dynamically. Fill in each field carefully to personalize your message (e.g., customer name, product details, tracking numbers).
Include an internal note for your team. This note is only visible within Pipedrive and helps with tracking and context.
Assign labels to categorize and organize your communications for easier filtering and reporting.
At the top of the modal, you'll see your **most recent messages** with this contact (if any previous conversations exist), providing helpful context before sending.
1. Review all information carefully
2. Click the **"Send Template"** button at the bottom of the modal
3. Your message will be sent immediately
Message sent successfully!
## Sending Messages from Contacts
The process for sending WhatsApp messages from contacts is nearly identical to sending from deals, with minor differences noted below.
### Accessing the Whatsable Integration Panel
1. Go to your **Pipedrive Dashboard**
2. Navigate to the **Contacts** menu
3. Select your desired **Contact**
1. On the right-hand panel, scroll down past the Summary section
2. Find the **Whatsable Integration** section
### Understanding the Integration Panel
The Whatsable Integration panel displays the same connection information as in deals:
Confirms your subscription is active
Shows which WhatsApp Business account is connected
Indicates if your WhatsApp connection is active
Displays the date and time of the most recent message
Provides a direct link to the conversation
### Sending Options
The same three options are available:
Opens the Whatsable chat interface directly within Pipedrive
Schedule a message for a specific date and time
Send a template message immediately
**Key Difference**: Phone numbers are pulled from the contact's information rather than deal-specific numbers. All other fields and processes remain identical to sending from deals.
## Best Practices
**Before Sending Messages**
Always check that your WhatsApp connection shows as ACTIVE before attempting to send messages to avoid delivery failures.
**Template Management**
* Ensure your message templates are up-to-date in the Notifyer dashboard
* Test templates with yourself before using them with customers
* Create templates in advance for different scenarios
**Phone Number Verification**
* Confirm the recipient's phone number is correct
* Verify the number includes the country code (e.g., +1 for US)
* Update contact information if numbers are missing or incorrect
**Message Organization**
* Develop a clear labeling system for easier tracking
* Apply consistent labels across your team
* Use labels for reporting and analytics purposes
**Documentation Best Practices**
* Document the purpose of each message for future reference
* Include context that will help team members understand the communication
* Keep notes concise but informative
**Maintain Context**
* Always check conversation history before sending new messages
* Avoid sending duplicate or redundant information
* Ensure message continuity for better customer experience
**Timing Considerations**
* Consider your recipient's timezone when scheduling messages
* Avoid sending messages during off-hours or weekends unless necessary
* Set reminders to follow up if no response is received
**Template Creation**
* Make placeholder fields intuitive for anyone on your team
* Use descriptive variable names (e.g., customer\_name, order\_date)
* Test variable population before mass sending
## Troubleshooting
Reconnect your WhatsApp Business account in the Whatsable dashboard
Verify your WhatsApp Business account is properly configured
Contact Whatsable support if the issue persists after reconnection
Create templates in the Notifyer by Whatsable dashboard first
Ensure templates are approved by WhatsApp (if required for your template type)
Refresh your Pipedrive page after creating new templates to see them appear
Verify your WhatsApp connection was active at the scheduled time
Check that the timezone was set correctly when scheduling
Review the message logs in Whatsable for error details and delivery status
Ensure the contact or deal has a valid phone number in Pipedrive
Verify the phone number format includes the country code (e.g., +1234567890)
Update the contact information if the phone number is missing or incorrect
Ensure variable names in your template match the fields you're filling
Confirm the data source (contact or deal) has the required information
Send a test message to yourself to verify variable population before sending to customers
Confirm the recipient has an active WhatsApp account on that number
Ensure your message complies with WhatsApp's business messaging policies
Verify your Whatsable account has sufficient credits or an active subscription
If issues persist, contact Whatsable support with the message details
For more information about template creation and management, visit the Notifyer by Whatsable dashboard or contact our support team.
## Need help?
Our support team is ready to assist you:
Contact [team@whatsable.app](mailto:team@whatsable.app)
Book a personalized walkthrough
Click the green chat button in the bottom right corner of the Notifyer System dashboard
For additional automation platform integrations and advanced configurations, please contact our support team or check our integration documentation.
# What are Whatsable plans Bulk Message, Pro, and Agency?
Source: https://docs.whatsable.app/guides/notifyer-system/plans-bulk-message-pro-agency
Whatsable Bulk Message, Pro, Agency: unlimited messaging within your unique-contact tier, $13/100 overage, plan gates for inbox, AI, integrations, Agency.
Whatsable has three live plans — **Bulk Message**, **Pro**, and **Agency**. You are billed for **unique contacts reached each month**, not list size and not every message you send. **Unlimited messaging within your unique-contact tier** is the billing differentiator: Whatsable does not meter message volume inside that band. Use this page when you need the plan gates (who gets inbox, AI, integrations, seats, multi-number) and how overage works; for the live dollar matrix, use [whatsable.app/pricing](https://whatsable.app/pricing).
**Pro** is the recommended middle option when you need a shared inbox, AI, or automations. **Bulk Message** fits broadcast-only teams. **Agency** fits teams that need multiple WhatsApp numbers and client workspaces.
**Unlimited within your tier.** Each distinct person you reach in a billing cycle counts once toward your contact band. Follow-ups and repeats to those same contacts do not add Whatsable platform message charges; Meta WhatsApp delivery fees still apply separately at Meta’s rates.
## Prerequisites
* **Account:** Sign up at [dashboard.whatsable.app/signin](https://dashboard.whatsable.app/signin).
* **WhatsApp Business number:** Connected through Whatsable (Embedded Signup / Coexistence supported — keep the WhatsApp Business app; do not uninstall it after connect).
* **Money page:** Treat [https://whatsable.app/pricing](https://whatsable.app/pricing) as the canonical source for current plan prices and contact-tier bands. This docs page explains **gates and billing mechanics**, not a full price grid.
* **Plan names:** Use only **Bulk Message**, **Pro**, and **Agency**. Older materials may say Basic or Standard — those are not current public names.
You pay two bills: the Whatsable platform plan (unique contacts), and Meta’s WhatsApp delivery fees billed separately by Meta at Meta’s rates. Whatsable passes Meta fees through at **0% markup**. See [Meta’s platform pricing](https://business.whatsapp.com/products/platform-pricing).
***
## How unique-contact billing works
Whatsable bills on **unique contacts reached per month**, not the size of your list and not total message volume. **Unlimited messaging within your unique-contact tier** means you can send as many Whatsable-side messages as you need to those contacts — only each new unique person that month moves the meter. The unique-contact count **resets each billing cycle**.
Contact tiers available on pricing include **500, 1,000, 1,500, 3,000, 4,000, 6,000, 8,000, and 10,000+**. Pick the band that matches how many distinct people you expect to reach that month.
**Starting prices at the 500-contact band** (monthly; confirm live on pricing):
* **Bulk Message** — from **\$19/mo**
* **Pro** — from **\$49/mo** (7-day free trial on Pro)
* **Agency** — from **\$53.90/mo**
**Annual billing** gives **2 months free** (pay for ten months, receive twelve). Toggle Annual on the pricing page for monthly-equivalent figures.
### Overage per 100 unique contacts
If you stay on your current tier and reach more unique contacts than that tier covers in a billing period, you are **not cut off** and **not auto-upgraded**. You are charged **\$13 for each additional 100 unique contacts** beyond your tier that period.
Example: Pro at 500 unique contacts (**\$49/mo**) who reaches **600** pays **\$49 + \$13**. Around **80%** of your tier, Whatsable emails you about upgrading; if you do not upgrade, overage still applies only to what you go over.
Do not confuse contact overage with extra inbox seats (**\$12 / seat / mo** on Pro and Agency).
***
## Plan matrix — what each plan includes
### Bulk Message
Built for **template campaigns and CSV / audience broadcasts** from your own WhatsApp Business number.
Includes:
* Official Meta WhatsApp Business API connection
* Unlimited messaging within your unique-contact tier
* Bulk / broadcast send (CSV / audience) with approved templates
* **Scheduled broadcasts**
* Basic delivery analytics (sent / delivered / read)
* Template management
* **1 team member**
* Email support
Does **not** include:
* 2-way shared team inbox or extra inbox seats
* AI chatbot / ProactiveBot
* Integrations and automation (Make, Zapier, n8n, Pipedrive, monday.com, Attio, REST API / webhooks as product integrations)
* Advanced analytics
* Agency sub-accounts, whitelabel, or multi-number workspaces
### Pro (recommended middle)
Everything in Bulk Message, plus collaboration and automation on **one WhatsApp number per subscription**.
Includes:
* **2-way live chat / shared team inbox**
* **AI chatbot** (answers as *your* business from mission + knowledge base)
* **ProactiveBot** silent follow-ups (Pro/Agency)
* **Scheduled broadcasts**
* **Automations & integrations:** Make, Zapier, n8n, Pipedrive, monday.com, Attio, webhooks / REST API
* Advanced analytics, labels / segmentation
* Multiple team members; **extra inbox seats** from **\$12/seat/mo**
* Priority support — WhatsApp + chat + Zoom if needed
* Free onboarding / setup help on Pro & Agency (see pricing for current offer)
### Agency
Everything in Pro, plus agency-scale surfaces:
* Sub-accounts / workspaces
* Whitelabel / custom domain
* Volume pricing
* High / unlimited seats (extra seats still available as **\$12/seat/mo** add-on)
* Multiple WhatsApp Business numbers
* Dedicated account manager — WhatsApp + chat + Zoom if needed
### Feature gates at a glance
| Capability | Bulk Message | Pro | Agency |
| - | - | - | - |
| Unlimited messaging within unique-contact tier | Yes | Yes | Yes |
| Broadcast / CSV bulk templates | Yes | Yes | Yes |
| Scheduled broadcasts | Yes | Yes | Yes |
| Shared 2-way inbox / seats | No | Yes | Yes |
| AI chatbot / ProactiveBot | No | Yes | Yes |
| Integrations (Make, Zapier, n8n, CRMs, API) | No | Yes | Yes |
| Sub-accounts / whitelabel / multi-number | No | No | Yes: up to 100 WhatsApp numbers on one Agency subscription, then \$5 for each additional number |
| Support | Email | Priority (WhatsApp, chat, Zoom if needed) | Dedicated account manager |
***
## Agency multi-number — how it works today
On Whatsable Agency, one subscription covers up to 100 connected WhatsApp phone numbers. Each additional number beyond 100 costs \$5 and is added to the same subscription. You can run all your numbers from one Whatsable login. The team inbox shows every number, and you can filter it by number. Each number can have its own AI agent, and you can limit each teammate to specific numbers. If you want to keep a client fully apart, you can give that client a separate workspace with its own login and team.
***
## Extra inbox seats (Pro and Agency)
Plan price covers the included team for that plan. Buy **extra seats** when more people need the shared inbox:
* **\$12 per seat per month** (Pro and Agency only)
* Native **Android and iOS** apps
* Mobile push **only for chats assigned to that person**
* Assignment via Zapier, Make, API, keywords in chat, or AI by conversation content
Bulk Message has **no** team inbox seats. Seat add-on is **not** the same as unique-contact overage and **not** Group Messaging (unavailable / waitlist only).
***
## Trials
* **With credit card:** 500 unique contacts free for **1 week** (Pro trial on pricing). Charged automatically after the trial unless you cancel first.
* **Without credit card:** test with up to **2 recipients** for free.
* Cancel anytime from the dashboard; cancelling before the trial ends avoids the charge.
***
## Limits and what Whatsable plans do NOT include
**Not on Bulk Message:** team inbox, AI chatbot, ProactiveBot, integrations (Make / Zapier / n8n / CRMs / product API automation), Agency workspaces / multi-number.
* **No native drip builder.** Multi-step day-0 / day-3 / day-6 sequences are possible only by building the delay logic in **Make, Zapier, or n8n**; Whatsable sends the messages.
* **No WhatsApp typing-indicator dots** claim — Response Delay exists on the AI bot; typing dots are not a documented Whatsable surface.
* **Block rate** is visible in **Meta Business Manager**, not as a Whatsable analytics metric. Bulk Message analytics = basic sent / delivered / read; Pro/Agency = advanced.
* **Group Messaging** (\$16/group style add-on) is **unavailable** (waitlist only).
* Meta MPS and coexistence throughput are Meta-side constraints.
* Meta bills at Meta rates; Whatsable markup is **0%**.
* Older plan names **Basic** / **Standard** are not current.
***
## Related
Live plan prices, contact tiers, annual toggle, and pricing FAQ.
Shared 2-way inbox on Pro and Agency (not Bulk Message).
AI settings — Pro and Agency only.
Make connect and modules — Pro and Agency only.
Zapier connect — Pro and Agency only.
Keep the Business app while using the API; do not uninstall after connect.
***
## FAQ
### Do you bill by messages or by contacts?
By **unique contacts reached each month**, not messages and not list size. **Unlimited messaging within your unique-contact tier** is included on every plan — Whatsable does not charge per message inside the band. The count resets each billing cycle. Meta WhatsApp delivery fees are a separate bill.
### What if I go over my contact tier?
You are not cut off and not auto-upgraded. You pay **\$13 per additional 100 unique contacts** beyond your tier that period. Example: Pro 500 at \$49 who reaches 600 pays \$49 + \$13.
### Which plan has integrations and AI?
**Pro** and **Agency**. **Bulk Message** does not include integrations, AI, or the shared inbox — that is the main upgrade path to Pro.
### Can I run several WhatsApp numbers on one Agency plan?
Yes. Agency includes up to 100 connected numbers on one subscription, and each additional number beyond that is \$5. Your team can work every number from one inbox and filter by number.
### Are extra seats the same as overage?
No. **Seats** = **\$12/seat/mo** for more people in the Pro/Agency inbox. **Overage** = **\$13 per 100 unique contacts** beyond your tier. Bulk Message has no inbox seats.
### Where do I see exact prices for every contact band?
[https://whatsable.app/pricing](https://whatsable.app/pricing) — that page is the money source of truth. This docs page covers plan gates and billing mechanics.
# Shared Team Inbox
Source: https://docs.whatsable.app/guides/notifyer-system/team-inbox
How the 2-way WhatsApp inbox works for Pro and Agency: first open, who sees what, replying as the business, labels and notes, and AI/human handoff.
The shared team inbox is available on the **Pro** and **Agency** plans. **Bulk Message does not include a 2-way inbox** — it sends one-way broadcasts and campaigns only.
The shared team inbox — **Notifyer Chat** in the product — is where your team reads WhatsApp conversations in real time and replies as your business. This page walks through what a new team actually sees and does in there, not just the API fields behind it.
Bulk Message doesn't include the shared 2-way inbox — it's built for one-way broadcast sending. Upgrade to Pro or Agency to get it. Once you're on Pro or Agency, **the inbox lives in the left-side menu.**
## First open: what you'll see
The inbox is not pre-loaded with demo content. After you connect a WhatsApp number:
* It shows **only real conversations** — no sample chats to click through.
* It's **empty** until a real customer messages you (or an import finishes — see below).
If you connect the number through [Meta WhatsApp Coexistence](/guides/notifyer-system/embedding-process#whatsapp-coexistence) during Embedded Signup, you can optionally import roughly the **last 6 months** of chat history from the WhatsApp Business app. That import **can take hours** to finish. If the inbox looks emptier than expected right after connecting, that's usually the import still running — not a bug.
## Who sees what: access layers
Visibility in the inbox stacks in three layers, plain and simple:
Which connected WhatsApp number (or numbers, on Agency) this person can work at all.
**Admin** can manage the account (billing, integrations, templates, other teammates). A **chat-only** teammate works conversations in the inbox without full account admin.
Within a number, a chat-only teammate can be further limited to only the conversations carrying certain labels — for example, only "Sales" or only "Support" chats.
Underneath, these map to real team roles: `Admin`, `Team Member (All Labels)`, and `Team Member` (label-scoped). See [team & roles](/guides/notifyer-system/agent-skills/setup-notifyer) for the API/Agent Skills view of the same roles.
Labels themselves can be created, assigned, or removed from several places — not only inside the inbox: the **API**, **Agent Skills**, **Zapier**, **Make**, and the **proactive bot** can all update a contact's labels.
Mobile push notifications follow the same access rule: a teammate is notified only for chats they **can access** (their number + role + label scope) — not every chat on the account.
## Collaborating inside a conversation
Open a conversation and a few things are always available to your team:
* **Reassigning a chat, in practice, means changing its labels.** There isn't a separate "assign" button today — the way ownership and routing actually happens in the inbox is by adding or removing a label on the conversation (for example, swapping "Unassigned" for a teammate's name label, or a routing label your automations watch for).
* **Let the agent reply.** In the contact panel, this toggle controls whether the AI agent sends automatic replies on that chat. When it's **off** — for example because a person replied — the bot **stops immediately**. Turn it **on** again to hand the conversation back to the agent. See [AI Chatbots](/guides/notifyer-system/ai-chatbot/overview) for bot assignment and other handoff settings.
* **A reply typed in the WhatsApp Business app also stops the bot** — it's treated as human, the same as turning off **Let the agent reply**. See [Coexistence](#coexistence-phone-and-inbox-together) below for exactly what that looks like in the inbox.
If your workspace has **webhook accounts** wired up: turning off **Let the agent reply** (human takeover) pauses **webhook pings on the bot path** while the chat is in that state. It does **not** pause everything — **CRM webhooks can still fire** on that same chat. If a partner integration assumes "human mode = silence," confirm which webhook path they're listening on.
Human and automation **notes** sit in the same contact panel (use the **Internal note** tab in the composer when replying). They are not shown as a separate screenshot here.
## Labels vs. notes
These look similar but do different jobs:
**Organize and target.** Labels group conversations (keyword labels, interest labels, teammate/routing labels) and are also what you aim a **broadcast** at — see [Label Condition](/guides/notifyer-system/zapier-overview#schedule-a-follow-up-message) in the Zapier scheduling flow.
**Give context, don't organize.** Notes come in two flavors: **automation notes** (form or Lead Ad field data pushed in via Zapier/Make so the bot has context) and **human notes** (a teammate's own written context on the contact).
Setting either from outside the inbox: see **Update a Contact** in [Zapier](/guides/notifyer-system/zapier-overview#update-a-contact) or [Make](/guides/notifyer-system/make-overview#update-a-contact), or `assign-label.js` / `add-note.js` in the [chat-notifyer](/guides/notifyer-system/agent-skills/chat-notifyer) Agent Skill.
When an automation trigger fires (Zapier, Make, n8n), it carries the current **labels** and **notes** along with the **conversation paragraph** — roughly the **last 20 messages** of that chat. See the [message webhook payload](/guides/notifyer-system/api/incoming-message#payload-fields) for the exact fields (`labels`, `note`, `note_automation`, `last_messages`).
## AI ↔ human resume behavior
What happens after a teammate takes over from the bot:
The bot **stops immediately** on that chat (a person replied, or you switched it off).
Nothing is lost — the **full conversation history** stays exactly as it was, bot messages and all.
Open **Once you reply by hand** in Settings and choose when the agent may start replying again after a hand reply — one of the three options in the next section.
**Once you reply by hand** controls how long the agent stays quiet after you or a teammate reply by hand, before it answers on its own again. In Settings, pick one of:
1. **The agent stays off until someone turns it back on**
2. **The agent resumes when the customer starts a new conversation**
3. **The agent resumes after a set time**
## Coexistence: phone and inbox together
This is the exact, confirmed behavior when your number uses [Meta WhatsApp Coexistence](/guides/notifyer-system/embedding-process#whatsapp-coexistence) and a teammate is in the web inbox while someone replies from the **WhatsApp Business app** on the same number:
* It's the **same customer thread** in the web inbox — the sync is **real time**, not a delayed refresh.
* The reply shows as coming from the **WhatsApp Business app**, **not** a named teammate. On the [message webhook payload](/guides/notifyer-system/api/incoming-message#payload-fields): `send_by: "WhatsApp App"`, `was_message_by_human: true`, `incoming_message: false`.
* That phone reply **turns off Let the agent reply** — the native AI **stops auto-replying** on that chat, the same as switching the toggle off in the inbox.
* **Make, Zapier, and n8n do not auto-pause** just because of this. Your scenario keeps running unless you explicitly filter on the human / `"WhatsApp App"` signal — see [filtering for phone-app replies](/guides/notifyer-system/api/outbound-whatsapp-app).
* **Groups, Status, and Calls do not sync** into the web inbox — only 1:1 WhatsApp conversations do.
What this does **not** do: it doesn't change chat assignment, it doesn't guarantee an unread badge fires, and it doesn't require a hard refresh to see the new message. If you notice any of those, that's a bug to report, not expected behavior.
## Agency: one number or many
If your Agency workspace manages more than one WhatsApp number, you have two ways to work them:
* **One shared view, filterable by number or by label** — your team stays in a single inbox and uses the number dropdown (for example **All numbers** or one connected line) and the **Labels** filter on the list to narrow what they see, instead of switching accounts.
* **Per-customer logins** — if you'd rather keep each client's number and team fully separate, that's supported too.
## Next steps
Complete Embedded Signup (with Coexistence support) before the inbox has any conversations to show.
Bot assignment, handoff keywords, and settings that work with Let the agent reply in the inbox.
Full payload reference — `send_by`, `note`, `note_automation`, `labels`, `last_messages`.
Script-level operations for labels, handoff, notes, and conversation history.
# What Zapier triggers and actions does Whatsable expose?
Source: https://docs.whatsable.app/guides/notifyer-system/zapier-fields
Every Whatsable Zapier trigger and action field: New Incoming or Outgoing WhatsApp Message, Send, Schedule Follow-Up, Update a Contact, and Get Delivery Status.
This page is the **field dictionary** for the Whatsable app on Zapier — every unlocked trigger and action input/output you can map in a Zap. Use it when you already know you want Zapier and need exact labels, types, and requiredness.
For connect steps, coexistence walkthrough, examples, and troubleshooting, use [Zapier overview](/guides/notifyer-system/zapier-overview).
## Prerequisites
* **Plan:** Zapier requires **Pro** or **Agency** (Bulk Message does not include integrations).
* **WhatsApp number:** Connected in Whatsable. Coexistence is supported — keep the WhatsApp Business app; phone replies can fire the trigger.
* **Zapier app:** Public listing **Whatsable**, slug [`whatsable-ca185063`](https://zapier.com/apps/whatsable-ca185063/integrations). Search **Whatsable** in the Zap editor.
* **API key:** From the Whatsable console API Keys page. In the Zap editor, set **Credential Type** to **Notifyer** and paste that key (core product key — not a Meta Graph token).
The marketplace app is **public**. A console “Connect to Zapier” deep link is onboarding only — it does not mean the app is invite-only.
***
## At a glance
| Kind | Exact name in Zapier |
| - | - |
| Trigger (instant) | **New Incoming or Outgoing WhatsApp Message** |
| Action | **Send WhatsApp Message** |
| Action | **Schedule a Follow-Up Message** |
| Action | **Update a Contact** |
| Action | **Get Delivery Status of a Message** |
***
## Trigger: New Incoming or Outgoing WhatsApp Message
**Type:** Instant · **App:** Whatsable · Internal key: `whatsable_message_trigger`
Fires when you receive or send a WhatsApp message. You can act on incoming only, outgoing only, or both by filtering after the trigger. Outgoing events include replies typed in the WhatsApp Business app, the Whatsable inbox, and automations.
### Configure inputs
Select **Notifyer**.
Leave as default unless you have a specific mapping need.
### Output fields — contact identity
The contact’s phone number (for example `14155550187`). May arrive as a number rather than a string.
Unique internal ID for this contact (UUID).
Display name for this contact in Whatsable.
Comma-separated labels on the conversation (for example `Hot Lead, Buyer Qualified`).
### Output fields — message data
Documented values: `text`, `audio`, `image`, or `document`.
`true` when the contact sent a message to your business; `false` when your business sent a message to the contact.
On outgoing messages: `"WhatsApp App"` (phone app), a teammate’s name (inbox), or an automation/app name. Empty on incoming messages.
`true` when a person sent the message (phone app or inbox); `false` when a bot or automation sent it.
Public URL of any attached file, or empty when there is none.
`true` when this event is a scheduled delivery; `false` for real-time messages.
Present when the inbound message came from a Click-to-WhatsApp ad or post. Typically on the **first** inbound after the tap; later messages usually omit it. Nested keys:
| Key | Meaning |
| - | - |
| `source_type` | `"ad"` or `"post"` |
| `source_id` | Ad or post ID |
| `source_url` | Where they tapped |
| `headline` / `body` | Ad copy |
| `media_type` | `"image"` or `"video"` |
| `image_url` / `video_url` | Creative URLs |
| `ctwa_clid` | Click ID for Meta Conversions API |
Persist `ctwa_clid` and `source_id` as soon as you see them. See also [Incoming message — Click-to-WhatsApp ads](/guides/notifyer-system/api/incoming-message#click-to-whatsapp-ads).
### Output fields — conversation history
JSON string of recent messages (about the last 20). Each item includes `type` (`user` / `bot`), `content`, `timestamp`, and `content_type`. Parse before iterating.
The most recent message from the contact.
The most recent message your business sent (human or automation).
Unix timestamp (milliseconds) of the contact’s last message.
Unix timestamp (milliseconds) of your business’s last message to this contact.
Flat, readable conversation history — useful for LLM prompts without parsing `last_messages`.
### Output fields — AI context and automation
AI context note stored on this contact. Update it with **Update a Contact**.
Automation instructions for the AI based on conversation events.
Description of messages currently scheduled to this contact.
Use a Zapier Filter on `incoming_message`, `send_by`, and `was_message_by_human` to split incoming vs outgoing and human phone-app replies vs automations.
***
## Action: Send WhatsApp Message
**App:** Whatsable · Internal key: `send_whatsapp_message`
Sends a WhatsApp message using the official WhatsApp API. You can add labels and write notes that appear in Whatsable’s chat interface. Choose **Configuration**: template (start a conversation / proactive) or non-template (inside the customer service window).
### Mode A — Send WhatsApp Template (to start conversation)
Recipient in international format — digits only, no `+` or spaces (for example `14155550187`).
Select from your approved templates. The dropdown shows a live preview of body, language, and category.
One field per template variable (`{{1}}`, `{{2}}`, …). Required when the template has variables.
Public URL for a media header (image, video, or document). Only when the selected template has a media header.
Full URL including the dynamic portion, when the template has a dynamic URL button.
AI context about this contact. Stored on the contact — **not** sent to the recipient.
Labels to apply to this conversation.
### Mode B — Non-template message (person must write to you first)
Only inside Meta’s customer service window after the contact’s last inbound message. Outside that window, use an approved template.
Same digit format as Phone Number above.
**Text Message**, **Image Message**, **Video Message**, **Document Message**, or **Audio Message**. Nested fields:
| Message Type | Nested fields |
| - | - |
| Text Message | **Message Content** (text, required); **Enable Link Preview** (boolean, optional, default false) |
| Image Message | **Image URL** (url, required); **Caption** (text, optional) |
| Video Message | **Video URL** (url, required); **Caption** (text, optional) |
| Document Message | **Document URL** (url, required); **Caption** (text, optional); **Filename** (text, required) |
| Audio Message | **Audio URL** (url, required) |
Labels to apply to this conversation.
AI context note for this contact.
Testing this action sends a **real** WhatsApp message. Use a personal test number during setup.
***
## Action: Schedule a Follow-Up Message
**App:** Whatsable · Internal key: `schedule_follow_up_message`
Schedules a WhatsApp message for later, with optional reply and label conditions so it can cancel or skip when the lead is already engaged.
Message fields are the same as **Send WhatsApp Message** (template or non-template, including phone, template/variables or message type, Note, and labels), **plus** the schedule and condition fields below.
### When to send — Relative (delay from now)
Choose only: **1, 2, 3, 4, 5, 10, 15, 20, 30, 60, 90, or 120**.
**Minutes**, **Hours**, or **Days**.
### When to send — Specific date and time
Exact send time — map from a previous step or enter a fixed value.
Timezone for the scheduled time (global list in the Zap editor).
### Reply Condition
Optional but recommended. Cancels the scheduled send if the contact replies within the chosen rule.
| Condition label |
| - |
| Recipient did not reply after my last message *(recommended default)* |
| Recipient never replied to any of my messages |
| Recipient did not reply within 20 minutes |
| Recipient did not reply within 45 minutes |
| Recipient did not reply within 3 hours |
| Recipient did not reply within 6 hours |
| Recipient did not reply within 12 hours |
| Recipient did not reply within 24 hours |
| Recipient did not reply within 48 hours |
| Recipient did not reply within 72 hours |
### Label condition (optional)
**Include** — only send if the contact has this label at send time. **Does Not Include** — only send if they do not.
Label evaluated when the scheduled send time arrives.
This is **not** a native drip builder inside Whatsable. Day-0 / day-3 / day-6 sequences are multiple Zap steps (or Paths) that each schedule one message. Whatsable sends each scheduled message; the sequence logic lives in Zapier.
***
## Action: Update a Contact
**App:** Whatsable · Internal key: `update_contact`
Updates a contact in Whatsable — display name, AI note, and labels. The Zapier action description also states you can **assign the conversation to a teammate**.
### Documented fields
Lookup key in international digit format. Creates a contact if none exists yet.
Display name in the Whatsable chat interface.
AI context note for this contact (name, email, preferences, language, and so on).
Labels to add. Whatsable conversation labels are the source of truth inside Whatsable.
Labels to remove. **Remove All** clears every label on this contact.
**Assign a teammate:** Update a Contact can assign the conversation to a teammate (Zapier action description + Zapier / Make / API). Documented fields on this page today are Phone Number, Display Name, Add a Note, and Add/Remove Label Names or IDs. Confirm any assignee control in your live Zap editor sample — do not rely on an undocumented field name. Operator how-to: [Chat assignment](/guides/notifyer-system/chat-assignment) and [Team inbox](/guides/notifyer-system/team-inbox).
***
## Action: Get Delivery Status of a Message
**App:** Whatsable · Internal key: `get_message_delivery_status`
Checks whether a previously sent WhatsApp message was delivered — useful for fallback paths (for example email) when a number may be wrong or inactive.
Map from the output of a prior **Send WhatsApp Message** or **Schedule a Follow-Up Message** step (`message_id` in Zapier’s data mapper).
Use the returned **status** in a Zapier Filter or Paths step to branch delivered vs not-delivered flows (for example send a fallback email).
If a lookup fails in Zap History, re-check the mapped Message ID and contact support if needed. Do not assume every Message ID always resolves in every environment.
***
## Limits and what this does NOT do
**No native drip builder.** Multi-day sequences use Zapier (or Make / n8n) schedule steps plus reply conditions — not a built-in drip product inside Whatsable.
**No CRM ↔ Whatsable bidirectional label mirror.** Add/Remove labels update Whatsable conversation labels. They do not sync Monday/Pipedrive (or other) CRM tags as one shared store.
**Coexistence:** Do **not** uninstall the WhatsApp Business app to “enable” API or Zapier. Keep using the phone; those replies can still start Zaps.
* **Bulk Message** plan: no Zapier / integrations — upgrade to Pro or Agency.
* **Non-template** sends only inside the customer service window after the contact’s last inbound; otherwise use a template.
* **Phone format:** digits only, full international, no `+`, spaces, or dashes.
* **Group messaging** via Zapier is **not** documented on this fields page (not an unlocked Official API docs surface here).
* Do not invent trigger `message_type` values beyond `text`, `audio`, `image`, and `document`.
* Typing-indicator dots are not a documented Whatsable automation claim.
***
## Related features and next steps
Connect, coexistence, examples, troubleshooting
Shared inbox and human replies alongside automations
Assign chats via Zapier, Make, API, keywords, or AI
Webhook payload and Click-to-WhatsApp referral object
Also: [Make overview](/guides/notifyer-system/make-overview) · [n8n overview](/guides/notifyer-system/n8n-overview) · [Plans](/guides/notifyer-system/plans-bulk-message-pro-agency).
***
## FAQ
### Does the Zapier trigger fire when someone replies in the WhatsApp Business app?
Yes, when coexistence is enabled and outgoing events are included. Filter on `incoming_message`, `send_by` (for example `"WhatsApp App"`), and `was_message_by_human`.
### Can I build day-0 / day-3 / day-6 WhatsApp drips with Whatsable and Zapier?
Yes, by chaining **Schedule a Follow-Up Message** steps (and reply conditions) in Zapier. Whatsable is not a native drip builder — the sequence logic lives in Zapier.
### Does Bulk Message include Zapier?
No. Zapier and other integrations require **Pro** or **Agency**.
### Which fields does Update a Contact document today?
**Phone Number**, **Display Name**, **Add a Note**, **Add Label Names or IDs**, and **Remove Label Names or IDs**. Assigning a teammate is supported as a product capability via Zapier; confirm the live editor for any assignee control rather than inventing a field name.
# Zapier
Source: https://docs.whatsable.app/guides/notifyer-system/zapier-overview
Notifyer System triggers and actions in Zapier — incoming and outgoing WhatsApp messages, including replies typed in the WhatsApp Business app. Coexistence is supported; you do not delete the app on your phone.
# Notifyer System Integration with Zapier
This guide covers every trigger and action available for the Notifyer System inside Zapier — so you can build fully automated WhatsApp workflows that send messages, schedule follow-ups, update contacts, and react to incoming **and outgoing** messages in real time.
**Meta WhatsApp Coexistence is supported on Notifyer System.** You do **not** need to delete the WhatsApp Business app or stop using the number on your phone. After Embedded Signup, the same number works in the WhatsApp Business app, the Notifyer chat inbox, and automations (Make, Zapier, n8n, API, and webhooks) at the same time.
## Available triggers & actions at a glance
The Notifyer System connects to Zapier through the **Whatsable** app. Once connected with your Notifyer API key, you get access to the following:
* New Incoming or Outgoing WhatsApp Message
* Send WhatsApp Message
* Schedule a Follow-Up Message
* Update a Contact
* Get Delivery Status of a Message
All triggers and actions in this guide use the **Whatsable** app on Zapier. Notifyer System users connect using their **Notifyer API key**.
***
## Prerequisites
Before getting started, make sure you have:
Active Notifyer System account with a subscription plan (Monthly or Pay-as-you-go) and a connected WhatsApp number
Access to [Zapier](https://zapier.com/sign-up/) workflow automation platform
New to Notifyer System? [Sign up here](https://console.notifyer-systems.com/)
***
## Setting up your Notifyer System account
Before sending WhatsApp messages, complete the [embedding process](/guides/notifyer-system/embedding-process), which connects your WhatsApp Business account to Notifyer System. You do **not** need to delete the WhatsApp Business app — [coexistence](/guides/notifyer-system/embedding-process#whatsapp-coexistence) is supported.
The embedding process is required by Meta to ensure proper business verification and compliance with WhatsApp Business Platform policies.
WhatsApp templates are pre-approved message formats required to initiate a new conversation with a contact. Create and get them approved in Notifyer before using them in Zapier.
Go to **Your Templates** in your Notifyer dashboard
Click the **Create Template** tab at the top of the page
Choose a descriptive name for internal reference
Choose your template's primary language
Select the appropriate message category (Marketing, Utility, Authentication)
Optional: Add an image, document, or video header
Craft your message content. Use `{{1}}`, `{{2}}` placeholders for dynamic variables
Optional: Configure call-to-action or quick reply buttons
Click **Preview and Submit**
Templates are typically reviewed within 24 hours. Utility and Authentication templates have the highest approval rates.
1. In your Notifyer dashboard, navigate to [**API Keys**](https://console.notifyer-systems.com/api-key)
2. Copy your unique API key
3. Store it securely — you will need it when creating the Zapier connection
Never share your API key publicly or commit it to version control systems.
***
## Connect Notifyer System to Zapier
1. Log in to your Notifyer System dashboard
2. Navigate to **Connect to Zapier** in the side menu
3. Click **Continue** in the connection guide popup
4. Click **Accept & Build a Zap** on the invitation page
The **Whatsable** app is now available in your Zapier account. You can find it by searching "Whatsable" in any Zap editor.
1. Log in to your Zapier account at [zapier.com](https://zapier.com)
2. Click **+ Create** and select **Zaps** (or **New Zap**)
3. You are now in the Zap editor and ready to add your first step — follow the trigger or action setup guides in the [Step Reference](#step-reference) section below
***
## Step Reference
### Trigger
***
### New Incoming or Outgoing WhatsApp Message
**Type:** Instant Trigger | **App:** Whatsable | **Connection:** Notifyer API key
**Description in Zapier:** *"When you receive or send a WhatsApp message. You can choose to only trigger this when you send or receive a message, or both."*
Fires in real time whenever a WhatsApp message event occurs in your Notifyer console. You can configure it to fire on **incoming messages only**, **outgoing messages only**, or **both directions**. Outgoing events include messages **typed by hand in the WhatsApp Business app**, messages sent from the Notifyer chat inbox, and messages sent by automations. This is the entry point for AI chatbot workflows, lead qualification, CRM syncing, and any automation that must react when a teammate replies on their phone.
***
#### Setting up the trigger
1. In your Zap editor, click the **Trigger** step
2. Search for **Whatsable** in the app search bar
3. Select **Whatsable** from the results
4. Under **Trigger Event**, select **New Incoming or Outgoing WhatsApp Message**
5. Click **Continue**
1. In the **Account** section, click **Sign in to Whatsable**
2. A dialog will appear asking for your API key — paste your **Notifyer API key**
3. Click **Yes, Continue to Whatsable**
You only need to do this once. Once your account is connected, you can reuse it across all Whatsable steps in any of your Zaps.
Make sure you are pasting the Notifyer API key, not the WhatsApp API key. Your Notifyer API key is found at [console.notifyer-systems.com/api-key](https://console.notifyer-systems.com/api-key).
In the **Configure** section, you will see the following fields:
Select **Notifyer** — this tells the app you are authenticating with a Notifyer System API key
Choose how incoming trigger data is mapped to your Zap fields. Leave as default unless you have specific mapping requirements
Click **Continue** when done.
1. Click **Test trigger** — Zapier will attempt to fetch a recent message event from your Notifyer console
2. If a test record is found, Zapier displays a sample data payload showing all available output fields
3. Review the fields to confirm the data looks correct
If no test data appears, send a WhatsApp message to your connected number first, then click **Test trigger** again. Zapier needs at least one recent event to pull a sample.
Once the test passes, your trigger is configured. Click **Continue** to add your first action step.
***
#### Trigger output fields
When this trigger fires, your Zap receives the following data fields from Notifyer. You can map any of these fields into your action steps.
The phone number of the contact (e.g. `14155550187`). This is the contact who sent or received the message
Unique internal ID for this contact in Notifyer (UUID format)
The display name used for this contact in Notifyer
Comma-separated list of labels currently applied to this conversation (e.g. `Hot Lead, Buyer Qualified, Urgent`)
Type of the message: `text`, `audio`, `image`, or `document`
`true` when the contact sent a message to your business; `false` when your business sent a message to the contact. Use a **Filter** step after the trigger to act only on incoming or outgoing messages
Which system or person sent an outgoing message: `"WhatsApp App"` for the WhatsApp Business app, the teammate's name for the Notifyer chat inbox, or the automation/app name for Make, Zapier, n8n, or API. Empty on incoming messages
`true` when a person sent the message (phone app or Notifyer inbox). `false` when a bot or automation sent it
Public URL of any file attached to the message (image, document, audio). Empty if the message has no attachment
`true` if this trigger was fired by a scheduled message being delivered; `false` for real-time messages
Present when the inbound message came from a Click-to-WhatsApp ad or post. Includes `source_type`, `source_id`, `source_url` (platform), `headline`, `body`, `media_type`, creative URLs, and `ctwa_clid`. Omitted on ordinary chats and on most follow-up messages. See [Click-to-WhatsApp ads](/guides/notifyer-system/api/incoming-message#click-to-whatsapp-ads).
JSON array of recent messages in the conversation. Each item includes: `type` (user/bot), `content`, `timestamp`, `content_type`. Useful for passing full history to an AI model
The most recent message sent by the contact — the message that triggered this Zap run
The most recent message your business sent to this contact — helps prevent an AI from repeating the same response
Unix timestamp (milliseconds) of when the contact's last message was received
Unix timestamp (milliseconds) of when your business last messaged this contact
A flat, readable version of the full conversation history — ideal for passing directly into an AI/LLM prompt without needing to parse the `last_messages` JSON array
The AI context note stored on this contact in Notifyer. Contains lead details: name, email, preferences, background, language, etc. Set or update this using the **Update a Contact** action
Automation instructions for the AI — rules the AI follows automatically based on conversation events (e.g. "If budget confirmed and timeline under 6 months, notify the agent within 1 hour")
Description of any messages currently scheduled to be sent to this contact at a future time
Use the `incoming_message` field with a Zapier **Filter** step to split logic between incoming messages (contacts writing to you) and outgoing messages (your business sending). Use `send_by` and `was_message_by_human` to see whether the WhatsApp Business app, a named teammate, or an automation sent it.
## Incoming and outgoing WhatsApp messages
Notifyer delivers **both incoming and outgoing** messages to your webhook or automation trigger — including messages typed by hand in the **WhatsApp Business app** on your phone.
This is possible because Notifyer supports [Meta WhatsApp Coexistence](/guides/notifyer-system/embedding-process#whatsapp-coexistence). You keep using WhatsApp Business on your phone; those hand-typed replies still reach an external webhook and can start an automation. They are not limited to the Notifyer web inbox.
The payload is the same whether you use [n8n](/guides/notifyer-system/n8n-overview), [Make](/guides/notifyer-system/make-overview), [Zapier](/guides/notifyer-system/zapier-overview), or a [custom webhook](/guides/notifyer-system/api/incoming-message). [Watch the walkthrough on YouTube](https://www.youtube.com/watch?v=UfW-KwS4gBI).
### Direction, sending system, and team member
Use these three fields to tell *what happened* and *who sent it*:
`true` when a contact sent a message **to** your business. `false` when your business sent a message **to** the contact (outgoing). Filter on this field to run logic only for one direction.
Which system or person sent an **outgoing** message:
| `send_by` value | Meaning |
| - | - |
| `WhatsApp App` | Typed by hand in the WhatsApp Business app on a phone |
| A team member's name (for example `Axel Meta`) | Sent from the Notifyer chat inbox by that logged-in user |
| An automation or app name (Make, Zapier, n8n, API, bot) | Sent by that integration or bot |
Empty or omitted on incoming messages.
`true` when a person sent the message (WhatsApp Business app or Notifyer chat inbox). `false` when a bot or automation sent it. Combine with `send_by` to see both *whether* a human sent it and *which teammate or system* did.
### Example payload: message typed on the phone
This is the JSON Notifyer POSTs when someone types a reply in the WhatsApp Business app. `incoming_message` is `false`, `send_by` is `"WhatsApp App"`, and `was_message_by_human` is `true`.
```json theme={null}
{
"last_messages": "[{\"type\":\"bot\",\"content\":\"Hello n8n\",\"timestamp\":\"2026-08-15T12:24:47.000Z\",\"content_type\":\"text\"},{\"type\":\"user\",\"content\":\"hi\",\"timestamp\":\"2026-08-12T12:27:42.746Z\",\"content_type\":\"text\"}]",
"conversation_paragraph": "Bot (12:24:47 PM): Hello n8n ; User (12:27:42 PM): hi",
"phone_number": 14155552671,
"recipient_name": "Alex Martinez",
"user_id": "158c59e1-ea85-4d0b-b70c-65328ba67a8e",
"last_message_of_user": "hi",
"last_message_of_bot": "Hello n8n",
"message_type": "text",
"user_last_message_time": 1786722580,
"bot_last_message_time": 1786797014,
"attachment_url": null,
"note": "email: alex\nName: Alex",
"note_automation": "email: alex\nName: Alex",
"labels": "n8n, webhook-test",
"incoming_message": false,
"send_by": "WhatsApp App",
"was_message_by_human": true
}
```
`last_message_of_bot` is the last message **your business** sent — whether a human typed it in the WhatsApp Business app or the Notifyer inbox, or a bot/automation sent it. `last_messages` is a JSON **string** of the last \~20 messages (parse it before iterating). `phone_number` may arrive as a number rather than a string.
When the same person sends from the Notifyer chat inbox instead of the phone app, the payload is identical except:
```json theme={null}
{
"incoming_message": false,
"send_by": "Axel Meta",
"was_message_by_human": true
}
```
### Click-to-WhatsApp ad attribution
When a contact messages you after tapping a **Click-to-WhatsApp** ad (Facebook, Instagram, or WhatsApp Status), Meta includes a `referral` object on that inbound event. Notifyer forwards it in [webhook](/guides/notifyer-system/api/incoming-message#click-to-whatsapp-ads) and trigger data (n8n, Make, Zapier).
Use it to see **which ad, creative, and platform** produced the lead — then label the chat, route it, or send `ctwa_clid` back to Meta for campaign optimization.
`referral` is typically present on the **first inbound message** after the ad click. Later messages in the same conversation usually omit it. Persist `ctwa_clid` and `source_id` as soon as you see them.
| Field | What it tells you |
| - | - |
| `source_type` | `"ad"` for an ad, `"post"` for an organic post |
| `source_id` | Ad or post ID — use this to group leads by creative |
| `source_url` | Where they tapped (Instagram permalink, Facebook/ad URL) |
| `headline` / `body` | Ad copy the lead saw |
| `media_type` | `"image"` or `"video"` |
| `image_url` / `video_url` | Creative asset URL |
| `ctwa_clid` | Click ID for Meta Conversions API attribution |
```json theme={null}
{
"incoming_message": true,
"last_message_of_user": "Quiero información",
"referral": {
"source_type": "ad",
"source_id": "52540693396957",
"source_url": "https://www.instagram.com/p/DZiVBz7gAF9/",
"headline": "Expo Nissan",
"body": "Aprovechá la EXPONISSAN y llevate tu nuevo Nissan Kicks Play Sense MT.",
"media_type": "image",
"image_url": "https://scontent.xx.fbcdn.net/v/t45.1600-4/example.jpg",
"ctwa_clid": "AfhN-JKvx8HeFTmfB-Tu11zktQRJ-MNdMV1mwvDNxHnpYrGl-jVf3OEFhLva_MP41zYRe5ErUteWFn3v4gkkjzfIEVr9J_u8GAo3-o6DqShykM4Zsl14FcU5MyThsCoQ"
}
}
```
If your delivery includes the Cloud API envelope instead of a flattened Notifyer payload, the same object lives at `entry[].changes[].value.messages[].referral`. Full field reference and a complete example: [Message webhooks — Click-to-WhatsApp ads](/guides/notifyer-system/api/incoming-message#click-to-whatsapp-ads).
***
### Actions
Actions perform operations in Notifyer System — sending messages, scheduling follow-ups, updating contacts, and checking delivery status.
***
### Send WhatsApp Message
**Type:** Action | **App:** Whatsable | **Connection:** Notifyer API key
**Description in Zapier:** *"Send WhatsApp Messages using the official WhatsApp API. You can add labels to a WhatsApp conversation and also write notes about the lead that will appear in Whatsable's chat interface."*
Send a WhatsApp message immediately to any phone number. Supports both **template messages** (to start a new conversation or send proactive outreach) and **non-template messages** (within an active 24-hour conversation window). Labels and notes set here appear directly in your Notifyer console — making this the core send action for all outbound WhatsApp automation.
***
#### Setting up the action
1. In your Zap editor, click **+** to add a new step (or click an existing action step)
2. Search for **Whatsable** in the app search bar and select it
3. Under **Action Event**, select **Send WhatsApp Message**
4. Click **Continue**
Select your connected Notifyer account from the dropdown, or click **Sign in to Whatsable** to add a new one using your Notifyer API key
In the **Configure** section, start by choosing your message type from the **Configuration** dropdown:
Use this to **initiate a new conversation** with a contact or send a proactive outreach message. Requires a Meta-approved WhatsApp template.
The recipient's phone number in international format — digits only, no `+` or spaces (e.g. `14155550187`). Map this from a previous trigger step or enter it directly
Select from your approved templates. The dropdown shows a live preview of each template's body, language, and category
If your template contains variables (`{{1}}`, `{{2}}`...), a separate field appears for each one. Map them to dynamic data from previous steps (e.g. `{{contact_name}}` from a form submission)
If your template has a media header (image, video, or document), enter the publicly accessible URL of that file. Only appears if your selected template includes a media header
If your template has a dynamic URL button, enter the full URL value including the dynamic portion
AI context about this contact (name, email, preferences, language, budget). This note is stored on the contact in Notifyer and the AI reads it to personalize future replies. It is not sent to the recipient
Labels to apply to this conversation for internal tracking and routing. Labels appear in your Notifyer console and can be used in scheduling conditions
Use this to send a message **within an active conversation** — only possible within 24 hours of the contact's last incoming message. Supports multiple message types.
The recipient's phone number in international format — digits only, no `+` or spaces (e.g. `14155550187`)
Choose what type of message to send:
The text content to send to the contact
Set to `true` to show a URL preview card when the message contains a link. Default: `false`
Publicly accessible URL of the image file (JPEG, PNG, etc.)
Optional caption text displayed below the image
Publicly accessible URL of the video file (MP4, etc.)
Optional caption text displayed below the video
Publicly accessible URL of the document file (PDF, DOCX, etc.)
Optional caption for the document
The filename to display to the recipient (e.g. `invoice-2026.pdf`)
Publicly accessible URL of the audio file (MP3, OGG, etc.)
Labels to apply to this conversation. Labels appear in your Notifyer console
AI context note for this contact — set or update the note that the AI reads to personalize future replies
1. Click **Continue** to proceed to the **Test** section
2. Click **Test step** — Zapier will attempt to send a real message using the configuration you set
3. Check your WhatsApp to confirm the message was received
4. If the test passes, click **Publish** to activate your Zap (or continue adding more steps first)
Testing this action sends a real WhatsApp message. Use a personal test number during setup to avoid sending unintended messages to real contacts.
***
### Schedule a Follow-Up Message
**Type:** Action | **App:** Whatsable | **Connection:** Notifyer API key
**Description in Zapier:** *"Schedule a follow-up to get sent later and add conditions so it only gets sent if the lead did not reply to you."*
Schedule a WhatsApp message to be sent at a **future time**, with an optional **reply condition** that automatically cancels the scheduled message if the recipient responds before it is sent. This is one of Notifyer's most powerful features — use it to build no-reply follow-up sequences, re-engagement drips, and smart nurture workflows that stop automatically when a lead engages.
***
#### Setting up the action
1. In your Zap editor, click **+** to add a new step
2. Search for **Whatsable** and select it
3. Under **Action Event**, select **Schedule a Follow-Up Message**
4. Click **Continue**
Select your connected Notifyer account, or add a new one with your Notifyer API key
In the **Configure** section, select either **Send WhatsApp Template** or **Send a non-template message** from the **Configuration** dropdown.
The message fields are identical to the **Send WhatsApp Message** action above — fill in the phone number, select your template (or message type), map any variables, and optionally set labels and a note.
Send the message after a set delay from the moment this Zap step runs:
Choose: 1, 2, 3, 4, 5, 10, 15, 20, 30, 60, 90, or 120
Choose: **Minutes**, **Hours**, or **Days**
Send the message at an exact date and time:
The exact date and time to send the message. Map this from a previous step (e.g. an appointment datetime from a calendar trigger) or enter a fixed value
The timezone for the scheduled time — select from the full global timezone list (GMT-11 through GMT+12)
The reply condition tells Notifyer to **automatically cancel the scheduled message** if the recipient replies within the specified timeframe — preventing follow-up messages from reaching contacts who are already engaged in a conversation with you.
| Condition | The message is cancelled if... |
| - | - |
| Recipient did not reply after my last message | The contact replies at any point before the scheduled send time |
| Recipient never replied to any of my messages | The contact has never replied to any of your messages |
| Recipient did not reply within 20 minutes | The contact replies within 20 minutes |
| Recipient did not reply within 45 minutes | The contact replies within 45 minutes |
| Recipient did not reply within 3 hours | The contact replies within 3 hours |
| Recipient did not reply within 6 hours | The contact replies within 6 hours |
| Recipient did not reply within 12 hours | The contact replies within 12 hours |
| Recipient did not reply within 24 hours | The contact replies within 24 hours |
| Recipient did not reply within 48 hours | The contact replies within 48 hours |
| Recipient did not reply within 72 hours | The contact replies within 72 hours |
**"Recipient did not reply after my last message"** is the recommended default for most follow-up sequences — it ensures that no follow-up is sent to contacts who are already in an active conversation with you. This protects your WhatsApp account reputation and keeps communication natural.
Restrict the scheduled message so it only sends if the contact has — or does not have — a specific label at the time of sending:
**Include** — only send the message if the contact currently has this label\
**Does Not Include** — only send the message if the contact does NOT have this label
The label to evaluate when the scheduled send time arrives
Click **Continue**, then **Test step** to confirm the follow-up is queued in Notifyer. You can view all pending scheduled messages in your Notifyer console under the contact's conversation.
Scheduled messages are visible in your Notifyer console under each contact's conversation. You can manually cancel any scheduled message there at any time.
***
### Update a Contact
**Type:** Action | **App:** Whatsable | **Connection:** Notifyer API key
**Description in Zapier:** *"Assign conversation to someone in your team, Add information in the notes, add/remove labels. Simply put the phone number and what information you want to change. This appears in the chat interface of our system."*
Update a contact's details in your Notifyer console — set their display name, add or remove conversation labels, or update the AI context note. Use this to keep Notifyer contacts in sync with your CRM, form submissions, or any other external data source.
***
#### Setting up the action
1. In your Zap editor, click **+** to add a new step
2. Search for **Whatsable** and select it
3. Under **Action Event**, select **Update a Contact**
4. Click **Continue**
Select your connected Notifyer account, or add a new one with your Notifyer API key
The phone number of the contact to update, in international format — digits only, no `+` or spaces (e.g. `14155550187`). This is used to look up the contact in your Notifyer console. If the contact does not yet exist, a new record will be created
Update the display name shown for this contact in the Notifyer chat interface
Set or update the AI context note for this contact. The AI reads this field to personalize its responses and qualify leads more accurately. A well-structured note dramatically improves AI conversation quality.
**Recommended note format:**
```
email: john@example.com | Name: John Smith
Looking for: 3BR house, $500k budget, north suburbs
Pre-approved: Yes | Language: English
Best time to contact: evenings after 6pm
```
One or more labels to **add** to this contact. Labels appear in the Notifyer console and can be used in scheduling conditions and routing rules
One or more labels to **remove** from this contact. Select **Remove All** to clear every label from this contact at once
Click **Continue**, then **Test step** to confirm the contact is updated in your Notifyer console. Open the contact in your Notifyer dashboard to verify the name, labels, and note appear correctly.
Place **Update a Contact** as the **first action step** in your Zap — before **Send WhatsApp Message** — to populate the AI Note from form or CRM data. This ensures the AI has full context about the lead before the very first message is sent.
***
### Get Delivery Status of a Message
**Type:** Action | **App:** Whatsable | **Connection:** Notifyer API key
**Description in Zapier:** *"Check if the message was delivered or not. Use this if you're not sure the number is correct and want to check if it was delivered and want to send a fallback email."*
Check whether a previously sent WhatsApp message was successfully delivered to the recipient. Use this to build fallback automation — if a message was not delivered (for example, because the phone number is incorrect or inactive), automatically trigger an alternative action such as sending a fallback email.
***
#### Setting up the action
1. In your Zap editor, click **+** to add a new step **after** a Send WhatsApp Message or Schedule a Follow-Up Message action
2. Search for **Whatsable** and select it
3. Under **Action Event**, select **Get Delivery Status of a Message**
4. Click **Continue**
Select your connected Notifyer account, or add a new one with your Notifyer API key
The ID of the message to check. This is returned in the output data of the **Send WhatsApp Message** or **Schedule a Follow-Up Message** action that ran earlier in the same Zap. Map it from that step's output using Zapier's data mapper
Click **Continue** when done.
Click **Test step**. Zapier will call Notifyer and return the delivery status of that message.
Use the returned status field in a **Filter** step immediately after this action to create two paths:
* **Delivered** → continue your main workflow
* **Not Delivered** → send a fallback email via Gmail, Outlook, or another email app
Add a Zapier **Filter** or **Paths** step after **Get Delivery Status** to branch your Zap: route successfully delivered messages down one path and undelivered messages down another where you send a fallback email or alert.
***
## Building a complete Zap: step-by-step example
Here is a practical end-to-end example: **New lead from a form → AI context set → Template message sent → Conditional follow-up scheduled**
Start with a **Google Forms**, **Typeform**, or **Jotform** trigger that fires instantly when someone fills in your lead capture form
Add **Whatsable — Update a Contact**. Map form fields into the Note field:
```
email: {{email}} | Name: {{name}} | Budget: {{budget}} | Language: {{language}}
```
Add relevant labels: `New Lead`, `Form Submission`
This gives the AI complete context before any conversation starts.
Add **Whatsable — Send WhatsApp Message** set to the template configuration. Select your approved welcome template, then map the recipient's phone number and any template variables from the form data
Add **Whatsable — Schedule a Follow-Up Message**. Configure:
* Message: a follow-up template (e.g. `Hi {{1}}, just checking in...`)
* Schedule: **24 Hours** (Relative delay)
* Reply condition: **Recipient did not reply after my last message**
This follow-up cancels automatically if the lead responds to your first message.
1. Click **Test** on each step to verify all steps show a success result
2. Click **Publish** to save your Zap
3. Toggle the **On/Off** switch to **On** to activate it
***
## Example use cases
Trigger on incoming messages, pass `conversation_paragraph` and `note` to OpenAI, then send the AI's reply back via Send WhatsApp Message
Schedule a series of follow-ups with reply conditions — they cancel automatically when the lead engages so you never over-message
When a deal stage changes in HubSpot or Pipedrive, use Update a Contact to update the AI note, then send a relevant WhatsApp template
When a form is submitted, instantly set AI context via Update a Contact, then send a personalized onboarding template message
Use Get Delivery Status after sending a message — if undelivered, route to a fallback email via Gmail or Outlook
Trigger on every incoming or outgoing message and log the conversation data to a Google Sheet, Airtable, or your CRM in real time
***
## Best practices
Always use **Update a Contact** as the first action in new-lead Zaps — before **Send WhatsApp Message**. Setting the `note` field with structured lead data (name, email, preferences, language, budget) dramatically improves AI conversation quality and lead qualification accuracy.
Set a reply condition on every **Schedule a Follow-Up Message** action. "Recipient did not reply after my last message" is the safest choice — it ensures no follow-up is sent to contacts who are already in an active conversation. This also protects your WhatsApp account reputation.
Both **Send WhatsApp Message** and **Update a Contact** let you attach labels to conversations. Use labels to tag contacts (e.g. `Hot Lead`, `Form Submission`, `Appointment Set`) — they appear in your Notifyer console and can be used in label conditions for scheduling.
When building AI chatbot Zaps, map the `conversation_paragraph` trigger field to your OpenAI or Claude prompt. It is a pre-formatted, readable version of the full conversation — much simpler to include in a prompt than parsing the raw `last_messages` JSON array.
The trigger fires on both incoming and outgoing messages by default. Add a Zapier **Filter** step immediately after the trigger and filter by `incoming_message = true` if you only want your Zap to react when a contact writes to you, or `incoming_message = false` to react only when your business sends a message (including replies typed in the WhatsApp Business app). Use `send_by` to distinguish `"WhatsApp App"`, a teammate name, and automations.
When `referral` is present, store `source_id`, `source_url`, `headline`, and `ctwa_clid` on the contact immediately. Later messages in the same chat usually omit `referral`. Use `source_url` to see Instagram vs Facebook, and `source_id` to compare creatives.
Always provide phone numbers in full international format — digits only, no `+`, spaces, or dashes (e.g. `14155550187` for US, `447911123456` for UK, `966501234567` for Saudi Arabia).
***
## Troubleshooting
The trigger only fires when the Zap is toggled **On**. Go to your Zap's overview page and confirm the On/Off switch is set to **On**
Open the trigger step in your Zap editor, go to the **Account** section, and confirm your Whatsable connected account shows no errors. If it does, disconnect and reconnect with your Notifyer API key
Zapier's **Test trigger** button requires at least one recent event in your Notifyer console. Send a WhatsApp message to your connected number — or type a reply in the WhatsApp Business app — and then re-test. You do not need to delete the WhatsApp Business app.
If messages appear in your Notifyer console but the trigger still does not fire, contact support — there may be a webhook configuration issue
Verify your Notifyer API key is valid and the correct connected account is selected in the action step
Phone number must be digits only in full international format, no `+` or spaces (e.g. `14155550187`)
Ensure the selected template has **Approved** status in your Notifyer dashboard. Pending or rejected templates will cause an error
Non-template messages can only be sent within 24 hours of the contact's last incoming message. Outside this window you must use an approved template
Verify your Notifyer subscription is active and has sufficient message credits
All body variable fields (Body 1, Body 2, etc.) are required — confirm none are empty or mapped to fields that return empty values
The template dropdown in the action configuration shows a preview of the body text and example values — use this as a reference to understand what each variable slot expects
If your template has a media header, the URL must be publicly accessible. Test it by opening it in an incognito browser window
If you set a reply condition and the contact replied before the scheduled send time, the message was intentionally cancelled. Check the contact's conversation in your Notifyer console
Confirm the delay value and unit are correct (e.g. `24` + `Hours`, not `24` + `Minutes`)
In Zapier, go to **Zap History** and find the run where the Schedule a Follow-Up Message step executed. Confirm the step shows a success status at the time the trigger fired
The phone number must exactly match the contact's number in Notifyer (same international format). If no contact with that number exists, Notifyer will create a new record
The **Update a Contact** action requires the Notifyer connection (the one authenticated with your Notifyer API key). Confirm the correct connected account is selected in the action step
The Message ID field must be mapped from the output of a **Send WhatsApp Message** or **Schedule a Follow-Up Message** step in the same Zap. Make sure you are mapping the `message_id` field from the correct preceding action step
Delivery status may take a few seconds to update after a message is sent. If checking status immediately after sending, consider adding a short delay using Zapier's **Delay** action before the Get Delivery Status step
***
## Need help?
Contact [team@whatsable.app](mailto:team@whatsable.app)
Book a personalized walkthrough
Click the green chat button in the bottom right corner of the Notifyer System dashboard
# What are Whatsable and Meta messaging rate limits?
Source: https://docs.whatsable.app/guides/rate-limits
Meta WhatsApp MPS (80 default; 20 on Coexistence), messaging caps outside the 24h window, error 130429, and that Whatsable’s API RPM is still unpublished.
WhatsApp throughput and messaging caps are set by **Meta**, not by a Whatsable plan slider. This page covers Meta **messages-per-second (MPS)** limits, the lower Coexistence MPS cap, Meta **messaging limits** outside the 24-hour customer-service window, and what Whatsable does **not** publish as a numeric API rate (RPM).
If you need how to connect a number, start with [Connect WhatsApp (Embedded Signup + Coexistence)](/guides/whatsable/connect-whatsapp-coexistence). For plan gates and unique-contact billing, see [plans Bulk Message / Pro / Agency](/guides/notifyer-system/plans-bulk-message-pro-agency).
***
## Two different Meta limits
Do not mix these up:
| Limit type | What it controls | Who enforces it |
| - | - | - |
| **Throughput (MPS)** | How fast a business phone number can send/receive messages on Cloud API | Meta (per phone number) |
| **Messaging limits** | How many **unique** WhatsApp users you can message **outside** a customer-service window in a rolling 24 hours | Meta (portfolio / business capability) |
Whatsable sits on Meta Cloud API. Hitting either limit shows up as Meta errors or undelivered business-initiated traffic — not as a Whatsable “upgrade your RPM” control in the console.
***
## Meta throughput (messages per second)
Cite Meta’s [Throughput](https://developers.facebook.com/documentation/business-messaging/whatsapp/throughput) documentation for the live numbers. As of Meta’s published Throughput page (updated **2026-06-17**):
| Phone-number situation | Meta MPS (throughput) |
| - | - |
| Default Cloud API number | Up to **80** messages per second |
| Automatic upgrade (eligibility met) | Up to **1,000** messages per second |
| **Coexistence** (WhatsApp Business app + Cloud API on the same number) | Fixed **20** messages per second |
Meta notes that throughput counts **inbound and outbound** traffic and all message types. Numbers remain subject to WhatsApp Business Account rate limits and template messaging limits even after a throughput upgrade.
**Exceeding throughput:** Meta returns Cloud API error **`130429`** (“Cloud API message throughput has been reached”) until you are back under the allowed level. Match on `code` and `error_data.details`, not on titles — see [WhatsApp Cloud API error 130429](/whatsapp-error-130429).
**Higher throughput:** Meta can auto-upgrade a number to 1,000 MPS when the portfolio has an unlimited messaging limit, the number messages enough unique users outside the service window in a rolling day, and quality is Medium (yellow) or higher. Eligibility and exact checks live on Meta’s Throughput page — Whatsable does not sell or flip that upgrade.
***
## Coexistence throughput (20 MPS)
Most Whatsable customers keep the **WhatsApp Business app** on the phone while using Cloud API (**Coexistence**). Meta fixes Coexistence numbers at **20 MPS** so the app and API stay compatible. That cap is a **Meta-side** constraint.
Whatsable notes that match this page:
* Coexistence throughput is **Meta’s**, not a Whatsable product limit you can raise in Settings.
* Do **not** uninstall the WhatsApp Business app after connect — that breaks Coexistence.
* Unofficial (non-Meta) API tools on that number stop once Coexistence is on.
Operator connect guide: [Connect WhatsApp Business to Whatsable](/guides/whatsable/connect-whatsapp-coexistence). Outbound when humans type in the Business app: [Outbound WhatsApp Business app](/guides/notifyer-system/api/outbound-whatsapp-app).
***
## Meta messaging limits (unique recipients / day)
Separate from MPS: Meta caps how many **unique** customer numbers a business can message **outside** the customer-service window in a moving 24-hour period. Inside the window (the customer messaged you recently), free-form replies are not gated by that unique-recipient messaging-limit ladder.
Exact tier values and scaling rules change on Meta’s side. Treat [Meta Messaging Limits](https://developers.facebook.com/docs/whatsapp/messaging-limits/) and WhatsApp Manager as the live source — do not hard-code a Whatsable “daily RPM.”
Operator notes (not a substitute for Meta’s page):
* Outside the 24-hour window, only **approved templates** start business-initiated conversations.
* Unverified Meta Business Portfolios start with a low daily unique-recipient cap; verified portfolios scale through Meta’s messaging-limit tiers up to unlimited.
* Customer replies that open or refresh the service window are not “using up” that business-initiated unique-recipient ladder the same way.
This rate-limits page only separates **messaging limits** from **MPS** so you do not mix them into one invented number.
***
## Whatsable API rate limits (RPM)
**Unpublished / unknown.** Whatsable does **not** currently publish a numeric requests-per-minute (RPM) figure for its own HTTP APIs in customer docs.
* Do **not** invent a Whatsable RPM, “generous rate limit,” or plan-based API quota.
* Use the **Meta MPS**, **Coexistence**, and **messaging limits** sections on this page.
* If a send fails with Meta throughput details, treat it as Meta `130429` / Throughput — not as a missing Whatsable RPM table.
***
## Pair rate and burst behavior (Meta)
Meta also applies **pair** rate limits when you send too many messages to the **same** WhatsApp user too quickly (separate from phone-number MPS). Meta documents this on Cloud API overview / error materials (for example throttling around error **`131056`**). Campaigns that spray many different recipients are what MPS is sized for; hammering one user is a different Meta pair limit.
Whatsable does not override Meta pair limits.
***
## Operator checklist when sends slow or fail
1. **Read the error `code` and `details`.** Throughput → [130429](/whatsapp-error-130429). Do not match deprecated titles alone.
2. **Check Coexistence.** If the number still uses the WhatsApp Business app, Meta MPS is **20**, not the default 80 / 1000 ladder.
3. **Separate MPS from messaging limits.** A green throughput number can still fail business-initiated templates if Meta messaging limits / quality / cold outreach rules apply.
4. **Warm gradually on cold lists** (especially US). Meta may withhold delivery for healthy-ecosystem reasons — related codes live under Whatsable’s Meta error pages (for example [131049](/whatsapp-error-131049)).
5. **Do not uninstall** the Business app to “raise” throughput. That breaks Coexistence; Meta’s Coexistence MPS cap remains the documented path for dual-app numbers.
***
## What this page does not claim
* No invented **Whatsable numeric RPM** or plan-based API quota.
* No marketing comparisons to other BSPs.
* No typing-indicator / “dots” product claims.
* No native drip builder (sequences stay in Make / Zapier / n8n).
* No rate-dashboard UI that is not present in your console.
* Exact Meta messaging-limit tier integers are **not** copied here as everlasting Whatsable facts — use Meta’s Messaging Limits page and WhatsApp Manager.
***
## FAQ
### Does Whatsable raise Meta’s 20 MPS Coexistence limit?
No. Coexistence MPS is fixed by Meta for app + API numbers. Whatsable does not control or raise it.
### Where do plan unique-contact limits fit?
Those are **Whatsable billing** (unique contacts / overage), not Meta MPS. See [plans Bulk Message / Pro / Agency](/guides/notifyer-system/plans-bulk-message-pro-agency); money stays on [pricing](https://whatsable.app/pricing).
***
Embedded Signup, keep the Business app, Meta-side throughput honesty.
Match code + details when Cloud API MPS is exceeded.
Human replies typed in the WhatsApp Business app on Coexistence.
Meta’s live MPS, Coexistence 20 MPS, and upgrade eligibility.
# Webhooks
Source: https://docs.whatsable.app/guides/webhooks
Receive real-time notifications for message status and incoming messages via webhooks.
# Webhooks
Webhooks allow you to receive real-time notifications about message status and incoming messages.
## Overview
Webhooks provide a way for our system to send data to your application in real-time whenever:
* A message status changes
* A recipient replies to your message
* A new message is received
## Setting Up Webhooks
1. Go to your Whatsable dashboard
2. Navigate to Developer Settings
3. Click "Add Webhook"
4. Enter your webhook URL
5. Select the events you want to receive
## Webhook Events
### Message Status Events
```json theme={null}
{
"event": "message_status",
"data": {
"message_id": "wamid.123456789",
"status": "delivered",
"timestamp": "2024-03-23T21:41:44.477Z"
}
}
```
### Incoming Message Events
```json theme={null}
{
"event": "incoming_message",
"data": {
"last_messages": "[{\"type\":\"user\",\"content\":\"Hello!\",\"timestamp\":\"2024-03-23T21:41:44.477Z\",\"content_type\":\"text\"}]",
"conversation_paragraph": "User (9:41:44 PM): Hello!",
"phone_number": "8801734363287",
"recipient_name": "John Doe",
"user_id": "6fb11ff2-d9b2-4560-8437-0fe58ec9f4a6",
"last_message_of_user": "Hello!",
"last_message_of_bot": "Hi there!",
"message_type": "text",
"user_timestamp": 1234567890,
"bot_timestamp": 1234567890,
"attachment_url": "https://api.insightssystem.com/vault/attachment.jpg"
}
}
```
## Webhook Security
1. **HTTPS Required**: All webhook endpoints must be accessible via HTTPS
2. **Authentication**: Verify webhook signatures
3. **IP Whitelisting**: Configure allowed IP addresses
4. **Rate Limiting**: Handle multiple events efficiently
## Best Practices
1. **Idempotency**: Handle duplicate events gracefully
2. **Error Handling**: Return appropriate HTTP status codes
3. **Logging**: Log all incoming webhook events
4. **Monitoring**: Set up alerts for webhook failures
5. **Testing**: Use the webhook testing tool in dashboard
## Example Webhook Handler
```javascript theme={null}
const express = require('express');
const app = express();
app.post('/webhook', express.json(), (req, res) => {
const { event, data } = req.body;
switch (event) {
case 'message_status':
handleMessageStatus(data);
break;
case 'incoming_message':
handleIncomingMessage(data);
break;
default:
console.log('Unknown event type:', event);
}
res.status(200).send('OK');
});
function handleMessageStatus(data) {
console.log('Message status update:', data);
// Process message status
}
function handleIncomingMessage(data) {
console.log('Incoming message:', data);
// Process incoming message
}
app.listen(3000, () => {
console.log('Webhook server running on port 3000');
});
```
# Whatsable API
Source: https://docs.whatsable.app/guides/whatsable/api-documentation
Send programmatic WhatsApp messages with the Whatsable API
# Whatsable API
> Send programmatic WhatsApp messages with ease
## Overview
Whatsable API enables developers to programmatically send WhatsApp messages with rich media support. Our RESTful API delivers enterprise-grade reliability while maintaining a simple integration process. Whether you're building a customer support platform, marketing automation system, or notification service, Whatsable API gives you the tools to engage your users on WhatsApp.
Send your first WhatsApp message in under 5 minutes
Complete API endpoints and parameters documentation
Send images, videos, documents, and more
Use templates for structured messages
## Key Features
Send WhatsApp messages with text, images, videos, documents, and audio files.
Use pre-defined templates for structured messages, enabling you to send consistent communications.
Seamlessly integrate with platforms like Zapier and Make.com without writing code.
Send messages to thousands of recipients with high deliverability and reliability.
## Getting Started
Sign up for a [Whatsable account](https://dashboard.whatsable.app/register) and activate your subscription or start a free trial.
You'll need a WhatsApp-enabled phone number to send messages from your account.
Navigate to the API section in your Whatsable dashboard and generate an API key.
Keep your API key secure and never share it publicly. It grants full access to send messages from your account.
Use the examples below to send your first WhatsApp message programmatically.
## API Reference
### Base URL
```bash Base URL theme={null}
https://dashboard.whatsable.app/api/whatsapp/messages/v2.0.0
```
```bash Legacy URL (v1) theme={null}
https://dashboard.whatsable.app/api/whatsapp/messages
```
### Authentication
All API requests require authentication using your API key in the request header:
Your Whatsable API key
```bash Example theme={null}
curl -X POST https://dashboard.whatsable.app/api/whatsapp/messages/v2.0.0/send \
-H 'Authorization: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"to": "+1234567890",
"text": "Hello from WhatsAble!"
}'
```
### Send Message Endpoint
Endpoint to send WhatsApp messages
#### Request Parameters
The recipient's phone number in E.164 format (e.g., +1234567890)
The message content you want to send
URL or base64-encoded file for attachments (images, videos, PDFs)
Name of the file when sending a document attachment
#### Response
Indicates if the message was sent successfully (true)
A human-readable message describing the result
Unique identifier for the message (e.g., wamid.XXXXXX)
Status of the message (e.g., "accepted")
```bash cURL theme={null}
curl -X POST https://dashboard.whatsable.app/api/whatsapp/messages/v2.0.0/send \
-H 'Authorization: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"to": "+1234567890",
"text": "Hello, this is a test message from WhatsAble!",
"attachment": "https://example.com/image.jpg",
"filename": "image.jpg"
}'
```
```json Success Response theme={null}
{
"success": true,
"message": "Message sent successfully to +1234567890",
"details": {
"messages": [
{
"id": "wamid.XXXXXX",
"message_status": "accepted"
}
]
}
}
```
### Error Codes
```json theme={null}
{
"success": false,
"message": "Invalid phone number format",
"details": "Phone number must be in E.164 format."
}
```
Ensure phone numbers are in E.164 format (e.g., +1234567890) with country code.
```json theme={null}
{
"success": false,
"message": "API key is required"
}
```
Make sure you're including the API key in the Authorization header.
```json theme={null}
{
"success": false,
"message": "Invalid API Key"
}
```
Verify your API key is correct and active in your Whatsable dashboard.
```json theme={null}
{
"success": false,
"message": "The number +1234567890 is not registered."
}
```
The recipient's number must be registered with WhatsApp to receive messages.
## Code Examples
```javascript JavaScript (Fetch) theme={null}
const sendWhatsAppMessage = async () => {
const apiKey = 'YOUR_API_KEY';
const endpoint = 'https://dashboard.whatsable.app/api/whatsapp/messages/v2.0.0/send';
const payload = {
to: '+1234567890',
text: 'Hello, this is a test message from WhatsAble!',
attachment: 'https://example.com/image.jpg',
filename: 'image.jpg'
};
try {
const response = await fetch(endpoint, {
method: 'POST',
headers: {
'Authorization': apiKey,
'Content-Type': 'application/json'
},
body: JSON.stringify(payload)
});
const data = await response.json();
console.log('Message sent:', data);
return data;
} catch (error) {
console.error('Error sending message:', error);
throw error;
}
};
sendWhatsAppMessage();
```
```python Python theme={null}
import requests
import json
def send_whatsapp_message():
api_key = 'YOUR_API_KEY'
endpoint = 'https://dashboard.whatsable.app/api/whatsapp/messages/v2.0.0/send'
payload = {
'to': '+1234567890',
'text': 'Hello, this is a test message from WhatsAble!',
'attachment': 'https://example.com/image.jpg',
'filename': 'image.jpg'
}
headers = {
'Authorization': api_key,
'Content-Type': 'application/json'
}
try:
response = requests.post(endpoint, headers=headers, data=json.dumps(payload))
data = response.json()
print('Message sent:', data)
return data
except Exception as e:
print('Error sending message:', str(e))
raise e
send_whatsapp_message()
```
```php PHP theme={null}
'+1234567890',
'text' => 'Hello, this is a test message from WhatsAble!',
'attachment' => 'https://example.com/image.jpg',
'filename' => 'image.jpg'
];
$headers = [
'Authorization: ' . $apiKey,
'Content-Type: application/json'
];
$ch = curl_init($endpoint);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
if ($error) {
echo 'Error sending message: ' . $error;
return false;
}
$data = json_decode($response, true);
echo 'Message sent: ' . print_r($data, true);
return $data;
}
sendWhatsAppMessage();
```
## Supported Media Types
Whatsable API supports a wide range of media types for sending rich messages via WhatsApp.
.jpeg, .jpg
image/jpeg
5MB
8-bit, RGB or RGBA
.png
image/png
5MB
8-bit, RGB or RGBA
```javascript Send Image Example theme={null}
const payload = {
to: '+1234567890',
text: 'Check out this image!',
attachment: 'https://example.com/image.jpg',
filename: 'image.jpg'
};
```
.mp4
video/mp4
16MB
H.264 video, AAC audio
.3gp
video/3gpp
16MB
H.264 video, AAC audio
.pdf
application/pdf
100MB
.doc, .docx
application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document
100MB
.xls, .xlsx
application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
100MB
.ppt, .pptx
application/vnd.ms-powerpoint, application/vnd.openxmlformats-officedocument.presentationml.presentation
100MB
.txt
text/plain
100MB
.mp3
audio/mpeg
16MB
.aac
audio/aac
16MB
.ogg
audio/ogg
16MB
OPUS only
.amr
audio/amr
16MB
.m4a
audio/mp4
16MB
.webp
image/webp
100KB
.webp
image/webp
500KB
## Template-Based Messaging
Whatsable intelligently selects the appropriate template based on the message content and attachment type.
Whatsable automatically selects the appropriate template based on your content:
* **Text-only messages**: Uses templates like `standard_1_line_textonly`, `standard_2_line_textonly`, etc.
* **Image attachments**: Uses templates like `standard_image_notification_1_lines`, `standard_image_notification_2_lines`, etc.
* **Video attachments**: Uses templates like `standard_video_notification_1_lines`, `standard_video_notification_2_lines`, etc.
* **Document attachments**: Uses templates like `standard_doc_message_1_line`, `standard_doc_message_2_lines`, etc.
Template messaging ensures your messages maintain consistent formatting and follow WhatsApp guidelines.
## Rate Limits and Best Practices
Whatsable enforces rate limits to ensure reliable message delivery. Standard accounts are limited to 50 messages per minute, while enterprise accounts have customizable limits.
Exceeding rate limits may result in temporary API access restrictions.
Always implement proper error handling to manage failed message deliveries gracefully:
```javascript theme={null}
try {
const response = await sendWhatsAppMessage();
if (!response.success) {
// Handle specific error based on response message
console.error('Message sending failed:', response.message);
}
} catch (error) {
// Handle network or server errors
console.error('API request failed:', error);
}
```
Compress images and videos before sending to improve delivery speed and reliability:
* Resize images to appropriate dimensions for WhatsApp (1080px max width recommended)
* Compress videos to reduce file size while maintaining quality
* Use CDN-hosted media when possible rather than base64 encoding
## FAQ
No, Whatsable is not affiliated with or endorsed by WhatsApp Inc. Whatsable uses the WhatsApp Business API to provide its services.
Yes, according to WhatsApp's policy, recipients must explicitly opt in to receive messages from businesses. Ensure you have proper consent before sending messages.
Currently, the Whatsable API provides message acceptance status in the response. Real-time delivery and read receipts are planned for a future release.
Yes, but you need to send individual API requests for each recipient. Bulk messaging functionality with a single API call is available for enterprise customers.
## Support
Click the green chat button in the bottom right corner of the Whatsable dashboard
Contact our team at [team@whatsable.app](mailto:team@whatsable.app)
Our support team is available Monday through Friday, 9 AM to 6 PM UTC. Enterprise customers receive 24/7 support access.
## Updates
### What's New
* **Improved Media Handling**: Support for larger file sizes and more media types
* **Enhanced Error Reporting**: More detailed error messages and status codes
* **Better Reliability**: Automatic retry mechanism for failed message delivery
* **Performance Improvements**: 50% faster message delivery times
### What's New
* Added support for sticker messages
* Improved template selection algorithm
* Fixed issues with document attachments
For a complete changelog, visit the [Whatsable Release Notes](https://dashboard.whatsable.app/changelog) page.
API v1 is scheduled for deprecation on December 31, 2023. Please upgrade to v2.0.0 before this date.
# Connect WhatsApp Business to Whatsable (Embedded Signup + Coexistence)
Source: https://docs.whatsable.app/guides/whatsable/connect-whatsapp-coexistence
Connect your WhatsApp Business number to Whatsable with Meta Embedded Signup. Keep the WhatsApp Business app on your phone. Meta Coexistence keeps both working on the same number.
# Connect WhatsApp Business to Whatsable (Embedded Signup + Coexistence)
Keep the WhatsApp Business app on your phone and add Whatsable on the same number. Meta calls this **Coexistence**. This guide covers what Coexistence actually means, what to check before you start Embedded Signup, the signup flow at a high level, and what changes (and what doesn't) once you're connected.
## What Coexistence means
Meta Coexistence lets one WhatsApp number run in two places at the same time: the **WhatsApp Business app** on your phone, and **Whatsable** in the background.
* You keep the WhatsApp Business app installed and can keep using it. Connecting to Whatsable does not require removing it.
* Messages sync **both ways**. A reply typed on your phone reaches Whatsable, and a message sent from Whatsable reaches your phone.
* At the QR / Coexistence step, you'll get the option to **share chat history**. Meta may label it **"From last 6 months"**. Choosing it can bring roughly the **last 6 months** of your **1:1** chats into Whatsable (about 180 days), per Meta's own docs.
* **Groups**, **Status**, and **Calls** stay on the WhatsApp Business app. They are **not** synced to Whatsable, no matter what you choose at the chat history step.
* If you skip sharing chat history, that's fine too. Only new messages sync from that point forward.
Do not uninstall the WhatsApp Business app after you connect. Coexistence depends on the app staying installed on that number.
## Before you start
A **Meta Business Portfolio**. Embedded Signup requires a Business Portfolio, not a personal Facebook profile. You can create one during the flow, but having one ready first is faster. For the website field, a business website is fine, but an Instagram or Facebook page URL also works if you don't have one yet.
A phone number with **some recent activity** on it. A brand-new, never-used number may fail Coexistence. The number should also already be registered on the **WhatsApp Business app** (not the consumer WhatsApp app).
Confirm your number's country isn't restricted. See [country restrictions](#country-restrictions) below.
### Country restrictions
Meta doesn't support new WhatsApp Business Platform connections from **Iran, Cuba, North Korea, Syria**, and **some regions of Ukraine**. If your number is registered in one of these, an existing number can't connect. You'd need a different number outside those restrictions.
### If you're already using an unofficial WhatsApp tool on this number
Turning on Coexistence replaces whatever **unofficial (non-Meta) API tool** was running on that number. Once Coexistence is active, those unofficial tools stop working on it. That's expected.
### Pricing
The phone number itself is **free**. Meta doesn't charge for it. What you pay for is your Whatsable plan; Whatsable passes Meta's conversation costs through at **0% markup**. See [pricing](https://whatsable.app/pricing) for current plans.
## Embedded Signup, at a high level
From your Whatsable account, start the Connect WhatsApp flow.
Meta's Embedded Signup opens. Log in with the Facebook account tied to your Meta Business Portfolio.
Select the Meta Business Portfolio this number belongs to, or create one if you don't have one yet.
Choose an existing WhatsApp Business Account, or let Meta create a new one.
Enter the number you want to connect. If Meta detects that number is already active in the WhatsApp Business app, it offers Coexistence instead of a fresh registration.
Confirm you want to keep the number in the WhatsApp Business app. When asked about your chat history, choose to **share chat history** (Meta may show this as **"From last 6 months"**). That brings roughly the last 6 months of your 1:1 chats into Whatsable. Groups, Status, and Calls stay on the WhatsApp Business app either way. Skipping this step just means only new messages sync from here on.
Complete any remaining verification Meta asks for (business verification, payment method) and wait for confirmation.
Embedded Signup runs inside your Whatsable account. Technical footnote: the underlying console lives at `notifyer.whatsable.app`. You may see that domain during signup; it's Whatsable, not a separate product.
## After you connect
* If your Meta Business Portfolio is already verified, expect to be able to send your first message in about **20 minutes**.
* Both sides stay live: keep replying from the WhatsApp Business app, and send and receive through Whatsable at the same time.
* Any unofficial API tool that used to run on this number stops working once Coexistence turns on.
* Phone replies typed in the WhatsApp Business app still reach your automations. See [Phone replies in the WhatsApp Business app still hit your webhook](/guides/notifyer-system/api/outbound-whatsapp-app).
## Limits & honesty
* **Throughput is set by Meta, not Whatsable.** Meta enforces a messages-per-second limit on the Cloud API side for every connected number. Whatsable doesn't control or raise this limit. It's the same one any Cloud API number gets from Meta.
* **Country restrictions are Meta's, not Whatsable's.** Numbers registered in Iran, Cuba, North Korea, Syria, or some regions of Ukraine can't complete Embedded Signup today.
* **Each number connects on its own.** Coexistence, and the connection itself, apply per number. There is no cross-number setup step in this guide.
## Troubleshoot
Run Embedded Signup again from Whatsable, using the same number. That clears it most of the time. If it's still stuck after a second attempt, [contact support](mailto:team@whatsable.app).
Messages like *"temporarily prevented..."* or a generic *"An error occurred. Please try again."* don't say what actually went wrong. To see more detail, go to `business.facebook.com`, open **Settings** (bottom left), then **WhatsApp**, and check your **WhatsApp Accounts**. Click the small white arrow next to **Add** (not the Add button itself), then choose **Add WhatsApp Business App**. That path on Meta's side usually surfaces the real error Embedded Signup was hiding, often a Business Portfolio mismatch or a partner lock (see the two items below). It doesn't always spell out which portfolio is the problem, so you may still need to check your portfolios by hand.
If the Instagram or Facebook page tied to your account belongs to a different Meta Business Portfolio than the one you're using for WhatsApp, Embedded Signup can fail without a clear reason. Connect using the Business Portfolio that actually owns that page, or move the page into the right portfolio first.
If this number was previously set up through another Meta Business Partner (BSP), that partner link can block Embedded Signup. Go to `business.facebook.com`, then **Settings**, then **WhatsApp**, then the **Partners** tab. Remove the partner tied to this number and wait a few minutes before retrying. While you're there, also confirm you're using the right Business Portfolio and that Business verification isn't the actual holdup.
Confirm the number is registered on the WhatsApp Business app (not the consumer WhatsApp app) and has some recent activity. A brand-new number sometimes needs a day or two of normal use before Meta offers Coexistence.
Wait 24 hours and try again with the same number, or try the other verification method (SMS vs. call). Don't uninstall the WhatsApp Business app while you retry.
Meta doesn't support new WhatsApp Business Platform connections from Iran, Cuba, North Korea, Syria, or some regions of Ukraine. [Contact support](mailto:team@whatsable.app) to talk through options.
A full reset touches your Meta Business Portfolio and WhatsApp Business Account configuration. [Contact support](mailto:team@whatsable.app) rather than trying to undo it yourself.
## Related
Coexistence means WhatsApp Business app replies keep flowing to your automation. See the exact fields to filter on.
The phone number is free. See current Whatsable plans.
Create a Whatsable account and start Connect WhatsApp.
Our support team can help with Embedded Signup, Coexistence, and connection issues.
# Whatsable Features
Source: https://docs.whatsable.app/guides/whatsable/features
Explore the key features of Whatsable
# Whatsable Features
Whatsable provides a simple yet powerful set of features for WhatsApp messaging.
## Core Features
### Message Types
* Text messages
* Media messages (images, documents, audio)
* Location sharing
* Contact sharing
### Message Management
* Message status tracking
* Delivery receipts
* Read receipts
* Message history
### Security
* End-to-end encryption
* API key authentication
* Rate limiting
* IP whitelisting
## Advanced Features
### Bulk Messaging
* Send to multiple recipients
* Custom variables
* Scheduling
* Message templates
### Integration
* REST API
* Webhooks
* SDK support
* Third-party integrations
## Best Practices
* Keep messages concise
* Respect rate limits
* Handle errors gracefully
* Monitor message status
## Next Steps
* Learn about [Integrations](/guides/whatsable/integrations)
* Check out our [API Reference](/api-reference/whatsable)
* Read our [Getting Started](/guides/whatsable/getting-started) guide
# Getting Started with Whatsable
Source: https://docs.whatsable.app/guides/whatsable/getting-started
Learn how to get started with Whatsable, the simple WhatsApp messaging solution
# Getting Started with Whatsable
Whatsable is the simplest way to send WhatsApp messages programmatically. This guide will help you get started with Whatsable in minutes.
## Prerequisites
* A WhatsApp account
* Basic understanding of API integration
* Your Whatsable API key
## Quick Setup
1. Sign up for a Whatsable account
2. Get your API key from the dashboard
3. Start sending messages using our simple API
## First Message
Here's a quick example of sending your first message:
```bash theme={null}
curl -X POST https://dashboard.whatsable.app/api/whatsapp/messages/v2.0.0/send \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "+1234567890",
"message": "Hello from WhatsAble!"
}'
```
## Next Steps
* Learn about [Features](/guides/whatsable/features)
* Explore [Integrations](/guides/whatsable/integrations)
* Check out our [API Reference](/api-reference/whatsable)
# Whatsable Integrations
Source: https://docs.whatsable.app/guides/whatsable/integrations
Learn how to integrate Whatsable with your applications
# Whatsable Integrations
Integrate Whatsable with your favorite tools and platforms.
## Available Integrations
### No-Code Platforms
* Zapier
* Make (formerly Integromat)
* n8n
* Pipedream
### CRM Systems
* Salesforce
* HubSpot
* Zoho CRM
* Pipedrive
### E-commerce Platforms
* Shopify
* WooCommerce
* Magento
* BigCommerce
## Custom Integration
### REST API
```javascript theme={null}
const axios = require('axios');
const sendMessage = async (to, message) => {
try {
const response = await axios.post(
'https://dashboard.whatsable.app/api/whatsapp/messages/v2.0.0/send',
{
to,
message
},
{
headers: {
'Authorization': `Bearer ${process.env.WHATSABLE_API_KEY}`,
'Content-Type': 'application/json'
}
}
);
return response.data;
} catch (error) {
console.error('Error sending message:', error);
throw error;
}
};
```
### Webhooks
Configure webhooks to receive real-time updates about your messages:
```json theme={null}
{
"event": "message.status",
"data": {
"message_id": "msg_123",
"status": "delivered",
"timestamp": "2024-03-20T10:00:00Z"
}
}
```
## Best Practices
* Use environment variables for API keys
* Implement retry logic
* Handle rate limits
* Monitor webhook delivery
## Next Steps
* Read our [Getting Started](/guides/whatsable/getting-started) guide
* Explore [Features](/guides/whatsable/features)
* Check out our [API Reference](/api-reference/whatsable)
# Make
Source: https://docs.whatsable.app/guides/whatsable/make
Learn how to automate WhatsApp messaging through Make with Whatsable
# Whatsable Integration with Make
This page is the **Whatsable Bot** integration (messages to Whatsable's number). If you need your **own WhatsApp Business number**, including Meta WhatsApp Coexistence (keep the WhatsApp Business app) and webhooks for **outgoing** messages typed on the phone (`incoming_message`, `send_by`, `was_message_by_human`), use [Notifyer System with Make](/guides/notifyer-system/make-overview).
## Prerequisites
Before getting started, make sure you have:
An active subscription with Whatsable
Access to [Make](https://www.make.com/en/register/) scenario automation platform
New to Whatsable? [Sign up here](https://dashboard.whatsable.app/signin)
## Get started with Whatsable
To use the Whatsable API, you'll need an active subscription:
1. Log in to your Whatsable dashboard
2. Click the **Subscribe** button
3. Start your 7-day free trial
During your trial, you can add unlimited phone numbers to test the service. After the trial period, pricing is \$8.99 per month per phone number.
For Whatsable to send messages through your WhatsApp account:
1. In your Whatsable dashboard, navigate to **Verified Numbers**
2. Click **Add New Number**
3. Enter your phone number (with country code)
4. You'll receive a WhatsApp verification code
5. Enter the verification code in the Whatsable dashboard
**Multiple numbers?** You only need to complete the verification process for your first phone number. For additional numbers, simply add them and save—no verification required.
To connect Whatsable with Make, you'll need your API key:
1. In your Whatsable dashboard, go to **API Keys**
2. Copy your unique API key
3. Store it securely—you'll need it for the integration
Never share your API key publicly or commit it to version control systems.
## Connect Whatsable to Make
Now that you have Whatsable set up, let's connect it to Make to automate your scenarios.
1. Log in to your Make account
2. Create a new scenario by clicking **+ Create a new scenario**
3. (Optional) Add a trigger module of your choice:
* Popular triggers include Google Forms, Jotform, ClickUp, or a Schedule trigger
* Connect and configure your trigger according to your use case
1. Click the **+** button to add a new module
2. Search for "Whatsable Message" in the apps or modules library
3. Select the app with the official Whatsable logo
1. Once you click on Whatsable module, select **Send a WhatsApp Message** from the **ACTIONS** list
2. Click **Create a connection** in the **Connection** section of Whatsable module and you will be prompted to enter your API Key
3. Enter your Whatsable API key that you copied earlier
4. Rename your connection name if needed
5. Click **Save** to store your credential
Complete the required fields:
Select the recipient's phone number (In **Your verified WhatsApp number exactly as listed in the dashboard** dropdown, you'll see all phone numbers added in your Whatsable dashboard's **Verified Numbers** menu.)
Type your message text or use variables from previous steps
Enter publicly accessible media URL for Attachment (image/video/document)
Ensure your attachment URLs is publicly accessible and match the supported file formats.
Specify a custom filename for your attachment
1. Click **Save** to save your message configuration
2. Right click on the Whatsable module and select **Run this module only** to verify the module is working correctly
* or click **Run once** in the bottom-left corner of the screen to test the entire scenario
3. If the test is successful, you'll see a confirmation message
4. Click **Save** icon in the bottom-left corner to save your scenario (You can also set timer intarval for the scenario)
5. Toggle the **Active** switch in the bottom-left corner with time to activate your scenario
## Example use cases
Send a welcome message when a new customer signs up
Update customers when their order status changes
Automatically send reminders before scheduled appointments
Send personalized messages to new leads from your form submissions
Notify customers when their support ticket status changes
## Scenario Diagram
```mermaid theme={null}
flowchart LR
A[Trigger Module] --> B[Data Transformation]
B --> C[WhatsAble Module]
C --> D{Message Sent?}
D -->|Yes| E[Success Path]
D -->|No| F[Error Handling]
E --> G[Additional Actions]
F --> H[Retry Logic]
```
## Troubleshooting
Verify that your Whatsable account is active.
Check that your phone number is properly verified.
Ensure your API key is entered correctly in Make.
Confirm that the recipient's phone number is in the correct format (including country code).
Check that the file size is under 16 MB.
Verify the file type is supported by WhatsApp.
Ensure the file path or URL is accessible.
## Need help?
Our support team is ready to assist you:
Contact [team@whatsable.app](mailto:team@whatsable.app)
Book a personalized walkthrough
Click the chat button in the bottom right corner of the Whatsable dashboard
For additional automation platform integrations (Zapier, n8n, etc.), please contact our support team or check our integration documentation.
# n8n
Source: https://docs.whatsable.app/guides/whatsable/n8n
Learn how to automate WhatsApp messaging through n8n with Whatsable
# Whatsable Integration with n8n
This page is the **Whatsable Bot** integration (messages to Whatsable's number). If you need your **own WhatsApp Business number**, including Meta WhatsApp Coexistence (keep the WhatsApp Business app) and webhooks for **outgoing** messages typed on the phone (`incoming_message`, `send_by`, `was_message_by_human`), use [Notifyer System with n8n](/guides/notifyer-system/n8n-overview).
## Prerequisites
Before getting started, make sure you have:
An active subscription with Whatsable
Access to [n8n](https://app.n8n.cloud/login) workflow automation platform
New to Whatsable? [Sign up here](https://dashboard.whatsable.app/signin)
## Get started with Whatsable
To use the Whatsable API, you'll need an active subscription:
1. Log in to your Whatsable dashboard
2. Click the **Subscribe** button
3. Start your 7-day free trial
During your trial, you can add unlimited phone numbers to test the service. After the trial period, pricing is \$8.99 per month per phone number.
For Whatsable to send messages through your WhatsApp account:
1. In your Whatsable dashboard, navigate to **Verified Numbers**
2. Click **Add New Number**
3. Enter your phone number (with country code)
4. You'll receive a WhatsApp verification code
5. Enter the verification code in the Whatsable dashboard
**Multiple numbers?** You only need to complete the verification process for your first phone number. For additional numbers, simply add them and save—no verification required.
To connect Whatsable with n8n, you'll need your API key:
1. In your Whatsable dashboard, go to **API Keys**
2. Copy your unique API key
3. Store it securely—you'll need it for the integration
Never share your API key publicly or commit it to version control systems.
## Connect Whatsable to n8n
Now that you have Whatsable set up, let's connect it to n8n to automate your workflows.
1. Log in to your n8n account
2. Create a new workflow by clicking **+ New Workflow**
3. Add a trigger node of your choice:
* Popular triggers include Google Forms, Jotform, ClickUp, or a Schedule trigger
* Connect and configure your trigger according to your use case
The Whatsable trigger node enables your workflow to respond automatically to incoming WhatsApp messages. This setup is optional but recommended for building reactive communication flows.
Follow these steps to add the Whatsable trigger node to your workflow:
1. Click the **+** button in your workflow canvas to add a new node
2. Search for "Whatsable" in the node library search bar
3. Select the node displaying the official Whatsable logo
4. From the available trigger options, choose **On new Incoming message event**
The trigger node will automatically listen for incoming messages and initiate your workflow when a new message is received.
Set up your Whatsable API credentials to establish a secure connection:
**Webhook URL Configuration:**
1. In the Whatsable Trigger node parameters, locate the **Webhook URLs** section at the top
2. Select **Production URL** and copy the generated URL by clicking on it
3. Store this URL securely as you'll need it for the credential setup
**Credential Creation:**
1. In the **Credential to connect with** dropdown, click **+ Create new credential**
2. Select **Whatsable Trigger API** as your connection method
3. Enter your Whatsable API key in the **API Key** field
4. Paste the Production URL you copied earlier into the **Production URL** field
5. Assign a descriptive name to your credential (e.g., "Whatsable Production")
6. Click **Save** to securely store your credentials
Your API credentials are encrypted and stored securely. Never share your API key publicly or commit it to version control.
Complete the setup by testing and activating your trigger:
**Response Configuration:**
1. In the **Respond** dropdown, select your preferred response timing:
* **Immediately**: Responds as soon as the trigger fires
* **When Last Node Finishes**: Waits for the entire workflow to complete before responding
**Testing:**
1. Click **Execute step** on the Whatsable node to run a test
2. Verify the connection is working by checking for a success confirmation
3. Review any error messages if the test fails and adjust your configuration accordingly
Once activated, your workflow will automatically process incoming messages according to your configured logic.
Remember to test your workflow thoroughly before activating it in production to ensure it behaves as expected.
1. Click the **+** button to add a new node
2. Search for "Whatsable" in the node library
3. Select the node with the official Whatsable logo
4. After selecting the Whatsable node, choose 'Send message via whatsAble' from the available actions menu
**Credential Setup:**
1. In the Whatsable node settings, find the **Credential to connect with** dropdown
2. Select **+ Create new credential**
3. Enter your Whatsable API key that you copied earlier
4. Name your credential (e.g., "Whatsable Production")
5. Click **Save** to store your credential
1. In **Resource** dropdown, select **Send Message**
2. In the **Operation** dropdown, select **Send message via Whatsable**
3. Complete the required fields:
Select the recipient's phone number (with country code) previously added in Whatsable
Type your message text or use variables from previous nodes
Enter the URL of the file, image, or video you want to send with your message
Specify a custom filename for your attachment
1. Click **Test Step** on the Whatsable node to verify it's working correctly
2. If the test is successful, you'll see a confirmation message
3. Click **Done** to return to your workflow
4. Click **Save** to save your entire workflow
5. Toggle the **Active** switch in the top-right corner to activate your workflow
## Example use cases
Send a welcome message when a new customer signs up
Update customers when their order status changes
Automatically send reminders before scheduled appointments
Send personalized messages to new leads from your form submissions
Notify customers when their support ticket status changes
## Workflow Diagram
**Sample Whatsable n8n Workflow:**
```mermaid theme={null}
flowchart LR
A[Trigger Node] --> B[Data Transformation]
B --> C[WhatsAble Node]
C --> D{Message Sent?}
D -->|Yes| E[Success Path]
D -->|No| F[Error Handling]
E --> G[Additional Actions]
F --> H[Retry Logic]
```
## Troubleshooting
**Steps to resolve:**
1. **Verify Account Active:** Verify that your Whatsable account is active.
2. **Phone Number Verification:** Check that your phone number is properly verified.
3. **API Key in n8n:** Ensure your API key is entered correctly in n8n.
4. **Recipient Number Format:** Confirm that the recipient's phone number is in the correct format (including country code).
**Steps to resolve:**
1. **File Size Limit:** Check that the file size is under 16 MB.
2. **Supported File Type:** Verify the file type is supported by WhatsApp.
3. **Accessibility:** Ensure the file path or URL is accessible.
## Need help?
Our support team is ready to assist you:
Contact [team@whatsable.app](mailto:team@whatsable.app)
Book a personalized walkthrough
Click the chat button in the bottom right corner of the Whatsable dashboard
For additional automation platform integrations (Make.com, Zapier, etc.), please contact our support team or check our integration documentation.
# Webhooks
Source: https://docs.whatsable.app/guides/whatsable/webhooks
Receive real-time WhatsApp events. For Notifyer System (your own WhatsApp Business number), webhooks include outgoing messages typed in the WhatsApp Business app — coexistence is supported; you do not delete the app.
**This page is Whatsable Bot** (messages sent to Whatsable's number). The payload table below is incoming-only.
If you use **your own WhatsApp Business number** (Notifyer System): [Meta WhatsApp Coexistence](/guides/notifyer-system/embedding-process#whatsapp-coexistence) is supported — you do **not** delete the WhatsApp Business app. Webhooks fire for **incoming and outgoing** messages, including replies typed on the phone. Fields: `incoming_message`, `send_by` (`WhatsApp App` or teammate name), `was_message_by_human`. Full reference: [Message webhooks](/guides/notifyer-system/api/incoming-message).
Webhooks let your external server react to WhatsApp activity the moment it happens — no polling required. Register an HTTPS endpoint once and Whatsable pushes a JSON payload to it automatically.
***
## Whatsable Bot vs Notifier System
Before setting up a webhook, make sure you're using the right product for your use case.
| | **Whatsable Bot (this page)** | **Notifier System** |
| - | - | - |
| **How it works** | You (or a customer) sends a WhatsApp message **to Whatsable's number** → triggers your n8n / Make / Zapier scenario | You send WhatsApp messages **from your own WhatsApp Business number** to your leads or customers |
| **Best for** | Building AI agents, personal automation triggers, developer workflows | Customer outreach, marketing, CRM notifications |
| **Webhook direction** | Inbound — Whatsable calls your endpoint | Inbound and **outgoing** — including replies typed in the WhatsApp Business app |
If you want to **send** messages to leads or customers from your own WhatsApp Business number, use the [Notifier System](/guides/notifyer-system/embedding-process) instead. Notifyer supports [Meta WhatsApp Coexistence](/guides/notifyer-system/embedding-process#whatsapp-coexistence) — you do **not** delete the WhatsApp Business app. Outgoing events (phone app, team inbox, automations) are documented in [Message webhooks](/guides/notifyer-system/api/incoming-message), with `incoming_message`, `send_by`, and `was_message_by_human`.
***
## What are Webhooks?
A webhook is an HTTP endpoint you host that Whatsable calls every time a relevant event occurs in your account. Instead of repeatedly asking *"did anything happen?"*, your server receives a real-time `POST` request with the full event payload the instant the event fires.
Common things you can do with Whatsable webhooks:
* Trigger n8n, Make, or Zapier scenarios the moment someone messages your Whatsable bot number
* Build AI agents that react to WhatsApp messages in real time
* Pipe incoming customer messages into your CRM or support desk
* Log chat history to your own database
***
## The Webhooks Dashboard
Navigate to **Operations → Webhooks** (`/operations/webhook`) in your Whatsable dashboard to manage all your registered endpoints.
| Action | How |
| - | - |
| **Add a webhook** | Click **New Webhook** in the toolbar |
| **Search** | Type in the search bar to filter endpoints by URL |
| **Copy a URL** | Click the copy icon next to any endpoint URL |
| **Delete** | Open the ⋮ menu on any row → **Delete** — requires confirmation |
The **Active Webhooks** counter in the toolbar shows how many endpoints are currently registered in your account.
### Adding a new endpoint
Click **New Webhook** in the top toolbar of the Webhooks page.
Paste the full URL of your server endpoint into the **Endpoint URL** field.
The URL must begin with `http://` or `https://`. HTTPS is strongly recommended for production.
Click **Create Webhook**. Whatsable stores the endpoint and begins routing eligible events to it immediately.
### Deleting an endpoint
Use the search bar or scroll through the table to locate the endpoint you want to remove.
Click the ⋮ icon in the **Actions** column of that row.
Select **Delete** and confirm in the dialog that appears. Deletion is permanent and cannot be undone.
Deleting a webhook immediately stops all future event deliveries to that endpoint. Make sure nothing critical depends on the endpoint before removing it.
***
## Webhook Data Model
Every webhook you register is stored with the following fields.
Auto-incremented integer that uniquely identifies this webhook within your account. Use it to target specific webhooks in API operations.
The full endpoint URL Whatsable POSTs events to (e.g. `https://api.example.com/whatsapp/events`). Must be a valid HTTP or HTTPS URL.
UUID of the Whatsable account that owns this webhook. Set automatically at creation — you cannot assign a webhook to a different account.
ISO 8601 timestamp recording when the webhook was registered. Webhooks are returned in newest-first order by default.
***
## Incoming Webhook Payload
When an event fires, Whatsable sends an HTTP `POST` to your endpoint with a `Content-Type: application/json` body.
### Incoming message payload
```json Text Message theme={null}
{
"last_messages": [
{
"type": "user",
"content": "Can I reschedule my appointment for Thursday?",
"timestamp": "2025-06-09T22:08:11.990Z",
"content_type": "text"
},
{
"type": "bot",
"content": "Of course! Let me pull up available slots for you.",
"timestamp": "2025-06-09T21:45:30.417Z",
"content_type": "text"
}
],
"conversation_paragraph": "User (10:08:11 PM): Can I reschedule my appointment for Thursday? ; Bot (9:45:30 PM): Of course! Let me pull up available slots for you.",
"phone_number": "14155552671",
"recipient_name": "Alex Martinez",
"user_id": "9232fcef-a570-4a2c-b46b-6cab53aec304",
"last_message_of_user": "Can I reschedule my appointment for Thursday?",
"last_message_of_bot": "Of course! Let me pull up available slots for you.",
"message_type": "text",
"user_last_message_time": 1749506891,
"bot_last_message_time": 1749504330,
"attachment_url": null,
"note": "",
"note_automation": "",
"labels": "appointments, rescheduling"
}
```
```json Media Message (Document) theme={null}
{
"last_messages": [
{
"type": "user",
"content": "",
"timestamp": "2025-06-09T14:05:12.000Z",
"content_type": "document",
"media_url": "https://api.insightssystem.com/vault/contract_v2.pdf"
},
{
"type": "bot",
"content": "Please send the signed contract when ready.",
"timestamp": "2025-06-09T14:03:20.000Z",
"content_type": "text"
}
],
"conversation_paragraph": "User (2:05:12 PM): [Document] ; Bot (2:03:20 PM): Please send the signed contract when ready.",
"phone_number": "14155552671",
"recipient_name": "Alex Martinez",
"user_id": "9232fcef-a570-4a2c-b46b-6cab53aec304",
"last_message_of_user": "",
"last_message_of_bot": "Please send the signed contract when ready.",
"message_type": "document",
"user_last_message_time": 1749472312,
"bot_last_message_time": 1749472200,
"attachment_url": "https://api.insightssystem.com/vault/contract_v2.pdf",
"note": "",
"note_automation": "",
"labels": "contracts"
}
```
### Payload fields
Ordered array of recent messages in the conversation, newest last.
Sender of this message — `"user"` for the customer or `"bot"` for your Whatsable assistant.
Text body of the message. Empty string for media-only messages (image, video, document, audio).
ISO 8601 UTC timestamp of when this message was sent.
Media type of the message. One of: `text`, `image`, `audio`, `video`, `document`, `location`.
Temporary URL to the media file. Present only when `content_type` is not `text`. URLs expire after **24 hours** — download the file promptly if you need to retain it.
Human-readable plain-text transcript of the recent exchange. Useful for passing directly to an LLM or storing as a summary without parsing the full `last_messages` array.
The WhatsApp phone number of the customer who sent the message (digits only, no `+` prefix).
Display name of the customer as stored in their WhatsApp profile. May be empty if WhatsApp has not provided a name.
UUID of the Whatsable account that received this message. Matches the `user_id` stored on the webhook registration.
Text of the customer's most recent message. For image, video, and document messages this contains the **caption** if one was provided, otherwise an empty string.
Text of the last message your system sent to this customer.
Type of the **latest** message in the conversation. Same values as `content_type` above: `text`, `image`, `audio`, `video`, `document`, `location`.
Unix timestamp (seconds) of the customer's last message. Use this to calculate response latency or enforce time-based rules.
Unix timestamp (seconds) of your system's last reply to this customer.
URL to the media file if the **latest** message contains media. `null` for text-only messages. Same 24-hour expiry applies.
Free-form text note attached to the conversation. Set manually by agents in Notifyer Chat.
Automation-related notes written by internal workflows. Available for your server to read and act on.
Comma-separated list of labels assigned to the conversation (e.g. `"sales, premium-inquiry"`). Use these to route events to different handlers in your webhook server.
***
## Internal API Reference
The Whatsable dashboard manages webhooks through three authenticated internal endpoints. All requests require a valid **Bearer** token from the active session.
### List webhooks
```
GET /api/webhooks/get
```
Returns all webhooks registered by the authenticated user, sorted newest first.
**Authentication:** `Authorization: Bearer `
**Response:** Array of webhook objects.
```json theme={null}
[
{
"id": 42,
"created_at": "2025-06-01T10:22:33.000Z",
"webhook": "https://api.example.com/events",
"user_id": "6fb11ff2-d9b2-4560-8437-0fe58ec9f4a6"
}
]
```
***
### Create a webhook
```
POST /api/webhooks/create
```
Registers a new webhook endpoint.
**Authentication:** `Authorization: Bearer `
**Request body:**
Full HTTP or HTTPS URL of your endpoint. Must be a valid URL — invalid formats are rejected with a `400` error.
**Response:**
```json theme={null}
{
"data": {
"id": 43,
"created_at": "2025-06-09T12:00:00.000Z",
"webhook": "https://api.example.com/events",
"user_id": "6fb11ff2-d9b2-4560-8437-0fe58ec9f4a6"
}
}
```
**Error codes:**
| Status | Meaning |
| - | - |
| `400` | `webhook` field missing, empty, or not a valid URL |
| `401` | No valid session token provided |
| `500` | Database error — retry after a short delay |
***
### Delete a webhook
```
DELETE /api/webhooks/delete?id={id}
```
Permanently removes a webhook. The server verifies ownership before deleting — you cannot delete another account's webhooks.
**Authentication:** `Authorization: Bearer `
**Query parameter:**
| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | number | Yes | The `id` of the webhook to delete |
**Response:**
```json theme={null}
{ "success": true }
```
**Error codes:**
| Status | Meaning |
| - | - |
| `400` | `id` query parameter not provided |
| `401` | No valid session token |
| `403` | The webhook exists but belongs to a different account |
| `404` | No webhook found with the given `id` |
| `500` | Database error |
***
## Going to Production
When you're done testing and ready to go live, follow these steps to switch from your test webhook URL to your production endpoint.
**Do not edit your existing test credential.** Editing a credential that was used for testing can break the connection. Always create a new credential for production.
In your automation tool (n8n, Make, etc.), pin the sample payload you received during testing. This keeps the data structure available to configure downstream nodes even after you swap the endpoint.
In your automation platform, switch to the **Production** URL for your trigger node and copy it.
In Whatsable, go to **Operations → Webhooks** and click **New Webhook**. Paste the production URL and save.
In your automation tool, create a **new credential** (e.g. `WhatsAble Bot – Production`) rather than overwriting the test credential. Enter the production webhook URL and your API key, then save.
In your automation trigger node, switch the credential selection from the test credential to the new production one. Your workflow is now live.
Keep your test credential and test webhook intact — you'll want them next time you need to iterate or debug without touching the live flow.
***
## Endpoint Requirements
Your endpoint must respond with a `2xx` HTTP status code within **10 seconds**. Responses outside that window are treated as failures.
Your webhook server must:
1. Accept `HTTP POST` requests
2. Parse `application/json` request bodies
3. Respond with `200 OK` (or any `2xx`) promptly to acknowledge receipt
4. Be publicly reachable — `localhost` and private network addresses will not work
5. Use **HTTPS** in production environments
***
## Best Practices
Always verify webhook signatures and use HTTPS endpoints. HTTP may be acceptable for local development only. Whatsable shows a reminder banner on the webhook page: *"Always verify webhook signatures and use HTTPS endpoints for secure communication."*
Return `200 OK` immediately, then process the payload in a background job or queue. Long-running synchronous handlers risk timing out before the work is done.
Network retries can cause the same event to arrive more than once. Use the `user_last_message_time` + `phone_number` combination as an idempotency key to detect and skip duplicates.
`attachment_url` and `media_url` inside `last_messages` expire after **24 hours**. Download and store media files as soon as you receive the webhook — do not rely on the URL remaining valid later.
Use the `labels` field and `message_type` to dispatch events to different handlers. For example, route `"document"` types to a contract-processing queue and messages labelled `"support"` to your helpdesk integration.
Store the raw payload for every incoming event before processing it. Logs are invaluable for debugging and replaying missed events.
***
## Example Handler
```javascript Node.js / Express theme={null}
const express = require('express');
const app = express();
app.use(express.json());
app.post('/webhook', (req, res) => {
// Acknowledge immediately
res.status(200).send('OK');
// Process asynchronously
const payload = req.body;
const { phone_number, message_type, last_message_of_user, labels } = payload;
console.log(`New ${message_type} from ${phone_number}: "${last_message_of_user}"`);
if (message_type === 'document' || message_type === 'image') {
// Download media before the 24-hour URL expires
downloadMedia(payload.attachment_url);
}
if (labels?.includes('support')) {
forwardToHelpdesk(payload);
}
});
app.listen(3000);
```
***
## Troubleshooting
This is the **most common issue** when setting up the Whatsable bot trigger. When configuring the WhatsApp trigger node in n8n or Make, you must explicitly select **Incoming Messages** as the event type. The option can be easy to miss, especially if the interface has changed recently.
**What to check:**
1. Open the trigger node settings in your automation tool
2. Look for an event type or trigger type selector
3. Make sure **Incoming Messages** (or equivalent) is selected — not "All Events" or left blank
4. Save and re-activate the trigger
If it still doesn't fire after sending a test message, move on to the duplicate webhook check below.
Before spending more time debugging, open **Operations → Webhooks** in the Whatsable dashboard and check how many webhooks you have registered. It's easy to accumulate duplicate entries from previous test attempts. Multiple webhooks registered to different URLs (or stale test URLs) can cause unexpected behaviour.
**Fix:** Delete any old or duplicate webhook entries, keep only the one that matches your current trigger URL, then test again.
* Confirm the endpoint is publicly accessible (not `localhost` or behind a firewall)
* Check your server logs for incoming `POST` requests
* Verify the webhook is listed and saved correctly in the dashboard
* Ensure your server returns a `2xx` response — otherwise deliveries may be dropped
`attachment_url` and `media_url` values are temporary and expire within **24 hours** of generation. If you receive a 404, the file has expired. Download media immediately on receipt and store it in your own storage.
The `DELETE` endpoint enforces ownership checks. You can only delete webhooks that belong to the currently authenticated user. Make sure you are using the correct account session token.
Whatsable may redeliver events if your server did not respond with a `2xx` in time. Build idempotency into your handler using `phone_number` + `user_last_message_time` as a composite key.
***
## Next steps
Explore the full Whatsable REST API for sending messages, managing contacts, and more.
Connect Whatsable to Zapier, Make, n8n, and other automation platforms.
# Zapier
Source: https://docs.whatsable.app/guides/whatsable/zapier
Learn how to automate WhatsApp messaging through Zapier with Whatsable
# Whatsable Integration with Zapier
This page is the **Whatsable Bot** integration (messages to Whatsable's number). If you need your **own WhatsApp Business number**, including Meta WhatsApp Coexistence (keep the WhatsApp Business app) and webhooks for **outgoing** messages typed on the phone (`incoming_message`, `send_by`, `was_message_by_human`), use [Notifyer System with Zapier](/guides/notifyer-system/zapier-overview).
## Prerequisites
Before getting started, make sure you have:
An active subscription with Whatsable
Access to [Zapier](https://zapier.com/sign-up) workflow automation platform
New to Whatsable? [Sign up here](https://dashboard.whatsable.app/signin)
## Get started with Whatsable
To use the Whatsable API, you'll need an active subscription:
1. Log in to your Whatsable dashboard
2. Click the **Subscribe** button
3. Start your 7-day free trial
During your trial, you can add unlimited phone numbers to test the service. After the trial period, pricing is \$8.99 per month per phone number.
For Whatsable to send messages through your WhatsApp account:
1. In your Whatsable dashboard, navigate to **Verified Numbers**
2. Click **Add New Number**
3. Enter your phone number (with country code)
4. You'll receive a WhatsApp verification code
5. Enter the verification code in the Whatsable dashboard
**Multiple numbers?** You only need to complete the verification process for your first phone number. For additional numbers, simply add them and save—no verification required.
To connect Whatsable with Zapier, you'll need your API key:
1. In your Whatsable dashboard, go to **API Keys**
2. Copy your unique API key
3. Store it securely—you'll need it for the integration
Never share your API key publicly or commit it to version control systems.
## Connect Whatsable to Zapier
Now that you have Whatsable set up, let's connect it to Zapier to automate your workflows.
1. Log in to your Zapier account
2. Create a new Zap by clicking **+ Create** and select **Zaps**/**New Zap**
3. Add a trigger step of your choice:
* Popular triggers include Google Forms, Jotform, ClickUp, or a Schedule trigger
* Connect and configure your trigger according to your use case
1. Select the next **Action** step or click the **+** button to add a new step
2. Search for "Whatsable" in the apps and tools library
3. Select the app with the official Whatsable logo
1. In the Whatsable app Setup, select **Send WhatsApp Message** in the **Action event** dropdown
2. Click **Sign In** in the **Account** field and you will be prompted to enter your API Key
3. Enter your Whatsable API key that you copied earlier
4. Click **Yes, Continue to Whatsable** to store your credential
5. Next, click the **Continue** button in the Setup screen to proceed to the **Configure** section
Complete the required fields:
Select the recipient's phone number (In the **Phone** dropdown, you'll see all phone numbers added in your Whatsable dashboard's **Verified Numbers** menu.)
Type your message text or use variables from previous steps
Enter public URL of a file, image, or video to send with your message
Specify a custom filename for your attachment
1. Click **Continue** and then click **Test step** in the **Test** to verify it's working correctly
2. If the test is successful, you'll see a confirmation message
3. Click **Publish** to save your entire Zap
4. Toggle the **Active** switch in the top-left corner to activate your Zap
## Example use cases
Send a welcome message when a new customer signs up
Update customers when their order status changes
Automatically send reminders before scheduled appointments
Send personalized messages to new leads from your form submissions
Notify customers when their support ticket status changes
## Workflow Diagram
```mermaid theme={null}
flowchart LR
A[Trigger Node] --> B[Data Transformation]
B --> C[WhatsAble App]
C --> D{Message Sent?}
D -->|Yes| E[Success Path]
D -->|No| F[Error Handling]
E --> G[Additional Actions]
F --> H[Retry Logic]
```
## Troubleshooting
Verify that your Whatsable account is active.
Check that your phone number is properly verified.
Ensure your API key is entered correctly in Zapier.
Confirm that the recipient's phone number is in the correct format (including country code).
Check that the file size is under 16 MB.
Verify the file type is supported by WhatsApp.
Ensure the file path or URL is accessible.
## Need help?
Our support team is ready to assist you:
Contact [team@whatsable.app](mailto:team@whatsable.app)
Book a personalized walkthrough
Click the chat button in the bottom right corner of the Whatsable dashboard
For additional automation platform integrations (Make.com, n8n, etc.), please contact our support team or check our integration documentation.
# Introduction
Source: https://docs.whatsable.app/index
Enterprise-grade WhatsApp automation solutions for business communication
WhatsApp Automation for Every Business
Whatsable (formerly Notifyer System) is a WhatsApp automation product that gives you your own WhatsApp Business number and your brand.
Whatsable (formerly Notifyer System)
Whatsable (formerly Notifyer System) lets you use your own number and your brand on WhatsApp.
Your number, your brand
Customer WhatsApp on your own WhatsApp Business number.
Seamless Integration
Connect with your favorite automation platforms to build powerful communication workflows without writing a single line of code.
Key Features
Whatsable (formerly Notifyer System) is for when customers should see your business on WhatsApp.
Create, save, and reuse approved message templates for consistent communication across all your channels.
Track delivery rates, open rates, and user engagement metrics with beautiful real-time dashboards.
Set up powerful triggers and actions to automate your entire customer communication journey.
# Introduction
Source: https://docs.whatsable.app/introduction
Enterprise-grade WhatsApp automation solutions for business communication
WhatsApp Automation for Every Business
Whatsable (formerly Notifyer System) is a WhatsApp automation product that gives you your own WhatsApp Business number and your brand.
Whatsable (formerly Notifyer System)
Whatsable (formerly Notifyer System) lets you use your own number and your brand on WhatsApp.
Your number, your brand
Customer WhatsApp on your own WhatsApp Business number.
Seamless Integration
Connect with your favorite automation platforms to build powerful communication workflows without writing a single line of code.
Key Features
Whatsable (formerly Notifyer System) is for when customers should see your business on WhatsApp.
Create, save, and reuse approved message templates for consistent communication across all your channels.
Track delivery rates, open rates, and user engagement metrics with beautiful real-time dashboards.
Set up powerful triggers and actions to automate your entire customer communication journey.
# Whatsable Suite with n8n
Source: https://docs.whatsable.app/n8n-overview
Integrate n8n with the Whatsable Suite (Whatsable and Notifyer System) for powerful messaging automation
# Whatsable Suite Integration with n8n
The Whatsable Suite offers a comprehensive set of messaging tools that integrate seamlessly with n8n, enabling powerful automation workflows for businesses of all sizes.
## Overview
The Whatsable Suite comprises powerful messaging platforms—Whatsable and Notifyer System—each designed to meet different business needs while integrating perfectly with n8n's workflow automation capabilities.
This guide introduces the Whatsable Suite and its integration with n8n, helping you select the right platform from the suite for your specific business requirements.
## The Whatsable Suite
The Whatsable Suite consists of complementary messaging platforms that integrate with n8n, each designed for different business needs:
Whatsable
The Whatsable Bot seamlessly delivers important notifications and alerts to you and your team members, ensuring everyone stays informed.
Notifyer System
Our most comprehensive solution, the Notifyer System provides complete messaging capabilities for businesses seeking to communicate with customers and leads while maintaining professional branding.
# Why Choose Whatsable?
Reliable and secure integration with WhatsApp, backed by Meta's approval.
Send customized WhatsApp messages in real-time with powerful automation.
Flexible integration options for both developers and non-technical users.
Send alerts, confirmations, reminders, and team updates efficiently.
## Choosing the Right Platform from the Suite
Selecting the optimal platform from the Whatsable Suite depends on your specific business requirements:
## Whatsable Suite Comparison
| Feature |
Whatsable |
Notifyer System |
| WhatsApp Coexistence |
Uses Whatsable's number |
Supported — keep the WhatsApp Business app; outgoing phone-app messages reach n8n |
| Outgoing message webhooks |
Inbound to Whatsable's number |
Incoming and outgoing, with send\_by and was\_message\_by\_human |
| Target Business Size |
Small & Startups |
Enterprise |
| n8n Integration Ease |
Very Simple |
Moderate |
| Business Verification |
Not Required |
Full Official Verification |
| Message Templates |
No |
Advanced |
| Media Support |
Basic |
Advanced |
| Pricing Model |
Subscription |
Enterprise Pricing |
| Free Trial |
7 days |
Contact Sales |
## Integrating the Whatsable Suite with n8n
Both platforms in the Whatsable Suite integrate with n8n through a similar workflow pattern:
Create and configure your account on your chosen WhatsApp platform.
Complete the required verification steps for your WhatsApp number.
Generate an API key from your platform's dashboard.
Add the platform's node in n8n and enter your API credentials.
Design your automation workflow with triggers and actions.
Test your workflow configuration and activate it for production use.
## Common Use Cases
Send automated follow-up messages to new leads based on form submissions or website interactions.
Keep customers informed at every stage of their order from confirmation to delivery.
Reduce no-shows with automated appointment reminders and confirmations.
Route support requests to the right team members and provide instant responses to common questions.
Send timely payment reminders for invoices and subscriptions.
Gather customer feedback after purchases or service interactions.
## Sample Workflow: Order Confirmation with Whatsable Suite
Here's how a simple order confirmation workflow might look using the Whatsable Suite with n8n:
```mermaid theme={null}
flowchart LR
A[Order Placed Trigger] --> B[Get Order Details]
B --> C[Format Message]
C --> D{Select Suite Platform}
D -->|WhatsAble| E[WhatsAble Node]
D -->|Notifyer System| G[Notifyer System Node]
E --> H[Send Confirmation]
G --> H
H --> I[Update Order Status]
```
## Best Practices
- Keep messages concise and focused on a single call-to-action
- Personalize content with customer names and order details
- Use emojis sparingly for emphasis, not decoration
- Include clear opt-out instructions in marketing communications
- Avoid sending multiple messages in quick succession
- Add error handling for failed message delivery
- Include conditional logic for different customer segments
- Test thoroughly with sample data before activating
- Configure appropriate retry logic for temporary failures
- Document your workflow design for future reference
- Ensure you have explicit consent before messaging customers
- Follow WhatsApp's Business Policy for all communications
- Provide clear opt-out mechanisms in your messaging
- Store customer data securely and in compliance with privacy regulations
- Keep records of consent for compliance purposes
## Getting Started with the Whatsable Suite
Ready to enhance your messaging capabilities with the Whatsable Suite and n8n? Follow our platform-specific integration guides:
Quick setup with personal numbers - ideal for small businesses and solopreneurs looking for simple integration.
Enterprise-grade messaging solution with advanced template capabilities and robust API features.
## Need Help Choosing?
Schedule a Whatsable Suite Demo
Not sure which platform in the Whatsable Suite is right for your business? Our experts can help you make the right choice.
Book a Free Consultation
## FAQ
It depends on which platform in the Whatsable Suite you choose:
- Whatsable: Works with regular numbers - no business account required
- Notifyer System: Requires complete business API integration
The Whatsable Suite integrates with n8n through dedicated nodes:
- Each platform has its own dedicated node in the n8n library
- API credentials from your chosen platform are required for connection
- Once connected, you can trigger messaging actions from any n8n workflow
- All platforms support dynamic variables from previous nodes in your workflow
All platforms in the Whatsable Suite support standard media types when integrated with n8n:
- Images: JPG, PNG (up to 5MB)
- Videos: MP4, 3GP (up to 16MB)
- Documents: PDF, DOC, XLSX, etc. (up to 100MB)
- Audio: MP3, OGG, etc.
Yes, all platforms in the Whatsable Suite support dynamic content from n8n workflows:
- Whatsable: Use variables directly in message content with no restrictions
- Notifyer System: Offers template variables for approved templates and regular variables for non-template messages
## Whatsable Suite Support Resources
Need help with your n8n integration with the Whatsable Suite? We've got you covered:
Contact our dedicated support team for technical assistance with any platform in the Whatsable Suite
Watch step-by-step integration guides for connecting n8n with the Whatsable Suite
Get expert assistance with implementing your n8n workflows with the Whatsable Suite
Looking for custom integration solutions or enterprise-level support? Contact our solution engineers at [team@whatsable.app](mailto:team@whatsable.app) for personalized assistance with the Whatsable Suite.
# Get Started with Whatsable for monday.com
Source: https://docs.whatsable.app/onboarding/get-started-with-whatsable
Connect WhatsApp Business to your monday boards—from install and Meta setup to templates, workflows, and Live Chat. Includes video walkthrough and free setup offer.
# Whatsable + monday.com
Whatsable connects WhatsApp Business to your monday boards. This guide takes you from zero to a working WhatsApp automation inside monday.
If you’d rather we set this up for you, [**book a free setup call**](https://tidycal.com/axelmeta/whatsapp-notifications-by-whatsable)—included for all customers, even during the free trial.
***
## Quick setup (3 steps)
Go to [**whatsable.app**](https://www.whatsable.app) and create your account
Connect your WhatsApp Business number through Whatsable and Meta—the detailed steps are in **[Connect your WhatsApp Business number](#2-connect-your-whatsapp-business-number-with-meta-through-whatsable)** below.
Install Whatsable from the monday marketplace, then build workflows and use **Live Chat** on your boards. Follow the **[Step-by-step walkthrough](#step-by-step-walkthrough)** from the beginning.
**Full video walkthrough:** [**Watch on YouTube**](https://youtu.be/3cc4uvtF7AY) (same embedded video above).
***
## Step-by-step walkthrough
### 1. Install Whatsable on monday
In the [monday marketplace](https://monday.com/marketplace), click **Install Whatsable**. This opens monday and asks for permission to install.
There is a **second step** right after: click **Authorize**. Both steps are needed—if you skip authorization, the integration will not work.
Continue through the authorize flow until it completes.
**What you’ll see if authorization is still pending:** When you open the **Whatsable Live Chat** tab on any board item, you may see a screen asking you to **Connect Whatsable Notifyer**. Click **Open authorization** to finish. If a new tab does not open, click **Retry session**.
Once authorized, you’ll see a confirmation such as **“Connected successfully to monday.”**
### 2. Connect your WhatsApp Business number with Meta (through Whatsable)
Inside Whatsable, click [**Connect WhatsApp**](https://notifyer.whatsable.app/onboarding/whatsapp-connection) and follow the flow through **Step 2**.
You can skip or ignore prompts to **subscribe** at first—keep going until **Step 2**, where you’ll see the green **Connect your WhatsApp number** [**button**](https://notifyer.whatsable.app/onboarding/whatsapp-connection).
**If your number is not connected yet:** The **Whatsable Live Chat** tab can show a WhatsApp setup screen with a green **Open WhatsApp connection** button. Click it to start the Meta connection flow; if nothing opens in a new tab, use **Retry session**.
When you click it, you’ll be sent to Meta to log into your Facebook Business portfolio. From there:
1. **Select your business portfolio**.
2. **Choose** your existing WhatsApp Business Account, or **create** a new one.
3. **Select (or create) a Facebook page**—you don't need to actively use it, it just needs to exist
4. **Select an ad account**.
5. **Choose how to attach a number:**
* **Option A:** Use a number WhatsApp provides for you (no number of your own needed)
* **Option B:** **Connect your existing WhatsApp Business number**—either select it if it's already linked, or enter it manually and scan the QR code.
### 3. Add a payment method (do not skip)
WhatsApp messaging from the Cloud API normally requires a **billing method on the WhatsApp side**. Many people skip this—and then sends fail.
Typical places to add payment in Meta:
* Open [**business.facebook.com**](https://business.facebook.com/), go to **Settings** (often bottom-left) → **Accounts** → **WhatsApp accounts** → select your **Phone number** → open **Summary** and scroll to **Payment settings** → **Add payment method**.
* Alternatively, explore **Billing** / **Payments** sections in Meta Business Suite or Business Settings until you locate **payment method for WhatsApp** (UI labels change over time).
If Meta **rejects your card**, contact [**team@whatsable.app**](mailto:team@whatsable.app)—we’ll help troubleshoot.
Even if you already have a payment method for **Ads**, you may still need one **explicitly tied to WhatsApp** / conversation-based billing depending on how your Meta account was set up.
### 4. Create your first template
A template is the message format WhatsApp uses when you send something from monday. For example: a welcome message when a lead’s status changes to "Qualified."
To create one:
1. Go to the template area ([**click here**](https://notifyer.whatsable.app/create-template)).
2. Give your template a name.
3. Leave the category as **Marketing** (unless it’s a transactional notification, then use **“Utility”**).
4. Write your message. To insert dynamic fields like a contact’s name, click **Add variable** — for example: `Hi {{1}}, thank you for your interest in {{2}}.`
5. Add **example values** so Meta understands what the variables represent (e.g. **“Alex”** for name, **“Product Name”** for product).
6. Optionally add **buttons** — quick replies like **“Yes, I want info”** or URL buttons that can be static or dynamic per contact.
7. Click **Submit for approval**.
Meta usually approves templates in under a minute. After being approved, the template will appear in your Monday workflow.
### 5. Set up your AI agent (optional)
Whatsable can run an AI agent beside human replies:
* Give it a **name** (for example **“Lead qualifier”**).
* Describe your **business mission** and paste **product / FAQ knowledge**.
* Define **human handoff** rules—for example *“If a customer mentions a deal over \$5 000, notify a human.”*
When handoff fires, Notifyer/Whatsable can notify you (**Notifyer by Whatsable** mobile apps on [**iOS**](https://apps.apple.com/es/app/notifyer-by-whatsable/id6743722183?l=en-GB) and [**Android**](https://play.google.com/store/apps/details?id=com.chatmobile.chat_mobile)).
The agent can also **follow up proactively** when a conversation goes quiet—within the rules you set.
### 6. Invite your team
You can [**add team members and control what they see**](https://notifyer.whatsable.app/role-management):
| Access type | Meaning |
| - | - |
| **All labels** | Sees every conversation you grant them. |
| **Specific labels** | Only conversations with certain labels—useful when routing by region, product line, or role. Conversations can be **auto-assigned** by label rules according to how you configure the product. |
Access can be changed at any time.
[**Video tutorial here**](https://youtu.be/3cc4uvtF7AY)
### 7. Build your monday workflows
Inside any board, click **+** on the workflows area and compose automations.
#### Outbound: send WhatsApp when monday changes
**Example:** when a lead’s **status** becomes **Qualified**:
1. **Trigger:** Status changes to → **Qualified**.
2. **Action:** Search for **Whatsable** → **Send WhatsApp message** (or equivalent).
3. Pick your **approved template**.
4. **Map columns:** name variable ← name column; **recipient / phone** ← phone column (field names vary by recipe).
5. **Publish.**
#### Inbound: Update monday when WhatsApp activity happens
Whatsable gives you three inbound triggers:
| Trigger | Use case |
| - | - |
| When you send a message to a new WhatsApp contact | You messaged someone new (e.g. a Facebook Lead Ads contact). Use this to create a new monday item. |
| When you send or receive any WhatsApp message | Use this to log every message into the activity tab of the matching monday item. Pair it with Find matching item (by phone number) to update the right record. |
| When you receive a WhatsApp message from a new number | An inbound lead messages you and isn't in monday yet. Use this to auto-create a new item. |
For "find matching item," select your board and use the phone field to match. Then choose what happens if the item is found or not found.
### 8. See WhatsApp messages directly inside any monday item
This is one of the most useful parts of Whatsable. Every WhatsApp message your team sends or receives gets logged into the Updates section of the matching monday item — so you have full conversation history right next to the lead's details.
When you open any item, you'll see entries like "Last message by Axel Meta: hi" or "Last message by: Delivery Feedback Request — Hi Joe Harris, could you please give us a feedback…" — with the exact date, time, and the team member or template that sent it. You can like, reply, and mention teammates on each message just like any other monday update.
### 9. Use the Live Chat view inside monday
For active, two-way conversations, go to **My Work** in monday and expand the sidebar. You'll see **Whatsable Live Chat** as a tab.
Click it — no extra login needed — and you can read and reply to every WhatsApp conversation right inside monday. AI replies are labeled as AI; human replies show which team member sent them.
You can also open the Live Chat as a tab on any individual item (next to Updates, Files, and Activity Log) to see only that contact's conversation.
***
## What you can do
* Send **WhatsApp messages automatically from monday boards**
* Get notified when a contact replies
* **Sync contacts & messages** between WhatsApp and monday
* View full WhatsApp conversations inside any board item — no extra login needed
* See every WhatsApp message logged in the Updates section of each item, with full team attribution
* Run an AI agent that qualifies leads and follows up automatically
* Bulk-message contacts by uploading a CSV (broadcasting)
* Reply on the go with our iOS and Android apps
* Connect with Zapier, Make, or n8n for deeper workflows
* See message analytics and access API keys for custom integrations
***
## Helpful Resources
📖 Documentation: [docs.whatsable.app](https://docs.whatsable.app)
🎬 YouTube tutorials: [youtube.com/@TheWhatsAutomator](https://www.youtube.com/@TheWhatsAutomator)
📧 Support: [team@whatsable.app](mailto:team@whatsable.app)
📅 Free setup call: [Book a session](https://tidycal.com/axelmeta/whatsapp-notifications-by-whatsable)
***
## Need help?
Chat with us directly on [whatsable.app](https://www.whatsable.app) — click the green button in the bottom right corner.
Setup help is completely free for all customers, including during your free trial. If you'd rather have us configure your templates and workflows for you, just [book a call](https://tidycal.com/axelmeta/whatsapp-notifications-by-whatsable).
# Quickstart
Source: https://docs.whatsable.app/quickstart
Start sending automated WhatsApp messages in under 5 minutes
## Getting Started with Whatsable
Whatsable offers two straightforward options to integrate our communication tools into your business workflow:
### Option 1: No-Code Integration Platforms
Connect Whatsable to your existing tools without writing a single line of code using our seamless integration with popular automation platforms:
Create powerful workflows linking Whatsable with over 1,000 apps
Automate message sending based on triggers from 3,000+ connected applications
Leverage this open-source automation tool for custom workflow creation with Whatsable
### Option 2: Direct API Access
For developers and businesses requiring custom solutions, our robust API provides complete control:
* RESTful API: Simple HTTP requests to send and manage WhatsApp messages
* Comprehensive Documentation: Detailed endpoints, parameters, and example requests
* Authentication: Secure API key authentication for all requests
* Webhooks: Receive real-time notifications for message delivery and responses
Our API documentation includes code examples in popular programming languages to help you integrate Whatsable functionality directly into your applications.
Choose the option that best fits your technical capabilities and business requirements to start sending WhatsApp messages through the Whatsable platform today.
# WhatsApp Cloud API error 130429
Source: https://docs.whatsable.app/whatsapp-error-130429
WhatsApp Cloud API error 130429. Cloud API message throughput has been reached. Match on code and details, not on titles.
# WhatsApp Cloud API error 130429
This page documents WhatsApp Cloud API error `130429`.
Meta will deprecate error titles. Match on `code` and `details`, not on the title in `message`.
Official table: [WhatsApp Cloud API error codes](https://developers.facebook.com/docs/whatsapp/cloud-api/support/error-codes/).
## Match these fields
| Field | Value |
| - | - |
| `code` | `130429` |
| `error_data.details` | Cloud API message throughput has been reached. |
Do not build handlers on titles such as `(#130429) Rate limit hit`. Those titles live inside `message` and will be deprecated.
## Official `details`
Cloud API message throughput has been reached.
## Official next step
The app has reached the API throughput limit.
See Meta [Throughput](https://developers.facebook.com/documentation/business-messaging/whatsapp/throughput).
Try again later, or reduce how often the app sends messages.
## Example from Meta
```json theme={null}
{
"error": {
"message": "(#130429) Rate limit hit",
"type": "OAuthException",
"code": 130429,
"error_data": {
"messaging_product": "whatsapp",
"details": "Cloud API message throughput has been reached."
},
"error_subcode": 2494055,
"fbtrace_id": "Az8or2yhqkZfEZ-_4Qn_Bam"
}
}
```
The `message` string is a title. Read `code` and `error_data.details`.
## Related codes
* [131026](/whatsapp-error-131026) — unable to deliver message.
* [131047](/whatsapp-error-131047) — more than 24 hours since the recipient last replied.
* [131049](/whatsapp-error-131049) — not delivered to maintain healthy ecosystem engagement.
* [132001](/whatsapp-error-132001) — template missing in that language or not approved.
# WhatsApp Cloud API error 131026
Source: https://docs.whatsable.app/whatsapp-error-131026
WhatsApp Cloud API error 131026. Unable to deliver message. Match on code and details, not on titles.
# WhatsApp Cloud API error 131026
This page documents WhatsApp Cloud API error `131026`.
Meta will deprecate error titles. Match on `code` and `details`, not on the title in `message`.
Official table: [WhatsApp Cloud API error codes](https://developers.facebook.com/docs/whatsapp/cloud-api/support/error-codes/).
## Match these fields
| Field | Value |
| - | - |
| `code` | `131026` |
| `error_data.details` | Unable to deliver message. Reasons can include the cases below. |
Do not build handlers on titles such as `(#131026) …`. Those titles live inside `message` and will be deprecated.
## Official `details`
Unable to deliver message. Reasons can include:
* The recipient phone number is not a WhatsApp phone number.
* Recipient has not accepted the new Terms of Service and Privacy Policy.
* Recipient using an old WhatsApp version. The recipient must use this WhatsApp version or greater:
* Android: 2.21.15.15
* SMBA: 2.21.15.15
* iOS: 2.21.170.4
* SMBI: 2.21.170.4
* KaiOS: 2.2130.10
* Web: 2.2132.6
## Official next step
Use a non-WhatsApp channel. Ask the WhatsApp user to:
* Confirm that they can send a message to your WhatsApp Business phone number.
* Confirm that they have accepted the latest Terms of Service. **Settings** > **Help**, or **Settings** > **Application information**, will prompt them if they have not accepted the latest terms.
* Update to the latest version of the WhatsApp client.
## Fields to read
Read `code` and `error_data.details`.
Ignore the title inside `message`.
## Related codes
* [131047](/whatsapp-error-131047) — more than 24 hours since the recipient last replied.
* [131049](/whatsapp-error-131049) — not delivered to maintain healthy ecosystem engagement.
* [132001](/whatsapp-error-132001) — template missing in that language or not approved.
* [130429](/whatsapp-error-130429) — Cloud API throughput reached.
# WhatsApp Cloud API error 131037
Source: https://docs.whatsable.app/whatsapp-error-131037
WhatsApp Cloud API error 131037: the 555 business phone needs an approved display name before send. Match on code and details, not titles.
This page documents WhatsApp Cloud API error `131037`.
Meta will deprecate error titles. Match on `code` and `details`, not on the title in `message`.
Official table: [WhatsApp Cloud API error codes](https://developers.facebook.com/documentation/business-messaging/whatsapp/support/error-codes).
## Match these fields
| Field | Value |
| - | - |
| `code` | `131037` |
| `error_data.details` | The 555 business phone number used to send the request does not have an approved display name. |
Do not build handlers on titles such as `(#131037) …`. Those titles live inside `message` and will be deprecated.
## What 131037 means
Official `details`: The 555 business phone number used to send the request does not have an approved display name.
Official next step from Meta: change or approve the 555 business phone number’s display name. See Meta’s [display names](https://developers.facebook.com/documentation/business-messaging/whatsapp/display-names) documentation and [How to change your WhatsApp Business display name](https://www.facebook.com/business/help/338047025165344).
`131037` is a **refusal**. The message is not sent.
In one Observed case, the same code refused both free-form text replies inside an open customer service window and template sends on that number.
Always check account health (and billing) before acting on the code alone. A send error code can be the wrong place to start if the account is unhealthy for another reason. Payment-method failures are typically surfaced under other codes (for example `131042`); do not treat `131037` as a payment error by default.
## Reading `health_status`
Query the **phone-number** node (not the account node; the account node omits the phone-number entity):
```bash theme={null}
GET /{phone-number-id}?fields=health_status
```
The response has one rollup, `can_send_message`, and a list of entities: `PHONE_NUMBER`, `WABA`, `BUSINESS`, and `APP`.
* The rollup takes the worst entity. A healthy account behind an unverified business shows `LIMITED` overall. Read the entities to see which one is at fault.
* `can_send_message` values: `AVAILABLE`, `LIMITED`, `BLOCKED`. `LIMITED` is a steady state for businesses that have not passed verification — not an outage by itself.
* The explanation can be free text. Read both `errors` and `additional_info`. In one Observed case, the `PHONE_NUMBER` entity had no error code; `additional_info` said the display name was not approved yet and that the message limit would increase after approval.
* An `AVAILABLE` entity can still list other errors that do not stop messaging. Treat messaging readiness from `can_send_message` and the phone-number / display-name entities, not from every code on the payload.
## Phone-number node traps
Query (current Meta fields plus one legacy field seen in the case):
```bash theme={null}
GET /{phone-number-id}?fields=status,name_status,new_name_status,code_verification_status,quality_rating,whatsapp_business_manager_messaging_limit,messaging_limit_tier,platform_type,verified_name,is_pin_enabled,account_mode
```
`messaging_limit_tier` is a **legacy** field (Observed in the case table below). Prefer `whatsapp_business_manager_messaging_limit` for current reads.
These fields can look healthy while sends still fail with `131037`. Values Observed on a problem +1 555 number at the same time:
| Field | Example value | Meaning |
| - | - | - |
| `status` | `CONNECTED` | registered and online |
| `code_verification_status` | `VERIFIED` | |
| `platform_type` | `CLOUD_API` | Cloud API number |
| `is_pin_enabled` | `true` | two-step PIN set at registration |
| `name_status` | `AVAILABLE_WITHOUT_REVIEW` | no name review shown as pending |
| `new_name_status` | `AVAILABLE_WITHOUT_REVIEW` | no newer name request waiting |
| `messaging_limit_tier` | `TIER_250` | legacy displayed tier (Observed) |
| `quality_rating` | `GREEN` | |
| `verified_name` | an older name | a newly approved name may not be applied yet |
Signals that can disagree for hours or days on the same account (Observed case; lag timing from Meta support):
* The phone-number node says no review is pending (`AVAILABLE_WITHOUT_REVIEW`).
* `health_status` says the display name is not approved.
* WhatsApp Manager’s Phone numbers tab says “Pending review”.
* Meta emails that a display name was approved.
* The displayed messaging limit looks like a normal tier while the effective cap on that +1 555 number is still tiny.
Meta support’s explanation for the lag in that case: the approval must be “reflected”, which can take **1 to 2 business days**. Treat the approval email, Manager, phone-number node, and health endpoint as independent views until they agree. Confirm on the number you send from: `verified_name` matches the approved name, and health no longer flags an unapproved display name.
The messaging limit Meta displays for a normal number is a ceiling, not a guarantee of the effective limit on a +1 555 number whose display name is still unapproved.
## Meta-provided +1 555 numbers
Meta can provide **+1 555** business phone numbers through Embedded Signup. Per Meta’s Embedded Signup docs, these numbers use a US +1 / 555 pattern, are auto-verified, are limited in how many a business can claim, **must have an approved display name before they can send**, and otherwise behave like standard Cloud API numbers once that gate clears. They are not migratable off the platform the way a number you bring yourself is.
For production and portability, use a **real phone number** you control. Keep a +1 555 number for evaluation if you want, or remove it.
For a specific +1 555 number whose display name was not approved, **Meta support** (this case) stated the WABA remained subject to a messaging limit of **five messages per day**, and that the limit would lift once the display name was approved and reflected (often 1 to 2 business days). That five-per-day figure and the reflect timing are **not** documented in Meta’s public error or 555 pages checked for this guide — attribute them to Meta support. Meta’s own docs say a 555 number can send after display-name approval (subject to normal quality, pricing, and messaging limits). Do not treat “never scales” third-party claims as Meta fact.
Observed pattern that fits a tiny cap: five messages went out on day one, then later sends failed with `131037`. The exact reset rule for that five-message limit (calendar day, rolling window, or total) was **not confirmed**.
## Traps
1. **Two accounts with the same name.** The account selector can show two WhatsApp Business Accounts with the same display name and different IDs. An approval email that names the account by name alone does not tell you which ID it applies to. Compare account IDs.
2. **The approval email names the account, not the number.** Display names are tracked per phone number. Confirm on the number you are actually sending from.
3. **A pending display name can block sends** on some numbers after an earlier period of successful sends.
4. **Tell Meta support the number starts with +1 555.** Give the phone number ID in the first message.
5. **Paste IDs and timestamps when you cannot attach screenshots.** If you cannot attach files, paste the exact error text, the phone number ID, the account ID, and each failure’s timestamp. A Graph API `fbtrace_id` helps when your sending tool still has it; Meta can often locate failures from the phone number ID and timestamps without it.
## What to do
1. **For anything customer-facing, use your own real phone number.** Any number that can receive a verification call or SMS works. Keep the +1 555 number for evaluation, or remove it.
2. **Submit a display name early** (on the 555 while you evaluate, and on the real number before you go live). Meta support described approval and reflection as taking one to two business days in the case above.
3. **Complete business verification** if you need higher messaging limits than Meta’s starting unverified tier. Prefer Meta’s current messaging-limits documentation over older tier ladders.
4. **Before scaling, confirm the effective limit**, not only the displayed tier. Send a small batch and check for failures.
5. **Confirm beyond the approval email.** On the phone-number node, check that `verified_name` is the approved name, and that `health_status` no longer says the name is unapproved.
## Reproduce outside your software
To see whether a refusal comes from Meta or from your sending tool, replay one send with a tool you control (Postman, or Meta’s Graph API Explorer).
```bash theme={null}
POST https://graph.facebook.com/v21.0/{phone-number-id}/messages
Authorization: Bearer {token}
Content-Type: application/json
```
```json theme={null}
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "",
"type": "text",
"text": { "preview_url": false, "body": "test" }
}
```
In Graph API Explorer: choose your app, User Token, add `whatsapp_business_management` and `whatsapp_business_messaging`, generate an access token, and allow the correct WhatsApp Business Account when asked. Keep the token out of support chats.
If the call fails with `131037`, the refusal is Meta’s for that number. The response includes a trace ID. If it succeeds, the difference lies in the original sender.
On a capped +1 555 number, each test message spends the allowance.
## Related codes
* [131026](/whatsapp-error-131026) — unable to deliver message.
* [131047](/whatsapp-error-131047) — more than 24 hours since the recipient last replied.
* [131049](/whatsapp-error-131049) — not delivered to maintain healthy ecosystem engagement.
* [132001](/whatsapp-error-132001) — template missing in that language or not approved.
* [130429](/whatsapp-error-130429) — Cloud API throughput reached.
# WhatsApp Cloud API error 131047
Source: https://docs.whatsable.app/whatsapp-error-131047
WhatsApp Cloud API error 131047. More than 24 hours since the recipient last replied. Match on code and details, not on titles.
# WhatsApp Cloud API error 131047
This page documents WhatsApp Cloud API error `131047`.
Meta will deprecate error titles. Match on `code` and `details`, not on the title in `message`.
Official table: [WhatsApp Cloud API error codes](https://developers.facebook.com/docs/whatsapp/cloud-api/support/error-codes/).
## Match these fields
| Field | Value |
| - | - |
| `code` | `131047` |
| `error_data.details` | More than 24 hours have passed since the recipient last replied to the sender number. |
Do not build handlers on titles such as `(#131047) …`. Those titles live inside `message` and will be deprecated.
## Official `details`
More than 24 hours have passed since the recipient last replied to the sender number.
## Official next step
Send the recipient a [template message](https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/overview) instead.
## Related codes
* [131026](/whatsapp-error-131026) — unable to deliver message.
* [131049](/whatsapp-error-131049) — not delivered to maintain healthy ecosystem engagement.
* [132001](/whatsapp-error-132001) — template missing in that language or not approved.
* [130429](/whatsapp-error-130429) — Cloud API throughput reached.
# WhatsApp Cloud API error 131049
Source: https://docs.whatsable.app/whatsapp-error-131049
WhatsApp Cloud API error 131049. Message not delivered to maintain healthy ecosystem engagement. Match on code and details, not on titles.
# WhatsApp Cloud API error 131049
This page documents WhatsApp Cloud API error `131049`.
Meta will deprecate error titles. Match on `code` and `details`, not on the title in `message`.
Official table: [WhatsApp Cloud API error codes](https://developers.facebook.com/docs/whatsapp/cloud-api/support/error-codes/).
## Match these fields
| Field | Value |
| - | - |
| `code` | `131049` |
| `error_data.details` | This message was not delivered to maintain healthy ecosystem engagement. |
Do not build handlers on titles such as `(#131049) …`. Those titles live inside `message` and will be deprecated.
## Official `details`
This message was not delivered to maintain healthy ecosystem engagement.
## Official next step
If you receive this error and suspect it is due to the limit, wait at least 24 hours before resending the template message.
An immediate retry can return the same error. The limit may stay in effect for differing periods of time.
See [Per-User Marketing Template Message Limits](https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/marketing-templates/per-user-limits).
## Related codes
* [131026](/whatsapp-error-131026) — unable to deliver message.
* [131047](/whatsapp-error-131047) — more than 24 hours since the recipient last replied.
* [132001](/whatsapp-error-132001) — template missing in that language or not approved.
* [130429](/whatsapp-error-130429) — Cloud API throughput reached.
# WhatsApp Cloud API error 132001
Source: https://docs.whatsable.app/whatsapp-error-132001
WhatsApp Cloud API error 132001. Template missing in that language or not approved. Match on code and details, not on titles.
# WhatsApp Cloud API error 132001
This page documents WhatsApp Cloud API error `132001`.
Meta will deprecate error titles. Match on `code` and `details`, not on the title in `message`.
Official table: [WhatsApp Cloud API error codes](https://developers.facebook.com/docs/whatsapp/cloud-api/support/error-codes/).
## Match these fields
| Field | Value |
| - | - |
| `code` | `132001` |
| `error_data.details` | The template does not exist in the specified language or the template has not been approved. |
Do not build handlers on titles such as `(#132001) …`. Those titles live inside `message` and will be deprecated.
## Official `details`
The template does not exist in the specified language or the template has not been approved.
## Official next step
Make sure the template has been approved.
Make sure the template name and language locale are correct.
See Meta [Templates](https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/overview).
## Related codes
* [131026](/whatsapp-error-131026) — unable to deliver message.
* [131047](/whatsapp-error-131047) — more than 24 hours since the recipient last replied.
* [131049](/whatsapp-error-131049) — not delivered to maintain healthy ecosystem engagement.
* [130429](/whatsapp-error-130429) — Cloud API throughput reached.