Need help? Message us on WhatsAppWhatsApp us+1 279-243-3696Open chat
All posts
IntegrationsAugust 25, 2026· WhatsAble

Trigger n8n scenarios from WhatsApp Business app

Reply from the WhatsApp Business app on your phone and n8n still runs. Enable outgoing or nothing arrives. Filter on send_by "WhatsApp App".

Keep the WhatsApp Business app on your phone and keep typing replies in it. n8n still runs. So does Make. So does Zapier. The webhook fires on a phone-typed reply the same way it fires on an inbound customer message — as long as you have outgoing enabled.

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, the n8n label that makes people think this won't work, 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.

In the WhatsAble dashboard, open Developer, find your endpoint, and make sure both incoming and outgoing are ticked. 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 credential for the n8n WhatsAble node is labelled Notifyer System incoming and outgoing messages — that credential scope covers both directions. Using a credential scoped only to incoming will miss phone-app replies.

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. true means a contact wrote to your business. false means your business sent a message outward — including when a person typed it from the phone.

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 true when a person sent the message — whether from the phone app or from the WhatsAble inbox — and false when a bot or automation sent it.

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. Filter on was_message_by_human: true if you want everything sent by a person, including WhatsAble inbox replies.

The n8n label trap

The WhatsAble node in n8n is labelled On new Incoming message event. That label makes people assume it only fires when a customer writes in. It doesn't — that's just the node's name. With outgoing enabled, the same trigger fires when you or a teammate replies from the phone.

The label is not a filter. The credential scope is the filter.

This means if you build an n8n scenario to handle inbound customer messages and you don't add a filter, phone-typed replies will also hit that scenario. You might send a customer a duplicate reply, trigger a CRM update when the update already happened, or log a message twice.

Add a Filter node or an IF node right after the WhatsAble trigger. To let only inbound customer messages through:

{{ $json.incoming_message }}    is equal to    true

To run a scenario only on phone-typed replies:

{{ $json.incoming_message }}    is equal to    false
{{ $json.send_by }}             is equal to    "WhatsApp App"

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
Teammate's name (e.g. "Axel Meta") Sent from the WhatsAble inbox
Automation or bot name Sent by Make, Zapier, n8n, or a bot
"" (empty string) Typical on incoming messages from a contact

If you want to branch on it in n8n: add an IF node after your direction filter, check {{ $json.send_by }} equals "WhatsApp App", and route the two message types 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

The payload is the same whether you connect WhatsAble to n8n, Make, or Zapier. The three fields are the same. The filtering logic is the same.

In Make, add a Filter or Router module right after the WhatsAble trigger and check incoming_message equals false and send_by equals WhatsApp App.

In Zapier, add a Filter step right after the trigger and set the same conditions.

This post uses n8n for the examples because that's where the node label causes the most confusion. Make and Zapier label their triggers differently, but the underlying mechanic and the payload fields are identical.

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.
  • Route outgoing human messages differently from bot messages. Filter on was_message_by_human: true and handle them as handoff events — something a human dealt with, not something needing a bot follow-up.
  • 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 same n8n trigger, the same Make module. The only difference is outgoing is on and you filter on the right fields.

Quick reference

Condition Filter
Only inbound customer messages incoming_message = true
All outgoing messages incoming_message = false
Only phone-typed replies incoming_message = false AND send_by = "WhatsApp App"
Any human-sent message (phone or inbox) was_message_by_human = true
Only WhatsAble inbox replies (not phone) incoming_message = false AND send_by ≠ "WhatsApp App" AND was_message_by_human = true

Ready to automate your WhatsApp?

Connect WhatsApp to Zapier, Make, n8n, Pipedrive, or Monday.com in minutes. Start free, no credit card required.

Start Free Trial