Skip to main content
POST
Enviar carrusel
Auth: TokenAccount o TokenInstanceRate-limit: Global (100/min) • Idempotente: no

Descripción

Envía un mensaje con un carrusel de tarjetas deslizables. Cada tarjeta tiene un header (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

El messageType 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/json

Cuerpo 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ún type: para REPLY, es el ID retornado al hacer clic; para URL, la URL a abrir; para CALL, el número a marcar; para COPY, el código a copiar.
  • type (string), REPLY (default), URL, CALL o COPY. Otros valores retornan 400 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

  • delay es en segundos (no milisegundos).
  • En cada header, elige una sola media: ya sea imageUrl o videoUrl. Enviar ambas puede resultar en renderizado inconsistente en el cliente.
  • Validación del servidor: cada tarjeta necesita header.title y body.text no vacíos; cada botón necesita displayText e id no 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 con https:// para evitar ser bloqueado por el cliente.

Errores

Envoltorio de error: