Mensajes
Enviar botones
Envía un mensaje con hasta 3 botones interactivos (REPLY, URL, CALL o COPY) y un encabezado de media opcional
POST
Enviar botones
Auth:
Envoltorio de error:
TokenAccount o TokenInstance • Rate-limit: Global (100/min) • Idempotente: no
Descripción
Envía un mensaje con hasta 3 botones interactivos (límite de WhatsApp). Los botones aceptan cuatro tipos:REPLY (default, retorna el ID al hacer clic), URL (abre un enlace), CALL (marca un número) y COPY (copia un código). El encabezado puede ser texto (headerText) o media (mediaUrl + mediaType). Si se envía mediaUrl, mediaType es requerido y debe estar en mayúsculas: IMAGE, VIDEO o DOCUMENT. Cuando hay media presente, headerText se ignora (la media reemplaza al título).
Ejemplos
3 botones REPLY
El botónREPLY se usa para responder a un mensaje específico dentro de la conversación: cuando el cliente lo toca, WhatsApp envía una respuesta citando el mensaje original con el texto del botón (displayText), eso es lo que aparece en el chat. En el webhook/websocket, lo que llega a tu aplicación es el id del botón clicado, permitiéndote identificar la opción sin depender del texto mostrado.
Caso clásico de un menú rápido. Cada botón retorna su id en el webhook al hacer clic.
Con encabezado de imagen
Cuando haymediaUrl presente, mediaType es requerido y debe estar en mayúsculas (IMAGE, VIDEO, DOCUMENT). headerText se ignora en ese caso.
Mezcla de URL + CALL + COPY
Combina tres tipos diferentes de botones en un único mensaje. Elid transporta valores semánticos distintos por tipo.
Respuesta exitosa
Elcontent retorna el contentText que enviaste, y messageType es fijo en buttons. Las definiciones de los botones en sí no regresan en la respuesta, guarda el messageId para correlacionar los clics que llegan vía webhook.
200 OK
Cuando el usuario toca un botón
REPLY, la respuesta llega como un mensaje de texto que contiene el id del botón clicado, captúralo vía webhook para encadenar el flujo.Parámetros de ruta
Nombre de la instancia (p. ej.,
$Instance_Name).Cabeceras
TokenAccount o TokenInstance.application/jsonCuerpo de la solicitud
Destino: teléfono (
5511999999999) o JID (@s.whatsapp.net, @lid, @g.us, @newsletter).Texto principal del cuerpo del mensaje (entre el encabezado y los botones).
Lista de botones. Mínimo 1, máximo 3 (límite de WhatsApp). Cada botón tiene:
id(string, requerido), la semántica varía segúntype:REPLYretorna este ID;URLabre esta URL;CALLmarca este número;COPYcopia este código.displayText(string, requerido), texto visible en el botón.type(string),REPLY(default),URL,CALLoCOPY. Cualquier otro valor retorna400 Button N: Type must be one of: REPLY, URL, CALL, COPY.
Título mostrado en la parte superior del mensaje. Ignorado si se proporciona
mediaUrl (la media reemplaza al encabezado).Texto opcional mostrado debajo de los botones.
URL de un archivo de media (imagen, video o documento) para usar como encabezado. Cuando se envía,
mediaType se vuelve requerido.Tipo de la media en
mediaUrl. Requerido si mediaUrl está presente. Acepta solo IMAGE, VIDEO o DOCUMENT (mayúsculas). Cualquier otro valor retorna 400 MediaType must be one of: IMAGE, VIDEO, DOCUMENT.Tiempo en segundos a esperar antes de enviar. Durante el intervalo, el servidor envía el indicador “escribiendo…” y dispara “pausado” antes del envío real.
ID del mensaje a citar (respuesta). El mensaje original debe pertenecer a la misma instancia y haber sido guardado en la base de datos.
Cuando es
true y replyTo apunta a un mensaje originado en un grupo, el mensaje se redirige al chat privado del autor original (manteniendo la cita).Identificador de origen para trazabilidad (p. ej.,
crm, bot-suporte, n8n). Guardado en el registro del mensaje y propagado a los webhooks.Notas
delayes en segundos (no milisegundos).- WhatsApp acepta hasta 3 botones por mensaje. Cuatro o más retornan
400 Maximum of 3 buttons allowed. - Si se envía
mediaUrl,headerTextse ignora silenciosamente. mediaTypese normaliza a mayúsculas internamente, envía siempreIMAGE,VIDEOoDOCUMENT.- Para botones
URL, asegúrate de que el enlace comience conhttps://para evitar ser bloqueado por el cliente. - Para botones
CALL, usa el formato internacional (+5511...). - Los dispositivos antiguos pueden caer a texto y mostrar los botones como un mensaje regular.
Errores
| HTTP | Status interno | Mensaje |
|---|---|---|
| 400 | , | Instance name is required |
| 400 | , | Invalid request body: <detail> |
| 400 | , | Number is required |
| 400 | , | ContentText is required |
| 400 | , | At least one button is required |
| 400 | , | Maximum of 3 buttons allowed |
| 400 | , | MediaType is required when MediaURL is provided |
| 400 | , | MediaType must be one of: IMAGE, VIDEO, DOCUMENT |
| 400 | , | Button N: ID is required |
| 400 | , | Button N: DisplayText is required |
| 400 | , | Button N: Type must be one of: REPLY, URL, CALL, COPY |
| 400 | invalid_number | Invalid phone number format: <detail> |
| 400 | invalid_request | (motivo de la solicitud inválida detectado por el servicio) |
| 404 | , | Instance not found |
| 500 | send_failed | Failed to send buttons message: <reason> |
| 503 | disconnected | Instance is not connected to WhatsApp |