Mensajes
Enviar carrusel
Envía un mensaje con un carrusel de tarjetas (encabezado, cuerpo, pie y botones)
POST
Enviar carrusel
Auth:
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 al webhook con message.type igual a template_button_reply y el id del botón clicado en message.content (y también en message.interactive.selectedButtonId). Captúralo vía webhook para encadenar el flujo. En carruseles, message.interactive.selectedCarouselCardIndex indica qué card fue tocado.Parámetros de ruta
string
requerido
Nombre de la instancia (p. ej.,
$Instance_Name).Cabeceras
string
requerido
TokenAccount o TokenInstance.string
requerido
application/jsonCuerpo de la solicitud
string
requerido
Destino: teléfono (
5511999999999) o JID (@s.whatsapp.net, @lid, @g.us, @newsletter).string
Texto mostrado sobre el carrusel (opcional).
Texto mostrado debajo del carrusel (opcional).
CarouselCard[]
requerido
Lista de tarjetas del carrusel. Mínimo 1. Cada tarjeta es un objeto con
header, body, footer y buttons (descritos abajo).object
requerido
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.
object
requerido
Cuerpo de la tarjeta. Sub-campo:
text(string, requerido), contenido textual de la tarjeta.
Texto opcional mostrado al pie de la tarjeta individual.
CarouselButton[]
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.
int
predeterminado:"0"
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.
string
ID del mensaje a citar (respuesta). El mensaje original debe pertenecer a la misma instancia y haber sido guardado en la base de datos.
boolean
predeterminado:"false"
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).string
predeterminado:"api"
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
Envoltorio de error: