POST /v1/messages with type: "interactive" and an interactive object in WhatsApp’s own shape, so anything from Meta’s docs works unchanged.
They are free-form messages, so they only land inside the 24-hour window. To start a conversation, send a template with buttons instead.
LazyApp checks every limit below before sending. A mistake comes back as a 422 with a plain message on the exact field (for example interactive.action.buttons.1.reply.title), not as Meta’s bare (#131009) Parameter value is not valid after the fact.
Pick the right one
Reply buttons
When the contact taps, you get
message.received with type: interactive and content.interactive.button_reply holding the id and title.
Lists
The choice arrives as
content.interactive.list_reply with the row id, title and description.
Link buttons
A tidy button instead of a long raw URL in the text.header and footer work as for reply buttons. display_text is up to 20 characters; url must start with https:// or http://.
Location requests
message.received with type: location and content.location (latitude, longitude, and name / address when they share them).
Media carousels
Two to ten cards the contact swipes through, each with a picture or video, short text and a button.Meta’s docs set
"type": "cta_url" on every card, including quick-reply cards. LazyApp’s console builder does the same. A tapped quick reply arrives as content.interactive.button_reply.Address messages (India)
Ask an Indian customer for a delivery address in a WhatsApp form. Only for India-based businesses messaging customers in India: LazyApp refuses the send when either number is not+91 (or the customer’s username id does not start with IN.), because WhatsApp would drop it anyway.
countrymust beIN.valuespre-fills the form.saved_addresseslets the contact pick an address in one tap.validation_errors(field → message) sends the form back with an error under a field, for example a pin code you cannot deliver to.- Fields:
name,phone_number,in_pin_code(6 digits),house_number,floor_number,tower_number,building_name,address,landmark_area,city,state.
message.receivedwithcontent.interactive.nfm_reply(name: address_message).address.receivedwith the parsed address:
attributes.whatsapp_address, and the inbox offers it as a saved address the next time an agent asks.
If the contact’s WhatsApp app cannot show an address form, Meta reports the message as failed with code 1026.
Other interactive types
flow, catalog_message, product, product_list, order_details, order_status, call_permission_request and contact_information_request also go under interactive. LazyApp passes them to WhatsApp as you send them. See Flows, Catalog and Calling.
Groups
WhatsApp groups do not accept interactive messages. A send to a group withtype: interactive is refused before it reaches Meta.