523 lines
20 KiB
Markdown
523 lines
20 KiB
Markdown

|
|
# TranscreveZAP 2.3- Plataforma de Gestão e Automação de Áudios do WhatsApp
|
|
|
|
### Sistema Inteligente de Transcrição, Resumo e Tradução Automática de Áudios para WhatsApp
|
|
|
|
*Desenvolvido com Python, FastAPI e Streamlit*
|
|
|
|
---
|
|
|
|
Uma solução completa para automatizar e gerenciar mensagens de áudio no WhatsApp, oferecendo:
|
|
- Transcrição automática multilíngue
|
|
- Resumos inteligentes de áudios
|
|
- Detecção e tradução automática entre idiomas
|
|
- Seleção de plataforma LLM (GROQ ou OpenAI)
|
|
- Interface administrativa completa
|
|
- Sistema de rodízio de chaves API
|
|
- Gestão avançada de grupos e usuários
|
|
- Personalização de formatação e saída
|
|
- Sistema de Redirecionamento de Webhooks
|
|
|
|
Contato de email: contato@impacte.ai
|
|
([ACESSE NOSSO SITE](https://impacte.ai/))
|
|
|
|
Nosso Grupo do Whatsapp: ([Entre no GRUPO AQUI](https://chat.whatsapp.com/L9jB1SlcmQFIVxzN71Y6KG))
|
|
---
|
|
|
|
## 📋 **Pré-requisitos**
|
|
Antes de começar, certifique-se de ter os seguintes requisitos:
|
|
- Python 3.10+ instalado ([Download](https://www.python.org/downloads/))
|
|
- Docker e Docker Compose instalados ([Instruções](https://docs.docker.com/get-docker/))
|
|
- Uma conta Evolution API com chave válida
|
|
- Chaves GROQ (começa com `gsk_`) e/ou chaves OpenAI (começa com `sk-`) configuradas ([Crie sua conta GROQ](https://console.groq.com/login))
|
|
* Em caso de uso com Proxy Reverso Aponte um Subdomínio para a API e outro para o MANAGER da aplicação
|
|
---
|
|
|
|
## 🚀 **Novidade: Escolha do Provedor LLM**
|
|
Agora você pode escolher entre dois provedores para transcrições e resumos:
|
|
1. **GROQ** (open-source): Configuração padrão.
|
|
2. **OpenAI** (API paga): Integração com modelos GPT.
|
|
|
|
### Configuração:
|
|
- Acesse: **Configurações > Provedor LLM** na interface administrativa.
|
|
- Escolha entre `groq` e `openai`.
|
|
- Adicione as chaves correspondentes para cada provedor.
|
|
|
|
---
|
|
## 🚀 **Instalação e Configuração**
|
|
|
|
### 🐳 Docker Compose
|
|
1. Configure o arquivo docker-compose.yaml:
|
|
|
|
```yaml
|
|
version: "3.7"
|
|
|
|
services:
|
|
# Serviço principal do TranscreveZAP
|
|
tcaudio:
|
|
image: impacteai/transcrevezap:latest
|
|
build:
|
|
context: .
|
|
ports:
|
|
- "8005:8005" # API FastAPI - Use esta porta para configurar o webhook
|
|
- "8501:8501" # Interface Web Streamlit - Acesse o painel por esta porta
|
|
environment:
|
|
# Configurações do Servidor
|
|
- UVICORN_PORT=8005
|
|
- UVICORN_HOST=0.0.0.0
|
|
- UVICORN_RELOAD=true
|
|
- UVICORN_WORKERS=1
|
|
- API_DOMAIN=localhost # Para uso local mantenha localhost
|
|
|
|
# Modo Debug e Logs
|
|
- DEBUG_MODE=false
|
|
- LOG_LEVEL=INFO
|
|
|
|
# Credenciais do Painel Admin (ALTERE ESTAS CREDENCIAIS!)
|
|
- MANAGER_USER=admin
|
|
- MANAGER_PASSWORD=sua_senha_aqui
|
|
|
|
# Configurações do Redis
|
|
- REDIS_HOST=redis-transcrevezap # Nome do serviço Redis
|
|
- REDIS_PORT=6380 # Porta do Redis
|
|
- REDIS_DB=0 # Banco de dados Redis
|
|
|
|
# Autenticação Redis (opcional - descomente se necessário)
|
|
# - REDIS_USERNAME=seu_usuario # Nome do usuário Redis
|
|
# - REDIS_PASSWORD=sua_senha # Senha do Redis
|
|
depends_on:
|
|
- redis-transcrevezap
|
|
command: ./start.sh
|
|
|
|
# Serviço Redis para armazenamento de dados
|
|
redis-transcrevezap:
|
|
image: redis:6
|
|
# Escolha UMA das configurações do Redis abaixo:
|
|
|
|
# 1. Configuração simples SEM autenticação:
|
|
command: redis-server --port 6380 --appendonly yes
|
|
|
|
# 2. Configuração COM autenticação (descomente e ajuste se necessário):
|
|
# command: >
|
|
# redis-server
|
|
# --port 6380
|
|
# --appendonly yes
|
|
# --user admin on '>sua_senha' '~*' '+@all'
|
|
volumes:
|
|
- redis_transcrevezap_data:/data # Persistência dos dados
|
|
|
|
# Volumes para persistência
|
|
volumes:
|
|
redis_transcrevezap_data:
|
|
driver: local
|
|
|
|
# Instruções de Uso:
|
|
# 1. Salve este arquivo como docker-compose.yml
|
|
# 2. Execute com: docker compose up -d
|
|
# 3. Acesse o painel em: http://localhost:8501
|
|
# 4. Configure o webhook da Evolution API para: http://localhost:8005/transcreve-audios
|
|
|
|
```
|
|
|
|
2. Inicie os serviços:
|
|
```bash
|
|
docker-compose up -d
|
|
```
|
|
|
|
## 📖 Configuração da Interface
|
|
|
|
Acesse a interface de gerenciamento em http://seu-ip:8501.
|
|
Faça login com as credenciais definidas em MANAGER_USER e MANAGER_PASSWORD.
|
|
Na seção "Configurações", defina:
|
|
|
|
1. GROQ_API_KEY: Sua chave da API GROQ
|
|
2. BUSINESS_MESSAGE: Mensagem de rodapé após transcrição
|
|
3. PROCESS_GROUP_MESSAGES: Habilitar processamento de mensagens em grupos
|
|
4. PROCESS_SELF_MESSAGES: Habilitar processamento de mensagens próprias
|
|
|
|
## 🔧 Uso
|
|
Endpoint para Webhook da Evolution API
|
|
Configure o webhook da Evolution API para apontar para:
|
|
```bash
|
|
http://seu-ip:8005/transcreve-audios
|
|
```
|
|
## 🔍 Troubleshooting
|
|
Se encontrar problemas:
|
|
|
|
1. Verifique os logs dos containers:
|
|
```bash
|
|
docker-compose logs
|
|
```
|
|
2. Certifique-se de que o Redis está rodando e acessível.
|
|
3. Verifique se todas as configurações foram salvas corretamente na interface.
|
|
|
|
|
|
## 📖 **Configuração Detalhada das Variáveis**
|
|
|
|
### Variáveis Essenciais
|
|
|
|
| Variável | Descrição | Obrigatória | Exemplo |
|
|
|-----------------------|----------------------------------------------------------|-------------|----------------------------------------------------------|
|
|
| `GROQ_API_KEY` | Chave da API GROQ (deve começar com 'gsk_') | Sim | `gsk_abc123...` |
|
|
|
|
### Variáveis de Personalização
|
|
|
|
| Variável | Descrição | Padrão | Exemplo |
|
|
|-----------------------|----------------------------------------------------------|-------------|----------------------------------------------------------|
|
|
| `BUSINESS_MESSAGE` | Mensagem de rodapé após transcrição | Vazio | `substitua_sua_mensagem_de_servico_aqui` |
|
|
| `PROCESS_GROUP_MESSAGES` | Habilita processamento de mensagens em grupos | `false` | `true` ou `false`
|
|
| `PROCESS_SELF_MESSAGES` | Habilita processamento de mensagens enviadas por você | `true` | `true` ou `false` |
|
|
|
|
### Variáveis de Debug e Log
|
|
|
|
| Variável | Descrição | Padrão | Valores Possíveis |
|
|
|-----------------------|----------------------------------------------------------|-------------|----------------------------------------------------------|
|
|
| `DEBUG_MODE` | Ativa logs detalhados para debugging | `false` | `true` ou `false` |
|
|
| `LOG_LEVEL` | Define o nível de detalhamento dos logs | `INFO` | `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL` |
|
|
|
|
---
|
|
|
|
## 🚀 **Métodos de Execução**
|
|
Usar sempre ao final do endereço definido o endpoint `/transcreve-audios` para que a API funcione.
|
|
### Execução Local
|
|
```bash
|
|
uvicorn main:app --host 0.0.0.0 --port 8005
|
|
```
|
|
### Endpoint para inserir no webhook da Evolution API para consumir o serviço
|
|
```bash
|
|
http://127.0.0.1:8005/transcreve-audios
|
|
```
|
|
1. Aponte um subomínio com o IP do seu servidor para a API da TranscreveZAP
|
|
2. Aponte um subomínio com o IP do seu servidor para o MANAGER da TranscreveZAP
|
|
|
|
### 🌟 Docker Swarm com Traefik
|
|
```yaml
|
|
version: "3.7"
|
|
|
|
services:
|
|
tcaudio:
|
|
image: impacteai/transcrevezap:dev
|
|
networks:
|
|
- sua_rede_externa # Substitua pelo nome da sua rede externa
|
|
ports:
|
|
- 8005:8005 # Porta para FastAPI
|
|
- 8501:8501 # Porta para Streamlit
|
|
environment:
|
|
- UVICORN_PORT=8005
|
|
- UVICORN_HOST=0.0.0.0
|
|
- UVICORN_RELOAD=true
|
|
- UVICORN_WORKERS=1
|
|
- API_DOMAIN=seu.dominio.com #coloque seu subdominio da API apontado aqui
|
|
- DEBUG_MODE=false
|
|
- LOG_LEVEL=INFO
|
|
- MANAGER_USER=seu_usuario_admin # Defina Usuário do Manager
|
|
- MANAGER_PASSWORD=sua_senha_segura # Defina Senha do Manager
|
|
- REDIS_HOST=redis-transcrevezap
|
|
- REDIS_PORT=6380 # Porta personalizada para o Redis do TranscreveZAP
|
|
- REDIS_DB=0 # Opcional: pode ser removida para usar o valor padrão
|
|
# Autenticação Redis (opcional - descomente se necessário, se estiver usando autenticação)
|
|
# - REDIS_USERNAME=${REDIS_USERNAME:-} # Nome do usuário definido no comando do Redis
|
|
# - REDIS_PASSWORD=${REDIS_PASSWORD:-} # Senha definida no comando do Redis (sem o '>')
|
|
depends_on:
|
|
- redis-transcrevezap
|
|
deploy:
|
|
mode: replicated
|
|
replicas: 1
|
|
placement:
|
|
constraints:
|
|
- node.role == manager
|
|
labels:
|
|
- traefik.enable=true
|
|
- traefik.http.routers.tcaudio.rule=Host(`seu.dominio.com`) #coloque seu subdominio da API apontado aqui
|
|
- traefik.http.routers.tcaudio.entrypoints=websecure
|
|
- traefik.http.routers.tcaudio.tls.certresolver=letsencryptresolver
|
|
- traefik.http.services.tcaudio.loadbalancer.server.port=8005
|
|
- traefik.http.services.tcaudio.loadbalancer.passHostHeader=true
|
|
- traefik.http.routers.tcaudio.service=tcaudio
|
|
- traefik.http.middlewares.traefik-compress.compress=true
|
|
- traefik.http.routers.tcaudio.middlewares=traefik-compress
|
|
# Configuração do Streamlit
|
|
- traefik.http.routers.tcaudio-manager.rule=Host(`manager.seu.dominio.com`) #coloque seu subdominio do Manager apontado aqui
|
|
- traefik.http.routers.tcaudio-manager.entrypoints=websecure
|
|
- traefik.http.routers.tcaudio-manager.tls.certresolver=letsencryptresolver
|
|
- traefik.http.services.tcaudio-manager.loadbalancer.server.port=8501
|
|
- traefik.http.routers.tcaudio-manager.service=tcaudio-manager
|
|
command: ./start.sh
|
|
|
|
redis-transcrevezap:
|
|
image: redis:6
|
|
# 1. Configuração SEM autenticação (padrão):
|
|
command: redis-server --port 6380 --appendonly yes
|
|
# 2. Configuração COM autenticação (descomente e ajuste se necessário):
|
|
# command: >
|
|
# redis-server
|
|
# --port 6380
|
|
# --appendonly yes
|
|
# --user seuusuario on '>minhasenha' '~*' '+@all'
|
|
# # Explicação dos parâmetros:
|
|
# # --user seuusuario: nome do usuário
|
|
# # on: indica início da configuração do usuário
|
|
# # '>minhasenha': senha do usuário (mantenha o '>')
|
|
# # '~*': permite acesso a todas as chaves
|
|
# # '+@all': concede todas as permissões
|
|
volumes:
|
|
- redis_transcrevezap_data:/data
|
|
networks:
|
|
- sua_rede_externa # Substitua pelo nome da sua rede externa
|
|
deploy:
|
|
mode: replicated
|
|
replicas: 1
|
|
placement:
|
|
constraints:
|
|
- node.role == manager
|
|
|
|
networks:
|
|
sua_rede_externa: # Substitua pelo nome da sua rede externa
|
|
external: true
|
|
name: sua_rede_externa # Substitua pelo nome da sua rede externa
|
|
|
|
volumes:
|
|
redis_transcrevezap_data:
|
|
driver: local
|
|
```
|
|
|
|
### Endpoint para inserir no webhook da Evolution API para consumir o serviço
|
|
```bash
|
|
https://transcricaoaudio.seudominio.com.br/transcreve-audios
|
|
|
|
```
|
|
## 🔧 **Configuração do Traefik**
|
|
|
|
Para usar com Traefik, certifique-se de:
|
|
1. Ter o Traefik configurado em seu ambiente Docker Swarm
|
|
2. Configurar 2 DNS do seu domínio para apontar para a API e para o MANAGER
|
|
3. Ajustar as labels do Traefik conforme seu ambiente
|
|
4. Verificar se a rede externa existe no Docker Swarm
|
|
5. Utilize a stack de exemplo contida no projeto para guiar a instalação
|
|
|
|
## 📝 **Notas Importantes**
|
|
- A GROQ_API_KEY deve começar com 'gsk_'
|
|
- O BUSINESS_MESSAGE suporta formatação do WhatsApp (*negrito*, _itálico_)
|
|
- Para quebras de linha no BUSINESS_MESSAGE, use \n
|
|
- Em produção, recomenda-se DEBUG_MODE=false
|
|
- Configure LOG_LEVEL=DEBUG apenas para troubleshooting
|
|
|
|
## 🚀 Novo Recurso v2.3.1: Hub de Redirecionamento
|
|
|
|
O TranscreveZAP agora oferece um sistema robusto para redirecionamento de mensagens, permitindo que você encaminhe os webhooks da Evolution API para múltiplos destinos simultaneamente.
|
|
|
|
### Principais Recursos
|
|
- Interface dedicada para gerenciamento de webhooks
|
|
- Redirecionamento sem alteração do payload original
|
|
- Monitoramento de saúde dos webhooks em tempo real
|
|
- Sistema de retry automático para reenvio de mensagens falhas
|
|
- Headers de rastreamento para identificação de origem (`X-TranscreveZAP-Forward`)
|
|
- Suporte a descrições personalizadas para cada webhook
|
|
- Limpeza automática de dados ao remover webhooks
|
|
|
|
### Compatibilidade
|
|
- Mantém o payload da Evolution API intacto
|
|
- Suporta múltiplos endpoints simultaneamente
|
|
- Compatível com qualquer sistema que aceite webhooks via POST
|
|
- Preserva todos os dados originais da mensagem
|
|
|
|
## ✨ Novos Recursos na v2.3
|
|
|
|
### 🌍 Suporte Multilíngue
|
|
- Transcrição e resumo com suporte para 16 idiomas principais
|
|
- Mudança instantânea de idioma
|
|
- Interface intuitiva para seleção de idioma
|
|
- Mantém consistência entre transcrição e resumo
|
|
- Configuração manual de idioma por contato
|
|
- Detecção automática de idioma
|
|
- Tradução automática integrada
|
|
|
|
### 🔄 Sistema de Cache para Idiomas
|
|
Implementação de cache inteligente para otimizar a detecção e processamento de idiomas.
|
|
|
|
### 🔄 Sistema Inteligente de Rodízio de Chaves
|
|
- Suporte a múltiplas chaves GROQ
|
|
- Balanceamento automático de carga
|
|
- Maior redundância e disponibilidade
|
|
- Gestão simplificada de chaves via interface
|
|
|
|
### ⏱️ Timestamps em Transcrições
|
|
Nova funcionalidade de timestamps que adiciona marcadores de tempo precisos em cada trecho da transcrição.
|
|
|
|
## 📋 Detalhamento das Funcionalidades
|
|
|
|
### 🌍 Sistema de Idiomas
|
|
O TranscreveZAP suporta transcrição e resumo em múltiplos idiomas. Na seção "Configurações", você pode:
|
|
|
|
1. Selecionar o idioma principal para transcrição e resumo
|
|
2. O sistema manterá Português como padrão se nenhum outro for selecionado
|
|
3. A mudança de idioma é aplicada instantaneamente após salvar
|
|
|
|
Idiomas suportados:
|
|
- 🇩🇪 Alemão
|
|
- 🇸🇦 Árabe
|
|
- 🇨🇳 Chinês
|
|
- 🇰🇷 Coreano
|
|
- 🇪🇸 Espanhol
|
|
- 🇫🇷 Francês
|
|
- 🇮🇳 Hindi
|
|
- 🇳🇱 Holandês
|
|
- 🇬🇧 Inglês
|
|
- 🇮🇹 Italiano
|
|
- 🇯🇵 Japonês
|
|
- 🇵🇱 Polonês
|
|
- 🇧🇷 Português (padrão)
|
|
- 🇷🇴 Romeno
|
|
- 🇷🇺 Russo
|
|
- 🇹🇷 Turco
|
|
|
|
### 🌐 Gestão de Idiomas por Contato
|
|
|
|
#### Configuração Manual
|
|
```markdown
|
|
1. Acesse o Manager > Configurações > Idiomas e Transcrição
|
|
2. Expanda "Adicionar Novo Contato"
|
|
3. Digite o número do contato (formato: 5521999999999)
|
|
4. Selecione o idioma desejado
|
|
5. Clique em "Adicionar Contato"
|
|
```
|
|
|
|
### 🔄 Detecção Automática de Idioma
|
|
Nova funcionalidade que detecta automaticamente o idioma do contato:
|
|
- Ativação via Manager > Configurações > Idiomas e Transcrição
|
|
- Analisa o primeiro áudio de cada contato
|
|
- Cache inteligente de 24 horas
|
|
- Funciona apenas em conversas privadas
|
|
- Mantém configuração global para grupos
|
|
|
|
### ⚡ Tradução Automática
|
|
Sistema inteligente de tradução que:
|
|
- Traduz automaticamente áudios recebidos para seu idioma principal
|
|
- Mantém o contexto e estilo original da mensagem
|
|
- Preserva formatações especiais (emojis, negrito, itálico)
|
|
- Otimizado para comunicação natural
|
|
|
|
### ⏱️ Sistema de Timestamps
|
|
Nova funcionalidade que adiciona marcadores de tempo:
|
|
- Formato [MM:SS] no início de cada trecho
|
|
- Ativação via Manager > Configurações > Idiomas e Transcrição
|
|
- Precisão de segundos
|
|
- Ideal para referência e navegação em áudios longos
|
|
|
|
#### Exemplo de Saída com Timestamps:
|
|
```
|
|
[00:00] Bom dia pessoal
|
|
[00:02] Hoje vamos falar sobre
|
|
[00:05] O novo sistema de timestamps
|
|
```
|
|
## 🔧 Configuração e Uso
|
|
|
|
### Configuração de Idiomas
|
|
1. **Configuração Global**
|
|
- Defina o idioma padrão do sistema
|
|
- Acesse: Manager > Configurações > Configurações Gerais
|
|
- Selecione o idioma principal em "Idioma para Transcrição e Resumo"
|
|
|
|
2. **Configuração por Contato**
|
|
- Acesse: Manager > Configurações > Idiomas e Transcrição
|
|
- Use "Adicionar Novo Contato" ou gerencie contatos existentes
|
|
- Cada contato pode ter seu próprio idioma configurado
|
|
|
|
3. **Detecção Automática**
|
|
- Ative/Desative a detecção automática
|
|
- Configure o tempo de cache
|
|
- Gerencie exceções e configurações manuais
|
|
|
|
### Configuração de Timestamps
|
|
1. Acesse: Manager > Configurações > Idiomas e Transcrição
|
|
2. Localize a seção "Timestamps na Transcrição"
|
|
3. Use o toggle para ativar/desativar
|
|
4. As mudanças são aplicadas imediatamente
|
|
|
|
## 📊 Monitoramento e Estatísticas
|
|
|
|
### Estatísticas de Idiomas
|
|
O sistema agora oferece estatísticas detalhadas:
|
|
- Total de transcrições por idioma
|
|
- Número de detecções automáticas
|
|
- Divisão entre mensagens enviadas/recebidas
|
|
- Histórico de uso por idioma
|
|
|
|
### Visualização de Dados
|
|
- Gráficos de uso por idioma
|
|
- Distribuição de idiomas
|
|
- Estatísticas de tradução
|
|
- Performance do sistema
|
|
|
|
## 🔄 Sistema de Rodízio de Chaves GROQ
|
|
O TranscreveZAP suporta múltiplas chaves GROQ com sistema de rodízio automático para melhor distribuição de carga e redundância.
|
|
|
|
### Funcionalidades:
|
|
1. Adicione múltiplas chaves GROQ para distribuição de carga
|
|
2. O sistema alterna automaticamente entre as chaves disponíveis
|
|
3. Se uma chave falhar, o sistema usa a próxima disponível
|
|
4. Visualize todas as chaves configuradas no painel
|
|
5. Adicione ou remova chaves sem interromper o serviço
|
|
|
|
### Como Configurar:
|
|
1. Acesse a seção "Configurações"
|
|
2. Na área "🔑 Gerenciamento de Chaves GROQ":
|
|
- Adicione a chave principal
|
|
- Use "Adicionar Nova Chave GROQ" para incluir chaves adicionais
|
|
- O sistema começará a usar todas as chaves em rodízio automaticamente
|
|
|
|
### Boas Práticas:
|
|
- Mantenha pelo menos duas chaves ativas para redundância
|
|
- Monitore o uso das chaves pelo painel administrativo
|
|
- Remova chaves expiradas ou inválidas
|
|
- Todas as chaves devem começar com 'gsk_'
|
|
|
|
## 🔍 **Troubleshooting**
|
|
Se encontrar problemas:
|
|
1. Verifique se todas as variáveis obrigatórias estão configuradas
|
|
2. Ative DEBUG_MODE=true temporariamente
|
|
3. Verifique os logs do container
|
|
4. Certifique-se que as APIs estão acessíveis
|
|
|
|
### Problemas com Múltiplas Chaves GROQ:
|
|
1. Verifique se todas as chaves começam com 'gsk_'
|
|
2. Confirme se as chaves estão ativas na console GROQ
|
|
3. Monitore os logs para identificar falhas específicas de chaves
|
|
4. Mantenha pelo menos uma chave válida no sistema
|
|
|
|
### Problemas com Idiomas:
|
|
1. Verifique se o idioma está corretamente selecionado nas configurações
|
|
2. Confirme se a configuração foi salva com sucesso
|
|
3. Reinicie o serviço se as alterações não forem aplicadas
|
|
4. Verifique os logs para confirmar o idioma em uso
|
|
|
|
## 📝 Notas Adicionais
|
|
|
|
### Recomendações de Uso
|
|
- Configure idiomas manualmente para contatos frequentes
|
|
- Use detecção automática como fallback
|
|
- Monitore estatísticas de uso
|
|
- Faça backups regulares das configurações
|
|
|
|
### Limitações Conhecidas
|
|
- Detecção automática requer primeiro áudio
|
|
- Cache limitado a 24 horas
|
|
- Timestamps podem variar em áudios muito longos
|
|
|
|
## 🤝 Contribuição
|
|
Agradecemos feedback e contribuições! Reporte issues e sugira melhorias em nosso GitHub.
|
|
---
|
|
|
|
### 📞 Suporte
|
|
Para suporte adicional ou dúvidas:
|
|
- WhatsApp: [Entre no GRUPO](https://chat.whatsapp.com/L9jB1SlcmQFIVxzN71Y6KG)
|
|
- Email: contato@impacte.ai
|
|
- Site: [impacte.ai](https://impacte.ai)
|
|
|
|
## 📄 **Licença**
|
|
Este projeto está licenciado sob a Licença MIT - veja o arquivo [LICENSE](LICENSE) para detalhes.
|
|
|
|
---
|
|
### AJUDE CONTRIBUINDO COM O PROJETO, FAÇA O PIX NO QR CODE
|
|

|
|
--- |