Send and receive messages via WhatsApp Business API (360dialog)
WhatsApp Business API integration for automated messaging in Axellero Workflow Designer and Agentflow Designer via 360dialog.
Setup Required: See the Setup Guide for authentication configuration and connector setup.
Quick Navigation
Setup Guide
Step-by-step authentication and connector configuration
Changelog
Version history and recent updates
Overview
The WhatsApp node enables automation of WhatsApp messaging through the 360dialog Business Solution Provider (BSP). Send text messages, media, interactive buttons, and list menus. Receive incoming messages and delivery status updates via webhooks.
Key Features:
- Send Messages - Send text, images, and documents with optional captions to WhatsApp users
- Templates - Send pre-approved message templates for business-initiated conversations outside the 24-hour window
- Interactive - Quick reply buttons and list selection menus for conversational flows
- Webhooks - Receive incoming messages and delivery status updates in real-time
- Delivery Tracking - Monitor sent/delivered/read status with conversation pricing data
Connection Configuration
| Parameter | Type | Required | Description |
|---|---|---|---|
| apiKey | TEXT | Yes | 360dialog API key (D360-API-KEY) |
| baseUrl | TEXT | No | API base URL (default: https://waba-v2.360dialog.io) |
Setup Instructions: See the Setup Guide for step-by-step instructions on getting your API key, creating connectors, and configuring triggers.
Available Operations
| Category | Operation | Description |
|---|---|---|
| Messages | sendTextMessage | Send a plain text message |
| Messages | sendTemplateMessage | Send a pre-approved message template |
| Messages | sendImageMessage | Send an image with optional caption |
| Messages | sendDocumentMessage | Send a document file |
| Interactive | sendInteractiveButtons | Send message with quick reply buttons (max 3) |
| Interactive | sendInteractiveList | Send message with list selection menu |
| Status | markAsRead | Mark a received message as read |
Operations Reference
Messages
sendTextMessage
Send a plain text message to a WhatsApp user.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| to | TEXT | Yes | Recipient phone number with country code (e.g., 14155238886) |
| body | TEXT | Yes | Message text content (max 4096 characters) |
| previewUrl | BOOLEAN | No | Enable URL preview in the message |
Configuration Example:
{
"to": "{{ctx.vars.customerPhone}}",
"body": "Hello {{ctx.vars.customerName}}, your order #{{ctx.vars.orderId}} has been confirmed!",
"previewUrl": false
}Note: Connector options (apiKey, baseUrl) are automatically injected by the runtime. You only need to specify operation-specific parameters.
Success Response:
{
"messageId": "wamid.HBgLNzcwODE2MDEwMjAVAgARGBI2NDVF...",
"waId": "77081601020"
}Error Response:
{
"error": {
"code": "VALIDATION_ERROR",
"message": "to is required"
}
}sendTemplateMessage
Send a pre-approved message template. Templates are required for initiating conversations with users who haven't messaged you in the last 24 hours.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| to | TEXT | Yes | Recipient phone number with country code |
| templateName | TEXT | Yes | Name of the approved message template |
| languageCode | TEXT | Yes | Template language code (e.g., en, es, pt_BR) |
| components | OBJECT | No | JSON array of template components with parameters |
Configuration Example:
{
"to": "{{ctx.vars.customerPhone}}",
"templateName": "order_confirmation",
"languageCode": "en",
"components": [
{
"type": "body",
"parameters": [
{ "type": "text", "text": "{{ctx.vars.customerName}}" },
{ "type": "text", "text": "{{ctx.vars.orderId}}" }
]
}
]
}Success Response:
{
"messageId": "wamid.HBgLNzcwODE2MDEwMjAVAgARGBI...",
"waId": "77081601020"
}sendImageMessage
Send an image message with an optional caption.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| to | TEXT | Yes | Recipient phone number with country code |
| imageUrl | TEXT | Yes | Public URL of the image (JPEG, PNG supported) |
| caption | TEXT | No | Optional caption for the image (max 1024 characters) |
Configuration Example:
{
"to": "{{ctx.vars.customerPhone}}",
"imageUrl": "{{ctx.vars.productImageUrl}}",
"caption": "Here's the product you requested!"
}Success Response:
{
"messageId": "wamid.HBgLNzcwODE2MDEwMjAVAgARGBI...",
"waId": "77081601020"
}sendDocumentMessage
Send a document file with optional caption and filename.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| to | TEXT | Yes | Recipient phone number with country code |
| documentUrl | TEXT | Yes | Public URL of the document |
| filename | TEXT | No | Document filename to display |
| caption | TEXT | No | Optional caption for the document (max 1024 characters) |
Configuration Example:
{
"to": "{{ctx.vars.customerPhone}}",
"documentUrl": "{{ctx.vars.invoiceUrl}}",
"filename": "Invoice_{{ctx.vars.orderId}}.pdf",
"caption": "Please find your invoice attached."
}Success Response:
{
"messageId": "wamid.HBgLNzcwODE2MDEwMjAVAgARGBI...",
"waId": "77081601020"
}Interactive
sendInteractiveButtons
Send a message with up to 3 quick reply buttons.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| to | TEXT | Yes | Recipient phone number with country code |
| bodyText | TEXT | Yes | Message body text |
| buttons | OBJECT | Yes | JSON array of buttons [{id, title}] (max 3 buttons, title max 20 chars) |
| headerText | TEXT | No | Optional header text |
| footerText | TEXT | No | Optional footer text |
Configuration Example:
{
"to": "{{ctx.vars.customerPhone}}",
"bodyText": "How would you rate our service?",
"headerText": "Feedback Request",
"footerText": "Thank you for your time",
"buttons": [
{ "id": "rating_good", "title": "Good" },
{ "id": "rating_ok", "title": "OK" },
{ "id": "rating_bad", "title": "Bad" }
]
}Success Response:
{
"messageId": "wamid.HBgLNzcwODE2MDEwMjAVAgARGBI...",
"waId": "77081601020"
}sendInteractiveList
Send a message with a list selection menu.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| to | TEXT | Yes | Recipient phone number with country code |
| bodyText | TEXT | Yes | Message body text |
| buttonText | TEXT | Yes | Text for the list menu button |
| sections | OBJECT | Yes | JSON array of sections (max 10 sections, max 10 total rows) |
| headerText | TEXT | No | Optional header text |
| footerText | TEXT | No | Optional footer text |
Configuration Example:
{
"to": "{{ctx.vars.customerPhone}}",
"bodyText": "Please select a category:",
"buttonText": "View Options",
"headerText": "Product Catalog",
"footerText": "Tap to select",
"sections": [
{
"title": "Electronics",
"rows": [
{ "id": "cat_phones", "title": "Smartphones", "description": "Latest mobile devices" },
{ "id": "cat_laptops", "title": "Laptops", "description": "Portable computers" }
]
},
{
"title": "Clothing",
"rows": [
{ "id": "cat_shirts", "title": "Shirts", "description": "Casual & formal" },
{ "id": "cat_pants", "title": "Pants", "description": "Jeans & trousers" }
]
}
]
}Success Response:
{
"messageId": "wamid.HBgLNzcwODE2MDEwMjAVAgARGBI...",
"waId": "77081601020"
}Status
markAsRead
Mark a received message as read, showing blue checkmarks to the sender.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| messageId | TEXT | Yes | The wamid of the message to mark as read |
Configuration Example:
{
"messageId": "{{ctx.steps.triggerStep.messageId}}"
}Success Response:
{
"success": true
}JSON Structure Reference
Template Components (sendTemplateMessage)
The components parameter accepts an array of template component objects:
[
{
"type": "header",
"parameters": [
{ "type": "image", "image": { "link": "https://example.com/image.jpg" } }
]
},
{
"type": "body",
"parameters": [
{ "type": "text", "text": "John Doe" },
{ "type": "text", "text": "ORD-12345" }
]
},
{
"type": "button",
"sub_type": "quick_reply",
"index": 0,
"parameters": [
{ "type": "text", "text": "confirm_123" }
]
}
]| Field | Type | Required | Description |
|---|---|---|---|
| type | string | Yes | Component type: header, body, or button |
| parameters | array | No | Array of parameter objects |
| sub_type | string | No | Button subtype: quick_reply or url |
| index | integer | No | Button index (0-based) |
Parameter types: text, currency, date_time, image, document, video
Interactive Buttons (sendInteractiveButtons)
The buttons parameter accepts an array of 1-3 button objects:
[
{ "id": "btn_yes", "title": "Yes" },
{ "id": "btn_no", "title": "No" },
{ "id": "btn_maybe", "title": "Maybe" }
]| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
| id | string | Yes | Max 256 chars | Unique button identifier (returned in webhook) |
| title | string | Yes | Max 20 chars | Button display text |
Limits: Minimum 1 button, maximum 3 buttons.
Interactive List Sections (sendInteractiveList)
The sections parameter accepts an array of section objects:
[
{
"title": "Category A",
"rows": [
{ "id": "item_1", "title": "Item 1", "description": "Description for item 1" },
{ "id": "item_2", "title": "Item 2" }
]
},
{
"title": "Category B",
"rows": [
{ "id": "item_3", "title": "Item 3", "description": "Description for item 3" }
]
}
]Section Object:
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
| title | string | Yes | Max 24 chars | Section header text |
| rows | array | Yes | Min 1 row | Array of row objects |
Row Object:
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
| id | string | Yes | Max 200 chars | Unique row identifier (returned in webhook) |
| title | string | Yes | Max 24 chars | Row display text |
| description | string | No | Max 72 chars | Optional row description |
Limits: Maximum 10 sections, maximum 10 total rows across all sections.
Triggers
New WhatsApp Message
Triggered when a message is received or message status changes via 360dialog webhook integration.
Supported Events
| Event Code | Event Name | Description |
|---|---|---|
message | New Message | Triggered when a new message is received (text, image, document, interactive reply) |
status | Message Status | Triggered when delivery status changes (sent, delivered, read, failed) |
Configuration Options
| Option | Type | Required | Default | Description |
|---|---|---|---|---|
events | TEXT | No | message | Event types to trigger on (message, status) |
Event Payload Examples
Message Event (message):
{
"_eventType": "message",
"_eventSubType": "text",
"_wabaId": "123456789",
"_phoneNumberId": "851682941371819",
"_displayPhoneNumber": "551146733492",
"contactName": "John Doe",
"contactWaId": "14155238886",
"messageId": "wamid.HBgLNzcwODE2MDEwMjAVAgARGBI...",
"from": "14155238886",
"timestamp": "1770066372",
"timestampISO": "2026-02-02T21:26:12.000Z",
"messageType": "text",
"text": "Hello, I need help with my order"
}Interactive Reply Event (button_reply):
{
"_eventType": "message",
"_eventSubType": "button_reply",
"_wabaId": "123456789",
"_phoneNumberId": "851682941371819",
"_displayPhoneNumber": "551146733492",
"contactName": "John Doe",
"contactWaId": "14155238886",
"messageId": "wamid.HBgLNzcwODE2MDEwMjAVAgARGBI...",
"from": "14155238886",
"timestamp": "1770066400",
"timestampISO": "2026-02-02T21:26:40.000Z",
"messageType": "interactive",
"buttonReplyId": "rating_good",
"buttonReplyTitle": "Good"
}Status Event (status):
{
"_eventType": "status",
"_eventSubType": "delivered",
"_wabaId": "123456789",
"_phoneNumberId": "851682941371819",
"_displayPhoneNumber": "551146733492",
"statusId": "wamid.HBgLNzcwODE2MDEwMjAVAgARGBI...",
"status": "delivered",
"statusTimestamp": "1770066390",
"statusTimestampISO": "2026-02-02T21:26:30.000Z",
"recipientId": "14155238886",
"conversationId": "4ab26f64cef2469d2014da9d0b14741f",
"conversationOriginType": "user_initiated",
"pricingBillable": true,
"pricingModel": "CBP",
"pricingCategory": "user_initiated"
}Webhook Setup: See the Setup Guide for webhook configuration.
Use Cases
Customer Support with Ticket Creation
Automate customer support by creating Linear tickets from incoming WhatsApp messages and confirming back to the customer.
- WhatsApp Trigger: New message received (
messageevent) - Linear - createIssue: Create support ticket with message content
- WhatsApp - sendTextMessage: Confirm ticket creation to customer
- WhatsApp - markAsRead: Mark message as read
Order Notifications via Templates
Send automated order status updates using pre-approved templates on a schedule.
- Schedule Trigger: Run at specified intervals
- WhatsApp - sendTemplateMessage: Send order update template
- WhatsApp Trigger: Listen for
statusevent to track delivery
Interactive Customer Surveys
Collect customer feedback using interactive button messages and process responses.
- WhatsApp - sendInteractiveButtons: Send rating buttons
- WhatsApp Trigger:
button_replyreceived - WhatsApp - sendTextMessage: Send thank you message
Appointment Reminders with Confirmation
Send appointment reminders with interactive confirmation options and handle responses.
- Schedule Trigger: Fire 24 hours before appointment
- WhatsApp - sendInteractiveButtons: Send Confirm/Reschedule/Cancel buttons
- WhatsApp Trigger:
button_replyreceived - WhatsApp - sendTextMessage: Confirm the action taken
Multi-Channel Notifications
Forward important Gmail messages to WhatsApp for immediate mobile attention.
- Gmail Trigger: New email received (label: Important)
- Gmail - getMessage: Fetch full email content
- WhatsApp - sendTextMessage: Forward summary to WhatsApp