FEAT: Tabela templates para mensagens pré aprovadas pela meta
This commit is contained in:
parent
12e79cc6d6
commit
036d539fe1
14
database/migrations/005_templates.sql
Normal file
14
database/migrations/005_templates.sql
Normal file
@ -0,0 +1,14 @@
|
||||
CREATE TABLE IF NOT EXISTS whatsapp_templates (
|
||||
id SERIAL PRIMARY KEY,
|
||||
name VARCHAR(255) NOT NULL UNIQUE,
|
||||
content TEXT NOT NULL,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
INSERT INTO whatsapp_templates (name, content) VALUES
|
||||
('aviso_fatura', 'Olá, {nome}. Estamos entrando em contato para lembrá-lo que a sua fatura está programada para {data}.'),
|
||||
('boas_vindas', 'Olá, {nome}! Obrigado por entrar em contato conosco. Como podemos te ajudar hoje?'),
|
||||
('lembrete_consulta', 'Olá, {nome}. Gostaríamos de confirmar o seu agendamento para {data}. Está confirmado?'),
|
||||
('suporte_tecnico', 'Olá, {nome}. Sou o atendente e irei te auxiliar no seu suporte sob protocolo {protocolo}.')
|
||||
ON CONFLICT (name) DO NOTHING;
|
||||
78
docs/chat-whatsapp.md
Normal file
78
docs/chat-whatsapp.md
Normal file
@ -0,0 +1,78 @@
|
||||
# Arquitetura e Integracao do Modulo WhatsApp (Omnichannel)
|
||||
|
||||
## Visao Geral do Sistema
|
||||
|
||||
Este documento descreve a arquitetura de alto nivel do modulo de **WhatsApp** integrado ao ecossistema **Sothis Omnichannel**. A solucao une uma interface web moderna de atendimento, uma API NestJS robusta e o controle nativo do WhatsApp Web via automacao e WebSockets em tempo real.
|
||||
|
||||
---
|
||||
|
||||
## Diagrama de Fluxo e Integracao
|
||||
|
||||
O fluxo de comunicacao entre os diferentes componentes do ecossistema e estruturado conforme o diagrama a seguir:
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
%% Componentes
|
||||
FE[Frontend - React/Vite]
|
||||
BE[Backend - NestJS]
|
||||
DB[(Banco PostgreSQL)]
|
||||
PERSIST[(Persistencia JSON Local)]
|
||||
PUPP[Puppeteer Client - WhatsApp Web]
|
||||
WPP[Servidores do WhatsApp]
|
||||
|
||||
%% Relacionamentos do Frontend
|
||||
FE <-->|WebSockets: Socket.io| BE
|
||||
FE -->|HTTP: Enviar Mensagem / Atribuir / Liberar| BE
|
||||
|
||||
%% Relacionamentos do Backend
|
||||
BE <-->|Transacoes SQL| DB
|
||||
BE <-->|Leitura/Escrita Cache| PERSIST
|
||||
BE <-->|Automacao de Headless Chrome| PUPP
|
||||
|
||||
%% WhatsApp Web
|
||||
PUPP <-->|Sincronizacao Nativa| WPP
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Divisao de Responsabilidades
|
||||
|
||||
### 1. Frontend (Interface Operacional)
|
||||
* **Visualizacao**: Renderiza o historico de bolhas de mensagens e arquivos de midia (imagens, audios, anexos).
|
||||
* **Posse de Chat (Ownership)**: Permite ao operador assumir chats livres (`takeChat`) ou libera-los (`releaseChat`), aplicando travas visuais se a conversa estiver sob a posse de outro colaborador.
|
||||
* **UX Ininterrupta**: Aplica de-duplicação temporal em milissegundos e cria bolhas locais com ID temporario antes do disparo de rede para garantir experiencia livre de lag.
|
||||
|
||||
### 2. Backend (Orquestracao e Integracao)
|
||||
* **Automacao (whatsapp-web.js)**: Carrega o headless Chrome (via Puppeteer), autentica a sessao por QR Code, inicializa o cliente e gerencia reconexoes.
|
||||
* **Transmissao em Tempo Real**: Escuta eventos de mensagem (`message_create`) do Puppeteer, formata o payload (com suporte a midias baixadas e resolucao inteligente de nomes) e distribui via Socket.io Gateway para a interface do atendente.
|
||||
* **Processamento Pesado**: Aceita payloads de midia em Base64 de ate 50MB no canal de entrada para evitar falhas de upload.
|
||||
|
||||
### 3. Banco de Dados PostgreSQL (Persistencia Transacional)
|
||||
* **Controle de Atribuicoes**: A tabela `whatsapp_chat_atribuicoes` atua como fonte unica da verdade (*Single Source of Truth*) para posse de atendimento.
|
||||
* **Chaves Estrangeiras**: Vincula transacionalmente o ID do chat (`chat_id`) com chaves numericas de usuarios (`user_id`) e setores operacionais (`area_id`).
|
||||
|
||||
### 4. Cache JSON Local (whatsapp-chats-persist.json)
|
||||
* **Performance de Listagem**: Evita multiplas consultas a servidores de rede locais ou API do WhatsApp na listagem inicial de chats operacionais.
|
||||
* **Historico e previews**: Armazena carimbos de tempo (timestamps), contadores de nao lidas e previews de midia de forma otimizada.
|
||||
|
||||
---
|
||||
|
||||
## Casos de Uso Principais
|
||||
|
||||
### A. Assumir Chat Automaticamente ao Enviar Mensagem
|
||||
1. O operador envia uma mensagem em uma conversa livre.
|
||||
2. O frontend verifica se o chat esta sem dono e faz um POST para `/whatsapp/assign`.
|
||||
3. O backend insere na tabela `whatsapp_chat_atribuicoes` o ID do atendente e o ID numerico de sua respectiva area de trabalho.
|
||||
4. A transacao e confirmada. O frontend atualiza a UI marcando o operador como dono e libera o canal de conversacao.
|
||||
|
||||
### B. Envio e Recebimento de Midias
|
||||
1. O cliente envia uma imagem pelo WhatsApp.
|
||||
2. O Puppeteer no backend detecta a mensagem com midia e baixa seus bytes em tempo real.
|
||||
3. O backend emite via socket os metadados e os bytes brutos (`mimetype`, `data` em base64, `filename`).
|
||||
4. O frontend identifica a presenca da midia e renderiza o player de audio, imagem ou link de download de forma nativa e estetica.
|
||||
|
||||
---
|
||||
|
||||
## Politicas de Segurança e Versionamento
|
||||
* As pastas de sessoes (`/whatsapp-session`), arquivos locais de persistencia JSON e logs de desenvolvimento estao estritamente declarados nos arquivos `.gitignore` para nao serem expostos nos repositorios Git.
|
||||
* Credenciais de banco residem exclusivamente em arquivos `.env.*` mantidos fora do controle de versao.
|
||||
Loading…
Reference in New Issue
Block a user