feat: projeto whatsapp-api-oficial — wrapper Meta Cloud API

API Node.js/Express que encapsula a Meta Cloud API (Graph API v21.0):
- POST /account/configure/:accountId — salva credenciais WABA no SQLite
- GET  /account/status/:accountId   — verifica credenciais via Meta API
- POST /message/send/:accountId     — envia texto, template ou mídia
- GET  /templates/:accountId        — lista templates aprovados da WABA
- GET  /webhooks/meta               — verificação de token (Meta handshake)
- POST /webhooks/meta               — recebe eventos Meta e repassa ao sys
- Dockerfile + docker-compose.yml com Traefik (apimsgoficial.neuralsys.com.br)
- Swagger em /api-docs com autenticação por x-api-key

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-20 16:49:24 -03:00
commit 995f211288
18 changed files with 736 additions and 0 deletions
+57
View File
@@ -0,0 +1,57 @@
const swaggerAutogen = require('swagger-autogen')({ openapi: '3.0.0', autoBody: false })
const outputFile = './swagger.json'
const endpointsFiles = ['./src/routes.js']
const doc = {
info: {
title: 'WhatsApp Oficial API',
description: 'API REST para envio de mensagens via WhatsApp Cloud API (Meta). Suporta texto livre (janela 24h), templates aprovados e mídia.',
version: '1.0.0',
},
host: '',
securityDefinitions: {
apiKeyAuth: {
type: 'apiKey',
in: 'header',
name: 'x-api-key',
},
},
produces: ['application/json'],
tags: [
{
name: 'Account',
description: 'Configuração e verificação de credenciais WABA (phone_number_id, access_token)',
},
{
name: 'Message',
description: 'Envio de mensagens — texto livre (janela 24h), template aprovado ou mídia',
},
{
name: 'Templates',
description: 'Listagem de templates aprovados na conta WABA',
},
],
definitions: {
ConfigureAccountRequest: {
phone_number_id: '123456789012345',
access_token: 'EAAxxxxx...',
waba_id: '987654321098765',
},
SendMessageRequest: {
to: '5511999998888',
type: 'text',
text: 'Olá, mundo!',
},
SuccessResponse: {
success: true,
message: 'Operação realizada com sucesso.',
},
ErrorResponse: {
success: false,
message: 'Descrição do erro.',
},
},
}
swaggerAutogen(outputFile, endpointsFiles, doc)