208 lines
5.5 KiB
Markdown
208 lines
5.5 KiB
Markdown
# Omnichannel Sothis
|
|
|
|
Plataforma omnichannel para atendimento com foco inicial em WhatsApp. O sistema combina atendimento em tempo real, Agente Virtual para triagem, filas por especialidade, abertura ativa por template, agenda de contatos, painéis operacionais e administração de usuários/perfis.
|
|
|
|
O projeto foi construído para validar e evoluir um MVP de atendimento corporativo, com perfis de agente, supervisor e administrador.
|
|
|
|
## Clonando o Projeto
|
|
|
|
Este repositório funciona como o repositório de deploy/orquestração. O backend e o frontend ficam em repositórios separados e devem ser clonados dentro das pastas esperadas pelo `docker-compose.yml`.
|
|
|
|
Em uma pasta vazia:
|
|
|
|
```bash
|
|
git clone https://chaleiradev.sothistelecom.com/Sothis/omnichannel-deploy.git .
|
|
git clone https://chaleiradev.sothistelecom.com/Sothis/omnichannel-backend.git backend
|
|
git clone https://chaleiradev.sothistelecom.com/Sothis/omnichannel-frontend.git frontend
|
|
```
|
|
|
|
Ao final, a estrutura deve ficar assim:
|
|
|
|
```txt
|
|
omnichannel/
|
|
├── backend/
|
|
├── frontend/
|
|
├── database/
|
|
├── docker-compose.yml
|
|
└── README.md
|
|
```
|
|
|
|
## Principais Recursos
|
|
|
|
- Login corporativo via LDAP/Active Directory.
|
|
- Estrutura para Microsoft OAuth / Entra ID.
|
|
- JWT próprio da aplicação com perfis e especialidades.
|
|
- Atendimento WhatsApp em tempo real via `whatsapp-web.js`.
|
|
- Socket.IO para atualização de chats/mensagens.
|
|
- Agente Virtual Sothis para triagem e roteamento.
|
|
- Fila por especialidade.
|
|
- Assumir, liberar, transferir e fechar atendimento.
|
|
- Abertura ativa com templates aprovados.
|
|
- Agenda de contatos com WhatsApp, telefone/SMS, email, etiqueta e observação.
|
|
- Painel do agente.
|
|
- Painel operacional do supervisor.
|
|
- Painel administrativo com usuários, acessos, templates, IA, canais e configurações.
|
|
- Conteúdos da IA e regras/travas.
|
|
- Migrations SQL versionadas.
|
|
|
|
## Stack Técnica
|
|
|
|
### Backend
|
|
|
|
- Node.js 20+ recomendado.
|
|
- NestJS `^11.1`.
|
|
- TypeScript `^6.0`.
|
|
- PostgreSQL via `pg`.
|
|
- Socket.IO `^4.8`.
|
|
- `whatsapp-web.js` `^1.34`.
|
|
- LDAP via `ldapts`.
|
|
- JWT via `jsonwebtoken`.
|
|
- Logs com `winston`.
|
|
|
|
### Frontend
|
|
|
|
- React `^18.3`.
|
|
- Vite `^5.4`.
|
|
- React Router `^6.30`.
|
|
- Socket.IO Client `^4.8`.
|
|
|
|
### Banco
|
|
|
|
- PostgreSQL 16 recomendado.
|
|
- O banco não é gerenciado pelo `docker-compose.yml` deste repositório.
|
|
- As migrations ficam em `database/migrations`.
|
|
|
|
### Docker
|
|
|
|
O Docker Compose da raiz sobe somente:
|
|
|
|
- `backend`
|
|
- `frontend`
|
|
|
|
O banco deve ser externo ao compose: VM, banco corporativo, RDS, container separado ou PostgreSQL local gerenciado fora deste projeto.
|
|
|
|
## Estrutura do Repositório
|
|
|
|
```txt
|
|
omnichannel/
|
|
├── backend/ # API NestJS e regras de negócio
|
|
├── frontend/ # Interface React/Vite
|
|
├── database/migrations/ # Migrations SQL
|
|
├── docs/ # Wiki operacional e arquitetura
|
|
├── docker-compose.yml # Sobe backend e frontend
|
|
└── README.md
|
|
```
|
|
|
|
## Como Subir com Docker Compose
|
|
|
|
1. Configure `.env.development` na raiz com os dados do banco externo.
|
|
2. Garanta que o PostgreSQL externo esteja acessível a partir do container backend.
|
|
3. Suba backend e frontend:
|
|
|
|
```bash
|
|
docker compose up -d --build
|
|
```
|
|
|
|
URLs padrão:
|
|
|
|
- Frontend: `http://localhost:4000`
|
|
- Backend: `http://localhost:4001`
|
|
|
|
Health:
|
|
|
|
```bash
|
|
curl http://localhost:4001/health
|
|
```
|
|
|
|
## Deploy Automatizado
|
|
|
|
O deploy deve seguir pelo Gitea Actions. O antigo fluxo manual via arquivo `.bat` não faz mais parte do processo recomendado.
|
|
|
|
Responsabilidades esperadas da pipeline:
|
|
|
|
- baixar/clonar os repositórios necessários;
|
|
- configurar variáveis de ambiente do ambiente alvo;
|
|
- buildar backend e frontend;
|
|
- subir os serviços com Docker Compose;
|
|
- executar validações pós-deploy;
|
|
- não gerenciar o banco dentro do compose.
|
|
|
|
## Como Rodar em Desenvolvimento
|
|
|
|
Backend:
|
|
|
|
```bash
|
|
cd backend
|
|
npm install
|
|
npm run dev
|
|
```
|
|
|
|
Frontend:
|
|
|
|
```bash
|
|
cd frontend
|
|
npm install
|
|
npm run dev
|
|
```
|
|
|
|
URLs comuns:
|
|
|
|
- Frontend Vite: `http://localhost:5173`
|
|
- Backend: `http://localhost:3001`
|
|
|
|
## Banco e Migrations
|
|
|
|
As migrations SQL estão em:
|
|
|
|
```txt
|
|
database/migrations
|
|
```
|
|
|
|
Elas representam a intenção de schema final/evolutivo do produto, mas o projeto ainda precisa de um runner formal para aplicar tudo em ordem em ambientes novos.
|
|
|
|
Para ambiente novo, antes de subir backend para uso real:
|
|
|
|
1. criar o banco PostgreSQL;
|
|
2. aplicar as migrations em ordem;
|
|
3. validar tabelas principais;
|
|
4. criar/atribuir usuário admin;
|
|
5. subir backend e frontend.
|
|
|
|
Detalhes em:
|
|
|
|
- [Deploy e operação](./docs/deploy.md)
|
|
- [Database](./backend/docs/database.md)
|
|
|
|
## Documentação
|
|
|
|
Wiki raiz:
|
|
|
|
- [docs/README.md](./docs/README.md)
|
|
- [Deploy e operação](./docs/deploy.md)
|
|
- [Arquitetura geral](./docs/arquitetura.md)
|
|
- [Fluxos end-to-end](./docs/fluxos-end-to-end.md)
|
|
- [Regras de negócio](./docs/regras-negocio.md)
|
|
- [ADRs](./docs/adrs.md)
|
|
- [Ambientes](./docs/ambientes.md)
|
|
- [Runbook](./docs/runbook.md)
|
|
|
|
Backend:
|
|
|
|
- [backend/docs/README.md](./backend/docs/README.md)
|
|
- [Auth](./backend/docs/auth.md)
|
|
- [WhatsApp](./backend/docs/whatsapp.md)
|
|
- [Admin](./backend/docs/admin.md)
|
|
- [Swagger/OpenAPI](./backend/docs/swagger.md)
|
|
|
|
## Estado Atual e Próximos Passos
|
|
|
|
O produto já foi validado em demo com cliente final. Antes de produção real, os principais fechamentos são:
|
|
|
|
- implementar guards JWT no backend;
|
|
- validar autorização por perfil no backend;
|
|
- formalizar runner de migrations;
|
|
- configurar backup/restore do banco externo;
|
|
- persistir sessão WhatsApp em volume;
|
|
- criar Swagger com DTOs;
|
|
- adicionar testes nos fluxos críticos.
|