Spaces:
Sleeping
Sleeping
| 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' | |
| 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 {} | |
| 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 | |