from fastapi import FastAPI, Request, HTTPException from services import ( convert_base64_to_file, transcribe_audio, send_message_to_whatsapp, get_audio_base64, ) from models import WebhookRequest import aiohttp from dotenv import load_dotenv import os # Carregar variáveis do .env load_dotenv() app = FastAPI() @app.post("/transcreve-audios") async def transcreve_audios(request: Request): try: # Receber o corpo do webhook body = await request.json() # Extraindo informações necessárias do JSON server_url = body["server_url"] instance = body["instance"] # os.getenv("WHATSAPP_INSTANCE") apikey = body["apikey"] # os.getenv("WHATSAPP_API_KEY") audio_key = body["data"]["key"]["id"] from_me = body["data"]["key"]["fromMe"] remote_jid = body["data"]["key"]["remoteJid"] # Verificar se a mensagem foi enviada por mim if from_me: return {"message": "Mensagem enviada por mim, sem operação"} # Verifica se a mensagem é de um grupo if "@g.us" in remote_jid: return {"message": "Mensagem enviada por um grupo, sem operação"} if "base64" not in body: # Pega o áudio em Base64 base64_audio = await get_audio_base64( server_url, instance, apikey, audio_key ) else: base64_audio = body["data"]["message"]["base64"] # Converter Base64 para arquivo de áudio audio_file = await convert_base64_to_file(base64_audio) # Transcrever o áudio usando o modelo da API externa transcription_text, is_summary = await transcribe_audio(audio_file) header_message = ( "*Resumo do áudio:*\n\n" if is_summary else "*Transcrição desse áudio:*\n\n" ) # Formatar o conteúdo da mensagem summary_message = f"{header_message}{transcription_text}\n\n*Impacte AI* Premium Services" # Enviar o resumo transcrito de volta via WhatsApp await send_message_to_whatsapp( server_url, instance, apikey, summary_message, body["data"]["key"]["remoteJid"], audio_key, ) return {"message": "Áudio transcrito e resposta enviada com sucesso"} except Exception as e: raise HTTPException( status_code=500, detail=f"Erro ao processar a requisição: {str(e)}" )