Description
WhatsApp Cloud API webhooks are not being received by Frappe, even though manual webhook testing works perfectly. Messages sent from Frappe to WhatsApp work fine (outgoing), but incoming messages from WhatsApp are not appearing in Frappe.
Environment
- Frappe Version:
15.95.0 - frappe_whatsapp Version:
1.57.2 - Hosting: Frappe Cloud (knowvantage.m.frappe.cloud)
- WhatsApp API: Cloud API (not On-Premises)
Configuration
- Webhook URL: https://knowvantage.m.frappe.cloud/api/method/frappe_whatsapp.utils.webhook.webhook
- Meta Webhook Status: Verified
(green checkmark in Meta) - Messages Field: Subscribed

- CSRF Config: ignore_csrf = 1 added to site config
- WhatsApp Account: Configured with correct Phone ID, App ID, Business ID
- Is Default Incoming:
Checked
What Works 
- Sending messages FROM Frappe TO WhatsApp - Works perfectly
- Manual webhook verification (GET request with hub.challenge) - Returns correct challenge
- Manual webhook POST test via browser console - Message appears in WhatsApp Message list
- Webhook shows as “Verified” in Meta Developer Console
What Doesn’t Work 
- Real webhooks from Meta when someone sends a WhatsApp message - Never arrive
- No entries in Webhook Request Log
- Meta shows webhook payload in their activity log, but Frappe never receives it
Steps Taken
Added ignore_csrf = 1 to site config and restarted
Installed frappe_whatsapp app
Created WhatsApp Account with all required credentials
Configured webhook in Meta with exact URL
Verified webhook in Meta (green checkmark)
Subscribed to “messages” field in Meta webhook configuration
Tested manual webhook with browser console - Works!
Real webhooks from Meta - Don’t arrive
Test Results
Manual Test (Works
):
fetch('https://knowvantage.m.frappe.cloud/api/method/frappe_whatsapp.utils.webhook.webhook', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
"object": "whatsapp_business_account",
"entry": [{
"id": "884803370668272",
"changes": [{
"value": {
"messaging_product": "whatsapp",
"metadata": {
"display_phone_number": "15551812714",
"phone_number_id": "933491543183960"
},
"contacts": [{
"profile": {"name": "Test"},
"wa_id": "918851394123"
}],
"messages": [{
"from": "918851394124",
"id": "test_123",
"timestamp": "1768410603",
"text": {"body": "Manual test"},
"type": "text"
}]
},
"field": "messages"
}]
}]
})
});
Result: Message appears in WhatsApp Message list in Frappe ![]()
Real WhatsApp Message Test (Doesn’t Work
):
- Send message from personal WhatsApp to business number
- Meta receives message (visible in Meta activity log)
- Meta should send webhook to Frappe
- Webhook never arrives at Frappe
- No entry in Webhook Request Log
- No message in WhatsApp Message list
Expected Behavior
When someone sends a WhatsApp message to the business number, Meta should send a webhook POST request to the configured endpoint, and the message should appear in Frappe’s WhatsApp Message list.
Actual Behavior
Meta receives the message but doesn’t send the webhook to Frappe, or sends it to wrong endpoint. No webhook requests appear in Frappe’s Webhook Request Log.