Skip to main content
WhatsApp gives you a fixed set of message types to build a conversation from. Some are plain — text, an image, a document. Others are interactive: reply buttons, scrollable lists, call-to-action links, and multi-screen flows that open inside the chat. Knowing what each one looks like, and what it’s good for, is most of what it takes to design a conversation that feels natural. These are platform building blocks — they exist on WhatsApp itself, whatever tool you use to send them. The code samples on this page show how each maps to a function in a Paige bot, so you can use them directly, but the shape of each message type is the same everywhere.
Interactive messages — buttons, list menus, URL buttons, and flows — are billed as “interactive” messages by WhatsApp. Plain text and media messages are billed as regular messages. Check the Meta pricing page for the current rates for your region.

Message types in detail

Send a plain text message. Supports newlines using \n.
Parameters:
  • conversationId — the conversation ID from your database
  • to — the recipient’s phone number (e.g. "27821234567")
  • text — the message body; use \n for line breaks
Text messages are the simplest message type and work in all WhatsApp clients. Use them for confirmations, plain responses, and any message that does not need user input.

Headers and footers

The three interactive senders — sendInteractiveButtons, sendMenu, and sendURLButton — each take an optional header and footer. They let you put a product photo above the buttons and a line of small print below them, all in one bubble instead of two or three separate messages.
botNumber comes before header and footer. All three senders take the same trailing order — …, botNumber, header, footer. Pass null for botNumber if you don’t have it rather than shifting the header into its place.
An object. Its type decides what kind of header you get. A text header is a short bold line above the body:
A media header uses image, video, or document as its type, and supplies the file one of three ways:
A slug is resolved for you at send time, including re-uploading the file if Meta has expired its copy — you don’t need to track media IDs yourself. See Media and storage for how files get into the library.
A header that can’t be used — no type, a text header with no text, a media header with none of link, mediaId, or slug — is simply left off the message. The send still goes through; you just get the message without a header.
A plain string, shown as small grey text under the message body. No object, no formatting options:
sendFlow does not take a header or footer. Flow messages are limited to their body text and call-to-action button.
You can also send a carousel of up to 10 cards, each with an image, body text, and quick-reply buttons. Carousels are useful for product listings, plan comparisons, or multi-item promotions.
Each card in the cards array takes imageUrl, bodyText, and a buttons array. Button clicks are returned via the webhook as interactive messages with button_reply.

Sending a WhatsApp Flow

To open a multi-screen WhatsApp Flow from within a conversation, use sendFlow. The user taps the call-to-action button and the flow opens inline in WhatsApp.
Unlike the other interactive senders, sendFlow takes no header or footer — a flow message is its body text and its call-to-action button, nothing more. For the thinking behind when to use a flow, see Thinking in flows. For how to create and publish one in Paige, see Flows.