Adicionado Opção para Transcrever o Proprio audio, agora sempre resume e transcreve entregando na mesma mensagem
This commit is contained in:
parent
c189d69ac4
commit
e1114101f6
@ -1,5 +1,10 @@
|
|||||||
# Chave da API para transcrição (Groq ou qualquer outro serviço que você utilizar)
|
# Chave da API para transcrição (Groq ou qualquer outro serviço que você utilizar)
|
||||||
GROQ_API_KEY=your_groq_api_key
|
GROQ_API_KEY=substitua_sua_chave_GROQ_aqui
|
||||||
|
|
||||||
|
# Comportamento da transcrição
|
||||||
|
PROCESS_SELF_MESSAGES=true
|
||||||
|
BUSINESS_MESSAGE="substitua_sua_mensagem_de_servico_aqui"
|
||||||
|
PROCESS_GROUP_MESSAGES=false
|
||||||
|
|
||||||
# Host e porta do Redis (caso esteja utilizando)
|
# Host e porta do Redis (caso esteja utilizando)
|
||||||
REDIS_HOST=localhost
|
REDIS_HOST=localhost
|
||||||
|
@ -64,6 +64,9 @@ class Settings:
|
|||||||
self.PROCESS_GROUP_MESSAGES = os.getenv('PROCESS_GROUP_MESSAGES', 'false').lower() == 'true'
|
self.PROCESS_GROUP_MESSAGES = os.getenv('PROCESS_GROUP_MESSAGES', 'false').lower() == 'true'
|
||||||
logger.debug(f"PROCESS_GROUP_MESSAGES configurado como: {self.PROCESS_GROUP_MESSAGES}")
|
logger.debug(f"PROCESS_GROUP_MESSAGES configurado como: {self.PROCESS_GROUP_MESSAGES}")
|
||||||
|
|
||||||
|
self.PROCESS_SELF_MESSAGES = os.getenv('PROCESS_SELF_MESSAGES', 'false').lower() == 'true'
|
||||||
|
logger.debug(f"PROCESS_SELF_MESSAGES configurado como: {self.PROCESS_SELF_MESSAGES}")
|
||||||
|
|
||||||
self.LOG_LEVEL = os.getenv('LOG_LEVEL', 'INFO')
|
self.LOG_LEVEL = os.getenv('LOG_LEVEL', 'INFO')
|
||||||
logger.debug(f"LOG_LEVEL configurado como: {self.LOG_LEVEL}")
|
logger.debug(f"LOG_LEVEL configurado como: {self.LOG_LEVEL}")
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@ services:
|
|||||||
GROQ_API_KEY: "substitua_sua_chave_GROQ_aqui" #coloque sua chave GROQ aqui
|
GROQ_API_KEY: "substitua_sua_chave_GROQ_aqui" #coloque sua chave GROQ aqui
|
||||||
BUSINESS_MESSAGE: "substitua_sua_mensagem_de_servico_aqui" #coloque a mensagem que será enviada ao final da transcrição aqui
|
BUSINESS_MESSAGE: "substitua_sua_mensagem_de_servico_aqui" #coloque a mensagem que será enviada ao final da transcrição aqui
|
||||||
PROCESS_GROUP_MESSAGES: "false" # Define se mensagens de grupos devem ser processadas
|
PROCESS_GROUP_MESSAGES: "false" # Define se mensagens de grupos devem ser processadas
|
||||||
|
PROCESS_SELF_MESSAGES: "true" # Define se sua próprias mensagens devem ser processadas
|
||||||
DEBUG_MODE: "false"
|
DEBUG_MODE: "false"
|
||||||
LOG_LEVEL: "INFO"
|
LOG_LEVEL: "INFO"
|
||||||
deploy:
|
deploy:
|
||||||
|
32
main.py
32
main.py
@ -4,6 +4,7 @@ from services import (
|
|||||||
transcribe_audio,
|
transcribe_audio,
|
||||||
send_message_to_whatsapp,
|
send_message_to_whatsapp,
|
||||||
get_audio_base64,
|
get_audio_base64,
|
||||||
|
summarize_text_if_needed,
|
||||||
)
|
)
|
||||||
from models import WebhookRequest
|
from models import WebhookRequest
|
||||||
import aiohttp
|
import aiohttp
|
||||||
@ -16,7 +17,7 @@ async def transcreve_audios(request: Request):
|
|||||||
try:
|
try:
|
||||||
logger.info("Iniciando processamento de áudio")
|
logger.info("Iniciando processamento de áudio")
|
||||||
body = await request.json()
|
body = await request.json()
|
||||||
|
|
||||||
if settings.DEBUG_MODE:
|
if settings.DEBUG_MODE:
|
||||||
logger.debug(f"Payload recebido: {body}")
|
logger.debug(f"Payload recebido: {body}")
|
||||||
|
|
||||||
@ -28,13 +29,13 @@ async def transcreve_audios(request: Request):
|
|||||||
from_me = body["data"]["key"]["fromMe"]
|
from_me = body["data"]["key"]["fromMe"]
|
||||||
remote_jid = body["data"]["key"]["remoteJid"]
|
remote_jid = body["data"]["key"]["remoteJid"]
|
||||||
message_type = body["data"]["messageType"]
|
message_type = body["data"]["messageType"]
|
||||||
|
|
||||||
if "audioMessage" not in message_type:
|
if "audioMessage" not in message_type:
|
||||||
logger.info("Mensagem recebida não é um áudio, ignorando")
|
logger.info("Mensagem recebida não é um áudio, ignorando")
|
||||||
return {"message": "Mensagem recebida não é um áudio"}
|
return {"message": "Mensagem recebida não é um áudio"}
|
||||||
|
|
||||||
if from_me:
|
if from_me and not settings.PROCESS_SELF_MESSAGES:
|
||||||
logger.info("Mensagem enviada pelo próprio usuário, ignorando")
|
logger.info("Mensagem enviada pelo próprio usuário ignorada conforme configuração")
|
||||||
return {"message": "Mensagem enviada por mim, sem operação"}
|
return {"message": "Mensagem enviada por mim, sem operação"}
|
||||||
|
|
||||||
if "@g.us" in remote_jid and not settings.PROCESS_GROUP_MESSAGES:
|
if "@g.us" in remote_jid and not settings.PROCESS_GROUP_MESSAGES:
|
||||||
@ -52,17 +53,20 @@ async def transcreve_audios(request: Request):
|
|||||||
logger.debug(f"Áudio convertido e salvo em: {audio_source}")
|
logger.debug(f"Áudio convertido e salvo em: {audio_source}")
|
||||||
|
|
||||||
# Transcrever o áudio
|
# Transcrever o áudio
|
||||||
transcription_text, is_summary = await transcribe_audio(audio_source)
|
transcription_text, _ = await transcribe_audio(audio_source)
|
||||||
|
summary_text = await summarize_text_if_needed(transcription_text)
|
||||||
|
|
||||||
header_message = (
|
# Formatar a mensagem
|
||||||
"*Resumo do áudio:*\n\n" if is_summary else "*Transcrição desse áudio:*\n\n"
|
summary_message = (
|
||||||
|
f"*Resumo do áudio:*\n\n"
|
||||||
|
f"{summary_text}\n\n"
|
||||||
|
f"*Transcrição do áudio:*\n\n"
|
||||||
|
f"{transcription_text}\n\n"
|
||||||
|
f"{settings.BUSINESS_MESSAGE}"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Formatar o conteúdo da mensagem
|
|
||||||
summary_message = f"{header_message}{transcription_text}\n\n{settings.BUSINESS_MESSAGE}"
|
|
||||||
logger.debug(f"Mensagem formatada: {summary_message[:100]}...")
|
logger.debug(f"Mensagem formatada: {summary_message[:100]}...")
|
||||||
|
|
||||||
# Enviar o resumo transcrito de volta via WhatsApp
|
# Enviar a mensagem formatada via WhatsApp
|
||||||
await send_message_to_whatsapp(
|
await send_message_to_whatsapp(
|
||||||
server_url,
|
server_url,
|
||||||
instance,
|
instance,
|
||||||
@ -78,6 +82,6 @@ async def transcreve_audios(request: Request):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Erro ao processar áudio: {str(e)}", exc_info=settings.DEBUG_MODE)
|
logger.error(f"Erro ao processar áudio: {str(e)}", exc_info=settings.DEBUG_MODE)
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
status_code=500,
|
status_code=500,
|
||||||
detail=f"Erro ao processar a requisição: {str(e)}"
|
detail=f"Erro ao processar a requisição: {str(e)}",
|
||||||
)
|
)
|
@ -91,6 +91,7 @@ services:
|
|||||||
GROQ_API_KEY: "substitua_sua_chave_GROQ_aqui" #coloque sua chave GROQ aqui
|
GROQ_API_KEY: "substitua_sua_chave_GROQ_aqui" #coloque sua chave GROQ aqui
|
||||||
BUSINESS_MESSAGE: "substitua_sua_mensagem_de_servico_aqui" #coloque a mensagem que será enviada ao final da transcrição aqui
|
BUSINESS_MESSAGE: "substitua_sua_mensagem_de_servico_aqui" #coloque a mensagem que será enviada ao final da transcrição aqui
|
||||||
PROCESS_GROUP_MESSAGES: "false" # Define se mensagens de grupos devem ser processadas
|
PROCESS_GROUP_MESSAGES: "false" # Define se mensagens de grupos devem ser processadas
|
||||||
|
PROCESS_SELF_MESSAGES: "true" # Define se sua próprias mensagens devem ser processadas
|
||||||
DEBUG_MODE: "false"
|
DEBUG_MODE: "false"
|
||||||
LOG_LEVEL: "INFO"
|
LOG_LEVEL: "INFO"
|
||||||
```
|
```
|
||||||
@ -115,6 +116,7 @@ services:
|
|||||||
GROQ_API_KEY: "substitua_sua_chave_GROQ_aqui" #coloque sua chave GROQ aqui
|
GROQ_API_KEY: "substitua_sua_chave_GROQ_aqui" #coloque sua chave GROQ aqui
|
||||||
BUSINESS_MESSAGE: "substitua_sua_mensagem_de_servico_aqui" #coloque a mensagem que será enviada ao final da transcrição aqui
|
BUSINESS_MESSAGE: "substitua_sua_mensagem_de_servico_aqui" #coloque a mensagem que será enviada ao final da transcrição aqui
|
||||||
PROCESS_GROUP_MESSAGES: "false" # Define se mensagens de grupos devem ser processadas
|
PROCESS_GROUP_MESSAGES: "false" # Define se mensagens de grupos devem ser processadas
|
||||||
|
PROCESS_SELF_MESSAGES: "true" # Define se sua próprias mensagens devem ser processadas
|
||||||
DEBUG_MODE: "false"
|
DEBUG_MODE: "false"
|
||||||
LOG_LEVEL: "INFO"
|
LOG_LEVEL: "INFO"
|
||||||
deploy:
|
deploy:
|
||||||
|
@ -34,7 +34,7 @@ async def summarize_text_if_needed(text):
|
|||||||
"messages": [{
|
"messages": [{
|
||||||
"role": "user",
|
"role": "user",
|
||||||
"content": f"""
|
"content": f"""
|
||||||
Entenda o contexto desse áudio e faça um resumo super enxuto sobre o que se trata.
|
Entenda o contexto desse áudio e faça um resumo super enxuto sobre o que se trata, coloque os pontos relevantes e mais importantes no resumo de forma muito curta.
|
||||||
Esse áudio foi enviado pelo whatsapp, de alguém, para Gabriel.
|
Esse áudio foi enviado pelo whatsapp, de alguém, para Gabriel.
|
||||||
Escreva APENAS o resumo do áudio como se fosse você que estivesse enviando
|
Escreva APENAS o resumo do áudio como se fosse você que estivesse enviando
|
||||||
essa mensagem! Não comprimente, não de oi, não escreva nada antes nem depois
|
essa mensagem! Não comprimente, não de oi, não escreva nada antes nem depois
|
||||||
@ -197,4 +197,4 @@ async def get_audio_base64(server_url, instance, apikey, message_id):
|
|||||||
raise HTTPException(status_code=500, detail="Falha ao obter áudio em base64")
|
raise HTTPException(status_code=500, detail="Falha ao obter áudio em base64")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Erro na obtenção do áudio base64: {str(e)}", exc_info=settings.DEBUG_MODE)
|
logger.error(f"Erro na obtenção do áudio base64: {str(e)}", exc_info=settings.DEBUG_MODE)
|
||||||
raise
|
raise
|
Loading…
Reference in New Issue
Block a user