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

# Enviar template

> Envie um template para um contato sem abrir atendimento

```http theme={null}
POST https://api.hustapp.com/template/send
```

Envia um template direto para um contato, **sem abrir atendimento**. Para enviar um template vinculado a um atendimento, veja [Enviar template no atendimento](/chat/atendimentos/enviar-template).

## Corpo da requisição

| Campo        | Tipo     | Obrigatório                   | Descrição                                                                                                          |
| ------------ | -------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| `template`   | `object` | Sim                           | `{ name }` ou `{ identifier }` do template.                                                                        |
| `connection` | `object` | Sim                           | `{ uuid }` da conexão. Aceita apenas UUID.                                                                         |
| `contact`    | `object` | Sim                           | `{ id }` ou `{ phone }` do destinatário. O `phone` é normalizado como em [Enviar mensagem](/chat/enviar-mensagem). |
| `params`     | `object` | Se o template tiver variáveis | Valores das variáveis do template. Veja [Parâmetros](#parâmetros).                                                 |

## Parâmetros

Cada chave de `params` é o nome de uma variável do template. O valor é um objeto que depende do tipo da variável:

| Variável               | Formato                                     |
| ---------------------- | ------------------------------------------- |
| Texto                  | `{ "value": "José" }`                       |
| Imagem no cabeçalho    | `{ "image": { "link": "https://..." } }`    |
| Documento no cabeçalho | `{ "document": { "link": "https://..." } }` |
| Vídeo no cabeçalho     | `{ "video": { "link": "https://..." } }`    |

O `link` precisa ser uma URL pública, acessível pela Meta no momento do envio.

Todas as variáveis do template são obrigatórias. Se faltar alguma, nada é enviado.

## Exemplo

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://api.hustapp.com/template/send \
    -H "Authorization: Bearer SEU_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
      "template": { "name": "confirmacao_pedido" },
      "connection": { "uuid": "9db04f68-9e7d-4297-ba41-5f4d4c44779a" },
      "contact": { "phone": "5541988887777" },
      "params": {
        "nome": { "value": "José" },
        "pedido": { "value": "4521" }
      }
    }'
  ```

  ```javascript Node.js theme={null}
  const res = await fetch("https://api.hustapp.com/template/send", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${token}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      template: { name: "confirmacao_pedido" },
      connection: { uuid: "9db04f68-9e7d-4297-ba41-5f4d4c44779a" },
      contact: { phone: "5541988887777" },
      params: {
        nome: { value: "José" },
        pedido: { value: "4521" },
      },
    }),
  });

  // 204 = enviado
  if (res.status !== 204) console.error(await res.json());
  ```

  ```python Python theme={null}
  import requests

  res = requests.post(
      "https://api.hustapp.com/template/send",
      headers={"Authorization": f"Bearer {token}"},
      json={
          "template": {"name": "confirmacao_pedido"},
          "connection": {"uuid": "9db04f68-9e7d-4297-ba41-5f4d4c44779a"},
          "contact": {"phone": "5541988887777"},
          "params": {
              "nome": {"value": "José"},
              "pedido": {"value": "4521"},
          },
      },
  )

  # 204 = enviado
  if res.status_code != 204:
      print(res.json())
  ```

  ```php PHP theme={null}
  <?php
  $ch = curl_init('https://api.hustapp.com/template/send');
  curl_setopt_array($ch, [
      CURLOPT_POST => true,
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_HTTPHEADER => [
          'Authorization: Bearer ' . $token,
          'Content-Type: application/json',
      ],
      CURLOPT_POSTFIELDS => json_encode([
          'template' => ['name' => 'confirmacao_pedido'],
          'connection' => ['uuid' => '9db04f68-9e7d-4297-ba41-5f4d4c44779a'],
          'contact' => ['phone' => '5541988887777'],
          'params' => [
              'nome' => ['value' => 'José'],
              'pedido' => ['value' => '4521'],
          ],
      ]),
  ]);

  $response = curl_exec($ch);
  $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  curl_close($ch);

  // 204 = enviado
  if ($status !== 204) {
      var_dump(json_decode($response, true));
  }
  ```

  ```pascal Delphi theme={null}
  uses
    System.Net.HttpClient, System.Classes, System.SysUtils;

  const
    Body =
      '{' +
      '  "template": { "name": "confirmacao_pedido" },' +
      '  "connection": { "uuid": "9db04f68-9e7d-4297-ba41-5f4d4c44779a" },' +
      '  "contact": { "phone": "5541988887777" },' +
      '  "params": {' +
      '    "nome": { "value": "José" },' +
      '    "pedido": { "value": "4521" }' +
      '  }' +
      '}';

  var
    HttpClient: THTTPClient;
    Response: IHTTPResponse;
  begin
    HttpClient := THTTPClient.Create;
    try
      HttpClient.CustomHeaders['Authorization'] := 'Bearer ' + Token;
      HttpClient.ContentType := 'application/json';
      Response := HttpClient.Post('https://api.hustapp.com/template/send',
        TStringStream.Create(Body, TEncoding.UTF8));

      // 204 = enviado
      if Response.StatusCode <> 204 then
        Writeln(Response.ContentAsString);
    finally
      HttpClient.Free;
    end;
  end;
  ```
</CodeGroup>

## Resposta

Retorna `204` sem corpo quando o template é enviado.

## Erros

| Status | Quando                                                          | Corpo                                                                                                |
| ------ | --------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| `400`  | Corpo inválido                                                  | `{ "message": "...", "errors": [...] }`                                                              |
| `400`  | Variáveis do template ausentes                                  | `{ "message": "Template com parâmetros ausentes", "errors": [{ "key": "nome", "message": "..." }] }` |
| `500`  | Template, contato ou conexão não encontrados, ou falha no envio | `{ "message": "..." }`                                                                               |
