Keep the WhatsApp Business app on your phone and keep typing replies in it. Your Whatsable webhook fires on a phone-typed reply the same way it fires on an inbound customer message, as long as outgoing is on. Point that webhook at an n8n Webhook node, a Make custom webhook, or Webhooks by Zapier, and the reply reaches your workflow.
Most people set up the WhatsApp webhook and test it with an inbound message from a customer. That works. What they miss is that an outgoing reply typed from the phone also reaches the webhook, and it reaches it with a different set of field values. This post walks through those fields, the one setting you have to enable first, and how to tell a phone reply from an inbox reply once both start arriving.
Enable outgoing or nothing arrives
This is the gate. Everything else depends on it.
Open your Whatsable webhook settings, add your n8n Webhook URL as an endpoint, and turn on outgoing messages. If outgoing is off, phone-app replies simply do not arrive at your webhook. There is no error — the reply just never comes. The phone app shows the message as sent. n8n sees nothing.
A custom webhook also has an outgoing: true option when you create it via the API. The Whatsable trigger node in n8n fires on incoming customer messages only. To catch phone-app replies, add n8n's own Webhook node and paste its URL into a Whatsable webhook with outgoing turned on.
Enable outgoing first. Then the rest of this post makes sense.
The three fields that identify a phone reply
When someone types a reply in the WhatsApp Business app on their phone and outgoing is enabled, Whatsable posts a JSON payload to your endpoint. Three fields in that payload mark it as a phone reply:
| Field | Value |
|---|---|
incoming_message |
false |
send_by |
WhatsApp App |
was_message_by_human |
true |
incoming_message is the direction flag. false on outgoing messages. Absent on incoming messages in the default payload.
send_by identifies who or what sent the message. The value WhatsApp App is the exact string Whatsable uses when the message was typed in the WhatsApp Business app on a phone. This is not "WhatsApp Business App" — the send_by value is exactly WhatsApp App.
was_message_by_human is false only when your AI agent sent the message (including its follow-ups); every other send is true.
All three together uniquely identify a phone-typed reply. Filter on all three if you only want to act on phone replies. Filter on incoming_message: false alone if you want all outgoing messages.
The n8n label trap
The Whatsable node in n8n is labelled On new Incoming message event, and that is what it does: it fires on incoming customer messages only. Phone-app replies arrive through a Webhook node on a Whatsable webhook with outgoing turned on. If that one webhook carries both directions, add a filter, or phone-typed replies will also hit your inbound workflow.
Add a Filter node or an IF node right after the Webhook node.
To run a scenario only on phone-typed replies:
{{ $json.body.incoming_message }} is false (Boolean condition)
{{ $json.body.send_by }} is equal to WhatsApp App (String condition)
Both conditions together mean: outgoing, and typed in the Business app on a phone.
Tell a phone reply from a chat-inbox reply
Both a phone reply and a Whatsable inbox reply show incoming_message: false and was_message_by_human: true. The send_by field is what separates them:
send_by value |
What sent it |
|---|---|
WhatsApp App |
Typed in WhatsApp Business app on a phone |
AI |
your AI agent |
Notifyer |
the Whatsable inbox, the API, broadcasts and automations |
If you want to branch on it in n8n: add a Switch node after your direction filter, switch on {{ $json.body.send_by }} (values WhatsApp App, AI and Notifyer), and route each sender differently.
You keep the WhatsApp Business app installed
Whatsable supports Meta WhatsApp Coexistence. This means the same WhatsApp number works on the Business app on the phone and in Whatsable at the same time. You do not need to delete the Business app. You do not need to stop using the phone to reply.
After you connect via Embedded Signup in Whatsable, 1:1 messages sync in both directions. A reply you type on the phone shows in the Whatsable inbox. A reply a teammate sends from the inbox shows in the phone app thread.
Do not uninstall the Business app after connecting — uninstalling it breaks Coexistence.
Groups, Status, and Calls stay on the Business app; they do not sync into Whatsable.
Make and Zapier get the same webhook
Make and Zapier work the same way through a webhook. Paste a Make custom webhook URL or a Webhooks by Zapier catch-hook URL into a Whatsable webhook with outgoing on, then filter on incoming_message equals false and send_by equals WhatsApp App.
This post uses n8n for the examples because that's where the node label causes the most confusion.
What you can build with this
A few practical things people do once phone replies start arriving at a webhook:
- Log owner replies to a sheet or CRM. Every time you reply from the phone, a row gets written. Useful for teams where one person owns the WhatsApp number and answers from their phone, but the CRM should still show replies.
- Mark a conversation as handled. The phone reply hits n8n, n8n updates a deal or ticket, and the CRM knows a human already responded.
- Audit trail. Append every human-sent message to a log, regardless of whether it came from the phone or the Whatsable inbox.
This is not a separate feature — it is the same webhook endpoint. The only difference is outgoing is on and you filter on the right fields.
Quick reference
| Condition | Filter |
|---|---|
| Only inbound customer messages | incoming_message is not false |
| All outgoing messages | incoming_message = false |
| Only phone-typed replies | incoming_message = false AND send_by = WhatsApp App |
| Inbox, API, broadcast or automation sends | incoming_message = false AND send_by = Notifyer |

