Describe the bug
On the Meta Cloud API channel (whatsapp.business.service.ts), POST /message/sendButtons/{instance} silently drops the description and footer fields. Only title is forwarded to WhatsApp — as the interactive message's body.text, with no header and no footer at all.
This means a request like:
{
"number": "5215512345678@s.whatsapp.net",
"title": "Titulo",
"description": "Hola, elige una opción",
"footer": "Mi empresa",
"buttons": [
{ "type": "reply", "displayText": "opcion a", "id": "reply_1" },
{ "type": "reply", "displayText": "opcion b", "id": "reply_2" }
]
}
is delivered to Meta with description and footer completely discarded, and only "Titulo" showing up on WhatsApp, with no body text and no footer below the buttons.
Root cause
In src/api/integrations/channel/meta/whatsapp.business.service.ts, buttonMessage():
public async buttonMessage(data: SendButtonsDto) {
const embeddedMedia: any = {};
const btnItems = {
text: data.buttons.map((btn) => btn.displayText),
ids: data.buttons.map((btn) => btn.id),
};
if (!arrayUnique(btnItems.text) || !arrayUnique(btnItems.ids)) {
throw new BadRequestException('Button texts cannot be repeated', 'Button IDs cannot be repeated.');
}
return await this.sendMessageWithTyping(
data.number,
{
text: !embeddedMedia?.mediaKey ? data.title : undefined, // only data.title is used
buttons: data.buttons.map((button) => {
return {
type: 'reply',
reply: {
title: button.displayText,
id: button.id,
},
};
}),
[embeddedMedia?.mediaKey]: embeddedMedia?.message,
},
{ ... },
);
}
data.description and data.footer are never read anywhere in this function. Then, in sendMessageWithTyping(), when building the actual Graph API request:
if (message['buttons']) {
content = {
messaging_product: 'whatsapp',
recipient_type: 'individual',
to: number.replace(/\D/g, ''),
type: 'interactive',
interactive: {
type: 'button',
body: {
text: message['text'] || 'Select', // this is data.title
},
action: {
buttons: message['buttons'],
},
// no header, no footer
},
};
...
}
No header and no footer key is ever added to interactive, even though Meta's Cloud API supports both for interactive.type = "button" messages.
For comparison, listMessage() in the same file maps all four fields correctly:
interactive: {
type: 'list',
header: { type: 'text', text: message['listMessage']['title'] },
body: { text: message['listMessage']['description'] },
footer: { text: message['listMessage']['footerText'] },
action: { button: message['listMessage']['buttonText'], sections: message['listMessage']['sections'] },
},
So sendList on this same channel works as documented — this is specifically a gap in the buttons path.
To Reproduce
- Configure an instance with
integration: WHATSAPP-BUSINESS (Meta Cloud API).
- Call
POST /message/sendButtons/{instance} with title, description, footer, and 1-3 reply buttons.
- Observe on the recipient's WhatsApp: only the
title text and the buttons are shown. description and footer never appear.
Expected behavior
description should populate interactive.body.text and title should populate interactive.header.text (matching how listMessage() handles the equivalent fields), and footer should populate interactive.footer.text, consistent with what Meta's Cloud API supports for interactive.type = "button" messages.
Environment
- Evolution API version:
2.3.7 (confirmed present in this exact form in the 2.3.7 tag; also present on the current default branch)
- Channel/integration:
WHATSAPP-BUSINESS (Meta Cloud API)
- File:
src/api/integrations/channel/meta/whatsapp.business.service.ts, function buttonMessage()
Describe the bug
On the Meta Cloud API channel (
whatsapp.business.service.ts),POST /message/sendButtons/{instance}silently drops thedescriptionandfooterfields. Onlytitleis forwarded to WhatsApp — as the interactive message'sbody.text, with no header and no footer at all.This means a request like:
{ "number": "5215512345678@s.whatsapp.net", "title": "Titulo", "description": "Hola, elige una opción", "footer": "Mi empresa", "buttons": [ { "type": "reply", "displayText": "opcion a", "id": "reply_1" }, { "type": "reply", "displayText": "opcion b", "id": "reply_2" } ] }is delivered to Meta with
descriptionandfootercompletely discarded, and only "Titulo" showing up on WhatsApp, with no body text and no footer below the buttons.Root cause
In
src/api/integrations/channel/meta/whatsapp.business.service.ts,buttonMessage():data.descriptionanddata.footerare never read anywhere in this function. Then, insendMessageWithTyping(), when building the actual Graph API request:No
headerand nofooterkey is ever added tointeractive, even though Meta's Cloud API supports both forinteractive.type = "button"messages.For comparison,
listMessage()in the same file maps all four fields correctly:So
sendListon this same channel works as documented — this is specifically a gap in the buttons path.To Reproduce
integration: WHATSAPP-BUSINESS(Meta Cloud API).POST /message/sendButtons/{instance}withtitle,description,footer, and 1-3replybuttons.titletext and the buttons are shown.descriptionandfooternever appear.Expected behavior
descriptionshould populateinteractive.body.textandtitleshould populateinteractive.header.text(matching howlistMessage()handles the equivalent fields), andfootershould populateinteractive.footer.text, consistent with what Meta's Cloud API supports forinteractive.type = "button"messages.Environment
2.3.7(confirmed present in this exact form in the2.3.7tag; also present on the current default branch)WHATSAPP-BUSINESS(Meta Cloud API)src/api/integrations/channel/meta/whatsapp.business.service.ts, functionbuttonMessage()