Un cotizador automático que conversa por WhatsApp, captura los datos del cliente, detecta la intención del agente humano con una clave secreta y ejecuta el portal de AXA México por RPA — sin que nadie toque un formulario.
Abrir el portal, loguear, buscar el cliente en el chat, copiar datos a mano, llenar el formulario, descargar, reenviar por WhatsApp. Los fines de semana, nada.
El agente escribe la clave en el chat del cliente. El bot abre AXA en un navegador headless, llena, calcula prima con 35% de descuento, descarga el PDF oficial y lo entrega.
Conversación guiada por WhatsApp: uso, origen, marca, modelo, año, código postal, fecha de nacimiento y nombre. Consolidación de mensajes con ventana de 15 segundos.
Tres LangChain tools anti-alucinación validan los datos: normalización de vehículo, step-validator con regex fuzzy (matchea "Leglizado" con 0.95 de similitud), contradiction-tool.
El agente humano envía al chat una clave gen-axa-···
cuando decide disparar la cotización. El bot detecta el trigger
antes de cualquier otro flujo.
Chromium headless abre portal.axa.com.mx, se autentica, cierra el modal de aviso, navega a "Residentes", llena los 15 campos, aplica pago contado + 35% descuento con código ESP-604266.
El portal genera el PDF oficial con la prima calculada. Con fallback
a page.pdf()
de Playwright si el botón de descarga falla. Se envía vía Kommo.
# Se lee en runtime (no al importar) para tolerar # rotación en caliente de la clave secreta. def _get_env(): return { "AXA_COTIZADOR_ENABLED": os.getenv("AXA_COTIZADOR_ENABLED") == "1", "AXA_TRIGGER_KEY": os.getenv("AXA_TRIGGER_KEY", "").strip(), "AXA_USER": os.getenv("AXA_USER", ""), "AXA_PASS": os.getenv("AXA_PASS", ""), } def es_trigger(mensaje: str) -> bool: if not mensaje or not esta_habilitado(): return False return _get_env()["AXA_TRIGGER_KEY"] in mensaje def disparar_cotizacion(estado) -> Tuple[bool, str, Optional[Path]]: # Playwright sync API no corre dentro de asyncio.loop # → thread separado con timeout de 120s. future = _executor.submit(_cotizar_en_thread, estado.datos_cliente) return future.result(timeout=120)
La diferencia entre un RPA de demo y uno de producción está en cómo degrada. El cotizador no evita las caídas — las contiene con tests de salud diarios, diagnóstico en respuesta HTTP y fallback graciosamente al agente humano.
Consulting HMR implementa cotizadores automáticos modulares por aseguradora. Desde $10,000 MXN (cerrar una integración existente) o $15,000 MXN por una nueva — cada fase es factura independiente, pago progresivo, sin compromiso inicial.