Mensajes
Enviar carrusel
Envía un mensaje con un carrusel de tarjetas (encabezado, cuerpo, pie y botones)
POST
Enviar carrusel
Auth:
Envoltorio de error:
TokenAccount o TokenInstance • Rate-limit: Global (100/min) • Idempotente: no
Descripción
Envía un mensaje con un carrusel de tarjetas deslizables. Cada tarjeta tiene unheader (título requerido, con media opcional vía imageUrl o videoUrl), body.text (requerido), un footer opcional y algunos botones interactivos. 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). Puedes agregar message (texto antes del carrusel) y footer (texto debajo). Soporta delay, replyTo y replyPrivate.
Ejemplos
Carrusel simple con botones REPLY
Dos tarjetas con texto y botones de respuesta rápida solamente.Carrusel con encabezado de imagen y botones URL
imageUrl en el encabezado y botones de tipo URL (el id recibe la URL a abrir).
Carrusel con encabezado de video
videoUrl reemplaza a imageUrl en el encabezado. Usa uno de los dos, no ambos.
Respuesta exitosa
ElmessageType retornado es interactive (un carrusel es una variación del mensaje interactivo de WhatsApp), y content transporta una descripción agregada ("<message> - Carousel with N card(s)") usada por el historial. Las tarjetas individuales no regresan en la respuesta, guarda el messageId para correlacionar con los clics 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 mostrado sobre el carrusel (opcional).
Texto mostrado debajo del carrusel (opcional).
Lista de tarjetas del carrusel. Mínimo 1. Cada tarjeta es un objeto con
header, body, footer y buttons (descritos abajo).Encabezado de la tarjeta. Sub-campos:
title(string, requerido), título de la tarjeta.subtitle(string), subtítulo opcional.imageUrl(string), URL de imagen para el encabezado.videoUrl(string), URL de video para el encabezado. Usa una de las dos opciones de media por tarjeta.
Cuerpo de la tarjeta. Sub-campo:
text(string, requerido), contenido textual de la tarjeta.
Texto opcional mostrado al pie de la tarjeta individual.
Lista de botones de la tarjeta. Cada botón tiene:
displayText(string, requerido), texto visible.id(string, requerido), la semántica varía segúntype: paraREPLY, es el ID retornado al hacer clic; paraURL, la URL a abrir; paraCALL, el número a marcar; paraCOPY, el código a copiar.type(string),REPLY(default),URL,CALLoCOPY. Otros valores retornan400 Card N, Button M: Type must be one of: REPLY, URL, CALL, COPY.
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 carrusel 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).- En cada
header, elige una sola media: ya seaimageUrlovideoUrl. Enviar ambas puede resultar en renderizado inconsistente en el cliente. - Validación del servidor: cada tarjeta necesita
header.titleybody.textno vacíos; cada botón necesitadisplayTexteidno vacíos. Los errores se retornan con el índice (Card N, Button M: ...) para facilitar el debugging. - Los dispositivos antiguos de WhatsApp pueden caer a texto y mostrar el carrusel como un mensaje regular.
- Para botones
URL, asegúrate de que el enlace comience conhttps://para evitar ser bloqueado por el cliente.
Errores
| HTTP | Status interno | Mensaje |
|---|---|---|
| 400 | , | Instance name is required |
| 400 | , | Invalid request body: <detail> |
| 400 | , | Number is required |
| 400 | , | At least one card is required |
| 400 | , | Card N: Header title is required |
| 400 | , | Card N: Body text is required |
| 400 | , | Card N, Button M: Display text is required |
| 400 | , | Card N, Button M: ID is required |
| 400 | , | Card N, Button M: Type must be one of: REPLY, URL, CALL, COPY |
| 400 | invalid_number | Invalid phone number format: <detail> |
| 400 | media_download_failed | (motivo del fallo de descarga de media del encabezado) |
| 404 | , | Instance not found |
| 500 | media_upload_failed | (motivo del fallo de upload de media del encabezado) |
| 500 | send_failed | Failed to send carousel: <reason> |
| 503 | disconnected | Instance is not connected to WhatsApp |