# Rich messages

Build a message with buttons, media, cards, or a carousel once and send it over RCS, WhatsApp, LINE, and Facebook Messenger. Pushwoosh checks the content against each channel while you edit and turns it into a preset for each channel, so you don't build the same message four times.

<Aside type="note">
Rich messages are turned on per account. If you don't see the **Rich messages** tab, contact your Pushwoosh account manager.
</Aside>

## Before you start

Pushwoosh creates a copy of the message only for channels set up in the project. A channel that isn't set up gets the **Has errors** status, and nothing is sent there.

* **RCS**: connect Twilio with your own account credentials and a Messaging Service. A Twilio number without a Messaging Service can't send RCS. See [RCS messages through Twilio](/product/messaging-channels/sms/rcs-messages/).
* **WhatsApp**: [connect your WhatsApp Business account](/product/first-steps/start-with-your-project/configure-platforms/whatsapp-configuration/) for the project.
* **LINE**: [configure the LINE platform](/product/messaging-channels/LINE/) for the project.
* **Facebook Messenger**: [connect your Facebook Page](/product/first-steps/start-with-your-project/configure-platforms/facebook-messenger-configuration/).

## Create a rich message

1. Go to **Content > Messenger presets**.
2. Open the **Rich messages** tab.
3. Click **Create rich message**. On an empty tab, the button is **Create content**.
4. Click **Untitled** next to **Rich message** at the top and enter a name for the message.

## Add languages

The message starts with the **Default language**, which is sent to users with no matching language. To add translations:

1. Click the **plus (+) icon** next to the language dropdown.
2. Select the languages you want to add.
3. Switch between languages in the dropdown and fill in the content for each one.

Every language has its own content type and fields. The channel status is the worst one across all languages: if one language has errors in a channel, the whole message has errors there.

## Choose the content type

On the **Details** tab, select a **Type**. The type decides which fields the form shows:

| Type | What you fill in | Shown as designed in |
| :---- | :---- | :---- |
| **Text** | **Body** | RCS, WhatsApp, LINE, Messenger |
| **Media** | **Body**, **Media URL**, **Media type** | RCS, WhatsApp, LINE, Messenger |
| **Quick reply** | **Body** and reply buttons | RCS, WhatsApp, LINE, Messenger |
| **Call to action** | **Body** and buttons that open a URL or call a phone number | RCS, WhatsApp, LINE, Messenger |
| **List picker** | **Body**, **List button text**, and list items | WhatsApp, inside the 24-hour window only. Other channels send the fallback text |
| **Card** | One card with media, a title, a body, a footer, and buttons | RCS, WhatsApp, LINE, Messenger |
| **Carousel** | Two to ten cards | RCS, WhatsApp, LINE, Messenger |
| **Custom LINE Flex** | **Flex JSON**: a LINE `bubble` or `carousel` container | LINE only. Other channels send the fallback text |

**Quick reply**, **Call to action**, and **List picker** also show **Header text**, **Header media URL**, and **Footer**. Only WhatsApp displays them. RCS, LINE, and Messenger leave them out.

### Write the body

Type the message text in **Body**. You can insert emoji and personalization placeholders. In RCS and WhatsApp templates, the text goes into a provider template, so Liquid control tags such as `{% if %}` or `{% for %}` aren't allowed: a message with them gets **Has errors** for RCS and can't be submitted as a WhatsApp template.

### Add media

1. Paste the file link into **Media URL**. Use an `https://` link.
2. Select the **Media type**: **Image**, **Video**, **Document**, or **Audio**.
3. For a video, enter a **Video poster URL**. LINE needs this image to show the video, and the LINE status shows an error without it.

LINE doesn't send audio or documents: for these media types, LINE sends the fallback text. In the **Media** type, LINE doesn't show the **Body**, and Messenger sends the file without a caption.

### Add buttons

1. Click **Add button**.
2. In **Call to action**, select the **Type of action**: **Open URL** or **Call phone**.
3. Enter the button **Title**.
4. For **Open URL**, enter the **URL**. For **Call phone**, enter the **Phone number** in international format, for example `+1234567890`.

Pushwoosh gives every button an ID when you save. Journeys branch on that ID, so renaming a button later keeps its branch in journeys that already use it.

### Build a list

For **List picker**, enter the **List button text**, then click **Add item** and fill in **Item name** and, optionally, **Item description** for each item.

Only WhatsApp shows a list, and only inside the 24-hour window, because a list can't be a WhatsApp template. RCS, LINE, and Messenger send the [fallback text](#set-the-fallback-text) instead. Use a list picker only when the fallback text works on its own.

