Índice
Manual Técnico
Documentação completa da estrutura e funcionamento do NextDesk
O que é o NextDesk?
O NextDesk é uma plataforma de atendimento multiempresa (SaaS) semelhante ao Freshdesk, Zendesk e similares. Permite que múltiplas empresas utilizem a mesma plataforma de forma isolada.
Funcionalidades Principais
- Abertura e gestão de tickets
- Atendimento multicanal (Email, Chat)
- Controle de SLA (horário comercial)
- Atribuição de responsáveis e equipes
- Histórico completo de interações
- Automações baseadas em regras
- Relatórios e dashboards
- API REST para integrações
Modelo de Negócio
Plataforma SaaS com 4 planos:
Gratuito limitado
Pequenas empresas
Mais popular
Personalizado
Backend
- PHP 8.3 + CodeIgniter 4.7
- MariaDB - Banco de dados
- Redis - Cache e filas
- JWT - Autenticação API
Frontend
- Bootstrap 5 - Framework CSS
- jQuery - Manipulação DOM
- Bootstrap Icons - Ícones
- Chart.js - Gráficos
Infraestrutura
- Ubuntu 24 - Sistema operacional
- Apache - Servidor web
- SSL/TLS - Certificados HTTPS
Arquitetura
- MVC - Padrão de projeto
- API REST - Comunicação
- Multitenancy - Isolamento por empresa
O sistema é dividido em 4 áreas distintas, cada uma com seu público e funcionalidades:
Painel Administrativo
nextdesk.pdvbox.com.br/adminÁrea exclusiva dos administradores da plataforma (nós).
- Gestão de empresas e planos
- Métricas globais da plataforma
- Configurações do sistema
Painel Empresa
nextdesk.pdvbox.com.br/{slug_empresa}Área de trabalho das empresas clientes.
- Dashboard e métricas
- Gestão de tickets
- Equipes e usuários
- Configurações e relatórios
Portal do Cliente
nextdesk.pdvbox.com.br/{slug_empresa}/clientePortal onde os clientes finais abrem e acompanham tickets.
- Meus tickets
- Abrir novo ticket
- Base de conhecimento (futuro)
O sistema possui 5 perfis com níveis hierárquicos. Cada nível inferior herda restrições do superior:
Nível 0
Nós
Nível 1
Empresa
Nível 2
Gerente
Nível 3
Operador
Nível 4
Usuário Final
| Perfil | Área de Acesso | Descrição |
|---|---|---|
| Admin Sistema | Painel Administrativo | Administradores da plataforma. Gerencia todas as empresas e configurações globais. |
| Admin Empresa | Painel Empresa | Administrador da empresa cliente. Configura tudo dentro da sua empresa. |
| Supervisor | Painel Empresa | Gerente de equipe. Vê relatórios e gerencia membros da equipe. |
| Atendente | Painel Empresa | Operador de atendimento. Responde tickets da sua equipe. |
| Cliente | Portal Cliente | Usuário final. Abre e acompanha seus próprios tickets. |
Módulo: Tickets
| Permissão | Admin | Supervisor | Atendente | Cliente |
|---|---|---|---|---|
| Listar todos os tickets | ✓ | ✓ | ✗ | ✗ |
| Listar tickets da equipe | ✓ | ✓ | ✓ | ✗ |
| Listar tickets próprios | ✓ | ✓ | ✓ | ✓ |
| Criar ticket | ✓ | ✓ | ✓ | ✓ |
| Editar ticket | ✓ | ✓ | ✓ | ✗ |
| Deletar ticket | ✓ | ✗ | ✗ | ✗ |
| Atribuir responsável | ✓ | ✓ | ✗ | ✗ |
| Ver notas internas | ✓ | ✓ | ✓ | ✗ |
Módulo: Usuários
| Permissão | Admin | Supervisor | Atendente | Cliente |
|---|---|---|---|---|
| Listar usuários | ✓ | ✓ | ✗ | ✗ |
| Criar usuário | ✓ | ✗ | ✗ | ✗ |
| Editar usuário | ✓ | ✗ | ✗ | ✗ |
| Deletar usuário | ✓ | ✗ | ✗ | ✗ |
Isolamento de Dados
O sistema utiliza multitenancy via empresa_id, garantindo que cada empresa veja apenas seus próprios dados.
Como Funciona
- Todas as tabelas possuem
empresa_id - Queries filtram automaticamente por empresa
- Usuário só acessa dados da sua empresa
- Admin Sistema vê todas as empresas
Tabelas com empresa_id
- users, tickets, ticket_mensagens
- equipes, categorias, tags
- clientes, sla_configs
- automacoes, templates_email
Regras de Isolamento
- Multitenancy: Usuário só vê dados da própria empresa (exceto admin_sistema)
- Equipe: Atendente só vê tickets da sua equipe
- Próprios: Cliente só vê seus próprios tickets
- Hierarquia: Não pode editar usuário de nível igual ou superior
Protocolo
Todo ticket possui um protocolo único no formato {ANO}-{SEQUENCIAL}. Exemplo: 2026-000001
Status
| Status | Pausa SLA |
|---|---|
| Aberto | Não |
| Em atendimento | Não |
| Aguardando cliente | Sim |
| Aguardando terceiro | Sim |
| Resolvido | Não |
| Fechado | Não |
Prioridades
| Prioridade | Multiplicador SLA |
|---|---|
| Baixa | 1.5x (mais tempo) |
| Média | 1.0x (padrão) |
| Alta | 0.5x (menos tempo) |
| Urgente | 0.25x (muito menos) |
Regras de Transição de Status
- Ticket novo → Status "Aberto"
- Primeira resposta do atendente → Status "Em atendimento"
- Atendente aguarda cliente → Status "Aguardando cliente" (SLA pausa)
- Cliente responde → Volta para "Em atendimento" (SLA retoma)
- Cliente responde ticket "Fechado" → Reabre como "Aberto"
- Ticket "Resolvido" sem resposta em 48h → Auto-fecha
Tipos de Mensagem
Cliente visualiza e recebe notificação
Apenas equipe vê, não notifica cliente
Registros automáticos do sistema
Cálculo de SLA
- SLA calculado apenas em horário comercial
- Horário padrão: Segunda a Sexta, 08:00-18:00 (configurável)
- Feriados não contam para o cálculo
Métricas
Primeira Resposta
Tempo até a primeira resposta do atendente após abertura do ticket.
Resolução
Tempo total até o ticket receber status "Resolvido".
Pausas de SLA
O SLA é pausado automaticamente quando o ticket está em:
- Aguardando cliente - Esperando resposta do cliente
- Aguardando terceiro - Dependência externa
O tempo pausado é descontado do cálculo total do SLA.
Alertas
Organização de Pastas
Padrão de Desenvolvimento
Controllers Web
Apenas retornam views, sem lógica de negócio.
Controllers API
Contêm toda a lógica de negócio e validações.
Models
Queries e regras de acesso a dados.
Views
HTML + JS inline na section scripts.
Configuração
- Banco: MariaDB
- Charset: utf8mb4
- Collation: utf8mb4_unicode_ci
- Soft Delete: Todas as tabelas com
deleted_at
Tabelas Principais
| Módulo | Tabelas |
|---|---|
| Empresas | empresas, planos, empresa_configs |
| Usuários | users, perfis, permissoes, user_tokens |
| Equipes | equipes, user_equipes |
| Tickets | tickets, ticket_mensagens, ticket_anexos |
| Configurações | status, prioridades, categorias, tags |
| SLA | sla_configs, horarios_funcionamento, feriados |
Convenções
- IDs são
BIGINTcom auto_increment - Todas as FKs terminam com
_id - Timestamps:
created_at,updated_at,deleted_at - Booleanos como
TINYINT(0/1) - Configurações flexíveis em campos
JSON
Autenticação
A API utiliza JWT (JSON Web Token) para autenticação.
POST /api/auth/login
Content-Type: application/json
{
"email": "usuario@empresa.com",
"password": "senha123"
}
Endpoints Principais
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /api/tickets |
Listar tickets |
| POST | /api/tickets |
Criar ticket |
| GET | /api/tickets/{id} |
Detalhes do ticket |
| PUT | /api/tickets/{id} |
Atualizar ticket |
| POST | /api/tickets/{id}/mensagens |
Adicionar mensagem |
Resposta Padrão
Sucesso
{
"success": true,
"data": { ... },
"message": "Operação realizada"
}
Erro
{
"success": false,
"error": "Mensagem de erro",
"errors": { ... }
}
Canais Disponíveis (MVP)
Recebimento via IMAP
Envio via SMTP
Chat
Widget embarcável
Tempo real
API
REST + JWT
Integrações externas