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: [email protected] (ACESSE NOSSO SITE)
Nosso Grupo do Whatsapp: (Entre no GRUPO AQUI)
Antes de começar, certifique-se de ter os seguintes requisitos:
- Python 3.10+ instalado (Download)
- Docker e Docker Compose instalados (Instruções)
- Uma conta Evolution API com chave válida
- Chaves GROQ (começa com
gsk_
) e/ou chaves OpenAI (começa comsk-
) configuradas (Crie sua conta GROQ)
- Em caso de uso com Proxy Reverso Aponte um Subdomínio para a API e outro para o MANAGER da aplicação
Agora você pode escolher entre dois provedores para transcrições e resumos:
- GROQ (open-source): Configuração padrão.
- OpenAI (API paga): Integração com modelos GPT.
- Acesse: Configurações > Provedor LLM na interface administrativa.
- Escolha entre
groq
eopenai
. - Adicione as chaves correspondentes para cada provedor.
- Configure o arquivo docker-compose.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
- Inicie os serviços:
docker-compose up -d
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:
- GROQ_API_KEY: Sua chave da API GROQ
- BUSINESS_MESSAGE: Mensagem de rodapé após transcrição
- PROCESS_GROUP_MESSAGES: Habilitar processamento de mensagens em grupos
- PROCESS_SELF_MESSAGES: Habilitar processamento de mensagens próprias
Endpoint para Webhook da Evolution API Configure o webhook da Evolution API para apontar para:
http://seu-ip:8005/transcreve-audios
Se encontrar problemas:
- Verifique os logs dos containers:
docker-compose logs
- Certifique-se de que o Redis está rodando e acessível.
- Verifique se todas as configurações foram salvas corretamente na interface.
Variável | Descrição | Obrigatória | Exemplo |
---|---|---|---|
GROQ_API_KEY |
Chave da API GROQ (deve começar com 'gsk_') | Sim | gsk_abc123... |
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á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 |
Usar sempre ao final do endereço definido o endpoint /transcreve-audios
para que a API funcione.
uvicorn main:app --host 0.0.0.0 --port 8005
http://127.0.0.1:8005/transcreve-audios
- Aponte um subomínio com o IP do seu servidor para a API da TranscreveZAP
- Aponte um subomínio com o IP do seu servidor para o MANAGER da TranscreveZAP
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
https://transcricaoaudio.seudominio.com.br/transcreve-audios
Para usar com Traefik, certifique-se de:
- Ter o Traefik configurado em seu ambiente Docker Swarm
- Configurar 2 DNS do seu domínio para apontar para a API e para o MANAGER
- Ajustar as labels do Traefik conforme seu ambiente
- Verificar se a rede externa existe no Docker Swarm
- Utilize a stack de exemplo contida no projeto para guiar a instalação
- 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
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.
- 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
- 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
- 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
Implementação de cache inteligente para otimizar a detecção e processamento de idiomas.
- Suporte a múltiplas chaves GROQ
- Balanceamento automático de carga
- Maior redundância e disponibilidade
- Gestão simplificada de chaves via interface
Nova funcionalidade de timestamps que adiciona marcadores de tempo precisos em cada trecho da transcrição.
O TranscreveZAP suporta transcrição e resumo em múltiplos idiomas. Na seção "Configurações", você pode:
- Selecionar o idioma principal para transcrição e resumo
- O sistema manterá Português como padrão se nenhum outro for selecionado
- 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
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"
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
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
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
[00:00] Bom dia pessoal
[00:02] Hoje vamos falar sobre
[00:05] O novo sistema de timestamps
-
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"
-
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
-
Detecção Automática
- Ative/Desative a detecção automática
- Configure o tempo de cache
- Gerencie exceções e configurações manuais
- Acesse: Manager > Configurações > Idiomas e Transcrição
- Localize a seção "Timestamps na Transcrição"
- Use o toggle para ativar/desativar
- As mudanças são aplicadas imediatamente
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
- Gráficos de uso por idioma
- Distribuição de idiomas
- Estatísticas de tradução
- Performance do sistema
O TranscreveZAP suporta múltiplas chaves GROQ com sistema de rodízio automático para melhor distribuição de carga e redundância.
- Adicione múltiplas chaves GROQ para distribuição de carga
- O sistema alterna automaticamente entre as chaves disponíveis
- Se uma chave falhar, o sistema usa a próxima disponível
- Visualize todas as chaves configuradas no painel
- Adicione ou remova chaves sem interromper o serviço
- Acesse a seção "Configurações"
- 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
- 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_'
Se encontrar problemas:
- Verifique se todas as variáveis obrigatórias estão configuradas
- Ative DEBUG_MODE=true temporariamente
- Verifique os logs do container
- Certifique-se que as APIs estão acessíveis
- Verifique se todas as chaves começam com 'gsk_'
- Confirme se as chaves estão ativas na console GROQ
- Monitore os logs para identificar falhas específicas de chaves
- Mantenha pelo menos uma chave válida no sistema
- Verifique se o idioma está corretamente selecionado nas configurações
- Confirme se a configuração foi salva com sucesso
- Reinicie o serviço se as alterações não forem aplicadas
- Verifique os logs para confirmar o idioma em 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
- Detecção automática requer primeiro áudio
- Cache limitado a 24 horas
- Timestamps podem variar em áudios muito longos
Para suporte adicional ou dúvidas:
- WhatsApp: Entre no GRUPO
- Email: [email protected]
- Site: impacte.ai
Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.