Diseño de Conversacion
Aprende a diseñar flujos conversacionales efectivos para tu Reclutador Virtual.
Principios de Diseño
Conversacion Natural
Una buena conversacion de bot debe sentirse natural:
DO:
- Mensajes cortos y claros
- Una idea por mensaje
- Lenguaje conversacional
- Respuestas contextuales
- Transiciones suaves
DON'T:
- Parrafos largos
- Lenguaje tecnico/legal
- Respuestas roboticas
- Ignorar contexto
- Cambios bruscos de tema
Ejemplo: Bueno vs Malo
MALO:
"Estimado candidato, para proceder con su solicitud de empleo para la posicion referida, es necesario que proporcione la documentacion solicitada en un plazo no mayor a 7 dias habiles contados a partir de la presente notificacion, incluyendo pero no limitado a: identificacion oficial, CURP, comprobante de domicilio vigente y constancia de situacion fiscal."
BUENO:
"¡Hola Juan!
Para continuar con tu proceso, necesito algunos documentos.
- INE (frente y reverso)
- Comprobante de domicilio
- CURP
¿Puedes enviarlos esta semana?"
Estructura de un Flujo
Componentes Basicos
FLUJO CONVERSACIONAL
| Componente | Descripcion |
|---|---|
| TRIGGER | Inicio de conversacion (mensaje entrante, evento, schedule) |
| SALUDO | Mensaje de bienvenida personalizado |
| CLASIFICAR INTENCION | Entender intencion del usuario |
| NODOS DIALOGO | Logica de conversacion (preguntas, respuestas, acciones) |
| CIERRE | Despedida y proximos pasos |
Tipos de Nodos
1. MENSAJE
- Envia mensaje al usuario
- Texto simple
- Con variables
- Con botones
- Con media
2. PREGUNTA
- Solicita informacion
- Texto libre
- Opcion multiple
- Numero
- Fecha
- Archivo
3. CONDICION
- Bifurcacion basada en logica
- If/else
- Switch
- Expresiones
4. ACCION
- Ejecuta operacion
- Guardar dato
- Llamar API
- Mover etapa
- Crear tarea
5. ESPERA
- Pausa la conversacion
- Por tiempo
- Por evento
- Por respuesta
6. SUBFLOW
- Invoca otro flujo
- Reutilizar logica
- Modularizar
Diseñar el Flujo de Saludo
Saludo Inicial
{
"node": "greeting",
"type": "message",
"content": {
"variants": [
{
"condition": "new_candidate",
"message": "¡Hola {{firstName}}! Soy {{botName}}, tu asistente de reclutamiento de {{companyName}}. ¿En que puedo ayudarte hoy?"
},
{
"condition": "returning_candidate",
"message": "¡Hola de nuevo {{firstName}}! Me da gusto verte. ¿Como puedo ayudarte hoy?"
},
{
"condition": "has_pending_actions",
"message": "¡Hola {{firstName}}! Vi que tienes pendiente {{pendingAction}}. ¿Te gustaria continuar con eso?"
}
]
}
}
Clasificacion de Intencion
{
"node": "classify_intent",
"type": "llm_classify",
"config": {
"model": "gpt-4",
"intents": [
{
"name": "job_inquiry",
"description": "Pregunta sobre una vacante especifica",
"examples": [
"¿Cual es el salario?",
"¿Es trabajo remoto?",
"¿Cuales son los requisitos?"
]
},
{
"name": "application_status",
"description": "Consulta sobre estado de su aplicacion",
"examples": [
"¿Como va mi proceso?",
"¿Ya revisaron mi CV?",
"¿Cuando me llaman?"
]
},
{
"name": "schedule_interview",
"description": "Quiere agendar o reagendar entrevista",
"examples": [
"Quiero agendar mi entrevista",
"Necesito cambiar la fecha",
"¿Podemos mover la cita?"
]
},
{
"name": "submit_document",
"description": "Quiere enviar un documento",
"examples": [
"Aqui esta mi INE",
"Te envio mi CV",
"Adjunto el comprobante"
]
},
{
"name": "other",
"description": "Otra consulta no clasificada"
}
],
"fallback": "other"
}
}
Diseñar Flujo de Preguntas
Pregunta Simple
{
"node": "ask_experience",
"type": "question",
"config": {
"question": "¿Cuantos años de experiencia tienes en desarrollo de software?",
"inputType": "number",
"validation": {
"min": 0,
"max": 50,
"required": true
},
"errorMessage": "Por favor ingresa un numero valido de años",
"storeAs": "years_experience"
}
}
Pregunta con Opciones
{
"node": "ask_availability",
"type": "question",
"config": {
"question": "¿Cual es tu disponibilidad para comenzar?",
"inputType": "single_choice",
"options": [
{ "label": "Inmediata", "value": "immediate" },
{ "label": "2 semanas", "value": "2_weeks" },
{ "label": "1 mes", "value": "1_month" },
{ "label": "Mas de 1 mes", "value": "more" }
],
"displayAs": "buttons",
"storeAs": "availability"
}
}
Pregunta con Confirmacion
{
"node": "ask_salary",
"type": "question",
"config": {
"question": "¿Cual es tu expectativa salarial mensual bruta?",
"inputType": "number",
"format": "currency:MXN",
"validation": {
"min": 10000,
"max": 500000
},
"confirmation": {
"enabled": true,
"message": "Entendido, tu expectativa es de {{salary | currency}}. ¿Es correcto?",
"onConfirm": "next",
"onDeny": "repeat"
},
"storeAs": "salary_expectation"
}
}
Diseñar Respuestas Dinamicas
Respuesta con RAG
{
"node": "answer_faq",
"type": "rag_response",
"config": {
"query": "{{user_message}}",
"sources": ["job_description", "company_faq", "benefits"],
"topK": 3,
"minScore": 0.7,
"prompt": `
Responde la pregunta del candidato usando la informacion proporcionada.
Si no tienes suficiente informacion, indica que transferiras a un reclutador.
Contexto del candidato:
- Nombre: {{candidate.name}}
- Vacante: {{job.title}}
- Etapa: {{process.step}}
Informacion relevante:
{{rag_results}}
Pregunta: {{user_message}}
`,
"fallback": {
"type": "escalate",
"message": "No tengo informacion sobre eso. Te comunico con un reclutador."
}
}
}
Respuesta Condicional
{
"node": "process_status",
"type": "conditional_response",
"config": {
"conditions": [
{
"if": "{{process.step}} == 'Entrevista'",
"message": "Tu proxima entrevista esta programada para {{event.date}} a las {{event.time}}."
},
{
"if": "{{process.step}} == 'Evaluacion'",
"message": "Estamos revisando tu evaluacion. Tendras respuesta en 2-3 dias habiles."
},
{
"if": "{{process.step}} == 'Oferta'",
"message": "¡Buenas noticias! Tu oferta esta en proceso. Pronto te contactamos."
},
{
"else": true,
"message": "Tu aplicacion esta siendo revisada. Te notificaremos cualquier avance."
}
]
}
}
Manejar Errores y Edge Cases
No Entiendo
{
"node": "not_understood",
"type": "message",
"config": {
"variants": [
{
"attempt": 1,
"message": "Disculpa, no entendi bien. ¿Podrias reformular tu pregunta?"
},
{
"attempt": 2,
"message": "Sigo sin entender. Puedo ayudarte con:\n• Informacion sobre vacantes\n• Estado de tu aplicacion\n• Agendar entrevistas\n\n¿Cual de estas opciones necesitas?"
},
{
"attempt": 3,
"message": "Te comunico con un reclutador para atenderte mejor.",
"action": "escalate"
}
]
}
}
Timeout
{
"node": "session_timeout",
"type": "message",
"config": {
"trigger": "inactivity:30min",
"message": "Parece que te fuiste. Si necesitas algo mas, escribeme cuando quieras.",
"action": "end_session"
}
}
Fuera de Horario
{
"node": "out_of_hours",
"type": "message",
"config": {
"trigger": "outside_business_hours",
"message": "Gracias por escribir. Nuestro horario de atencion es de lunes a viernes, 9am a 6pm.\n\nTu mensaje sera atendido el siguiente dia habil. ¡Que tengas buena noche!",
"action": "queue_for_review"
}
}
Transiciones y Flujo
Transicion Suave entre Temas
{
"transitions": {
"after_screening": {
"condition": "score >= 70",
"message": "Excelente, tu perfil es muy interesante. Me gustaria agendar una entrevista contigo.",
"nextNode": "scheduling_flow"
},
"after_faq": {
"condition": "questions_answered >= 2",
"message": "¿Hay algo mas que te gustaria saber sobre la vacante?",
"nextNode": "continue_or_apply"
},
"after_document": {
"condition": "documents_pending == 0",
"message": "¡Perfecto! Ya tenemos todos tus documentos. El siguiente paso es...",
"nextNode": "next_steps"
}
}
}
Cierre de Conversacion
{
"node": "closing",
"type": "message",
"config": {
"variants": [
{
"context": "interview_scheduled",
"message": "¡Listo! Tu entrevista esta confirmada. Te enviare un recordatorio. ¡Mucho exito!"
},
{
"context": "documents_submitted",
"message": "Gracias por tus documentos. Te notificare cuando esten validados. ¡Que tengas un excelente dia!"
},
{
"context": "general",
"message": "Gracias por escribir. Si tienes mas preguntas, aqui estare. ¡Hasta pronto!"
}
]
}
}
Personalizacion Avanzada
Variables de Personalizacion
Variables disponibles en mensajes:
Candidato:
- {{candidate.firstName}}
- {{candidate.lastName}}
- {{candidate.email}}
- {{candidate.phone}}
- {{candidate.location}}
Vacante:
- {{job.title}}
- {{job.department}}
- {{job.location}}
- {{job.salary}}
- {{job.requirements}}
Proceso:
- {{process.step}}
- {{process.progress}}
- {{process.nextAction}}
- {{process.deadline}}
Empresa:
- {{company.name}}
- {{company.industry}}
- {{company.culture}}
Conversacion:
- {{conversation.turnCount}}
- {{conversation.lastIntent}}
- {{conversation.sentiment}}
Tono Dinamico
{
"tone": {
"default": "professional_friendly",
"adjustments": [
{
"condition": "sentiment == negative",
"tone": "empathetic",
"modifiers": ["apologetic", "helpful"]
},
{
"condition": "time_of_day == morning",
"greeting": "¡Buenos dias!"
},
{
"condition": "candidate.age < 25",
"tone": "casual",
"useEmojis": true
}
]
}
}
Visualizador de Flujo
El Flow Builder permite visualizar y editar flujos:
Estructura del Editor:
| Seccion | Contenido |
|---|---|
| Cabecera | FLOW BUILDER + boton Save |
| Canvas | Diagrama de nodos conectados |
| Barra inferior | + Add Node, Test Flow, Export, Import |
Flujo ejemplo:
- Trigger -> Saludo -> Classify
- Classify se bifurca en: FAQ, Screening, Schedule
- Todas las ramas convergen en Closing
Buenas Practicas
Diseño UX
-
Keep it Simple
- Maximo 3 opciones por pregunta
-
Progressive Disclosure
- Revelar informacion gradualmente
-
Error Recovery
- Siempre ofrecer salida
-
Confirmation
- Confirmar acciones importantes
-
Personalization
- Usar nombre y contexto
-
Timing
- Esperar respuesta antes de continuar
Testing
Probar exhaustivamente:
- Happy path (flujo ideal)
- Edge cases (casos limite)
- Error handling (errores)
- Escalation (escalaciones)
- Re-entry (reingresos)
- Multi-turn (conversaciones largas)
Proximos Pasos
- RAG y Conocimiento - Base de conocimiento
- Flow Builder - Editor visual
- Ejemplos Practicos - Casos de uso