### Build cards

For **Card**, fill in the card. For **Carousel**, click **Add card** for each card, up to ten. Each card has:

* **Media URL** and **Media type**
* **Card title**
* **Card body** (optional)
* **Footer** (optional)
* Buttons: **Quick reply**, **Open URL**, or **Call phone**

Under **RCS card layout**, set **Orientation**, **Height**, and **Thumbnail alignment** to change how the card looks in RCS. Leave them at **Default** to use the RCS default layout.

The channels accept different cards:

* **RCS carousel:** every card needs an image or a video, a **Card body**, and one or two buttons. The buttons must be of the same types in the same order on every card. RCS doesn't show the card **Footer** in a carousel. In a single card, the footer is shown under the body and can't contain placeholders.
* **Messenger:** every card needs a **Card title**, and card media must be an image. Messenger doesn't show the card **Footer**.
* **LINE:** card media must be an image.

### Paste a LINE Flex message

For **Custom LINE Flex**, paste a Flex container into **Flex JSON**. The container type must be `bubble` or `carousel`. LINE sends it as is, and RCS and Messenger send the fallback text.

## Set the fallback text

Enter **Fallback text** at the bottom of the **Details** tab. Pushwoosh sends it:

* in channels that can't show the content type, for example a list picker in RCS
* as an SMS to phones without RCS
* as the LINE notification and chat-list text for cards, carousels, calls to action, and Flex messages.

A channel that can't show the content type needs **Fallback text**: without it, the channel gets **Has errors**. For the SMS to phones without RCS and for the LINE notification text, Pushwoosh uses the **Body** when **Fallback text** is empty. With both empty, RCS gets **Has errors**, and so does LINE for cards, carousels, calls to action, and Flex messages.

## Check channel compatibility

The **Channels** strip under the header shows one badge per channel. Pushwoosh rechecks the message when you leave a field or change a dropdown.

| Badge color | Status | What it means |
| :---- | :---- | :---- |
| Green | Compatible | The channel sends the message as designed. |
| Orange | Partially compatible | The channel can't show some of the content and sends the fallback text instead. |
| Red | Has errors | Nothing is sent to this channel until you fix the errors. |
| Gray | Not checked | The message hasn't been checked yet, or the check failed. Edit a field to check again. |

Click a badge to see the issues for that channel under the strip and to preview the message in that channel on the right. Each issue names the field and the rule it breaks.

In this example, RCS has errors because the project has no Twilio Messaging Service:

<img src="/content-rich-messages-2.webp" alt="Rich message editor header with RCS, WhatsApp, Messenger, and LINE badges and an RCS is not set up issue under them" width="841"/>

### Channel limits

The editor checks these limits and marks a channel red when the content goes over one of them.

WhatsApp limits differ between the template and the 24-hour message. The **WhatsApp** badge lists the issues for both.

| Limit | RCS | LINE | Messenger |
| :---- | :---- | :---- | :---- |
| **Body** of **Text** and **Media** | 1,600 characters | 5,000 characters (**Text**) | 2,000 characters |
| Quick reply buttons | 1–4 | 1–13 | 1–13 |
| Quick reply button title | 25 characters | 20 characters | 20 characters |
| Call to action buttons | 1–4 | 1 or more | 1–3 |
| Call to action button title | 25 characters | 40 characters | 20 characters |
| **Body** of **Call to action** | 1,600 characters | No editor check | 640 characters |
| Cards in a carousel | 2–10 | 2–10 | 2–10 |
| **Card title** | 200 characters | No editor check | 80 characters |
| **Card body** | 1,600 characters (single card), 160 characters for title and body together (carousel) | No editor check | 80 characters |
| Buttons on a card | 0–4 (single card), 1–2 (carousel) | No editor check | 0–3 |
| **Fallback text** | 1,600 characters | 5,000 characters, 400 for cards, carousels, calls to action, and Flex | 2,000 characters |

## Get the WhatsApp template approved

Outside the 24-hour window that a user's last message opens, WhatsApp delivers only templates approved by Meta. Until the rich message has an approved template, Pushwoosh sends it on WhatsApp only to users who wrote to you in the last 24 hours, and the **WhatsApp** badge stays orange.

1. On the **General info** tab, select the **WhatsApp category**: **Marketing** or **Utility**. Meta prices and reviews templates by category.
2. Save the rich message.
3. Click **Save and submit for WhatsApp approval**. Pushwoosh saves the message and sends a template for every language to Meta.

