Visão geral
O endpointsend-external-template permite que uma automação externa (n8n, Zapier, etc.)
dispare um template aprovado do WhatsApp pela API oficial da Meta. A diferença para
chamar a Meta diretamente: o Synax registra a conversa e a mensagem, de modo que, se o
cliente responder, o agente de IA atende já com o contexto da mensagem enviada.
Autenticação
Use uma chave de API com o escopo Mensagens (messaging). Crie ou edite a chave em
Configurações → API e ative o toggle “Mensagens”.
Requisição
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
phone | string | sim | Telefone do destinatário em E.164 (+5561999999999) |
template_name | string | sim | Nome do template aprovado na Meta |
language_code | string | sim | Código de idioma do template (pt_BR) |
display_text | string | sim | Texto renderizado pelo caller, gravado em chat_messages.content (o agente lê esse texto como contexto). Máx. 4096 caracteres. Não é o resultado do template — é o que o caller quer que apareça no histórico |
body_variables | string[] | não | Valores das variáveis {{1}}, {{2}}… do corpo do template. Máx. 30 itens, máx. 1024 caracteres por item |
header_variables | string[] | não | Valores das variáveis do cabeçalho. Máx. 30 itens, máx. 1024 caracteres por item |
phone_number_id | string | não | Conta Meta a usar. Omita se a empresa tiver exatamente uma conta Meta conectada. Obrigatório quando há mais de uma — caso contrário a resposta é 422 |
contact_name | string | não | Nome usado só se o contato ainda não existir no CRM. Máx. 255 caracteres |
idempotency_key | string | não | Evita envio duplicado em retries. Recomendamos <finalidade>-<contato>-<data>. Máx. 200 caracteres |
template_header_type | string | não | Declara o tipo do header de mídia static do template aprovado: "image", "video" ou "document". Não envia mídia — a mídia deve estar anexada ao template aprovado na Meta (modo static media header). Quando presente, chat_messages.type recebe o valor declarado ao invés de "text". Ver seção “Templates com header de mídia” |
Exemplo
Resposta
Resposta em retry idempotente
Quando o caller envia o mesmoidempotency_key da Tabela 1 em um retry, o Synax detecta a
duplicata e devolve a referência da mensagem anterior sem reenviar para a Meta. Note que
a resposta tem um shape diferente — whatsapp_message_id e created_conversation não
aparecem; em compensação, ganha um campo status:
success: true+status: "sent"— o envio original foi entregue à Meta.success: false+status: "pending"— o envio original ainda está em andamento (corrida com a primeira chamada). Considere retentar com backoff curto.success: false+status: "failed"— o envio original falhou. Trate como erro permanente.
Códigos de status
| HTTP | Significado |
|---|---|
| 200 | Enviado com sucesso (success: true) ou bloqueado por opt-out (success: false, reason: "do_not_contact"). Sempre inspecione o campo success no body — não confie só no status HTTP |
| 401 | Chave de API ausente ou inválida |
| 403 | A chave não tem o escopo messaging |
| 404 | A empresa não tem conta Meta conectada |
| 405 | Método HTTP não suportado — só POST é aceito |
| 422 (payload) | Algum campo é inválido (telefone fora do formato E.164, template_name ausente, body_variables com mais de 30 itens, etc.) — não retentar |
| 422 (multi-account) | A empresa tem mais de uma conta Meta conectada — passe phone_number_id explicitamente |
| 422 (template) | A Meta rejeitou o template (não aprovado, idioma errado, parâmetros inválidos) — não retentar |
| 500 | Erro interno do Synax. Investigar nos logs internos antes de retentar |
| 502 | Meta temporariamente indisponível — pode retentar com backoff |
Templates com header de mídia
O WhatsApp distingue dois modos de header de mídia em templates:| Modo | Como funciona |
|---|---|
| Static media header | Mídia (imagem, vídeo ou PDF) é anexada uma única vez na criação do template no Meta Business Manager. Toda mensagem disparada com esse template envia a mesma mídia. No payload do disparo, basta declarar template_header_type — o Synax não envia mídia à Meta, ela usa a anexada na aprovação. |
| Dynamic media header | Cada disparo carrega uma mídia diferente (ex.: foto personalizada por cliente). Não é suportado nesta versão da API. Se você precisar disso, abra um chamado. |
Como configurar o template no Meta Business Manager
- Em “Conteúdo do cabeçalho”, escolher Mídia → Imagem / Vídeo / Documento.
- Fazer upload do arquivo que será enviado em todo disparo.
- Não usar variável (
{{1}}) no header — variável força modo dynamic, que não é suportado nesta v1. - Enviar o template para aprovação na Meta.
- Após aprovado, disparar pela API declarando
template_header_typecorrespondente ao tipo escolhido. Não passarheader_variables— esses campos são para headers de texto variável e conflitam com header de mídia.
Limites da Meta (informativos)
Você não precisa pré-validar tamanho/formato no caller — a Meta rejeita no envio se o template aprovado ficar fora dos limites:- Imagem: até 5 MB (
.jpg,.png). - Vídeo: até 16 MB (
.mp4H.264 + AAC). - Documento: até 100 MB (
.pdf).
Exemplos por tipo de mídia
Visualização no chat: mensagens disparadas comtemplate_header_typesão registradas emchat_messagescomtypecorrespondente (image/video/document), mas sem prévia visual — a mídia vive dentro do template aprovado da Meta, não no Storage do Synax. O atendente vê odisplay_textno histórico; a mídia em si só é visível no WhatsApp do destinatário.