Interactive CTA Message
CTA (Call-to-Action) URL messages render a tappable button that opens a specified URL. Supported optional fields: header (text only, max 60 chars) and footer_text (max 60 chars). Six scenarios from the Postman collection are documented below.
Folder: Interactive CTA message
POST https://apis.rmlconnect.net/wba/v1/messages
With header + footer
Full CTA message with optional text header and footer. Validates the standard happy-path payload structure.
NoteNote: The body in the collection for this test case is a long text string. The media object with interactive_cta is the intended payload structure. Refer to section 4.2 for the correct CTA with header+footer example.
POST https://apis.rmlconnect.net/wba/v1/messages
Full interactive CTA with header text and footer text.
{
"phone": "{phone}",
"type": "send-direct",
"text": "<long body text \u2014 1024 character boundary test string>"
}Footer over 60 characters
Negative test — footer_text is 65 characters, exceeding the 60-character limit. Should return a validation error.
POST https://apis.rmlconnect.net/wba/v1/messages
Negative test — footer_text exceeds 60 characters.
{
"phone": "{phone}",
"type": "send-direct",
"ttl_seconds": 121,
"enable_acculync": false,
"media": {
"type": "interactive_cta",
"header": {
"text": "Order Update"
},
"footer_text": "{sample_text_65_chars}",
"body": "Track your order below",
"action": {
"parameters": {
"display_text": "Track Order",
"url": "https://track.example.com"
}
}
}
}Header over 60 characters
Negative test — header.text is 65 characters, exceeding the 60-character limit. Should return a validation error.
POST https://apis.rmlconnect.net/wba/v1/messages
Negative test — header.text exceeds 60 characters.
{
"phone": "{phone}",
"type": "send-direct",
"ttl_seconds": 121,
"enable_acculync": false,
"media": {
"type": "interactive_cta",
"header": {
"text": "{sample_text_65_chars}"
},
"footer_text": "RML Connect",
"body": "Track your order below",
"action": {
"parameters": {
"display_text": "Track Order",
"url": "https://track.example.com"
}
}
}
}Header exactly 60 characters
Positive boundary test — header.text is exactly 60 characters. Should be accepted.
POST https://apis.rmlconnect.net/wba/v1/messages
Positive boundary test — header.text is exactly 60 characters.
{
"phone": "{phone}",
"type": "send-direct",
"ttl_seconds": 121,
"enable_acculync": false,
"media": {
"type": "interactive_cta",
"header": {
"text": "This sentence is exactly sixty characters long for testing.."
},
"footer_text": "RML Connect",
"body": "Track your order below",
"action": {
"parameters": {
"display_text": "Track Order",
"url": "https://track.example.com"
}
}
}
}Without header or footer
Minimal CTA message with only body and action. Header and footer are optional and omitted here.
POST https://apis.rmlconnect.net/wba/v1/messages
{
"phone": "{phone}",
"type": "send-direct",
"enable_acculync": false,
"media": {
"type": "interactive_cta",
"body": "Click to view invoice",
"action": {
"parameters": {
"display_text": "View Invoice",
"url": "https://inv.example.com"
}
}
}
}Missing required field: body
Negative test — the body field is absent from the media object. Should return a validation error.
POST https://apis.rmlconnect.net/wba/v1/messages
Negative test — media.body is absent.
{
"phone": "{phone}",
"type": "send-direct",
"media": {
"type": "interactive_cta",
"action": {
"parameters": {
"display_text": "Click",
"url": "https://example.com"
}
}
}
}Field reference
| Field | Type | Required | Description |
|---|---|---|---|
| media.type | string | Yes | "interactive_cta" |
| media.body | string | Yes | Main message body text. Displayed above the action button. |
| media.header | object | No | Optional header object. Only text type supported. |
| media.header.text | string | No | Header text. Max 60 characters. |
| media.footer_text | string | No | Footer text. Max 60 characters. |
| media.action | object | Yes | Action definition. |
| media.action.parameters.display_text | string | Yes | Button label shown to user. |
| media.action.parameters.url | string | Yes | URL opened when button is tapped. Must be HTTPS. |
Updated 12 days ago