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

# Templates de comunicação

> Como escrever e-mail, SMS e WhatsApp válidos, com metatags do gatilho certo.

Na Corvex o conteúdo da mensagem vive em `action.data` **ou** em um template reutilizável referenciado por `template_id`.

Não existe etapa `type: "template"`.

### Inline (texto no step)

```json theme={null}
{
  "type": "action",
  "name": "send_email",
  "data": {
    "remetente_nome": "Nome da loja",
    "remetente_email": "loja@example.com",
    "subject": "Seu pagamento está pendente",
    "body": "Olá, {{customer.name}}..."
  }
}
```

### Biblioteca (`template_id`)

1. Crie o modelo em `POST /api/v1/automation/templates` (ou no painel).
2. Use o `id` devolvido:

```json theme={null}
{
  "type": "action",
  "name": "send_email",
  "data": {
    "template_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
  }
}
```

O canal do template tem que bater com a action (`email` → `send_email`, `sms` → `send_sms`, `whatsapp` → `send_whatsapp`). Campos no step, se existirem, **sobrescrevem** o template no envio.

Campos inline abaixo continuam válidos quando você não usa `template_id`.

Metatag sem valor vira **texto vazio**. Nunca invente `{{chave}}`. Catálogo: [Metatags](/automations-metatags).

## E-mail (`send_email`)

### Schema

```json theme={null}
{
  "type": "action",
  "name": "send_email",
  "data": {
    "remetente_nome": "Nome da loja",
    "remetente_email": "loja@example.com",
    "subject": "Seu pagamento está pendente",
    "body": "Olá, {{customer.name}}..."
  }
}
```

| Campo                | Obrigatório                             | Limite                              |
| -------------------- | --------------------------------------- | ----------------------------------- |
| `template_id`        | alternativa                             | UUID do template `email` desta loja |
| `remetente_nome`     | sim se não houver `template_id`         | string não vazia                    |
| `remetente_email`    | sim se não houver `template_id`         | e-mail válido                       |
| `subject`            | sim se não houver `template_id`         | mínimo 3 caracteres                 |
| `body` **ou** `html` | um dos dois se não houver `template_id` | texto ou HTML                       |

Pode aninhar os mesmos campos em `data.content.*`. Os de cima têm prioridade.

Peça o remetente real da loja. `loja@example.com` nos exemplos é placeholder.

### Como escrever o conteúdo

Transforme:

```text theme={null}
Crie um e-mail amigável lembrando o cliente de pagar o PIX.
```

em (somente com metatags de `pix.generated`):

```text theme={null}
Assunto:
Seu PIX ainda está disponível

Corpo:
Olá, {{customer.name}}!

Seu pedido ainda aguarda pagamento.

Código PIX:
{{order.pix_code}}

Pagar agora:
{{order.url_pix_gerado}}
```

Inválido: `{{pix.payment_url}}`, `{{order.pix_qrcode}}`, `{{customer.fullname}}`.

QR em HTML: `{{order.pix_qr_code}}` dentro de um bloco mj-raw (imagem HTTPS). Não use isso no WhatsApp.

### Preview

Assunto e corpo com as `{{chaves}}` visíveis. Avise que trechos podem sair em branco se o dado não existir.

## SMS (`send_sms`)

```json theme={null}
{
  "type": "action",
  "name": "send_sms",
  "data": {
    "message": "Oi {{lead.name}}, volte: {{cart.url_checkout}}"
  }
}
```

| Campo     | Obrigatório | Limite                                                                               |
| --------- | ----------- | ------------------------------------------------------------------------------------ |
| `message` | sim         | **≤ 160 caracteres no texto salvo** (as `{{chaves}}` contam pelo tamanho da sintaxe) |

Depois da substituição, a URL real pode passar de 160 no provedor. Prefira frases curtas. Sem telefone, o envio falha.

## WhatsApp (`send_whatsapp`)

Padrão para LLM: texto.

```json theme={null}
{
  "type": "action",
  "name": "send_whatsapp",
  "data": {
    "type": "text",
    "message": "Olá {{customer.name}}, seu PIX: {{order.pix_code}}"
  }
}
```

`message` ou `text` (alias). Sem telefone, o envio falha.

### Outros `data.type`

Use só se o usuário pedir mídia ou botão.

| `type`              | Obrigatório                                               |
| ------------------- | --------------------------------------------------------- |
| `text` / `whatsapp` | `message` ou `text`                                       |
| `document`          | `document` (URL HTTPS)                                    |
| `video`             | `video` (URL)                                             |
| `audio`             | `audio` (URL)                                             |
| `link`              | `linkUrl`                                                 |
| `button-actions`    | `buttonActions[]` (`type` `CALL` ou `URL`) ou `choices[]` |
| `button-list`       | `buttonList.buttons` ou `choices[]`                       |
| `button-otp`        | `code`                                                    |
| `pix-button`        | `pixKey` (chave PIX da loja, não é `{{order.pix_code}}`)  |
| `request-payment`   | `amount` > 0 ou metatag `{{...}}`                         |

Opcionais comuns: `caption`, `title`, `footer`, `image`.

Áudio/vídeo/documento podem ir como texto se a mídia não puder ser entregue.

## Metatags no texto

Para cada `{{chave}}` a LLM deve saber:

1. A chave existe no catálogo?
2. O `trigger_event` está na lista daquela metatag?
3. O tipo (string, url, currency)?
4. Pode vir vazia? Sim, na maioria dos casos — escreva a frase para funcionar mesmo assim.
5. Fallback: se o catálogo indicar um texto padrão (ex. `{{customer.name}}` → “Cliente”), ainda assim o envio pode interpolar vazio se o dado não chegou. Não assuma o nome.

```text theme={null}
{{customer.name}}
Tipo: string
Gatilhos (catálogo): pix.generated, payment.confirmed, cart.abandoned, tracking_code_updated, email.received
Pode ser vazio: sim
Uso: Olá, {{customer.name}}
```

Confira a linha exata em [Metatags](/automations-metatags).

## Tom e canal

| Canal    | Boas práticas                                                      |
| -------- | ------------------------------------------------------------------ |
| E-mail   | assunto claro; corpo com quebras de linha; um CTA (URL de metatag) |
| SMS      | uma ideia; evite várias URLs                                       |
| WhatsApp | curto; código PIX em linha própria                                 |

Não coloque senhas, tokens ou dados de outro cliente no template.

## Actions que não são mensagem

`webhook` envia POST HTTPS para `data.url`. `create_coupon` cria um cupom da loja. Campos em [Steps](/automations-steps). Não use essas actions como template de e-mail/SMS.

Próximo: [montar o fluxo](/automations-builder) e [steps](/automations-steps).
