Skip to main content
Send every message a bot receives (and every reply it sends) to your own server, in real time — plus two more triggers for status changes, all on the same Webhook tab in Bot Settings.
ChatSyncs left navigation with Chatbot Manager selected, Bot Settings button highlighted, and the Webhook tab selected showing Send incoming or outgoing messages to external webhook URLs

Four independent triggers

Webhook tab with all four triggers and their URL fields: Trigger Webhook for Incoming Message with Webhook URL for Incoming Messages, Trigger Webhook for Outgoing Message with Outgoing Webhook URL, Trigger Webhook for Message Status Change with Message Status Change Webhook URL, and Trigger Webhook for Conversation Status Change with Conversation Status Webhook URL
Each trigger is independent — enable any combination, and each has its own Webhook URL field so they can point at the same endpoint or four different ones.
1

Open Webhook

Go to Chatbot Manager, select your bot, click Bot Settings, then the Webhook tab.
2

Enable the trigger(s) you need

Turn on any of the four toggles.
3

Enter each Webhook URL

Fill in the URL field that appears under each enabled toggle.
4

Publish Changes

Bot Settings header with the Publish Changes button highlighted, after entering webhook URLs
After pasting in your webhook URL(s), click Publish Changes — nothing goes live until you do.

Examples

Every trigger POSTs a JSON body. These are real captured payloads (subscriber phone number, name, and endpoint replaced with placeholders) — every receiving tool (n8n, Make, your own server) wraps the single event in a one-item array like this.
n8n Webhook node showing a captured test event with the raw JSON payload in the Output panel
Point a trigger’s Webhook URL at a tool like n8n, Make, or webhook.site first and click Listen for test event (or equivalent) — send yourself a real message, and you’ll see the exact payload shape for your account before you build anything downstream.
Incoming Message — a customer sends “Hi”.
Webhook tab with Trigger Webhook for Incoming Message enabled and its Webhook URL field filled in
Your server receives:
custom_fields carries every Custom Field currently saved on that subscriber — here city and product — alongside the message itself in user_message. Outgoing Message — the bot sends a reply.
Webhook tab with Trigger Webhook for Outgoing Message enabled and its Outgoing Webhook URL field filled in
Your server receives:
In this captured payload, the outgoing message’s own text isn’t included — only subscriber and message-ID metadata. If your integration needs the actual reply content, verify this against your own capture (see the Tip above) rather than assuming it’s present.
Message Status Change — a sent message moves from sentdeliveredread, or fails.
Webhook tab with Trigger Webhook for Message Status Change enabled and its Message Status Change Webhook URL field filled in
Your server receives, on each transition:
message_status is one of sent, delivered, read, or failed — when it’s failed, failed_reason carries the reason instead of null. Conversation Status Change — an agent marks a conversation Resolved in the Shared Inbox (or via the Mark Conversation Status API).
Webhook tab with Trigger Webhook for Conversation Status Change enabled and its Conversation Status Webhook URL field filled in
Your server receives:
  • event — a namespaced identifier for what happened, e.g. conversation.resolved.
  • action — the plain status name: one of resolved, reopen, archived, unarchived, blocked, or unblocked — the same states as the Mark Conversation Status API.
  • action_status"1" confirms the change actually succeeded.
  • agent_name — which team member (or system) made the change.
  • changed_at — when it happened, in your account’s local time.
  • wa_message_id and label_names arrive empty here — a conversation status change isn’t tied to one specific message or label, unlike the other three triggers.

Frequently asked

No — each toggle and its URL field is independent. Enable only the ones you actually need.
Yes — every trigger has its own Webhook URL field, so you can route incoming messages to one system and status changes to another.
Message Status Change tracks one message’s delivery lifecycle (sent/delivered/read/failed). Conversation Status Change tracks the whole conversation’s state (resolved, archived, blocked, etc.) — see Mark Conversation Status for the same states via the API.
Chatbot Manager → [your bot] → Bot Settings → Webhook tab — see How Do I Turn On Webhook Triggers for My Bot? for the full Bot Settings reference.