Businesses have two options to share products when chatting with their customers:
Both Multi-Product Messages and Single Product Messages are types of interactive
messages.
Multi-Product message example: | Single Product message example: |
![]() | ![]() |
Menu triggered when user clicks on Start Shopping: | Product Detail Page example: |
![]() | ![]() |
Users that receive Multi and Single Product Messages can perform 3 main actions:
If a customer has Multiple devices linked to the same WhatsApp account, the Multi-Product and Single Product Messages will be synced between devices. However, the shopping cart is local to each specific device. See Shopping Cart Experience for details.
Currently, these types of messages can be received in the following platforms:
2.21.100
(Multi-Product Messages) and 2.21.210
(Single Product Messages).2.21.9.15
(Multi-Product Messages) and 2.21.19
(Single Product Messages).If the recipient’s app version does not support Multi or Single Product Messages, the business receives a webhook notification throwing an error that describes why the message was unable to be sent.
Multi-Product Messages and Single Product Messages can be:
Multi-Product Messages and Single Product Messages cannot be:
Businesses may need to update properties of items in their catalog. Depending on the updated property, this is how we handle any messages mentioning that product:
Updated Property | Update Process |
---|---|
Product’s price, title, description, and image. |
|
Availability change |
|
After viewing products, a customer can add them to their shopping cart and send that cart to a business. For the purposes of commerce on WhatsApp, a shopping cart:
Customers can add up to 99 units of each single catalog item to a shopping cart, but there is no limit on the number of distinct items that can be added to a cart.
Once a cart has been sent, no edits can be made. Customers can send a new cart if they need new items, or would like to change their order. Businesses cannot send carts to customers.
![]() | ![]() |
Both Multi and Single Product Messages lend themselves best to user experiences that are simple and personalised, where it’s a better experience to guide the customer to a subset of items most relevant to them, rather than browsing a business’ full inventory.
Combining the features with navigation tools like NLP, text search or List Messages and Reply Buttons to get to what the customer is looking for fast.
Populated dynamically so can be personalised to the customer or situation. For example, you can show a Multi-Product Message of a customer’s most frequently ordered items.
A performant channel for driving orders, during testing businesses had an average 7% conversion of Multi-Product Messages sent to carts received.
Interactive messages do not require templates or pre-approvals. They are generated in real-time and will always reflect the latest item details, pricing and stock levels from your inventory.
Multi-Product Messages are best for guiding customers to a specific subset of a business’ inventory, such as:
Single Product Messages are best for guiding customers to one specific item from a business’ inventory, offering quick responses from a limited set of options, such as:
Both features can also be used as part of a human agent flow, however you need to build the tooling to allow the human agent to generate a Multi-Product Message or Single Product Message in thread.
Before sending each message, you need to get your receiver’s WhatsApp ID with a call to the /contacts
node.
We recommend setting up webhooks to receive message status and inbound message notifications. This way, you can track if a message was sent and the answers from customers.
To send a Single Product Message, assemble an interactive
object of type product
with the following components:
Object | Description |
---|---|
| Optional. A body object. See all options for the |
| Optional. A footer object. See all options for the |
| Required. The action field must include:
|
By the end, the interactive object should look something like this:
"interactive": { "type": "product", "body": { "text": "text-body-content" }, "footer": { "text": "text-footer-content" }, "action": { "catalog_id": "catalog-id", "product_retailer_id": "product-SKU-in-catalog" } }
To send a Multi-Product Message, assemble an interactive
object of type product_list
with the following components:
Object | Description |
---|---|
| Required. The header’s |
| Required. A |
| Optional. A |
| Required. The action field must include:
Inside each section, you can include the following:
Each product object contains a |
By the end, the interactive
object should look something like this:
"interactive": { "type": "product_list", "header":{ "type": "text", "text": "text-header-content" }, "body":{ "text": "text-body-content" }, "footer":{ "text":"text-footer-content" }, "action":{ "catalog_id":"catalog-id", "sections": [ { "title": "the-section-title", "product_items": [ { "product_retailer_id": "product-SKU-in-catalog" }, { "product_retailer_id": "product-SKU-in-catalog" }, ... ]}, { "title": "the-section-title", "product_items": [ { "product_retailer_id": "product-SKU-in-catalog" } ... ]}, ... ] }, }
If none of the items provided in the API calls above matches a product from the business’ Facebook catalog, an error message is sent and the Multi or Single Product Message is not sent to the user.
For Multi-Product Message, at least one item from the products list must match an item from the business’ Facebook Catalog. In this case:
Once the interactive object is complete, append the other parameters that make a message: recipient_type
, to
, and type
. Remember to set the type
to interactive
.
{ "recipient_type": "individual", "to" : "whatsapp-id", // WhatsApp ID of the recipient "type": "interactive", "interactive":{ // The interactive object } }
See parameters common to all message types here.
POST
Call to /messages
Make a POST
call to the /messages
endpoint with the JSON
object you have assembled in steps 1 and 2. If your message is sent successfully, you get the following response:
{ "messages": [{ "id": "{message-id}" }] }