> ## Documentation Index
> Fetch the complete documentation index at: https://docs.levios.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Enviar mensajes en carrusel

> Crea un carrusel por DM de Instagram con imágenes, botones de enlace y un mensaje posterior mediante la API v1.

Usa `send_carousel` en `configuration.follow_up.actions` para enviar tarjetas
con imágenes por DM de Instagram. Cada tarjeta tiene un título y botones de
enlace. Un mensaje después de las tarjetas es una acción separada en la misma
secuencia.

## Campos y límites de las tarjetas

| Campo | Valor aceptado |
| - | - |
| `type` | `send_carousel`. |
| `delay_seconds` | Entero obligatorio de 0 a 86399. |
| `cards` | De 1 a 10 tarjetas, en orden de presentación. |
| `cards[].title` | Obligatorio, de 1 a 80 valores escalares Unicode. |
| `cards[].subtitle` | Opcional, de 0 a 80 valores escalares Unicode. |
| `cards[].image_url` | URL HTTP(S) pública de imagen, obligatoria. |
| `cards[].buttons` | De 1 a 3 botones, en orden de presentación. |
| `cards[].buttons[].type` | `url`. |
| `cards[].buttons[].title` | Obligatorio, de 1 a 20 valores escalares Unicode. |
| `cards[].buttons[].url` | URL HTTP(S) de destino, obligatoria. |

Los títulos de tarjetas y botones no pueden tener espacios en blanco al inicio
ni al final. Los límites cuentan valores escalares Unicode, que pueden diferir
de la longitud de una cadena en JavaScript. Usa URLs válidas, incluidos el
puerto y la codificación porcentual.

Usa el formato público `cards`. Se rechazan propiedades desconocidas como
`elements` y `default_action`, o un botón de tarjeta con `type: "postback"`.

## Prepara las imágenes

Aloja cada imagen en una URL que abra sin iniciar sesión y mantenla disponible
hasta el envío. Las tarjetas aceptan imágenes. La carga desde el panel acepta
archivos JPG, PNG y GIF de hasta 8 MiB. REST y MCP reciben URLs y no tienen una
operación de carga de medios. La validación de la configuración no descarga la
imagen ni comprueba su tamaño; guardar la configuración no demuestra que
Instagram pueda acceder al archivo.

## Crea una automatización completa

Este ejemplo envía un DM de apertura cuando un comentario coincide con la
palabra clave. El clic en su botón `start_follow_up` inicia la secuencia del
carrusel. Enviar solo la apertura no la inicia. Los clics en los enlaces de las
tarjetas no reanudan la secuencia ni renuevan la ventana de mensajes de 24 horas.

Guarda este cuerpo completo de solicitud como `carousel.json`. Sustituye el
UUID de ejemplo por el ID de una cuenta accesible y cada URL de ejemplo por
una tuya. Los mensajes, la palabra clave, la pausa de cinco segundos, las
respuestas públicas desactivadas y el intervalo entre activaciones son
opciones ilustrativas. `status: "draft"` guarda el ejemplo para revisión.

```json theme={null}
{
  "account_id": "00000000-0000-4000-8000-000000000001",
  "name": "Collection request",
  "status": "draft",
  "configuration": {
    "contact_filter": "anyone",
    "trigger": {
      "type": "comment",
      "publication": {
        "mode": "all"
      },
      "keywords": {
        "mode": "specific",
        "match_mode": "whole_word",
        "values": [
          "CATALOG"
        ]
      }
    },
    "opening": {
      "public_reply": {
        "enabled": false
      },
      "direct_message": {
        "delay_seconds": 0,
        "message": {
          "text": "Want to see the collection?",
          "buttons": [
            {
              "type": "start_follow_up",
              "title": "Show me"
            }
          ]
        }
      }
    },
    "follow_up": {
      "actions": [
        {
          "type": "send_carousel",
          "delay_seconds": 0,
          "cards": [
            {
              "title": "Activity kit",
              "subtitle": "Creative activities for the weekend",
              "image_url": "https://example.com/activity-kit.jpg",
              "buttons": [
                {
                  "type": "url",
                  "title": "View product",
                  "url": "https://example.com/product"
                },
                {
                  "type": "url",
                  "title": "See details",
                  "url": "https://example.com/details"
                },
                {
                  "type": "url",
                  "title": "Visit store",
                  "url": "https://example.com/store"
                }
              ]
            }
          ]
        },
        {
          "type": "send_message",
          "delay_seconds": 5,
          "text": "Find more ideas in our group.",
          "buttons": [
            {
              "type": "url",
              "title": "Join the group",
              "url": "https://example.com/group"
            }
          ]
        },
        {
          "type": "finish"
        }
      ]
    },
    "extras": {
      "cooldown": {
        "mode": "none"
      }
    }
  }
}
```

Envía el archivo con una clave que tenga `automations:write` y acceso a la cuenta:

```bash theme={null}
curl --request POST \
  --url 'https://levios.app/api/v1/automations' \
  --header "Authorization: Bearer ${LEVIOS_API_KEY}" \
  --header 'Content-Type: application/json' \
  --data-binary @carousel.json
```

Crear con `status: "live"` también requiere `automations:activate` y que la
cuenta sea elegible. Consulta [Crear una automatización](/es/api/v1/automations/create)
para conocer la respuesta y las reglas de reintento cuando el resultado de la
creación sea incierto. No repitas automáticamente una creación cuyo resultado
desconozcas.

## Programa el siguiente mensaje

La acción `send_message` está separada de los botones de las tarjetas. Su
`delay_seconds` es relativo a la finalización correcta de la acción anterior.
El ejemplo programa la invitación al grupo cinco segundos después del envío
correcto del carrusel. No espera a que la persona vea una tarjeta, haga clic
en un enlace o entre al grupo.

Las esperas configuradas deben caber en la ventana de mensajes aplicable. Las
pausas y los reintentos no amplían esa ventana. El espaciado compartido por
cuenta y las esperas del proveedor pueden retrasar el envío más allá de la
pausa configurada. Esto es independiente de los [límites de solicitudes](/es/guides/rate-limits)
de la API HTTP; crear una automatización no promete un envío inmediato ni una
cuota fija de mensajes por hora.

## Consulta, edita y gestiona errores

[Consulta la automatización](/es/api/v1/automations/get) después de guardar y
comprueba el orden de las tarjetas, los botones, la siguiente acción y el
estado almacenados. Al editar, envía la configuración completa y un
`expected_updated_at` actualizado mediante
[Actualizar una automatización](/es/api/v1/automations/update). Reemplazar la
configuración no es una actualización parcial de una tarjeta. Sigue las reglas
de publicación de ese endpoint para automatizaciones activas con cambios sin
publicar.

Los campos no válidos devuelven `422` con
`api_automation_invalid_configuration` y problemas en `error.details.issues`.
Revisa la ruta indicada: demasiadas tarjetas, un cuarto botón, una URL no válida
o la falta de la pausa obligatoria necesitan corrección. Conserva el resto de
la configuración al corregir un campo.

Los clientes que enumeran los tipos de acciones de continuación deben manejar
`send_carousel` en las solicitudes y en las configuraciones devueltas. Consulta
el [documento OpenAPI](/openapi/v1.json) actual antes de crear un decodificador
que enumere todos los tipos. Para el mismo flujo con un agente, usa
[Carruseles mediante MCP](/es/mcp/carousels).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.