Interactive Reply Button Message

Reply button messages present up to 3 quick-reply buttons. Tapping a button returns the button id to your webhook. Five scenarios from the Postman collection are documented below.

Folder: Interactive Reply buttons

POST https://apis.rmlconnect.net/wba/v1/messages

Reply buttons

Full interactive reply message with 2 buttons, header, and footer. Note: ttl_seconds is 29, which is below the 30-second minimum — this also serves as a TTL validation test.

POST https://apis.rmlconnect.net/wba/v1/messages

{
  "phone": "{phone}",
  "type": "send-direct",
  "ttl_seconds": 29,
  "enable_acculync": false,
  "media": {
    "type": "interactive_reply",
    "body": "Confirm your appointment?",
    "button": [
      {
        "id": "yes",
        "title": "Confirm"
      },
      {
        "id": "no",
        "title": "Cancel"
      }
    ],
    "footer_text": "Reply to confirm",
    "header": {
      "text": "Appointment"
    }
  }
}
📘

Note

ttl_seconds: 29 is intentionally below the 30-second minimum in this test. Remove ttl_seconds or use >= 30 for a valid production request.

Without optional header and footer

Minimal reply button message with 3 buttons. Header and footer omitted.

POST https://apis.rmlconnect.net/wba/v1/messages

{
  "phone": "{phone}",
  "type": "send-direct",
  "enable_acculync": false,
  "media": {
    "type": "interactive_reply",
    "body": "Rate your experience",
    "button": [
      {
        "id": "1",
        "title": "Good"
      },
      {
        "id": "2",
        "title": "Average"
      },
      {
        "id": "3",
        "title": "Poor"
      }
    ]
  }
}
📘

Info

Expected: 201 or 202. Header and footer are optional.

Button text over 20 characters

Negative test — button title is 21 characters, exceeding the 20-character limit. Should return a validation error.

POST https://apis.rmlconnect.net/wba/v1/messages

Negative test — button title is 21 characters.

{
  "phone": "{phone}",
  "type": "send-direct",
  "media": {
    "type": "interactive_reply",
    "body": "Choose an option",
    "button": [
      {
        "id": "1",
        "title": "Sample text for 21 ch"
      }
    ]
  }
}
📘

Note

Expected: 400 Bad Request. button[].title must not exceed 20 characters.

Button title exactly 20 characters

Positive boundary test — button title is exactly 20 characters. Should be accepted.

POST https://apis.rmlconnect.net/wba/v1/messages

Positive boundary test — button title is exactly 20 characters.

{
  "phone": "{phone}",
  "type": "send-direct",
  "media": {
    "type": "interactive_reply",
    "body": "Choose an option",
    "button": [
      {
        "id": "1",
        "title": "Sample text for 20ch"
      }
    ]
  }
}
📘

Info

Expected: 201 or 202. Exactly 20 characters is within the allowed limit.

More than 3 reply buttons (max = 3)

Negative test — 4 buttons are provided, exceeding the maximum of 3. Should return a validation error.

POST https://apis.rmlconnect.net/wba/v1/messages

Negative test — 4 buttons provided.

{
  "phone": "{phone}",
  "type": "send-direct",
  "media": {
    "type": "interactive_reply",
    "body": "Pick one",
    "button": [
      {
        "id": "1",
        "title": "A"
      },
      {
        "id": "2",
        "title": "B"
      },
      {
        "id": "3",
        "title": "C"
      },
      {
        "id": "4",
        "title": "D"
      }
    ]
  }
}
📘

Note

Expected: 400 Bad Request. Maximum of 3 reply buttons allowed.

Field reference

FieldTypeRequiredDescription
media.typestringYes"interactive_reply"
media.bodystringYesMain message text displayed above buttons.
media.buttonarrayYesArray of button objects. Maximum 3.
media.button[].idstringYesUnique identifier returned via webhook when the button is tapped.
media.button[].titlestringYesButton label shown to user. Max 20 characters.
media.headerobjectNoOptional text header. Max 60 characters.
media.footer_textstringNoOptional footer text. Max 60 characters.


Did this page help you?