The line under the **Channels** strip shows the review state after **WhatsApp template:**. Before you submit, it reads **not submitted**:

<img src="/content-rich-messages-4.webp" alt="Rich message editor with the WhatsApp badge selected, the 24h window issue, the Save and submit for WhatsApp approval button, and WhatsApp template: not submitted" width="841"/>


Review states:

| State | What it means |
| :---- | :---- |
| **not submitted** | The template hasn't been sent to Meta. WhatsApp gets the message only inside the 24-hour window. |
| **pending review** | Meta is reviewing the template. Until it's approved, WhatsApp gets the message only inside the 24-hour window. |
| **approved** | WhatsApp sends the template to any user. |
| **the latest change is pending review, the approved version is sent** | You edited and resubmitted an approved message. Outside the 24-hour window, users get the previously approved version. |
| **rejected** | Meta rejected the template, and the reason follows the state. Fix the content and submit it again. |

Pushwoosh checks the review state with Meta every few minutes. To check right away, click **Refresh status**. With several languages, the state shown is the one furthest from approval.

**Save and submit for WhatsApp approval** is unavailable when:

* WhatsApp isn't set up in the project.
* the type is **Carousel**: a carousel goes out on WhatsApp only inside the 24-hour window.
* WhatsApp can't build a template from the type, for example **List picker** or **Custom LINE Flex**.

Editing an approved message doesn't stop it: outside the 24-hour window, the approved version keeps going out until Meta approves the new one. Submit the message again after each edit.

## Save the rich message

Click **Save**. Pushwoosh saves the message and, for every channel that isn't red, creates or updates its copy:

* **RCS**: an SMS preset with the same name. Pushwoosh creates an RCS template in your Twilio account and attaches it to the preset. Phones without RCS get the fallback text as an SMS.
* **WhatsApp**: a WhatsApp preset with the same name, available in the **WhatsApp** journey element and in one-time WhatsApp messages.
* **LINE**: a LINE preset with the same name.
* **Messenger**: a Messenger preset with the same name, available in the **Facebook Messenger** journey element.

A red channel keeps its last copy as it was. If a journey already sends that copy, it keeps sending the old content until you fix the errors and save again.

### Copies are read-only

The SMS and LINE copies appear on the **SMS** and **LINE** tabs with a **Rich message** badge:

<img src="/content-rich-messages-3.webp" alt="LINE tab of Messenger presets with three presets marked with the Rich message badge" width="1132"/>

To change a copy, edit the rich message:

* Click the copy or its **Edit** action: the rich message opens in the editor.
* You can't delete a copy. Delete the rich message instead.

## Send a rich message in a journey

Select the copy in the element of its channel:

* **SMS**: select the SMS copy as the preset. See [Branch on RCS reply buttons](/product/customer-journey/journey-elements/channels/sms/#branch-on-rcs-reply-buttons).
* **LINE**: select the LINE copy as the preset. See [Branch on reply buttons](/product/customer-journey/journey-elements/channels/line/#branch-on-reply-buttons).
* **WhatsApp**: select the rich message in the template dropdown, where it has a **Rich message** badge. See [Use a rich message](/product/customer-journey/journey-elements/channels/whatsapp/#use-a-rich-message).
* **Facebook Messenger**: select **Preset**, then the Messenger copy. See [Branch on reply buttons](/product/customer-journey/journey-elements/channels/facebook-messenger/#branch-on-reply-buttons).

When the message has quick reply buttons, the element gets a branch for each button plus **Not match**.

## Send a rich message as a one-time WhatsApp message

In a one-time WhatsApp message, select the rich message in the template dropdown on the **Content** step. An approved rich message goes to any audience. Without an approved template, it goes only to contacts with an open 24-hour window, and the audience and sending time are fixed. See [Send a rich message](/product/messaging-channels/whatsapp-messages/send-whatsapp-messages/send-one-time-whatsapp/#send-a-rich-message).

## Manage rich messages

Rich messages are listed on the **Rich messages** tab with a badge for each channel. Hover over a badge to see its issues.

<img src="/content-rich-messages-1.webp" alt="Rich messages tab with three messages and a compatibility badge for RCS, WhatsApp, Messenger, and LINE on each" width="1132"/>

Open the **⋮** menu of a message to:

* **Edit** it.
* **Duplicate** it. The duplicate gets its own copies in every channel that isn't red.
* **Delete** it. Pushwoosh deletes its copies too. You can't delete a rich message while a journey sends one of its copies: remove it from the journey first.