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

# Enviar Plantilla de Mensaje (Arquitectura)

> Envía una plantilla de WhatsApp con parámetros dinámicos, encabezados multimedia o botones

Versión avanzada del endpoint de envío de plantillas. Soporta inyección de variables dinámicas en los componentes de la plantilla (cuerpo, encabezado, botones), valida el estado de aprobación con Meta antes de enviar, y mueve automáticamente las conversaciones de `pendiente` a `proceso` al enviar el mensaje.

Compatible con WhatsApp Business API Cloud (Meta), Messenger, Instagram DM y proveedores QR.

## Autenticación

Requiere el encabezado `x-api-key` con el App Key del negocio. Consulta [Autenticación](/authentication).

## Encabezados

<ParamField header="x-api-key" type="string" required>
  App Key del negocio. Consulta [Autenticación](/authentication).
</ParamField>

## Cuerpo de la solicitud

<ParamField body="meta_id" type="string" required>
  Número de WhatsApp del contacto en formato internacional (ej. `5215512345678`).
</ParamField>

<ParamField body="contacto_id" type="number" required>
  ID interno del contacto que recibirá la plantilla.
</ParamField>

<ParamField body="chat_id" type="number" required>
  ID interno de la conversación.
</ParamField>

<ParamField body="empresa_id" type="number" required>
  ID del negocio que envía la plantilla.
</ParamField>

<ParamField body="plantilla_id" type="number" required>
  ID interno de la plantilla a enviar.
</ParamField>

<ParamField body="parameters" type="string[]">
  Lista de valores de texto para inyectar en el cuerpo (`body`) de la plantilla. Cada elemento debe ser un **string**; el sistema los envuelve automáticamente en `{ type: "text", text: "..." }` al enviar a Meta. Solo se inyectan en el componente `body` — los parámetros de encabezado o botones no son soportados por este campo.

  ```json theme={null}
  ["Orden #1234", "mañana a las 10am"]
  ```
</ParamField>

<ParamField body="user_id" type="number">
  ID del usuario (agente) que realiza el envío. Se usa para atribución del mensaje.
</ParamField>

<ParamField body="user_name" type="string">
  Nombre del usuario que envía la plantilla.
</ParamField>

<ParamField body="categoria_id" type="number">
  ID de categoría opcional para fines de reporte.
</ParamField>

<ParamField body="fecha" type="string">
  Fecha asociada al mensaje en formato ISO 8601 (opcional).
</ParamField>

## Respuesta

<ResponseField name="status" type="string">
  `"success"` cuando la plantilla fue aceptada y registrada.
</ResponseField>

<RequestExample>
  ```bash theme={null}
  curl -X POST https://beta.api-iobot-desarrollo.com/chats/enviar/mensaje/plantilla/arquitectura \
    -H "Content-Type: application/json" \
    -H "x-api-key: TU_APP_KEY" \
    -d '{
      "meta_id": "5215512345678",
      "contacto_id": 101,
      "chat_id": 55,
      "empresa_id": 1,
      "plantilla_id": 12,
      "user_id": 42,
      "user_name": "Carlos",
      "parameters": ["Juan Pérez", "Orden #9982"]
    }'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 Éxito theme={null}
  {
    "status": "success"
  }
  ```

  ```json 400 Plantilla pendiente de aprobación theme={null}
  {
    "success": false,
    "error": "La plantilla aún no ha sido aprobada por meta. Espera unos segundos y vuelve a intentarlo."
  }
  ```

  ```json 400 Límite mensual alcanzado theme={null}
  {
    "status": "error",
    "error": "Limite de templates alcanzado"
  }
  ```

  ```json 400 Error del proveedor theme={null}
  {
    "status": "error",
    "error": "Error al enviar la plantilla"
  }
  ```

  ```json 403 Negocio no encontrado theme={null}
  {
    "estatus": "error",
    "error": "La empresa no existe"
  }
  ```

  ```json 403 Plantilla no encontrada theme={null}
  {
    "estatus": "error",
    "error": "La plantilla no existe"
  }
  ```

  ```json 500 Error inesperado theme={null}
  {
    "status": "error",
    "error": "Error: ..."
  }
  ```
</ResponseExample>
