POST /send-template

Envia uma mensagem WhatsApp usando um template previamente aprovado pelo Meta. Esta é a única forma de iniciar conversa fora da janela de 24h ou de mandar mensagem proativa.

Campo Valor
URL https://api.wevi.chat/functions/v1/send-template
Método POST
Auth Authorization: Bearer wevi_... (API key)
Content-Type application/json
Rate limit 60 req/min por API key
Plano necessário Pro ou Ultra

Pré-requisitos

  1. WhatsApp conectado em Conta → WhatsApp Business. Anote o connection_id.
  2. Template aprovado pelo Meta: criado em WhatsApp Business → Templates, com status APPROVED.
  3. API key criada em Conta → Desenvolvedores → API Keys.

Body

Campo Tipo Obrigatório Descrição
connection_id string (uuid) sim ID da conexão WhatsApp da sua org.
template_name string sim Nome exato do template (case-sensitive).
to string sim Telefone destino. Aceita formato BR (com ou sem +55) ou internacional.
language_code string não Idioma do template. Padrão: pt_BR.
body_params array de strings não Variáveis do corpo na ordem {{1}}, {{2}}, {{3}}.
header_image_url string (URL pública) não Pra templates com header tipo imagem.
contact_id string (uuid) não Vincula o envio a um contato da Wevi. Permite usar variáveis dinâmicas (veja abaixo).
idempotency_key string não Chave única pra evitar duplicação em retries. Veja erros.

Variáveis dinâmicas em body_params

Se você passar contact_id, os body_params podem conter substituições que a Wevi resolve antes de mandar pro Meta:

Variável Vira
{{contact_name}} contacts.display_name
{{contact_phone}} telefone normalizado
{{chave_custom}} valor de contact.custom_fields["chave_custom"]

Exemplo: template "Olá {{1}}, seu pedido {{2}} foi confirmado.", chamando com:

{
  "body_params": ["{{contact_name}}", "12345"],
  "contact_id": "uuid-do-cliente"
}

vira "Olá João Silva, seu pedido 12345 foi confirmado."

Exemplos

Template simples sem variáveis

curl -X POST https://api.wevi.chat/functions/v1/send-template \
  -H "Authorization: Bearer wevi_abc123..." \
  -H "Content-Type: application/json" \
  -d '{
    "connection_id": "conn-uuid",
    "template_name": "boas_vindas",
    "to": "+5511999999999"
  }'

Com variáveis e contact_id

curl -X POST https://api.wevi.chat/functions/v1/send-template \
  -H "Authorization: Bearer wevi_abc123..." \
  -H "Content-Type: application/json" \
  -d '{
    "connection_id": "conn-uuid",
    "template_name": "pedido_confirmado",
    "to": "+5511999999999",
    "body_params": ["{{contact_name}}", "12345", "R$ 297,00"],
    "contact_id": "contact-uuid",
    "idempotency_key": "pedido-12345-confirmacao"
  }'

Com header de imagem

curl -X POST https://api.wevi.chat/functions/v1/send-template \
  -H "Authorization: Bearer wevi_abc123..." \
  -H "Content-Type: application/json" \
  -d '{
    "connection_id": "conn-uuid",
    "template_name": "promocao_imagem",
    "to": "+5511999999999",
    "header_image_url": "https://meusite.com/banner-promo.png",
    "body_params": ["50%"]
  }'

Resposta

Sucesso (200)

{
  "id": "envio-uuid",
  "wamid": "wamid.HBgN...",
  "status": "sent"
}
  • id: ID do envio na Wevi (use em logs/idempotency).
  • wamid: WhatsApp message ID retornado pelo Meta.
  • status: começa sent. Vira delivered, read ou failed conforme webhook do Meta atualiza.

Falha do Meta (200 mas status: "failed")

{
  "id": "envio-uuid",
  "status": "failed",
  "error": "Template not approved in this language"
}

Casos comuns: template ainda em pending, idioma inválido, número bloqueado.

Erros HTTP

Status error
400 connection_id is required, template_name is required, to is required
401 Invalid API key
402 plan_limit_exceeded (sem WhatsApp no plano)
404 Connection not found
429 Too many requests

Diferença pro /send-message

/send-template /send-message
Pra quê Mensagem proativa, fora ou dentro da janela 24h Resposta textual dentro da janela 24h
Precisa template aprovado? Sim Não
Aceita mídia? Sim, via header_image_url Não (só texto)
Variáveis? Sim, no body_params Não

Veja `POST /send-message`.

Próximo

/send-message