> ## Documentation Index
> Fetch the complete documentation index at: https://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="Especifica el idioma si hace falta">
    Si el mismo nombre está aprobado en varios idiomas, agrega `language`
    (formato Meta `lower_UPPER`, ej. `es_MX`) para elegir cuál enviar. Si solo
    existe en un idioma, es opcional.
  </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/messages/template" \
  -H "Authorization: Bearer sk_1to1_tu_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "conversation": { "phone": "+5215512345678" },
    "template_name": "confirmacion_cita",
    "language": "es_MX",
    "body_variables": [
      { "index": 1, "value": "Ana" },
      { "index": 2, "value": "10:00 AM" }
    ]
  }'
```

<Tip>
  Para descubrir qué plantillas tienes disponibles y qué variables espera cada
  una, consulta los endpoints de catálogo de plantillas en la Referencia de API.
</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 /conversations`) — 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 (`GET /templates` y `GET /templates/{name}/{language}`) 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 quick replies.
  </Card>

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