84 lines
2.6 KiB
Python
84 lines
2.6 KiB
Python
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
|
|
from services import get_env_var
|
|
|
|
# Carregar variáveis do .env
|
|
load_dotenv()
|
|
|
|
app = FastAPI()
|
|
|
|
# Obter a mensagem do negócio da variável de ambiente
|
|
BUSINESS_MESSAGE = get_env_var("BUSINESS_MESSAGE", "*Impacte AI* Premium Services")
|
|
|
|
@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{BUSINESS_MESSAGE}"
|
|
|
|
# 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)}"
|
|
)
|