Responde al instante, califica al prospecto, agenda la cita y enruta el lead a tu asesor — 24/7, en español natural, sin que tu equipo levante un dedo.
Paso a paso
Cinco etapas, en automático, desde el primer mensaje hasta el asesor. Pulsa play o navega manualmente.
El mensaje entra por WhatsApp y el agente responde al instante.
Bajo el capó
Infraestructura real, no una maqueta.
El agente
Entiende el contexto, hace seguimiento natural y decide el siguiente paso — impulsado por Claude.
Ningún lead espera; ninguno se pierde por responder tarde.
Razona en vivo con Claude, una pregunta a la vez, en español o inglés.
Extrae necesidad, urgencia y tamaño; puntúa HOT / WARM / COLD con una rúbrica determinista.
Detecta consultas fuera de lugar (tareas escolares, empleo) y se despide con amabilidad.
Ofrece solo horarios realmente libres y crea la cita real en tu Google Calendar.
Crea contacto + trato (deal) en HubSpot con puntaje, razones y datos calificados.
Avisa a tu equipo con resumen, puntaje, contacto y enlace a la transcripción.
En vez de agendar, comparte un recurso útil y protege el tiempo de tu asesor.
Guarda cada mensaje, lead y cita; responde dudas y deja el precio para la llamada.
Cifras ilustrativas.
Construido sobre
Integraciones reales corriendo en la nube.
Estado del sistema
Todo el pipeline está desplegado y verificado en producción: conversa, califica, agenda en Google Calendar y registra el trato en HubSpot — en vivo.
¿Listo?
Lo configuramos con tu marca, tus preguntas y tu calendario. En vivo en días, no meses.
En el código
Un recorrido por el código real que ejecuta cada conversación — webhook, razonamiento, calificación y entrega.
// Cada WhatsApp entrante llega a un webhook verificado por HMAC. pub async fn handle_inbound(state: AppState, msg: InboundText) -> Result<()> { // Idempotencia: Meta reintenta — nunca procesar dos veces. if !state.store.mark_message_processed(&msg.message_id).await? { return Ok(()); } // Serializa por contacto: sin condiciones de carrera en el historial. let _guard = state.locks.acquire(&msg.from).await; // Carga (o crea) la conversación y añade el mensaje al historial. let conv = state.store.get_or_create_conversation(&msg.from).await?; let mut history = conv.messages(); history.push(json!({ "role": "user", "content": msg.text }));
// El corazón del agente: un bucle de uso de herramientas con Claude. for _ in 0..MAX_STEPS { let resp = state.llm.create(&system, &history, &tools).await?; history.push(resp.assistant_message.clone()); // Sin herramientas → el texto del modelo es la respuesta final. if resp.tool_uses.is_empty() { reply = resp.text; break; } // Ejecuta cada herramienta y devuelve el resultado al modelo. for tu in &resp.tool_uses { let out = tools::dispatch(&state, &mut ctx, &tu.name, &tu.input).await; results.push(json!({ "type": "tool_result", "tool_use_id": tu.id, "content": out })); } history.push(json!({ "role": "user", "content": results })); }
// El LLM extrae los datos; Rust puntúa de forma DETERMINÍSTICA. fn score_lead(slots: &Slots, r: &Rubric) -> Score { let mut pts = 0.0; pts += r.need_weight * slots.need_match(&r.keywords); pts += r.urgency_weight * r.timeline_score(&slots.timeline); pts += r.size_weight * r.size_tier(slots.volume); match pts { p if p >= r.hot => Score::Hot, // → agenda + avisa al asesor p if p >= r.warm => Score::Warm, // → nutrir _ => Score::Cold, // → enviar recursos } }
// Lead HOT → agenda real, CRM y handoff; se GUARDA antes de enviar. let event = state.calendar.create_event(&slot, &lead, /* meet */ true).await?; state.crm.upsert_lead(&lead, &score).await?; // contacto + deal (HubSpot) state.notifier.notify_rep(&handoff, &summary).await?; // avisa al asesor // Persistir ANTES de entregar: un envío fallido nunca pierde el estado. state.store.save_conversation(conv.id, &history, &status, score).await?; if let Err(e) = state.whatsapp.send_text(&msg.from, &reply).await { tracing::error!("envío fallido (turno guardado): {e}"); }