Custom webhook
Create the endpoint, enable outgoing, and the reply hits your server as a normal POST. https://whatsable.app/integrations/webhook
Yes. A reply you type in the WhatsApp Business app still POSTs to your webhook. You keep the app on the phone. The number stays the same.
Outgoing has to be on for that destination. If it is off, the contact still gets the reply and your webhook never sees it.
Pick where the reply should land: a webhook you built, n8n, Zapier, or Make.
outgoing: true.Create the endpoint, enable outgoing, and the reply hits your server as a normal POST. https://whatsable.app/integrations/webhook
The Whatsable trigger node fires on incoming messages only. To catch a phone-app reply, add an n8n Webhook node and paste its URL into a Whatsable webhook with outgoing turned on. The sibling post has the n8n clicks. https://whatsable.app/blog/trigger-n8n-scenarios-from-whatsapp-business-app https://whatsable.app/integrations/n8n
Use a Webhooks by Zapier catch hook as a Whatsable webhook with outgoing turned on. https://whatsable.app/integrations/zapier
Use a Make custom webhook as a Whatsable webhook with outgoing turned on. https://whatsable.app/integrations/make
A phone-app reply only reaches an Agent Skill if that Skill sits on a webhook you created with outgoing enabled. Installing a Skill alone does not deliver the event. https://whatsable.app/vibe-code
When a phone-app reply hits, three fields line up. incoming_message is false. send_by is "WhatsApp App". was_message_by_human is true.
The same POST also carries the rest of the official message fields. The meanings below match the payload fields page.
Check message_type (text, image, audio, video, document, location). For audio, the transcription appears in the text fields when available.
Notifyer is the system value for messages sent through Whatsable.
| Field | What it is |
|---|---|
phone_number | 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. |
message_type | The type of the latest message (text, image, audio, video, document, or location). For audio, the transcription appears in the text fields when available. |
last_message_of_user | The last message sent by the user. |
last_message_of_bot | The last business send, including a human on the phone or in the inbox. Not only a bot. |
last_messages | Recent messages in the conversation (about the last 20). On webhook deliveries this is typically a JSON string — parse it before iterating. Each item is typed user (the contact) or bot (the last business send, including a human on the phone or in the inbox). Includes messages from the WhatsApp Business app, the Whatsable inbox, automations, and templates. |
last_messages.type | Sender type (user or bot). user is the contact. bot is the last business send, including a human on the phone or in the inbox. |
last_messages.content | Message content (empty for media messages). For audio, the transcription appears in the text fields when available. |
last_messages.timestamp | ISO 8601 timestamp when the message was sent. |
last_messages.content_type | Type of content (text, image, audio, video, document, or location). |
last_messages.media_url | URL to media file if applicable (valid for 24 hours). |
conversation_paragraph | Human-readable summary of the recent conversation. |
recipient_name | The name of the recipient if available. |
user_id | Unique identifier for the user in your system. |
user_last_message_time | Unix timestamp of the user's last message. |
bot_last_message_time | Unix timestamp of your system's last message. |
attachment_url | URL to media file if the latest message contains media (null for text messages). |
note | Custom note field for additional context. |
note_automation | Automation-related notes. |
labels | Comma-separated labels for categorizing the conversation. |
incoming_message | false on outgoing messages. Absent on incoming messages in the default payload. |
send_by | Which system or person sent an outgoing message. "WhatsApp App" when typed in the WhatsApp Business app; "AI" when your AI agent sent it; "Notifyer" for inbox, API, broadcast and automation sends. Absent on incoming messages. |
was_message_by_human | was_message_by_human is false only when your AI agent sent the message (including its follow-ups); every other send is true. |
referral | Present on incoming events from a Click-to-WhatsApp ad or post, and omitted on ordinary chats and most follow-ups. See https://whatsable.app/click-to-whatsapp-ads. |
Filter so incoming_message is false, send_by is "WhatsApp App", and was_message_by_human is true.
Yes. YouTube: https://www.youtube.com/watch?v=njAxHZalMn4
This is not an inbox check, a Click-to-WhatsApp field spec, or a customer JSON dump.