Send Message
Send Message sends a WhatsApp message through the Cloud API: free text (within 24 hours of the user's last message), an approved template (business-initiated), media by id or public link, interactive buttons or lists, a location, contacts or a reaction.
It calls POST https://graph.facebook.com/v25.0/{phoneNumberId}/messages.
Pick Message Type on the Configuration tab and fill the matching object on the
Input tab. messaging_product (whatsapp) and recipient_type are sent automatically.
The activity has four tabs: Configuration, Auth, Input and Output.
Configuration
| Field | Required | Description |
|---|---|---|
| Name | Optional | Name of the step, should be unique within this workflow. |
| Description | Optional | Describe the purpose or function of this step. |
| Phone Number ID | Optional | The business phone number id that sends the message (WhatsApp Manager → API Setup), not the phone number itself. Sent as the phoneNumberId path parameter. |
| To | Optional | Recipient phone number with country code, digits only (for example 918720800616). When Recipient Type is group, the WhatsApp group id. Sent as body.to. |
| Message Type | Optional | One of text, template, image, video, document, audio, sticker, interactive, location, contacts, reaction. Defaults to text. Fill the matching object (for example body.template) on the Input tab. Sent as body.type. |
| Recipient Type | Optional | individual (default): To is a phone number. group: To is a WhatsApp group id. Sent as body.recipient_type. |
The form doesn't enforce Phone Number ID or To, but Meta rejects a message without them. Every field except Name and Description accepts a fixed value, a global variable, or a value mapped from an earlier step.
Auth
| Field | Required | Description |
|---|---|---|
| Auth Type | Optional | OAuth 2, the only option. WhatsApp uses the Meta OAuth connection. |
| WhatsApp Connection | Optional | The WhatsApp resource, which needs the whatsapp_business_messaging scope. |
Input
This activity is built on the REST Client. The Input tab is the
HTTP request; the message goes under body.
| Field | Required | Data Type | Description |
|---|---|---|---|
| Target | Required | Object | The HTTP request. Map the message object under body. |
Fill the object that matches Message Type:
| Message Type | Object | Key fields |
|---|---|---|
text | body.text | body (up to 4096 characters), preview_url to show a preview of the first URL |
template | body.template | name, language.code (must match a language the template was approved in), components with the parameter values |
image, video, document, audio, sticker | body.image and so on | id (uploaded media) or link (public HTTPS URL). caption for image, video and document; filename for document |
interactive | body.interactive | type (button, list, cta_url, flow, product, product_list, …), header, body.text, footer, action |
location | body.location | latitude, longitude, name, address |
contacts | body.contacts | One or more contact cards; name.formatted_name is required for each |
reaction | body.reaction | message_id of the message reacted to, emoji (an empty string removes the reaction) |
To send the message as a reply, add body.context.message_id with the id of the earlier
message.
Size limits for media: image (JPEG, PNG) 5 MB; video (MP4, 3GP) 16 MB; audio 16 MB; document 100 MB; sticker (WebP) 100 KB static or 500 KB animated.
For template parameters, each entry in template.components has a type (header, body
or button) and parameters. A parameter has a type (text, currency, date_time,
image, document, video, location, payload, coupon_code or action) and the
matching value field. Add parameter_name for templates with named placeholders
({{first_name}}); leave it out for positional ones ({{1}}), where order matters.
Output
The activity returns an httpResponse object.
| Field | Data Type | Description |
|---|---|---|
| status.code | Integer | Numeric HTTP status code. |
| status.message | String | Short message associated with the HTTP status. |
| headers | Object | HTTP response headers. |
| body | Object | Parsed body of the response. |
On success, the response body carries:
| Field | Data Type | Description |
|---|---|---|
| messaging_product | String | Always whatsapp. |
| contacts[].input | String | The value you sent in To. |
| contacts[].wa_id | String | The recipient's WhatsApp id. |
| messages[].id | String | Message id (wamid). Use it for replies (context.message_id) and reactions. |
| messages[].message_status | String | Pacing status for template messages, for example accepted or held_for_quality_assessment. |