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

# Plantillas

> Qué es una plantilla de WhatsApp y cuándo necesitas una para enviar.

Una **plantilla** es un mensaje preaprobado por Meta. Es el único tipo de
mensaje que puedes enviar cuando la **ventana de 24 horas está cerrada** — es
decir, cuando el contacto no te escribió en las últimas 24 horas. Mientras la
ventana está abierta puedes enviar texto libre; una vez cerrada, solo una
plantilla llega al cliente.

<Note>
  Las plantillas se crean y se aprueban en el dashboard. La API pública solo las
  **consume** para enviar — no las crea ni las edita.
</Note>

## Cómo se resuelve una plantilla

<Steps>
  <Step title="Identifica la plantilla por nombre">
    Una plantilla se identifica por su `template_name` — el mismo nombre que ves
    en el dashboard y que reportas a Meta.
  </Step>

  <Step title="Indica el idioma">
    El idioma es obligatorio en todo envío: agrega `language` en formato Meta
    `lower_UPPER` (ej. `es_MX`) para elegir cuál plantilla enviar.
  </Step>

  <Step title="Verifica que esté aprobada">
    Solo se pueden enviar plantillas en estado **`APPROVED`**. Una en `PENDING`
    o `REJECTED` no es enviable.
  </Step>
</Steps>

## Componentes de una plantilla

Al enviar una plantilla rellenas sus partes dinámicas:

<CardGroup cols={3}>
  <Card title="body_variables" icon="brackets-curly">
    Los placeholders del cuerpo (`{{1}}`, `{{2}}`, ...). Array de objetos
    `{ index, value }`.
  </Card>

  <Card title="header" icon="image">
    El encabezado: texto, o media vía `file_uuid`.
  </Card>

  <Card title="button_parameters" icon="link">
    Parámetros de botones dinámicos (ej. el sufijo de un botón URL).
  </Card>
</CardGroup>

## Enviar una plantilla

Un envío típico, con dos variables en el cuerpo:

```bash theme={null}
curl -X POST "https://app.1to1.ai/api/v1/public/{slug}/conversation/actions" \
  -H "Authorization: Bearer sk_1to1_tu_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "conversation": {
      "phone": "+5215512345678",
      "channel": "ch_7A9K2M4Q"
    },
    "actions": [
      {
        "type": "send_message",
        "template": {
          "name": "confirmacion_cita",
          "language": "es_MX",
          "body_variables": [
            { "index": 1, "value": "Ana" },
            { "index": 2, "value": "10:00 AM" }
          ]
        }
      }
    ]
  }'
```

<Tip>
  Los nombres de las plantillas los ves en el dashboard, que es donde se aprueban.
  Para saber qué variables espera una en concreto, consulta
  `GET /templates/{name}/{language}`.
</Tip>

## Plantillas de prueba para conversaciones tester

El dashboard permite crear **plantillas de prueba** (`status: FAKE`) desde el
módulo Tester sin pasar por la aprobación de Meta. Sirven para que el operador
y los integradores prueben flujos contra conversaciones tester sin esperar la
revisión de Meta.

Reglas de envío vía API pública:

* **Conversación tester** (`is_tester: true` en `GET /conversation`) — puedes
  enviar tanto plantillas APPROVED como plantillas FAKE. El envío replica el
  flujo real pero no toca Meta (`wamid` retorna `""`).
* **Conversación real** (`is_tester: false`) — **solo** plantillas APPROVED.
  Si intentas enviar una plantilla FAKE o una plantilla con `is_tester: true`
  a una conversación real, la API responde con
  `TEMPLATE_FAKE_REQUIRES_TESTER_CONVERSATION` (422).

El catálogo público de plantillas no incluye plantillas FAKE — solo las
APPROVED reales. Si necesitas el nombre de una plantilla FAKE para enviarla,
consulta al operador.

## Próximos pasos

<CardGroup cols={2}>
  <Card title="Enviar mensajes" icon="paper-plane" href="/es/messages">
    El envío de plantillas, texto, media y respuestas rápidas.
  </Card>

  <Card title="Conversaciones" icon="comments" href="/es/conversations">
    La ventana de 24 horas y el estado de una conversación.
  </Card>
</CardGroup>
