# Enviar um template

`POST /v1/messages`

Os templates são **enviados pelo nome**: POST /v1/messages com `type: "template"` e `template: { name, language, components }`. O template precisa estar **aprovado na Meta**; `components` leva as suas variáveis. Se ele é seu e não está aprovado, devolvemos `422 TEMPLATE_NOT_APPROVED` **antes** de chamar a Meta; se ainda não o sincronizamos, deixamos passar.

## Exemplos

### cURL

```bash
curl -X POST https://api.waiaconnect.com/v1/messages \
  -H "Authorization: Bearer wc_live_YOUR_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"connectionId":"conn_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","to":"5493511234567","type":"template","template":{"name":"hello_world","language":"es","components":[]}}'
# The template must already be APPROVED in Meta. `components` carries its variables.
```

### Node.js

```javascript
const res = await fetch("https://api.waiaconnect.com/v1/messages", {
  method: "POST",
  headers: {
    "Authorization": "Bearer wc_live_YOUR_API_KEY",
    "Idempotency-Key": crypto.randomUUID(),
    "Content-Type": "application/json"
  },
  // The template must already be APPROVED in Meta; `components` carries its variables.
  body: JSON.stringify({
  "connectionId": "conn_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "to": "5493511234567",
  "type": "template",
  "template": {
    "name": "hello_world",
    "language": "es",
    "components": []
  }
})
});
console.log(await res.json());
```

### PHP

```php
<?php
$ch = curl_init("https://api.waiaconnect.com/v1/messages");
curl_setopt_array($ch, [
  CURLOPT_POST => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer wc_live_YOUR_API_KEY",
    "Idempotency-Key: " . bin2hex(random_bytes(16)),
    "Content-Type: application/json",
  ],
  // The template must already be APPROVED in Meta.
  CURLOPT_POSTFIELDS => json_encode(["connectionId" => "conn_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","to" => "5493511234567","type" => "template","template" => ["name" => "hello_world","language" => "es","components" => []]]),
]);
echo curl_exec($ch);
```

### Python

```python
import requests, uuid
res = requests.post("https://api.waiaconnect.com/v1/messages",
  headers={
    "Authorization": "Bearer wc_live_YOUR_API_KEY",
    "Idempotency-Key": str(uuid.uuid4()),
  },
  # The template must already be APPROVED in Meta; "components" carries its variables.
  json={"connectionId":"conn_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","to":"5493511234567","type":"template","template":{"name":"hello_world","language":"es","components":[]}})
print(res.json())
```

## Notas

- **De onde sai o `name`:** de `GET /v1/templates` (campos `name` + `language` de cada linha), ou da seção Templates do painel. É o nome na Meta, não o título que você deu na tela, e só serve se essa linha estiver em `APPROVED`.
- Fora da janela de 24h de atendimento, a Meta exige um template aprovado. Se você mandar texto livre mesmo assim, o POST responde 202 e a recusa chega depois, no estado da mensagem: `failed` com `lastErrorCode: WINDOW_24H_EXPIRED` (o `131047` da Meta). Não é um erro HTTP.
- A **janela de 24 horas**: você só pode escrever livremente dentro das 24h da última mensagem do cliente. Depois precisa de um template aprovado. É por isso que eles existem.
