Logo

CRM & Database

O LipMKT utiliza Firestore como banco de dados NoSQL para armazenar todas as informações do CRM, incluindo conversas, mensagens, contatos, fluxos e métricas.

🗄️ Arquitetura do Banco de Dados

Estrutura Multi-Tenant

Todos os documentos incluem tenantId e companyId para isolamento de dados:

Tenant A (tenant_abc)
  ├── Company 1 (company_123)
  │   ├── Conversas
  │   ├── Mensagens
  │   ├── Contatos
  │   └── Agentes
  └── Company 2 (company_456)
      ├── Conversas
      └── ...

Tenant B (tenant_xyz)
  └── Company 3 (company_789)
      └── ...

📊 Coleções Principais

1. Conversations (Conversas)

Propósito: Armazenar conversas do WhatsApp.

Estrutura:

Índices:

  • companyId + status + lastMessageAt (desc)
  • companyId + assignedAgentId + status
  • companyId + phoneNumber
  • tenantId + createdAt (desc)

Exemplo de documento:


2. Messages (Mensagens)

Propósito: Armazenar mensagens individuais de cada conversa.

Estrutura:

Índices:

  • conversationId + timestamp (asc)
  • companyId + timestamp (desc)
  • senderId + timestamp (desc)

Exemplo de documento:


3. Contacts (Contatos)

Propósito: Armazenar informações de contatos/clientes.

Estrutura:

Índices:

  • companyId + phoneNumber (unique)
  • companyId + email
  • companyId + tags
  • companyId + lastConversationAt (desc)

4. Flows (Fluxos de Automação)

Propósito: Armazenar fluxos de chatbot.

Estrutura:

Exemplo de fluxo simples:


5. Agents (Agentes/Atendentes)

Propósito: Armazenar informações dos atendentes.

Estrutura:


6. Analytics (Métricas)

Propósito: Armazenar dados agregados para dashboards.

Estrutura:


7. Companies (Empresas)

Propósito: Armazenar configurações das empresas.

Estrutura:


🔄 Relacionamentos

Diagrama de Relacionamentos

Companies (1) ──────────── (N) Agents
    │
    │ (1)
    │
    ├─────────────────────── (N) Conversations
    │                              │
    │                              │ (1)
    │                              │
    │                              └─── (N) Messages
    │
    └─────────────────────── (N) Contacts
                                   │
                                   │ (1)
                                   │
                                   └─── (N) Conversations

📝 Queries Comuns

1. Buscar conversas ativas de uma empresa

2. Buscar mensagens de uma conversa

3. Buscar conversas atribuídas a um agente

4. Buscar contato por telefone

5. Buscar métricas de um período


🔄 Operações em Tempo Real

Listener de Conversas

Listener de Mensagens


🔒 Security Rules

Regras de Segurança Firestore


📊 Otimizações

1. Índices Compostos

Criar índices para queries frequentes:

conversations: companyId ASC, status ASC, lastMessageAt DESC
conversations: companyId ASC, assignedAgentId ASC, status ASC
messages: conversationId ASC, timestamp ASC
contacts: companyId ASC, phoneNumber ASC
analytics: companyId ASC, date ASC

2. Paginação

3. Batch Operations


🔗 Próximos Passos

Última atualização

26 de novembro de 2025