WhatsApp Templates NooviChat custom

Gerencie templates do WhatsApp Business (Marketing, Utility, Authentication) diretamente pela API do NooviChat — sem entrar no Facebook Business Manager.

Feature exclusiva NooviChat. O Chatwoot upstream fornece apenas sincronizacao read-only de templates; a NooviChat adiciona CRUD completo + UI dedicada em Settings, funcionando como proxy autenticado para a Meta Graph API (versao configuravel via WHATSAPP_API_VERSION, atualmente v25.0).

Visao Geral

Pre-requisitos

  • Inbox do tipo Channel::Whatsapp com provider = "whatsapp_cloud"
  • Credenciais Meta na inbox (provider_config.api_key + business_account_id)
  • Agent API token valido (header api_access_token)
  • Operacoes de escrita (create/update/delete/sync) exigem role administrator

Endpoint Base

text
https://<sua-instancia>/api/v1/accounts/:account_id/whatsapp_templates

Autenticacao

http
api_access_token: <seu-agent-token>
Content-Type: application/json

Listar Templates

GET/api/v1/accounts/:account_id/whatsapp_templates

Lista todos os templates do inbox (permitido para qualquer membro autenticado da conta)

Query params

NomeTipoObrigatorioDescricao
inbox_id(query)integerSimID do inbox WhatsApp Cloud
status(query)stringNaoAPPROVED | PENDING | REJECTED | IN_APPEAL
category(query)stringNaoMARKETING | UTILITY | AUTHENTICATION
search(query)stringNaoBusca fulltext
limit(query)integerNaoTamanho da pagina Meta (default 100). O endpoint segue a paginacao automaticamente e retorna todos os templates.

Exemplo

bash
curl -s "https://<instancia>/api/v1/accounts/4/whatsapp_templates?inbox_id=3&status=APPROVED" \
  -H "api_access_token: $NOOVICHAT_AGENT_TOKEN"
200Lista de templates (passthrough Meta Graph API)
json
{
  "data": [
    {
      "id": "1234567890",
      "name": "welcome_marketing",
      "language": "pt_BR",
      "status": "APPROVED",
      "category": "MARKETING",
      "components": [
        { "type": "HEADER", "format": "TEXT", "text": "Ola, {{1}}!" },
        { "type": "BODY", "text": "Bem-vindo a nossa loja." },
        { "type": "FOOTER", "text": "Noovi" }
      ]
    }
  ]
}

Obter Template

GET/api/v1/accounts/:account_id/whatsapp_templates/:id

Retorna um template pelo ID Meta (nao pelo nome). Requer inbox_id na query.

Criar Template

POST/api/v1/accounts/:account_id/whatsapp_templates

Submete novo template para aprovacao Meta. Admin-only.

Validacao server-side (antes de bater na Meta): name lowercase alfanumerico + underscores (max 512), language BCP-47 (pt_BR, en_US), category MARKETING|UTILITY|AUTHENTICATION, components max 10 (BODY text max 1024, HEADER/FOOTER max 60). Botoes: ate 10 no total, no maximo 2 do tipo URL e 1 PHONE_NUMBER; OTP/COPY_CODE apenas em AUTHENTICATION e OTP nao combina com outros tipos. Para parameter_format: NAMED, variaveis nomeadas ({{contact_name}}) exigem exemplos em body_text_named_params.

bash
curl -s -X POST "https://<instancia>/api/v1/accounts/4/whatsapp_templates" \
  -H "api_access_token: $NOOVICHAT_AGENT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "inbox_id": 3,
    "template": {
      "name": "order_shipped",
      "language": "pt_BR",
      "category": "UTILITY",
      "components": [
        { "type": "BODY", "text": "Seu pedido {{1}} foi enviado!" }
      ]
    }
  }'
201Template submetido (fica PENDING ate Meta aprovar)
json
{
  "id": "999888777",
  "status": "PENDING",
  "category": "UTILITY"
}

Atualizar Template

PUT/api/v1/accounts/:account_id/whatsapp_templates/:id

Meta permite alterar apenas category e components de templates aprovados. Admin-only.

Deletar Template

DELETE/api/v1/accounts/:account_id/whatsapp_templates

Rota de colecao (SEM :id). Remocao por nome via query template_name. Por padrao remove TODAS as variantes de idioma do nome; passe hsm_id para remover apenas uma variante. Admin-only.

Query params

NomeTipoObrigatorioDescricao
inbox_id(query)integerSimID do inbox WhatsApp Cloud
template_name(query)stringSimNome do template a deletar
hsm_id(query)stringNaoID Meta da variante (retornado por list/sync). Se presente, deleta apenas aquele idioma; senao, todas as variantes do nome.
bash
# Deleta apenas a variante pt_BR (hsm_id) em vez de todos os idiomas
curl -s -X DELETE "https://<instancia>/api/v1/accounts/4/whatsapp_templates?inbox_id=3&template_name=order_shipped&hsm_id=1234567890" \
  -H "api_access_token: $NOOVICHAT_AGENT_TOKEN"

Sincronizar com Meta

POST/api/v1/accounts/:account_id/whatsapp_templates/sync

Forca refresh imediato do cache local com estado atual na Meta. Admin-only.

bash
curl -s -X POST "https://<instancia>/api/v1/accounts/4/whatsapp_templates/sync" \
  -H "api_access_token: $NOOVICHAT_AGENT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"inbox_id": 3}'

Rate Limits

A propria Meta Graph API impoe limites de quota por conta WhatsApp Business — criacao excessiva de templates pode resultar em erro 429 ou 4 / 130472repassado pela Meta. As respostas de erro Meta sao traduzidas em 422 com mensagem amigavel e codigo Meta original no campo code. Consulte a documentacao oficial da Meta para os limites exatos de cada categoria.

Erros comuns

NomeTipoObrigatorioDescricao
401UnauthorizedNaoToken invalido ou ausente
403ForbiddenNaoNao e admin OU inbox nao e WhatsApp Cloud
404Not FoundNaoInbox fora da conta (multi-tenant) OU id invalido na Meta
422UnprocessableNaoValidacao de payload falhou OU erro repassado da Meta (inclui quota/rate limit, OAuth expirado, template duplicado) — corpo traz error, details e code Meta
Integracao n8n: o node @nooviai/n8n-nodes-noovichat v0.6.0+ expoe o recurso whatsappTemplate com as 6 operacoes (list, get, create, update, delete, sync) para uso direto em workflows.