DOC: Atualiza modulo WhatsApp para refletir Meta Cloud API
Remove referencias a whatsapp-web.js/Puppeteer. Adiciona MediaStorageService, rotas de send-media, tabela de tipos/limites de midia e proximos passos atualizados.
parent
293dbcf35b
commit
e839804436
84
Whatsapp.md
84
Whatsapp.md
@ -4,8 +4,11 @@ Base tecnica:
|
|||||||
|
|
||||||
- Controller: `src/modules/whatsapp/whatsapp.controller.ts`
|
- Controller: `src/modules/whatsapp/whatsapp.controller.ts`
|
||||||
- Service: `src/modules/whatsapp/whatsapp.service.ts`
|
- Service: `src/modules/whatsapp/whatsapp.service.ts`
|
||||||
|
- Config Service: `src/modules/whatsapp/whatsapp-config.service.ts`
|
||||||
- Template Service: `src/modules/whatsapp/whatsapp-template.service.ts`
|
- Template Service: `src/modules/whatsapp/whatsapp-template.service.ts`
|
||||||
- Template Repository: `src/modules/whatsapp/repositories/whatsapp-template.repository.ts`
|
- Template Repository: `src/modules/whatsapp/repositories/whatsapp-template.repository.ts`
|
||||||
|
- Media Storage: `src/modules/whatsapp/media/media-storage.service.ts`
|
||||||
|
- Media Adapter (disco local): `src/modules/whatsapp/media/adapters/local-disk.adapter.ts`
|
||||||
- Contacts Service: `src/modules/contacts/contacts.service.ts`
|
- Contacts Service: `src/modules/contacts/contacts.service.ts`
|
||||||
- Attendance Assignment: `src/modules/attendance/attendance-assignment.service.ts`
|
- Attendance Assignment: `src/modules/attendance/attendance-assignment.service.ts`
|
||||||
- Attendance Repository: `src/modules/attendance/repositories/attendance-assignment.repository.ts`
|
- Attendance Repository: `src/modules/attendance/repositories/attendance-assignment.repository.ts`
|
||||||
@ -15,7 +18,7 @@ Base tecnica:
|
|||||||
|
|
||||||
## Responsabilidade
|
## Responsabilidade
|
||||||
|
|
||||||
Integra com `whatsapp-web.js`, controla sessao, QR Code, chats, mensagens, midia e templates do canal WhatsApp.
|
Integra com a **API oficial da Meta (Cloud API)**. Controla recebimento e envio de mensagens e midias, templates HSM e configuracao do canal.
|
||||||
|
|
||||||
Fila, atribuicao, transferencia, fechamento e triagem do atendimento ficam no modulo `attendance`, mas algumas rotas continuam expostas em `/whatsapp` por compatibilidade com o frontend.
|
Fila, atribuicao, transferencia, fechamento e triagem do atendimento ficam no modulo `attendance`, mas algumas rotas continuam expostas em `/whatsapp` por compatibilidade com o frontend.
|
||||||
|
|
||||||
@ -23,11 +26,14 @@ Fila, atribuicao, transferencia, fechamento e triagem do atendimento ficam no mo
|
|||||||
|
|
||||||
| Metodo | Rota | Descricao |
|
| Metodo | Rota | Descricao |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| GET | `/whatsapp/status` | Status da sessao WhatsApp |
|
| GET | `/whatsapp/status` | Status da conexao WhatsApp |
|
||||||
| GET | `/whatsapp/chats` | Lista conversas |
|
| GET | `/whatsapp/chats` | Lista conversas |
|
||||||
| GET | `/whatsapp/messages/:chatId` | Lista mensagens de uma conversa |
|
| GET | `/whatsapp/messages/:chatId` | Lista mensagens de uma conversa |
|
||||||
| GET | `/whatsapp/media/:chatId/:messageId` | Baixa midia de mensagem |
|
| GET | `/whatsapp/media/:chatId/:messageId` | Retorna midia de mensagem recebida |
|
||||||
| POST | `/whatsapp/send` | Envia texto/midia |
|
| POST | `/whatsapp/send` | Envia texto |
|
||||||
|
| POST | `/whatsapp/send-media` | Envia midia (multipart/form-data com Multer) |
|
||||||
|
| GET | `/whatsapp/webhook` | Verificacao do webhook Meta |
|
||||||
|
| POST | `/whatsapp/webhook` | Recebe eventos do webhook Meta |
|
||||||
| POST | `/whatsapp/start-attendance` | Inicia atendimento ativo por template |
|
| POST | `/whatsapp/start-attendance` | Inicia atendimento ativo por template |
|
||||||
| POST | `/whatsapp/assign` | Assume conversa |
|
| POST | `/whatsapp/assign` | Assume conversa |
|
||||||
| POST | `/whatsapp/transfer` | Transfere conversa |
|
| POST | `/whatsapp/transfer` | Transfere conversa |
|
||||||
@ -36,68 +42,66 @@ Fila, atribuicao, transferencia, fechamento e triagem do atendimento ficam no mo
|
|||||||
| GET | `/whatsapp/assignment/:chatId` | Consulta atribuicao |
|
| GET | `/whatsapp/assignment/:chatId` | Consulta atribuicao |
|
||||||
| GET | `/whatsapp/templates` | Lista templates |
|
| GET | `/whatsapp/templates` | Lista templates |
|
||||||
| POST | `/whatsapp/templates` | Cria template |
|
| POST | `/whatsapp/templates` | Cria template |
|
||||||
|
| POST | `/whatsapp/templates/sync-meta` | Sincroniza status dos templates com a Meta |
|
||||||
| POST | `/whatsapp/templates/update/:id` | Atualiza template |
|
| POST | `/whatsapp/templates/update/:id` | Atualiza template |
|
||||||
| POST | `/whatsapp/templates/approve-admin/:id` | Aprova template pelo admin |
|
| POST | `/whatsapp/templates/:id/submit-meta` | Envia template para aprovacao da Meta |
|
||||||
| POST | `/whatsapp/templates/reject-admin/:id` | Reprova template pelo admin |
|
|
||||||
| DELETE | `/whatsapp/templates/:id` | Remove template |
|
| DELETE | `/whatsapp/templates/:id` | Remove template |
|
||||||
|
|
||||||
## Funcoes importantes
|
## Funcoes importantes
|
||||||
|
|
||||||
### `whatsapp.service.ts`
|
### `whatsapp.service.ts`
|
||||||
|
|
||||||
- Inicializa cliente WhatsApp Web.
|
- `handleMetaWebhookEvent()` — entry point do webhook, delega para `handleMetaIncomingMessage()`
|
||||||
- Emite QR/status.
|
- `handleMetaIncomingMessage()` — processa mensagem recebida, baixa midia se necessario via `downloadMetaMedia()`
|
||||||
- Lista chats e mensagens.
|
- `downloadMetaMedia()` — busca URL temporaria da Meta e baixa o binario
|
||||||
- Envia mensagens e midias.
|
- `sendMessage()` — envia texto via Meta API
|
||||||
- Dispara roteamento do bot ao receber mensagem.
|
- `sendMediaMessage()` — faz upload da midia para `/{phone_number_id}/media`, recebe `media_id` e envia a mensagem; salva no banco e emite via Socket.IO
|
||||||
- Executa abertura ativa com template.
|
|
||||||
- Nao cria schema de templates em runtime; `whatsapp_templates` deve existir via migrations.
|
### `whatsapp-config.service.ts`
|
||||||
- Usa `ContactsService` para enriquecer chats com nome, telefone, email, etiqueta e observacao.
|
|
||||||
|
- Gerencia configuracao do canal na tabela `whatsapp_config` (access_token, phone_number_id, api_version, webhook_token).
|
||||||
|
- Configuracao nao fica em variavel de ambiente; e gerenciada pelo painel admin.
|
||||||
|
|
||||||
|
### `media-storage.service.ts`
|
||||||
|
|
||||||
|
- Abstrai persistencia de arquivos de midia.
|
||||||
|
- Adapter atual: `LocalDiskAdapter` — salva em `./uploads/media/` com nome UUID.
|
||||||
|
- URL publica montada com `BASE_URL` do ambiente.
|
||||||
|
- `AppModule` serve o diretorio via `ServeStaticModule` em `/uploads`.
|
||||||
|
- Adapter futuro (SharePoint/S3) so precisa implementar a mesma interface.
|
||||||
|
|
||||||
### `whatsapp-template.service.ts`
|
### `whatsapp-template.service.ts`
|
||||||
|
|
||||||
- Lista, cria, edita, aprova, reprova e remove templates.
|
- Lista, cria, edita e remove templates.
|
||||||
- Simula aprovacao Meta por tempo para o fluxo de demo.
|
- Sincroniza status com a Meta via `sync-meta`.
|
||||||
- Mantem regra de negocio de template fora do adaptador WhatsApp.
|
- Mantem regra de negocio de template fora do adaptador de canal.
|
||||||
|
|
||||||
### `whatsapp-template.repository.ts`
|
|
||||||
|
|
||||||
- Concentra SQL da tabela `whatsapp_templates`.
|
|
||||||
- Usa migrations como fonte do schema.
|
|
||||||
|
|
||||||
### `attendance-assignment.service.ts`
|
### `attendance-assignment.service.ts`
|
||||||
|
|
||||||
- Controla fila e atribuicao em `whatsapp_chat_atribuicoes`.
|
- Controla fila e atribuicao em `whatsapp_chat_atribuicoes`.
|
||||||
- Impede envio quando atendimento ativo aguarda resposta do cliente.
|
- Impede envio quando atendimento ativo aguarda resposta do cliente.
|
||||||
- Roteia conversas por area, fluxo configurado ou arvore do bot.
|
- Roteia conversas por area, fluxo configurado ou arvore do bot.
|
||||||
- Monta observacao de transferencia do Agente Virtual.
|
|
||||||
- Consulta `AgentPresenceService` antes de atribuir atendimento a um usuario.
|
- Consulta `AgentPresenceService` antes de atribuir atendimento a um usuario.
|
||||||
- Nao cria/altera schema em runtime; `whatsapp_chat_atribuicoes` deve ser mantida pelas migrations.
|
|
||||||
|
|
||||||
### `attendance-assignment.repository.ts`
|
## Midia — tipos e limites aceitos em `send-media`
|
||||||
|
|
||||||
- Concentra SQL de atribuicao, fila, transferencia, triagem e leitura do fluxo do bot.
|
| Tipo | Formatos | Limite |
|
||||||
- Mantem o service focado em regra de negocio e orquestracao.
|
|---|---|---|
|
||||||
|
| Imagem | jpeg, png, webp, gif | 5 MB |
|
||||||
|
| Audio | mpeg, mp4, ogg, wav, aac, amr | 16 MB |
|
||||||
|
| Video | mp4, 3gpp | 16 MB |
|
||||||
|
| Documento | pdf, docx, xlsx | 100 MB |
|
||||||
|
|
||||||
## Eventos em tempo real
|
## Eventos em tempo real
|
||||||
|
|
||||||
O `whatsapp.gateway.ts` usa Socket.IO para notificar o frontend sobre:
|
O `whatsapp.gateway.ts` usa Socket.IO para notificar o frontend sobre:
|
||||||
|
|
||||||
- novas mensagens;
|
- novas mensagens (texto e midia);
|
||||||
- atualizacoes de chat;
|
- atualizacoes de chat;
|
||||||
- status/QR quando aplicavel.
|
- status de conexao.
|
||||||
|
|
||||||
## Code review
|
|
||||||
|
|
||||||
- `attendance-assignment.service.ts` concentra regra critica e deve receber testes.
|
|
||||||
- `whatsapp.controller.ts` usa DTOs para validar payloads de envio, atendimento, transferencia e templates.
|
|
||||||
- Permissao de agente/admin ainda precisa ser validada no backend.
|
|
||||||
- `whatsapp-web.js` e bom para demo/MVP controlado, mas para producao robusta avaliar WhatsApp Cloud API.
|
|
||||||
|
|
||||||
## Proximos passos
|
## Proximos passos
|
||||||
|
|
||||||
- Persistir conversas e mensagens no PostgreSQL para auditoria.
|
- Adicionar IA no primeiro atendimento, com configuracao no painel admin para escolher o provedor/modelo.
|
||||||
- Guardar anexos fora do banco, com metadados em `message_attachments` e arquivo em VM Linux, AWS S3, Azure Blob ou SharePoint.
|
- Migrar storage de midia para SharePoint ou S3 (so trocar o adapter no `MediaStorageService`).
|
||||||
- Evoluir `chat` para modulo omnichannel, recebendo eventos normalizados de WhatsApp, Email, SMS e Instagram.
|
- Evoluir `chat` para modulo omnichannel, recebendo eventos normalizados de WhatsApp, Email, SMS e Instagram.
|
||||||
- Substituir `whatsapp-web.js` pela API oficial da Meta.
|
|
||||||
- Adicionar IA no primeiro atendimento, com configuracao no painel admin para escolher o provedor/modelo de IA.
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user