rich_card part is one card: a picture or video across the top, a title, a description, and up to four buttons called suggestions. A carousel part is 2 to 10 cards in a row that the person swipes sideways. Only an agent can send either, and a Message carries at most one.
A suggestion is a reply or an action. A reply comes back to your agent as the person’s own message, carrying the reply’s id. An action is done by the person’s phone: it opens a page, calls a number, opens a map, shares a location, or adds an event to the calendar, and sends nothing back.
Send a card
This request sends a text part and then one card. The text shows as a normal message above the card.- Preview
- JSON
Rules for a card
- A card needs at least one of
media,titleordescription. titleis 1 to 200 characters anddescriptionis 1 to 2,000 characters.media.typeisimageorvideo, andmedia.urlis a publichttpsaddress. A video can carry athumbnail_url, shown before it plays.media.heightisshort(112 pt),medium(168 pt, the default) ortall(264 pt).suggestionsholds 1 to 4 suggestions. Eachlabelis 1 to 25 characters.- A Message carries at most one
rich_cardorcarousel, and never aselectionbeside it.
Send a carousel
Acarousel holds 2 to 10 cards. Each card has the same fields as a rich_card, without type. card_width is small (180 pt) or medium (the default), which is as wide as a single card: up to 350 pt, and never wider than a text bubble on the screen. Every card is drawn as tall as the tallest one, and the next card peeks in from the edge so the person knows to swipe.
- Preview
- JSON
id must be unique across the whole part, so one id names one card’s button. A buttons part may follow the card or carousel in the same Message: its buttons are drawn under the cards, and they go away once the person answers the card or taps one of them.
Suggestions
A card’s suggestions stay on the card after the person taps one, so the person can tap them again.
Receive a reply
A tap on areply suggestion arrives as an ordinary message.received. Its parts are a text part equal to the reply’s label, then a suggestion_response part with the reply’s id and label. Its reply_to names the card’s message and part.
id, never on the words. The SDKs read it for you:

