Multi-Product Message Templates
MPM templates can be used to open marketing conversations. They allow you to showcase up to 30 products from your e-commerce catalog, organized in up to 10 sections, in a single message.
Customers can browse products and sections within the message, view details for each product, add and remove products from their cart, and submit their cart to place an order. Orders are then sent to you via a webhook.
Limitations
- Customers must be using WhatsApp v2.22.24 or greater.
- MPM templates cannot be forwarded to other customers.
Refer here for detailed information on how to create and use MPM templates.
Create MPM Templates
- Supported on both CAPI and On-Premise
- Template Type should always be βPRODUCT"
- Category Type should always be βMARKETING"
- Catalog connection is not required for template creation (but will be required while sending the template)
Meta Payloads Example
{
"name": "abandoned_cart",
"language": "en_US",
"category": "MARKETING",
"components": [
{
"type": "HEADER",
"format": "TEXT",
"text": "Forget something, {{1}}?",
"example": {
"header_text": [
"Pablo"
]
}
},
{
"type": "BODY",
"text": "Looks like you left these items in your cart, still interested? Use code {{1}} to get 10% off!",
"example": {
"body_text": [
[
"10OFF"
]
]
}
},
{
"type":"BUTTONS",
"buttons": [
{
"type": "MPM",
"text": "View items"
}
]
}
]
}
Request
curl --location 'https://api.gupshup.io/wa/app/:appId/template' \
--header 'apikey: {{api_key}}' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'languageCode={{language_code}}' \
--data-urlencode 'content={{template body}}' \
--data-urlencode 'footer={{template footer}}' \
--data-urlencode 'category=MARKETING' \
--data-urlencode 'example={{template body example}}' \
--data-urlencode 'vertical={{template vertical}}' \
--data-urlencode 'elementName={{template name}}' \
--data-urlencode 'templateType=PRODUCT' \
--data-urlencode 'header=Hi {{1}}' \
--data-urlencode 'exampleHeader=Hi Aditya'
Response
{
"status": "success",
"template": {
"appId": "ceb2b861-24f6-406c-901f-3f788e02f5ea",
"category": "MARKETING",
"containerMeta": "{\"appId\":\"ceb2b861-24f6-406c-901f-3f788e02f5ea\",\"data\":\"Dear {{1}}, here are our products.\",\"buttons\":[{\"type\":\"MPM\",\"text\":\"View items\"}],\"header\":\"Hi {{1}}\",\"footer\":\"Thank you for shopping with us\",\"sampleText\":\"Dear Aditya, here are our products.\",\"sampleHeader\":\"Hi Aditya\",\"enableSample\":true,\"editTemplate\":false,\"allowTemplateCategoryChange\":false,\"addSecurityRecommendation\":false}",
"createdOn": 1689576457337,
"data": "Hi {{1}}\nDear {{1}}, here are our products.\nThank you for shopping with us | [View items]",
"elementName": "mpm_self_catalog_ex1",
"id": "be3a1398-a209-4c51-b47b-8595e144e90a",
"languageCode": "en",
"languagePolicy": "deterministic",
"meta": "{\"example\":\"Dear Aditya, here are our products.\"}",
"modifiedOn": 1689576457337,
"namespace": "6a54628a_7f29_45a7_80b1_46549f39062d",
"priority": 1,
"retry": 0,
"stage": "NONE",
"status": "PENDING",
"templateType": "PRODUCT",
"vertical": "Testing",
"wabaId": "103775135696983"
}
}
Request Parameters
Key | Description | Constraints |
---|---|---|
apikey | Apikey of the account where the app is to be created | Should be a valid gupshup.io apikey |
languageCode | Source Phone Number | |
content | Source App Name | |
footer | Destination number | Optional |
category | Catalog message payload | Must always be MARKETING for catalog template |
example | Channel to send messages to | If params are used in body |
vertical | Template Vertical | |
elementName | Template Name | |
templatetType | Template Type | Must be PRODUCT for MPM template |
header | Template header | |
exampleHeader | Template header example | if params are used in header |
appId | Valid App Id |
Response Parameters
Key | Description |
---|---|
status | Creation status |
template | Template get created |
Send MPM Templates
- Supported on both CAPI and On-Premise (Currently there is error in MPM on-premise messaging from Meta side)
- Template params should contain valid values (Example displayed below)
- Sending these templates not supported through Gupshup UI
Request
curl --location 'https://api.gupshup.io/wa/app/:appId/template' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'apikey: {{apiKey}}' \
--data-urlencode 'channel=whatsapp' \
--data-urlencode 'source={{sender_phone_number}}' \
--data-urlencode 'destination={{destination_phone_number}}' \
--data-urlencode 'src.name={{app_name}}' \
--data-urlencode 'template={"id":"{{template_id}}","params":{{template_params_list}},"mpm":{"sections":[{"title":"{{section_title}}","products":{{section_product_list}} }]}}'
Meta Payload Example
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "16505551234",
"type": "template",
"template": {
"name": "abandoned_cart",
"language": {
"code": "en_US"
},
"components": [
{
"type": "header",
"parameters": [
{
"type": "text",
"text": "Pablo"
}
]
},
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "10OFF"
}
]
},
{
"type": "button",
"sub_type": "mpm",
"index": 0,
"parameters": [
{
"type": "action",
"action": {
"thumbnail_product_retailer_id": "2lc20305pt",
"sections": [
{
"title": "Popular Bundles",
"product_items": [
{
"product_retailer_id": "2lc20305pt"
},
{
"product_retailer_id": "nseiw1x3ch"
}
]
},
{
"title": "Premium Packages",
"product_items": [
{
"product_retailer_id": "n6k6x0y7oe"
}
]
}
]
}
}
]
}
]
}
}
Response
Status Code | Response | Comment |
---|---|---|
Success 200 | { "status": "submitted", "messageId": "4bed9a90-9f7a-4584-be5b-8ee1cba61a01" } | |
Error 401 | { "message": { "message": "Authentication Failed" }, "status": "error" } | When APIKey authentication fails or apikey is not sent |
Request Parameters
Key | Description | Constraints |
---|---|---|
apikey | Apikey of the account where the app is to be created | Should be a valid gupshup.io apikey |
source | Source Phone Number | |
src.name | Source App Name | |
destination | Destination phone number | |
Template | JSON containing template details | - Must include valid template id - Params must include all params including a product ID (which is to be used as a thumbnail (last in the list)) - Sections param must be provided with valid ids {"params":["{{product_id}}"],"mpm":{"sections":[{"title":"Products","products":["{{product_id}}"]}]}} |
Response Parameters
Key | Description |
---|---|
status | Message status |
Message | Message ID |
Updated about 2 months ago