Pular para conteúdo

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:

  1. Automação: Criar templates programaticamente
  2. Gestão: Gerenciar templates via API ao invés de manualmente
  3. Escalabilidade: Criar múltiplos templates rapidamente
  4. Integração: Sincronizar templates com sistema próprio
  5. Aprovação: Submeter templates para aprovação do Meta

Como funciona internamente?

Quando o CREATE_TEMPLATE é executado, o sistema:

  1. Valida obrigatórios: templateName, templateLanguage, templateCategory
  2. Valida businessAccountId: Requerido para criar templates
  3. Constrói template: Nome, idioma, categoria, componentes
  4. Envia para API: POST para criar template
  5. Aguarda aprovação: Template fica "PENDING" até Meta aprovar
  6. 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

{
  "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"]
    ]
  }
}
{
  "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