CREATE_TEMPLATE - Criar Template de Mensagem
O que é este Node?
O CREATE_TEMPLATE é o node responsável por criar novos templates de mensagem via WhatsApp Business API.
Por que este Node existe?
Templates precisam ser criados. O CREATE_TEMPLATE existe para:
- Automação: Criar templates programaticamente
- Gestão: Gerenciar templates via API ao invés de manualmente
- Escalabilidade: Criar múltiplos templates rapidamente
- Integração: Sincronizar templates com sistema próprio
- Aprovação: Submeter templates para aprovação do Meta
Como funciona internamente?
Quando o CREATE_TEMPLATE é executado, o sistema:
- Valida obrigatórios: templateName, templateLanguage, templateCategory
- Valida businessAccountId: Requerido para criar templates
- Constrói template: Nome, idioma, categoria, componentes
- Envia para API: POST para criar template
- Aguarda aprovação: Template fica "PENDING" até Meta aprovar
- Retorna ID: ID do template criado
Código interno (whatsapp-meta-executor.service.ts:646-670):
private async createTemplate(data: WhatsAppMetaNodeData): Promise<any> {
if (!data.businessAccountId) {
throw new Error('Business Account ID is required for template creation');
}
const payload = {
name: data.templateName,
language: data.templateLanguage,
category: data.templateCategory,
components: data.templateComponents || []
};
const response: AxiosResponse = await axios.post(
`${this.WHATSAPP_API_BASE}/${data.businessAccountId}/message_templates`,
payload,
{
headers: {
'Authorization': `Bearer ${data.accessToken}`,
'Content-Type': 'application/json'
}
}
);
return response.data;
}
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| operation | string | Sim | Deve ser "create_template" |
| accessToken | string | Sim | Token de acesso da WhatsApp Business API |
| businessAccountId | string | Sim | ID da conta WhatsApp Business |
| templateName | string | Sim | Nome único do template (lowercase, underscores) |
| templateLanguage | string | Sim | Código do idioma (pt_BR, en_US, etc) |
| templateCategory | string | Sim | AUTHENTICATION, MARKETING, UTILITY |
| templateComponents | array | Sim | Componentes do template (HEADER, BODY, FOOTER, BUTTONS) |
Categorias de Template
AUTHENTICATION
Para códigos de verificação, OTP, autenticação de dois fatores.
MARKETING
Para promoções, ofertas, novidades. Requer opt-in do usuário.
UTILITY
Para atualizações de conta, pedidos, confirmações, lembretes.
Componentes de Template
HEADER
{
"type": "HEADER",
"format": "TEXT",
"text": "Confirmação de Pedido"
}
BODY
{
"type": "BODY",
"text": "Olá {{1}}, seu pedido {{2}} foi confirmado!",
"example": {
"body_text": [
["João Silva", "12345"]
]
}
}
FOOTER
{
"type": "FOOTER",
"text": "Obrigado pela preferência"
}
BUTTONS
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Confirmar"
},
{
"type": "URL",
"text": "Ver Pedido",
"url": "https://loja.com/pedido/{{1}}"
}
]
}
Exemplo Completo: Template de Confirmação
{
"name": "Criar Template Confirmação - CREATE_TEMPLATE",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "whatsapp_1",
"type": "whatsapp_meta",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Criar Template",
"parameters": {
"operation": "create_template",
"accessToken": "EAAxxxxxxxx",
"businessAccountId": "123456789012345",
"templateName": "order_confirmation_v2",
"templateLanguage": "pt_BR",
"templateCategory": "UTILITY",
"templateComponents": [
{
"type": "HEADER",
"format": "TEXT",
"text": "Pedido Confirmado"
},
{
"type": "BODY",
"text": "Olá {{1}}!\n\nSeu pedido #{{2}} foi confirmado com sucesso.\n\nValor: {{3}}\n\nPrevisão de entrega: {{4}}",
"example": {
"body_text": [
["Maria Silva", "12345", "R$ 299,90", "3-5 dias úteis"]
]
}
},
{
"type": "FOOTER",
"text": "Empresa XYZ - Loja Online"
},
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Rastrear Pedido"
},
{
"type": "URL",
"text": "Ver Detalhes",
"url": "https://loja.com/pedido/{{1}}"
}
]
}
]
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "✅ Template criado e enviado para aprovação!\n\nAguarde 24-48h para aprovação do Meta."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "whatsapp_1" },
{ "source": "whatsapp_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Resposta do Node
{
"id": "1234567890",
"status": "PENDING",
"category": "UTILITY",
"language": "pt_BR",
"name": "order_confirmation_v2"
}
Estados de Template
- PENDING: Aguardando aprovação do Meta
- APPROVED: Aprovado e pronto para uso
- REJECTED: Rejeitado (verifique motivo e corrija)
- PAUSED: Pausado (qualidade baixa ou reclamações)
- DISABLED: Desabilitado
Boas Práticas
✅ SIM: - Use nomes descritivos e únicos (ex: order_confirmation_v2) - Forneça examples claros para todos os parâmetros - Use UTILITY para mensagens transacionais (melhor taxa de aprovação) - Revise texto cuidadosamente antes de submeter - Mantenha mensagens claras e profissionais
❌ NÃO: - Não use espaços no templateName (use underscores) - Não submeta templates com erros de português - Não use MARKETING sem opt-in explícito do usuário - Não inclua links encurtados (use domínio completo) - Não use conteúdo enganoso ou spam
Regras de Aprovação
✅ Aprovado facilmente:
- Templates UTILITY transacionais
- Texto claro e profissional
- Variáveis com examples corretos
- Domínio verificado nos links
❌ Rejeitado comumente:
- Conteúdo promocional excessivo
- Erros gramaticais
- Links suspeitos ou não verificados
- Falta de examples para variáveis
- Conteúdo enganoso
Dicas
💡 Nome: Use padrão tipo_versao (ex: welcome_v1, order_conf_v2) 💡 Aprovação: Templates UTILITY aprovam mais rápido que MARKETING 💡 Examples: Sempre forneça examples realistas para variáveis {{1}}, {{2}} 💡 Idioma: templateLanguage deve corresponder ao idioma do texto 💡 Teste: Crie template de teste antes de produção 💡 Botões: Máximo 3 botões (QUICK_REPLY ou URL)
Próximo Node
→ GET_TEMPLATES - Listar templates criados → SEND_TEMPLATE - Enviar template aprovado