twilio_webhook / app.py
Moibe's picture
Manejo de respuestas
f9019b6
from fastapi import FastAPI, Request
from twilio.rest import Client
import os
# Inicializar FastAPI
app = FastAPI()
# Credenciales de Twilio
account_sid = 'AC70f4efa275c50cc260b07fa3b1c7e6c5'
# Leer auth_token: local desde bridges.py, o servidor desde secreto de Hugging Face
try:
import bridges
auth_token = bridges.au
except (ImportError, AttributeError):
# En servidor (Hugging Face), leer del secreto
auth_token = os.getenv('au')
if not auth_token:
raise ValueError("❌ Error: auth_token no configurado. Revisa que el secreto 'au' esté en Hugging Face o que bridges.py exista localmente.")
client = Client(account_sid, auth_token)
# Número de Twilio para enviar mensajes
TWILIO_NUMBER = 'whatsapp:+14155238886'
@app.post("/whatsapp")
async def receive_whatsapp(request: Request):
"""
Webhook que recibe mensajes de WhatsApp desde Twilio
"""
# Obtener los datos del formulario que Twilio envía
form_data = await request.form()
# Información del mensaje
from_number = form_data.get('From') # Número del usuario
message_body = form_data.get('Body') # Contenido del mensaje
message_sid = form_data.get('MessageSid') # ID del mensaje
# Aquí es donde procesas la respuesta del usuario
print(f"\n{'='*50}")
print(f"📱 MENSAJE RECIBIDO")
print(f"{'='*50}")
print(f"De: {from_number}")
print(f"Mensaje: {message_body}")
print(f"Message SID: {message_sid}")
print(f"{'='*50}\n")
# Ejemplo: Responder según lo que el usuario escribió
if message_body.lower() == "confirm":
response_text = "✅ Gracias por confirmar tu cita. Te esperamos!"
elif message_body.lower() == "cancel":
response_text = "❌ Tu cita ha sido cancelada."
else:
response_text = f"Recibimos tu mensaje: '{message_body}'"
# Enviar respuesta automática
message = client.messages.create(
from_=TWILIO_NUMBER,
body=response_text,
to=from_number
)
print(f"✉️ Respuesta enviada: {response_text}")
# Twilio necesita una respuesta vacía para confirmar que recibió el webhook
return {}
@app.get("/")
async def root():
"""
Ruta de prueba para verificar que el servidor está funcionando
"""
return {"status": "✅ Webhook de Twilio está activo"}
# Para ejecutar: uvicorn webhook:app --reload --host 0.0.0.0 --port 8000