Skip to main content
Incoming message webhooks deliver real-time notifications when your recipients reply, enabling immediate responses and interactive conversations through WhatsApp.
The Incoming Messages system provides a robust webhook infrastructure that enables your application to receive and process WhatsApp messages from your recipients in real-time. This guide covers how to configure, manage, and handle incoming message webhooks.

Overview

Webhooks are HTTP callbacks that deliver notifications to your server whenever specific events occur - in this case, when recipients reply to your WhatsApp messages. Benefits include:
  • Real-time processing of customer responses
  • Seamless integration with your existing systems
  • Automated workflows triggered by customer messages
  • Enhanced customer experience through timely interactions

Webhook Configuration

Managing Endpoints

1

Access Webhook Settings

Navigate to the Developer section in your dashboard sidebar to manage webhook configurations.
2

Configure Endpoint

Add a new webhook URL where you want to receive incoming message notifications.

Endpoint Requirements

All webhook endpoints must be publicly accessible via HTTPS and configured to accept POST requests with JSON payloads. HTTP endpoints are not supported in production environments.
Your webhook endpoint must:
  1. Accept HTTP POST requests
  2. Process JSON payloads
  3. Return a 2xx status code within 10 seconds
  4. Implement idempotency handling (see best practices below)

Webhook Payload

When a user replies to your WhatsApp message, we’ll send a POST request to your configured endpoint with a detailed payload.

Sample Payload

Payload Fields

array
required
Array containing the recent messages in the conversation
string
required
Human-readable summary of the recent conversation
string
required
The phone number of the recipient who sent the message
string
The name of the recipient if available
string
required
Unique identifier for the user in your system
string
The last message sent by the user
string
The last message sent by your system
string
required
The type of the latest message (text, image, audio, video, document, location)
integer
required
Unix timestamp of the user’s last message
integer
required
Unix timestamp of your system’s last message
string
URL to media file if the latest message contains media (null for text messages)
string
Custom note field for additional context
string
Automation-related notes
string
Comma-separated labels for categorizing the conversation

Webhook Management API

You can programmatically manage your webhook endpoints using our API.

Create Webhook Endpoint

POST https://api.insightssystem.com/api:qh9OQ3OW/webhook/dev/create Register a new webhook endpoint to receive incoming message notifications. Send a valid Bearer token (same credential used for the dashboard).

Request Body

string
required
Full HTTPS URL of your endpoint.
boolean
required
Whether the webhook is enabled.
boolean
required
Incoming message trigger on/off.
boolean
required
Schedule activity trigger on/off. When enabled, your bot can send multiple sequential messages with natural delays between them — useful for simulating human-like conversation flow.
How to enable in the dashboard Navigate to Incoming Webhooks, click the settings icon next to your webhook, then enable Schedule Activity. A dropdown will appear where you can select your preferred delay duration between messages.
How to enable Schedule Activity and set delay duration
Example workflow When a user sends an incoming message, you can respond with a sequence of messages each sent after a specified delay:
Set waiting_duration to the maximum delay window you need. When schedule_activity is false, set waiting_duration to 0.
number
required
How long (in seconds) to wait for schedule activity when schedule_activity is true. Set to 0 when schedule activity is off.Dashboard presets: 15, 30, 60, 1800, 3600, 18000, 36000, 86400, 172800, 259200, 432000, 604800, 1209600, 2592000, 5184000 (15 seconds → 2 months). Prefer these values if mirroring the app UI.
boolean
required
If true, enables request signing. The server returns a signature_secret once in the response — copy and store it immediately, as it will not be shown again.
Webhook signature toggle in the Add Endpoint dialog

Response

Returns a JSON object for the created webhook row.
number
Webhook ID.
boolean
Whether the webhook is enabled.
boolean
Incoming message trigger.
boolean
Outgoing message trigger.
string
Stored endpoint URL.
number
Unix timestamp in milliseconds.
number
Schedule activity wait time in seconds.
boolean
Schedule activity flag.
string | null
When active_signature was true: a one-time secret string — copy and store it immediately, it will not be retrievable again. When active_signature was false: null.
When active_signature is true, the signature_secret is returned only once at creation time. Store it securely — it cannot be retrieved again. Use it to verify the authenticity of incoming webhook requests.

Webhook Signature Verification

When a webhook is created with active_signature: true, every request our system sends to your endpoint will include an X-Webhook-Signature header. Use it to confirm the request genuinely came from us and was not tampered with. The value is derived from the signature_secret returned at creation time. Compare it in your endpoint handler to validate each incoming request.
If active_signature was false when the webhook was created, this header will not be present in requests sent to your endpoint.
Never log or expose your signature_secret in client-side code or public repositories. If it is compromised, delete the webhook and create a new one with a fresh secret.

Troubleshooting

Webhook Not Receiving Events

  • Verify your endpoint is publicly accessible
  • Check for HTTP 4xx or 5xx responses
  • Ensure proper SSL certificate configuration
  • Verify your webhook is enabled in the dashboard
Each endpoint URL must be unique. If you submit a webhooks URL that is already registered, the API will return a “Same webhook exist” error.To resolve this:
  • Check your existing webhooks in the Developer → Incoming Webhooks tab of the dashboard to confirm whether the URL is already registered.
  • If you want to update settings on an existing webhook (e.g. toggle incoming, change waiting_duration), use the update/edit endpoint instead of re-creating it.
  • If you genuinely need a fresh webhook at the same URL, delete the existing one first, then create a new one.

Need assistance?

Our technical support team is available to assist with webhook configuration, payload handling, and integration questions.