5
Whatsapp
Rafael Lopes edited this page 2026-07-22 17:20:30 -03:00
Modulo WhatsApp
Base tecnica:
- Controller:
src/modules/whatsapp/whatsapp.controller.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 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 - Attendance Assignment:
src/modules/attendance/attendance-assignment.service.ts - Attendance Repository:
src/modules/attendance/repositories/attendance-assignment.repository.ts - Agent Presence:
src/modules/agent/agent-presence.service.ts - Gateway:
src/modules/whatsapp/whatsapp.gateway.ts - Prefixo:
/whatsapp
Responsabilidade
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.
Endpoints
| Metodo | Rota | Descricao |
|---|---|---|
| GET | /whatsapp/status |
Status da conexao WhatsApp |
| GET | /whatsapp/chats |
Lista conversas |
| GET | /whatsapp/messages/:chatId |
Lista mensagens de uma conversa |
| GET | /whatsapp/media/:chatId/:messageId |
Retorna midia de mensagem recebida |
| 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/assign |
Assume conversa |
| POST | /whatsapp/transfer |
Transfere conversa |
| DELETE | /whatsapp/release/:chatId |
Libera conversa |
| POST | /whatsapp/close |
Fecha atendimento |
| GET | /whatsapp/assignment/:chatId |
Consulta atribuicao |
| GET | /whatsapp/templates |
Lista templates |
| 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/:id/submit-meta |
Envia template para aprovacao da Meta |
| DELETE | /whatsapp/templates/:id |
Remove template |
Funcoes importantes
whatsapp.service.ts
handleMetaWebhookEvent()— entry point do webhook, delega parahandleMetaIncomingMessage()handleMetaIncomingMessage()— processa mensagem recebida, baixa midia se necessario viadownloadMetaMedia()downloadMetaMedia()— busca URL temporaria da Meta e baixa o binariosendMessage()— envia texto via Meta APIsendMediaMessage()— faz upload da midia para/{phone_number_id}/media, recebemedia_ide envia a mensagem; salva no banco e emite via Socket.IO
whatsapp-config.service.ts
- 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_URLdo ambiente. AppModuleserve o diretorio viaServeStaticModuleem/uploads.- Adapter futuro (SharePoint/S3) so precisa implementar a mesma interface.
whatsapp-template.service.ts
- Lista, cria, edita e remove templates.
- Sincroniza status com a Meta via
sync-meta. - Mantem regra de negocio de template fora do adaptador de canal.
attendance-assignment.service.ts
- Controla fila e atribuicao em
whatsapp_chat_atribuicoes. - Impede envio quando atendimento ativo aguarda resposta do cliente.
- Roteia conversas por area, fluxo configurado ou arvore do bot.
- Consulta
AgentPresenceServiceantes de atribuir atendimento a um usuario.
Midia — tipos e limites aceitos em send-media
| Tipo | Formatos | Limite |
|---|---|---|
| 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
O whatsapp.gateway.ts usa Socket.IO para notificar o frontend sobre:
- novas mensagens (texto e midia);
- atualizacoes de chat;
- status de conexao.
Proximos passos
- Adicionar IA no primeiro atendimento, com configuracao no painel admin para escolher o provedor/modelo.
- Migrar storage de midia para SharePoint ou S3 (so trocar o adapter no
MediaStorageService). - Evoluir
chatpara modulo omnichannel, recebendo eventos normalizados de WhatsApp, Email, SMS e Instagram.