Outbound Webhooks, Event Streams & Security
The event streaming pipeline. Bridge NotifyIQ with your custom backends, CRMs (Zoho, HubSpot, Salesforce), and ERPs. Subscribe to 9 granular WhatsApp and AI event types with cryptographically verifiable HMAC-SHA256 signatures.
1. Purpose of the Page
Outbound Webhooks enable real-time synchronization between NotifyIQ and your existing software stack. Whenever an inbound message arrives, a delivery receipt is acknowledged by Meta, or an AI bot performs a handoff, NotifyIQ dispatches an HTTP POST request to your designated endpoint with millisecond-level latency.
2. Who Uses It (Target Roles)
Configures receiver endpoints, implements HMAC signature verification, and captures message events.
Syncs WhatsApp leads and customer sentiment directly into Zoho CRM or HubSpot contact records.
Audits delivery health, inspects endpoint response latency, and rotates webhook signing secrets.
Interactive Visual Preview
3. Step-by-Step: Registering an Outbound Webhook
- Prepare HTTPS Endpoint: Ensure your receiving server accepts HTTP POST requests with a valid SSL/TLS certificate.
- Register Target URL: Click + Register New Webhook. Enter a human-readable description and paste your HTTPS URL.
- Subscribe to Desired Events: Check the specific event checkboxes your integration requires (e.g.,
message.inboundandlead.status_changed). - Copy Signing Secret: NotifyIQ generates a unique 32-character webhook secret. Save this secret in your receiving server's environment variables to verify HMAC signatures.
- Send Test Ping: Click Test Ping. NotifyIQ sends a mock payload and measures your endpoint's HTTP response code and round-trip latency.
4. 9 Granular Platform Event Types
| Event Key | Category | Trigger Condition | Common Integration Use Case |
|---|---|---|---|
| message.inbound | Messaging | Customer sends a text or media message to WhatsApp number. | Log inbound inquiries into helpdesk ticketing systems. |
| message.status | Messaging | Meta reports message as sent, delivered, read, or failed. | Update campaign analytics and read receipts in ERP. |
| ai.replied | AI & Automation | Gemini bot auto-responds using Knowledge Base context. | Audit AI response accuracy and track token consumption. |
| sentiment.analyzed | AI & Automation | Conversation sentiment classified (positive/neutral/negative/urgent). | Trigger VIP alerts or immediate customer churn warnings. |
| human.handover | AI & Automation | Conversation escalated from AI bot to live human agent. | Route live ticket to on-duty Slack or Teams channel. |
| flow.executed | AI & Automation | Visual flow automation node finishes execution. | Trigger external webhook workflows in Zapier or Make. |
| lead.status_changed | CRM & Contacts | Lead status or stage updated in Contact Lead Drawer. | Update CRM pipeline stages (e.g. Qualified, Proposal Sent). |
| template.status_changed | Meta WABA | Meta approves, rejects, or pauses a WhatsApp template. | Alert marketing team when broadcast template is approved. |
| account.quality_changed | Meta WABA | WABA phone number rating changes (Green / Yellow / Red). | Critical operational alerts for high spam rates. |
5. Verifying HMAC-SHA256 Signatures in Node.js
Every payload contains the header x-notifyiq-signature-256. Validate the signature against the raw body buffer to ensure the request originated from NotifyIQ:
const crypto = require('crypto');
function verifyNotifyIQWebhook(req, secret) {
const signature = req.headers['x-notifyiq-signature-256'];
if (!signature) return false;
const expectedSignature = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(req.rawBody)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expectedSignature)
);
}6. Common Errors & FAQs
NotifyIQ queues undelivered events in BullMQ and retries delivery with exponential backoff (up to 5 attempts over 24 hours). If an endpoint fails continuously (>50 consecutive failures), the webhook is automatically marked inactive to protect queue health.
Your server must acknowledge receipt with an HTTP 200 OK or 204 No Content within 5 seconds. If processing takes longer, ingest the payload into an internal worker queue and return HTTP 200 immediately.