Visão Geral
Sobre o Projeto
O Elfa AI Mail Service é um serviço de processamento automatizado de casos do Salesforce, utilizando uma arquitetura serverless na AWS com NestJS. O sistema processa automaticamente solicitações de clientes para segunda via de boletos e notas fiscais.
Funcionalidades Principais
- Classificação Automática: Utiliza IA (OpenAI) para classificar a intenção do cliente (BOLETO, NOTA_FISCAL ou UNKNOWN)
- Busca de Documentos: Integração com Elfa Services para buscar PDFs de boletos e notas fiscais automaticamente
- Geração de Email: IA gera conteúdo personalizado do email em português brasileiro
- Envio Automatizado: Envia emails com documentos anexos via AWS SES
- Processamento Agendado: Execução automática a cada 5 minutos via EventBridge
- Rastreabilidade: Logs detalhados e rastreamento de cada processamento
Fluxo de Processamento
Arquitetura
Arquitetura Serverless
O sistema utiliza uma arquitetura serverless na AWS, composta por funções Lambda, API Gateway, EventBridge, RDS PostgreSQL e SQS.
Componentes Principais
Lambda API Handler
Processa requisições HTTP via API Gateway. Utiliza cache de servidor para otimização de cold starts.
dist/lambda.handler
Lambda Cron Handler
Executa processamento agendado a cada 5 minutos via EventBridge.
dist/cron-handler.handler
API Gateway
Endpoint REST para acesso HTTP ao serviço.
RDS PostgreSQL
Banco de dados relacional para persistência de dados.
SQS Queue
Fila para processamento assíncrono (preparado para uso futuro).
EventBridge
Agendamento de execuções periódicas (cron jobs).
Integrações Externas
- Salesforce API: Busca de casos e informações de clientes
- Elfa Services API: Busca de pedidos, boletos e notas fiscais
- OpenAI API: Classificação de casos e geração de conteúdo de email
- AWS SES: Envio de emails transacionais
VPC e Segurança
O Lambda está configurado para executar dentro de uma VPC para acesso seguro ao RDS PostgreSQL. Security Groups e Subnets são configurados para garantir isolamento e segurança.
Tecnologias Utilizadas
Core Framework
NestJS 11.x
Framework Node.js baseado em TypeScript, utilizando padrões de arquitetura modular e injeção de dependências
TypeScript 5.7
Linguagem de programação com tipagem estática
Node.js 20.x
Runtime JavaScript configurado no Lambda
Serverless Framework
Serverless Framework 3.x
Framework para deploy e gerenciamento de funções serverless
serverless-http 4.x
Adaptador para executar aplicações Express/NestJS em Lambda
serverless-offline
Plugin para desenvolvimento local
Banco de Dados
PostgreSQL
Banco de dados relacional (RDS AWS)
Drizzle ORM 0.44.x
ORM type-safe para TypeScript
drizzle-kit
Ferramenta de migração e geração de schema
Integrações e APIs
OpenAI API
Classificação de casos (GPT-4.1-mini) e geração de conteúdo (GPT-4o-mini)
Salesforce API
Integração OAuth2 para busca de casos
Elfa Services API
API interna para busca de pedidos, boletos e notas fiscais
AWS SES
Serviço de envio de emails via @nestjs-modules/mailer
Observabilidade
AWS X-Ray
Tracing distribuído habilitado no Lambda
CloudWatch Logs
Logs centralizados com retenção de 30 dias
Estrutura do Repositório
Estrutura de Diretórios
elfa-ai-mail-service/
├── src/
│ ├── app.module.ts # Módulo principal da aplicação
│ ├── main.ts # Entry point para desenvolvimento local
│ ├── lambda.ts # Handler Lambda para API Gateway
│ ├── cron-handler.ts # Handler Lambda para EventBridge
│ ├── modules/
│ │ └── process-message/ # Módulo de processamento de mensagens
│ │ ├── controllers/ # Controllers REST
│ │ ├── services/ # Lógica de negócio
│ │ └── process.module.ts
│ └── shared/
│ ├── database/ # Configuração e repositórios do banco
│ │ ├── schema.ts # Schema Drizzle ORM
│ │ ├── repositories/ # Repositórios de dados
│ │ └── handlers/ # Handlers de log
│ └── providers/ # Provedores de serviços externos
│ ├── sales-force/ # Integração Salesforce
│ ├── elfa-services/ # Integração Elfa Services
│ ├── open-ai/ # Integração OpenAI
│ └── mailer/ # Configuração de email
├── test/ # Testes end-to-end
├── scripts/ # Scripts auxiliares
├── serverless.yml # Configuração Serverless Framework
├── drizzle.config.ts # Configuração Drizzle ORM
├── package.json # Dependências e scripts
└── tsconfig.json # Configuração TypeScript
Módulos Principais
ProcessModule
Módulo responsável pelo processamento de casos do Salesforce
ProcessController: Endpoint REST-
ProcessMessageService: Orquestração do fluxo -
OpenAIClassifierService: Classificação com IA GetDocumentsService: Busca de documentosSendEmailService: Envio de emails
DatabaseModule
Configuração e acesso ao banco de dados PostgreSQL
SendingRepository: CRUD de enviosLogRepository: Registro de logsLogHandlerService: Gerenciamento de logs
Providers
Módulos de integração com serviços externos
SalesForceModule: Integração SalesforceElfaServicesModule: Integração ElfaOpenAIModule: Integração OpenAIMailerModule: Configuração de email
Schema do Banco de Dados
Tabela: sendings
Armazena informações sobre o processamento de cada caso
id: ID único (serial)caseId: ID do caso no Salesforceemail: Email do cliente-
classifier: Classificação (BOLETO/NOTA_FISCAL/UNKNOWN) -
status: Status do processamento (processing/sent/error) billetPdf: PDF do boleto (base64)invoicePdf: PDF da nota fiscal (base64)- E outros campos relacionados...
Tabela: logs
Armazena logs detalhados de cada processamento
id: ID único (serial)sendingId: Referência ao envio (FK)-
totalResponseTime: Tempo total em milissegundos -
metadata: Metadados do processamento (JSONB) errors: Array de erros (JSONB)
Segurança
Gerenciamento de Credenciais
- Variáveis de Ambiente: Todas as credenciais são gerenciadas via variáveis de ambiente, nunca commitadas no código
- AWS Secrets Manager: Recomendado para produção (pode ser implementado)
- Rotacao de Credenciais: Implementar rotacao periodica de credenciais de APIs externas
VPC e Network Security
- VPC Configuration: Lambda executando dentro de VPC para acesso seguro ao RDS
- Security Groups: Configurados para permitir apenas trafego necessario
- Subnets: Isolamento de rede em subnets privadas
- Principio do Menor Privilegio: Aplicado em todas as configuracoes de rede
IAM e Permissões
- Principio do Menor Privilegio: Permissoes IAM especificas apenas para recursos necessarios
-
Permissoes Granulares:
- SQS: SendMessage, ReceiveMessage, DeleteMessage, GetQueueUrl
- RDS: Acesso apenas ao banco especifico do projeto
- Sem Permissoes Administrativas: Nenhuma permissao de administrador concedida
API Gateway Security
- CORS: Configurado adequadamente para permitir apenas origens autorizadas
- Autenticacao: Considerar implementacao de autenticacao JWT se necessario
- Rate Limiting: Considerar implementacao de rate limiting para protecao contra abuso
Dados Sensiveis
- PDFs em Base64: Armazenados no banco de dados, considerar encriptacao se necessario
- Logs: Nenhum dado sensivel (senhas, tokens) deve ser logado
- Transmissao: Todas as comunicacoes via HTTPS/TLS
Monitoramento
AWS X-Ray
Tracing distribuido habilitado no Lambda para rastrear latencia de cada componente e identificar gargalos no processamento.
- Rastreamento de todas as chamadas de API externas
- Medicao de tempo de execucao de cada etapa
- Identificacao de dependencias e integracoes
CloudWatch Logs
Logs centralizados com retencao de 30 dias configurada. Todos os logs sao estruturados para facil analise.
- Logs de execucao do Lambda
- Logs de erros e excecoes
- Logs de processamento de casos
- Logs de envio de emails
Logs Customizados no Banco
Tabela logs no banco de dados para auditoria
detalhada, incluindo metricas de tempo, erros e metadados de cada
processamento.
- totalResponseTime: Tempo total de processamento
- metadata: Informacoes contextuais do processamento
- errors: Array de erros (se houver)
- sendingId: Relacao com o envio processado
Metricas Importantes
Latencia
- Tempo de resposta da API
- Tempo de processamento completo
- Tempo de cold start
Taxa de Erro
- Erros de classificacao (UNKNOWN)
- Erros de envio de email
- Erros de integracao
Throughput
- Casos processados por minuto
- Emails enviados com sucesso
- Taxa de sucesso geral
Alertas Recomendados
Taxa de Erro > 5%
Alertar quando a taxa de erro ultrapassar 5% das execucoes
Latencia P95 > 30 segundos
Alertar quando 95% das requisicoes demorarem mais de 30 segundos
Falhas Consecutivas
Alertar quando o cron job falhar consecutivamente
Erros de Conexao
Alertar sobre erros de conexao com banco de dados ou APIs externas
Dashboards Recomendados
- Dashboard de Performance: Latencia, throughput e tempo de resposta
- Dashboard de Erros: Taxa de erro por tipo e tendencias
- Dashboard de Integracoes: Status e latencia de APIs externas
- Dashboard de Negocio: Casos processados, emails enviados, taxa de sucesso