Em poucas palavras
- Escreva
{{chave}}no texto. Na hora do envio a Notifique preenche com padrões, contato evariablesda requisição. - Chaves do cadastro: use
name,email,phone. Prefira inglês nas chaves embutidas. - Gestão e envio usam escopos diferentes. Veja Escopos da API Key.
Canais no template
Cada template escolhe quais canais estão ativos (de 1 a 7):sms, whatsapp, telegram, email, rcs, push, voice.
Na API, use no root um bloco por canal:
channels deve ser subconjunto de enabledChannels. Canal pedido mas desligado gera 400 (TEMPLATE_CHANNEL_NOT_ENABLED).
Payloads por canal (criação / edição)
Variáveis
{{…}} também entram em strings aninhadas do RCS, título/corpo do push e speakText da voz.
Variáveis no texto ({{…}})
Duas fontes se misturam no envio:
- Do template com placeholders que você digitou. Precisam de valor em
variablesou emvariableDefaults. - Do contato preenchidos automaticamente quando o destinatário existe no workspace (exceto destinatário só Telegram).
variables da requisição (por cima de tudo).
Chaves fixas do contato
Prefira
{{name}}. Em alguns fluxos internos nome pode ser preenchido junto com name, mas o contrato estável da API e do editor é name. Envie variables.nome só se o texto usar essa chave de propósito.Destinatários só Telegram (
chat_id ou @username): merge automático de nome/e-mail não roda. Preencha via variables ou padrões.Formatos aceitos
- Nomeadas:
{{pedido}}→variables: { "pedido": "123" } - Posicionais:
{{1}},{{2}}→ chaves"1","2" - Campos personalizados: mesma chave técnica do CRM, ex.
{{plano_atual}}
Campos personalizados
Cada campo tem uma chave técnica (snake_case, ex.: plano_atual). No template: {{plano_atual}} com a mesma chave.
Defina no painel (Contatos → Campos personalizados) ou pela API de contatos. Depois do merge, o valor também entra em RCS, Push e Voz.
Valores padrão (variableDefaults)
Se o envio não mandar uma chave, o padrão do template entra antes de falhar por variável faltando. Contato e variables da requisição ainda podem sobrescrever.
Marketing e preferências
Em templates com categoriaMARKETING:
marketingTopicId: liga o envio a um tópico de comunicaçãoappendPreferencesLink(padrãotrue): a plataforma preenche{{preferences_link}}por destinatário
preferences_link pode ficar vazio: não dependa dele como único CTA.
Traduções (localeTranslations)
Você pode guardar traduções por locale dos campos dos canais habilitados. No envio, a API escolhe o texto com base na preferência de idioma do contato (quando disponível). Os placeholders {{…}} da tradução devem bater com o template principal.
Gestão na API
Listagem: query
page, limit, search (nome).
Exemplo mínimo só com SMS:
Templates oficiais Meta (WHATSAPP_OFFICIAL)
POST /v1/templates e PATCH /v1/templates/:id usam as mesmas validações do painel:
- mídia obrigatória em header/carrossel (
META_TEMPLATE_MEDIA_REQUIRED) - cards do carrossel com a mesma estrutura (
META_TEMPLATE_CAROUSEL_INCONSISTENT) - estrutura rica só em oficial (
TEMPLATE_META_STRUCTURE_REQUIRES_OFFICIAL)
POST /v1/templates/send ou type: "template" nas rotas de cada canal) com sk_live_, a API também valida token Meta, metaName, mídia e carrossel antes de enfileirar quando o canal for WhatsApp oficial. Com sk_test_, esses gates Meta não rodam (ver Sandbox).
Cada rota de canal (POST /v1/sms/messages, /v1/email/messages, /v1/whatsapp/messages, etc.) aceita type: "template" + payload.templateId e dispara apenas aquele canal, útil quando você já está no contrato nativo do canal.
O name interno pode diferir do metaName (nome Graph). Sem metaName resolvível → META_TEMPLATE_NOT_FOUND.
Códigos completos: Respostas de erro (accordion Meta Cloud / templates oficiais) e Templates oficiais Meta.
Schemas completos: referência da API na aba Templates.

