{"repo": "axyntraxautomation-lab/axyntrax-prod-migration", "files": {"cecilia/axia_logic.py": {"23813cf1ebd37c8f71beb6dbb2e995e3370d6659": {"t": 1785745420.3143706, "n": 7234, "h": "03421fba87adb2df", "c": "import os\nimport re\nimport smtplib\nimport datetime\nfrom email.mime.text import MIMEText\nfrom email.mime.multipart import MIMEMultipart\nfrom fpdf import FPDF # fpdf2 instalado\nimport google.generativeai as genai\nfrom firebase_admin import storage\nfrom dotenv import load_dotenv\n\nload_dotenv()\n\n# Configuración de IA (Google Gemini 2.0 Flash)\nGEMINI_KEY = os.getenv(\"GEMINI_API_KEY\")\nDEEPSEEK_KEY = os.getenv(\"DEEPSEEK_API_KEY\")\n\nif GEMINI_KEY:\n genai.configure(api_key=GEMINI_KEY)\n\nSYSTEM_PROMPT = \"\"\"\nEres AXIA, la IA de alto nivel de AXYNTRAX AUTOMATION (RUC: 10406750324).\nTu misión es orquestar la automatización de PYMES peruanas con precisión y calidez.\n\nREGLAS DE NEGOCIO:\n- Precios (INCLUYEN 18% IGV):\n * Starter: S/ 199.00/mes (inc. IGV)\n * Pro Cloud: S/ 399.00/mes (inc. IGV)\n * Diamante: S/ 799.00/mes (inc. IGV)\n- Beneficio Clave: Cada módulo principal incluye 3 submódulos estratégicos GRATIS.\n- Onboarding: Demo de 30 días GRATIS en www.axyntrax-automation.net.\n\nTONALIDAD:\n- Profesional, ejecutivo, peruano y extremadamente resolutivo.\n- No uses \"chatbot\", eres una solución de orquestación empresarial.\n\"\"\"\n\ndef get_axia_response(history, system_override: str = None):\n \"\"\"Llamada al cerebro de AXIA/CECILIA. Intenta Gemini, cae a DeepSeek si es necesario.\"\"\"\n system = system_override if system_override else SYSTEM_PROMPT\n \n # 1. INTENTO CON DEEPSEEK (Si está configurado y es la preferencia o fallback)\n # Por ahora lo ponemos como fallback o si Gemini no está\n \n use_deepseek = os.getenv(\"IA_PRIMARY\", \"gemini\").lower() == \"deepseek\"\n \n if use_deepseek and DEEPSEEK_KEY and DEEPSEEK_KEY != \"PENDIENTE_POR_ADMIN\":\n try:\n import requests\n headers = {\n \"Authorization\": f\"Bearer {DEEPSEEK_KEY}\",\n \"Content-Type\": \"application/json\"\n }\n messages = [{\"role\": \"system\", \"content\": system}]\n for m in history:\n messages.append({\"role\": m[\"role\"], \"content\": m[\"content\"]})\n \n payload = {\n \"model\": \"deepseek-v4-flash\",\n \"messages\": messages,\n \"temperature\": 0.7,\n \"max_tokens\": 500\n }\n resp = requests.post(\"https://api.deepseek.com/v1/chat/completions\", headers=headers, json=payload, timeout=15)\n if resp.status_code == 200:\n return resp.json()[\"choices\"][0][\"message\"][\"content\"].strip()\n except Exception as e:\n print(f\"[DEEPSEEK ERR] {e}\")\n\n # 2. INTENTO CON GEMINI (Default)\n if GEMINI_KEY:\n try:\n model = genai.GenerativeModel(\n model_name=\"gemini-2.0-flash\", # Actualizado a flash 2.0\n system_instruction=system\n )\n \n chat_history = []\n for msg in history[:-1]:\n role = \"user\" if msg[\"role\"] == \"user\" else \"model\"\n chat_history.append({\"role\": role, \"parts\": [msg[\"content\"]]})\n \n chat = model.start_chat(history=chat_history)\n response = chat.send_message(\n history[-1][\"content\"],\n generation_config={\"temperature\": 0.7}\n )\n return response.text.strip()\n except Exception as e:\n print(f\"[GEMINI IA ERR] {e}\")\n # Si falla Gemini, intentar DeepSeek si no se intentó antes\n if not use_deepseek and DEEPSEEK_KEY and DEEPSEEK_KEY != \"PENDIENTE_POR_ADMIN\":\n # (Lógica duplicada para brevedad o llamar recursivamente con flag)\n pass\n\n return \"Modo Simulación: CECILIA recibió mensaje. (Configura GEMINI_API_KEY o DEEPSEEK_API_KEY para IA real)\"\n\n\ndef generate_quote_pdf(lead_name, empresa, plan, precio):\n \"\"\"Genera una cotización formal en PDF\"\"\"\n pdf = FPDF()\n pdf.add_page()\n \n # Header\n pdf.set_font(\"Arial\", 'B', 16)\n pdf.cell(200, 10, \"COTIZACIÓN FORMAL - AXYNTRAX AUTOMATION\", 0, 1, 'C')\n pdf.ln(10)\n \n # Body\n pdf.set_font(\"Arial\", '', 12)\n pdf.cell(200, 10, f\"Cliente: {lead_name}\", 0, 1)\n pdf.cell(200, 10, f\"Empresa: {empresa}\", 0, 1)\n pdf.cell(200, 10, f\"Fecha: 22/04/2026\", 0, 1)\n pdf.ln(10)\n \n pdf.set_font(\"Arial\", 'B', 12)\n pdf.cell(200, 10, f\"Solución Propuesta: Plan {plan}\", 0, 1)\n pdf.set_font(\"Arial\", '', 12)\n pdf.multi_cell(0, 10, \"Incluye: Implementación de Chatbot IA, integración con WhatsApp Business, dashboard gerencial y soporte 24/7.\")\n pdf.ln(5)\n \n pdf.set_font(\"Arial\", 'B', 14)\n pdf.set_text_color(0, 163, 255) # Electric Blue\n pdf.cell(200, 10, f\"INVERSIÓN MENSUAL: S/ {precio}.00\", 0, 1)\n \n pdf.set_text_color(0, 0, 0)\n pdf.ln(20)\n pdf.set_font(\"Arial\", 'I', 10)\n pdf.multi_cell(0, 10, \"Esta cotización tiene una validez de 15 días. Al contratar esta semana, incluimos el onboarding y configuración gratis.\")\n \n # Sanitización estricta para evitar Path Traversal y caracteres raros\n clean_name = re.sub(r'[^a-zA-Z0-9_-]', \"\", lead_name).replace(\" \", \"_\")\n filename = f\"cotizacion_{clean_name}.pdf\"\n file_path = os.path.join(\"temp_quotes\", filename)\n \n if not os.path.exists(\"temp_quotes\"):\n os.makedirs(\"temp_quotes\")\n \n pdf.output(file_path)\n return file_path\n\ndef upload_quote_to_storage(file_path):\n \"\"\"Sube el PDF a Firebase Storage y devuelve la URL pública\"\"\"\n try:\n bucket = storage.bucket()\n blob = bucket.blob(f\"quotes/{os.path.basename(file_path)}\")\n blob.upload_from_filename(file_path)\n \n # Hacer el archivo público (o generar URL con token)\n blob.make_public()\n return blob.public_url\n except Exception as e:\n print(f\"Error subiendo a Storage: {e}\")\n return None\n\ndef notify_sales_team(lead_data):\n \"\"\"Envía un email al equipo de ventas sobre un lead caliente\"\"\"\n try:\n sender_email = os.getenv(\"EMAIL_CORPORATIVO\")\n sender_password = os.getenv(\"EMAIL_PASSWORD\")\n admin_email = os.getenv(\"ADMIN_EMAIL\", sender_email)\n \n msg = MIMEMultipart()\n msg['From'] = sender_email\n msg['To'] = admin_email\n msg['Subject'] = f\"🔥 LEAD CALIENTE DETECTADO: {lead_data.get('nombre')}\"\n \n body = f\"\"\"\n Hola Equipo de Ventas,\n \n AXIA ha detectado un lead de alta prioridad:\n \n - Nombre: {lead_data.get('nombre')}\n - WhatsApp: {lead_data.get('phone')}\n - Empresa: {lead_data.get('empresa')}\n - Sector: {lead_data.get('sector')}\n - Score de Interés: {lead_data.get('score', 85)}/100\n \n El cliente ha solicitado una cotización. Por favor, realizar seguimiento manual si es necesario.\n \n Atentamente,\n AXIA Brain System\n \"\"\"\n msg.attach(MIMEText(body, 'plain'))\n \n server = smtplib.SMTP(os.getenv(\"EMAIL_SMTP_HOST\"), int(os.getenv(\"EMAIL_SMTP_PORT\")))\n server.starttls()\n server.login(sender_email, sender_password)\n server.send_message(msg)\n server.quit()\n return True\n except Exception as e:\n print(f\"Error notificando ventas: {e}\")\n return False\n"}, "44878cb6c0c3ba6dfc4361c4a554bfb82b6ccb99": {"t": 1785752996.9764721, "n": 7234, "h": "03421fba87adb2df", "c": "import os\nimport re\nimport smtplib\nimport datetime\nfrom email.mime.text import MIMEText\nfrom email.mime.multipart import MIMEMultipart\nfrom fpdf import FPDF # fpdf2 instalado\nimport google.generativeai as genai\nfrom firebase_admin import storage\nfrom dotenv import load_dotenv\n\nload_dotenv()\n\n# Configuración de IA (Google Gemini 2.0 Flash)\nGEMINI_KEY = os.getenv(\"GEMINI_API_KEY\")\nDEEPSEEK_KEY = os.getenv(\"DEEPSEEK_API_KEY\")\n\nif GEMINI_KEY:\n genai.configure(api_key=GEMINI_KEY)\n\nSYSTEM_PROMPT = \"\"\"\nEres AXIA, la IA de alto nivel de AXYNTRAX AUTOMATION (RUC: 10406750324).\nTu misión es orquestar la automatización de PYMES peruanas con precisión y calidez.\n\nREGLAS DE NEGOCIO:\n- Precios (INCLUYEN 18% IGV):\n * Starter: S/ 199.00/mes (inc. IGV)\n * Pro Cloud: S/ 399.00/mes (inc. IGV)\n * Diamante: S/ 799.00/mes (inc. IGV)\n- Beneficio Clave: Cada módulo principal incluye 3 submódulos estratégicos GRATIS.\n- Onboarding: Demo de 30 días GRATIS en www.axyntrax-automation.net.\n\nTONALIDAD:\n- Profesional, ejecutivo, peruano y extremadamente resolutivo.\n- No uses \"chatbot\", eres una solución de orquestación empresarial.\n\"\"\"\n\ndef get_axia_response(history, system_override: str = None):\n \"\"\"Llamada al cerebro de AXIA/CECILIA. Intenta Gemini, cae a DeepSeek si es necesario.\"\"\"\n system = system_override if system_override else SYSTEM_PROMPT\n \n # 1. INTENTO CON DEEPSEEK (Si está configurado y es la preferencia o fallback)\n # Por ahora lo ponemos como fallback o si Gemini no está\n \n use_deepseek = os.getenv(\"IA_PRIMARY\", \"gemini\").lower() == \"deepseek\"\n \n if use_deepseek and DEEPSEEK_KEY and DEEPSEEK_KEY != \"PENDIENTE_POR_ADMIN\":\n try:\n import requests\n headers = {\n \"Authorization\": f\"Bearer {DEEPSEEK_KEY}\",\n \"Content-Type\": \"application/json\"\n }\n messages = [{\"role\": \"system\", \"content\": system}]\n for m in history:\n messages.append({\"role\": m[\"role\"], \"content\": m[\"content\"]})\n \n payload = {\n \"model\": \"deepseek-v4-flash\",\n \"messages\": messages,\n \"temperature\": 0.7,\n \"max_tokens\": 500\n }\n resp = requests.post(\"https://api.deepseek.com/v1/chat/completions\", headers=headers, json=payload, timeout=15)\n if resp.status_code == 200:\n return resp.json()[\"choices\"][0][\"message\"][\"content\"].strip()\n except Exception as e:\n print(f\"[DEEPSEEK ERR] {e}\")\n\n # 2. INTENTO CON GEMINI (Default)\n if GEMINI_KEY:\n try:\n model = genai.GenerativeModel(\n model_name=\"gemini-2.0-flash\", # Actualizado a flash 2.0\n system_instruction=system\n )\n \n chat_history = []\n for msg in history[:-1]:\n role = \"user\" if msg[\"role\"] == \"user\" else \"model\"\n chat_history.append({\"role\": role, \"parts\": [msg[\"content\"]]})\n \n chat = model.start_chat(history=chat_history)\n response = chat.send_message(\n history[-1][\"content\"],\n generation_config={\"temperature\": 0.7}\n )\n return response.text.strip()\n except Exception as e:\n print(f\"[GEMINI IA ERR] {e}\")\n # Si falla Gemini, intentar DeepSeek si no se intentó antes\n if not use_deepseek and DEEPSEEK_KEY and DEEPSEEK_KEY != \"PENDIENTE_POR_ADMIN\":\n # (Lógica duplicada para brevedad o llamar recursivamente con flag)\n pass\n\n return \"Modo Simulación: CECILIA recibió mensaje. (Configura GEMINI_API_KEY o DEEPSEEK_API_KEY para IA real)\"\n\n\ndef generate_quote_pdf(lead_name, empresa, plan, precio):\n \"\"\"Genera una cotización formal en PDF\"\"\"\n pdf = FPDF()\n pdf.add_page()\n \n # Header\n pdf.set_font(\"Arial\", 'B', 16)\n pdf.cell(200, 10, \"COTIZACIÓN FORMAL - AXYNTRAX AUTOMATION\", 0, 1, 'C')\n pdf.ln(10)\n \n # Body\n pdf.set_font(\"Arial\", '', 12)\n pdf.cell(200, 10, f\"Cliente: {lead_name}\", 0, 1)\n pdf.cell(200, 10, f\"Empresa: {empresa}\", 0, 1)\n pdf.cell(200, 10, f\"Fecha: 22/04/2026\", 0, 1)\n pdf.ln(10)\n \n pdf.set_font(\"Arial\", 'B', 12)\n pdf.cell(200, 10, f\"Solución Propuesta: Plan {plan}\", 0, 1)\n pdf.set_font(\"Arial\", '', 12)\n pdf.multi_cell(0, 10, \"Incluye: Implementación de Chatbot IA, integración con WhatsApp Business, dashboard gerencial y soporte 24/7.\")\n pdf.ln(5)\n \n pdf.set_font(\"Arial\", 'B', 14)\n pdf.set_text_color(0, 163, 255) # Electric Blue\n pdf.cell(200, 10, f\"INVERSIÓN MENSUAL: S/ {precio}.00\", 0, 1)\n \n pdf.set_text_color(0, 0, 0)\n pdf.ln(20)\n pdf.set_font(\"Arial\", 'I', 10)\n pdf.multi_cell(0, 10, \"Esta cotización tiene una validez de 15 días. Al contratar esta semana, incluimos el onboarding y configuración gratis.\")\n \n # Sanitización estricta para evitar Path Traversal y caracteres raros\n clean_name = re.sub(r'[^a-zA-Z0-9_-]', \"\", lead_name).replace(\" \", \"_\")\n filename = f\"cotizacion_{clean_name}.pdf\"\n file_path = os.path.join(\"temp_quotes\", filename)\n \n if not os.path.exists(\"temp_quotes\"):\n os.makedirs(\"temp_quotes\")\n \n pdf.output(file_path)\n return file_path\n\ndef upload_quote_to_storage(file_path):\n \"\"\"Sube el PDF a Firebase Storage y devuelve la URL pública\"\"\"\n try:\n bucket = storage.bucket()\n blob = bucket.blob(f\"quotes/{os.path.basename(file_path)}\")\n blob.upload_from_filename(file_path)\n \n # Hacer el archivo público (o generar URL con token)\n blob.make_public()\n return blob.public_url\n except Exception as e:\n print(f\"Error subiendo a Storage: {e}\")\n return None\n\ndef notify_sales_team(lead_data):\n \"\"\"Envía un email al equipo de ventas sobre un lead caliente\"\"\"\n try:\n sender_email = os.getenv(\"EMAIL_CORPORATIVO\")\n sender_password = os.getenv(\"EMAIL_PASSWORD\")\n admin_email = os.getenv(\"ADMIN_EMAIL\", sender_email)\n \n msg = MIMEMultipart()\n msg['From'] = sender_email\n msg['To'] = admin_email\n msg['Subject'] = f\"🔥 LEAD CALIENTE DETECTADO: {lead_data.get('nombre')}\"\n \n body = f\"\"\"\n Hola Equipo de Ventas,\n \n AXIA ha detectado un lead de alta prioridad:\n \n - Nombre: {lead_data.get('nombre')}\n - WhatsApp: {lead_data.get('phone')}\n - Empresa: {lead_data.get('empresa')}\n - Sector: {lead_data.get('sector')}\n - Score de Interés: {lead_data.get('score', 85)}/100\n \n El cliente ha solicitado una cotización. Por favor, realizar seguimiento manual si es necesario.\n \n Atentamente,\n AXIA Brain System\n \"\"\"\n msg.attach(MIMEText(body, 'plain'))\n \n server = smtplib.SMTP(os.getenv(\"EMAIL_SMTP_HOST\"), int(os.getenv(\"EMAIL_SMTP_PORT\")))\n server.starttls()\n server.login(sender_email, sender_password)\n server.send_message(msg)\n server.quit()\n return True\n except Exception as e:\n print(f\"Error notificando ventas: {e}\")\n return False\n"}, "85d4ec2fa8e625af753e9aed8c6fea4b917e2338": {"t": 1785752998.2018917, "n": 7230, "h": "bf4717cd8542ceb7", "c": "import os\nimport re\nimport smtplib\nimport datetime\nfrom email.mime.text import MIMEText\nfrom email.mime.multipart import MIMEMultipart\nfrom fpdf import FPDF # fpdf2 instalado\nimport google.generativeai as genai\nfrom firebase_admin import storage\nfrom dotenv import load_dotenv\n\nload_dotenv()\n\n# Configuración de IA (Google Gemini 2.0 Flash)\nGEMINI_KEY = os.getenv(\"GEMINI_API_KEY\")\nDEEPSEEK_KEY = os.getenv(\"DEEPSEEK_API_KEY\")\n\nif GEMINI_KEY:\n genai.configure(api_key=GEMINI_KEY)\n\nSYSTEM_PROMPT = \"\"\"\nEres AXIA, la IA de alto nivel de AXYNTRAX AUTOMATION (RUC: 10406750324).\nTu misión es orquestar la automatización de PYMES peruanas con precisión y calidez.\n\nREGLAS DE NEGOCIO:\n- Precios (INCLUYEN 18% IGV):\n * Starter: S/ 199.00/mes (inc. IGV)\n * Pro Cloud: S/ 399.00/mes (inc. IGV)\n * Diamante: S/ 799.00/mes (inc. IGV)\n- Beneficio Clave: Cada módulo principal incluye 3 submódulos estratégicos GRATIS.\n- Onboarding: Demo de 30 días GRATIS en www.axyntrax-automation.net.\n\nTONALIDAD:\n- Profesional, ejecutivo, peruano y extremadamente resolutivo.\n- No uses \"chatbot\", eres una solución de orquestación empresarial.\n\"\"\"\n\ndef get_axia_response(history, system_override: str = None):\n \"\"\"Llamada al cerebro de AXIA/CECILIA. Intenta Gemini, cae a DeepSeek si es necesario.\"\"\"\n system = system_override if system_override else SYSTEM_PROMPT\n \n # 1. INTENTO CON DEEPSEEK (Si está configurado y es la preferencia o fallback)\n # Por ahora lo ponemos como fallback o si Gemini no está\n \n use_deepseek = os.getenv(\"IA_PRIMARY\", \"gemini\").lower() == \"deepseek\"\n \n if use_deepseek and DEEPSEEK_KEY and DEEPSEEK_KEY != \"PENDIENTE_POR_ADMIN\":\n try:\n import requests\n headers = {\n \"Authorization\": f\"Bearer {DEEPSEEK_KEY}\",\n \"Content-Type\": \"application/json\"\n }\n messages = [{\"role\": \"system\", \"content\": system}]\n for m in history:\n messages.append({\"role\": m[\"role\"], \"content\": m[\"content\"]})\n \n payload = {\n \"model\": \"deepseek-chat\",\n \"messages\": messages,\n \"temperature\": 0.7,\n \"max_tokens\": 500\n }\n resp = requests.post(\"https://api.deepseek.com/v1/chat/completions\", headers=headers, json=payload, timeout=15)\n if resp.status_code == 200:\n return resp.json()[\"choices\"][0][\"message\"][\"content\"].strip()\n except Exception as e:\n print(f\"[DEEPSEEK ERR] {e}\")\n\n # 2. INTENTO CON GEMINI (Default)\n if GEMINI_KEY:\n try:\n model = genai.GenerativeModel(\n model_name=\"gemini-2.0-flash\", # Actualizado a flash 2.0\n system_instruction=system\n )\n \n chat_history = []\n for msg in history[:-1]:\n role = \"user\" if msg[\"role\"] == \"user\" else \"model\"\n chat_history.append({\"role\": role, \"parts\": [msg[\"content\"]]})\n \n chat = model.start_chat(history=chat_history)\n response = chat.send_message(\n history[-1][\"content\"],\n generation_config={\"temperature\": 0.7}\n )\n return response.text.strip()\n except Exception as e:\n print(f\"[GEMINI IA ERR] {e}\")\n # Si falla Gemini, intentar DeepSeek si no se intentó antes\n if not use_deepseek and DEEPSEEK_KEY and DEEPSEEK_KEY != \"PENDIENTE_POR_ADMIN\":\n # (Lógica duplicada para brevedad o llamar recursivamente con flag)\n pass\n\n return \"Modo Simulación: CECILIA recibió mensaje. (Configura GEMINI_API_KEY o DEEPSEEK_API_KEY para IA real)\"\n\n\ndef generate_quote_pdf(lead_name, empresa, plan, precio):\n \"\"\"Genera una cotización formal en PDF\"\"\"\n pdf = FPDF()\n pdf.add_page()\n \n # Header\n pdf.set_font(\"Arial\", 'B', 16)\n pdf.cell(200, 10, \"COTIZACIÓN FORMAL - AXYNTRAX AUTOMATION\", 0, 1, 'C')\n pdf.ln(10)\n \n # Body\n pdf.set_font(\"Arial\", '', 12)\n pdf.cell(200, 10, f\"Cliente: {lead_name}\", 0, 1)\n pdf.cell(200, 10, f\"Empresa: {empresa}\", 0, 1)\n pdf.cell(200, 10, f\"Fecha: 22/04/2026\", 0, 1)\n pdf.ln(10)\n \n pdf.set_font(\"Arial\", 'B', 12)\n pdf.cell(200, 10, f\"Solución Propuesta: Plan {plan}\", 0, 1)\n pdf.set_font(\"Arial\", '', 12)\n pdf.multi_cell(0, 10, \"Incluye: Implementación de Chatbot IA, integración con WhatsApp Business, dashboard gerencial y soporte 24/7.\")\n pdf.ln(5)\n \n pdf.set_font(\"Arial\", 'B', 14)\n pdf.set_text_color(0, 163, 255) # Electric Blue\n pdf.cell(200, 10, f\"INVERSIÓN MENSUAL: S/ {precio}.00\", 0, 1)\n \n pdf.set_text_color(0, 0, 0)\n pdf.ln(20)\n pdf.set_font(\"Arial\", 'I', 10)\n pdf.multi_cell(0, 10, \"Esta cotización tiene una validez de 15 días. Al contratar esta semana, incluimos el onboarding y configuración gratis.\")\n \n # Sanitización estricta para evitar Path Traversal y caracteres raros\n clean_name = re.sub(r'[^a-zA-Z0-9_-]', \"\", lead_name).replace(\" \", \"_\")\n filename = f\"cotizacion_{clean_name}.pdf\"\n file_path = os.path.join(\"temp_quotes\", filename)\n \n if not os.path.exists(\"temp_quotes\"):\n os.makedirs(\"temp_quotes\")\n \n pdf.output(file_path)\n return file_path\n\ndef upload_quote_to_storage(file_path):\n \"\"\"Sube el PDF a Firebase Storage y devuelve la URL pública\"\"\"\n try:\n bucket = storage.bucket()\n blob = bucket.blob(f\"quotes/{os.path.basename(file_path)}\")\n blob.upload_from_filename(file_path)\n \n # Hacer el archivo público (o generar URL con token)\n blob.make_public()\n return blob.public_url\n except Exception as e:\n print(f\"Error subiendo a Storage: {e}\")\n return None\n\ndef notify_sales_team(lead_data):\n \"\"\"Envía un email al equipo de ventas sobre un lead caliente\"\"\"\n try:\n sender_email = os.getenv(\"EMAIL_CORPORATIVO\")\n sender_password = os.getenv(\"EMAIL_PASSWORD\")\n admin_email = os.getenv(\"ADMIN_EMAIL\", sender_email)\n \n msg = MIMEMultipart()\n msg['From'] = sender_email\n msg['To'] = admin_email\n msg['Subject'] = f\"🔥 LEAD CALIENTE DETECTADO: {lead_data.get('nombre')}\"\n \n body = f\"\"\"\n Hola Equipo de Ventas,\n \n AXIA ha detectado un lead de alta prioridad:\n \n - Nombre: {lead_data.get('nombre')}\n - WhatsApp: {lead_data.get('phone')}\n - Empresa: {lead_data.get('empresa')}\n - Sector: {lead_data.get('sector')}\n - Score de Interés: {lead_data.get('score', 85)}/100\n \n El cliente ha solicitado una cotización. Por favor, realizar seguimiento manual si es necesario.\n \n Atentamente,\n AXIA Brain System\n \"\"\"\n msg.attach(MIMEText(body, 'plain'))\n \n server = smtplib.SMTP(os.getenv(\"EMAIL_SMTP_HOST\"), int(os.getenv(\"EMAIL_SMTP_PORT\")))\n server.starttls()\n server.login(sender_email, sender_password)\n server.send_message(msg)\n server.quit()\n return True\n except Exception as e:\n print(f\"Error notificando ventas: {e}\")\n return False\n"}}}}