Diseño de Conversacion

Como diseñar flujos conversacionales efectivos para bots de reclutamiento

disenoconversacionflujodialogonodosintencionesrespuestas

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

ComponenteDescripcion
TRIGGERInicio de conversacion (mensaje entrante, evento, schedule)
SALUDOMensaje de bienvenida personalizado
CLASIFICAR INTENCIONEntender intencion del usuario
NODOS DIALOGOLogica de conversacion (preguntas, respuestas, acciones)
CIERREDespedida 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:

SeccionContenido
CabeceraFLOW BUILDER + boton Save
CanvasDiagrama de nodos conectados
Barra inferior+ Add Node, Test Flow, Export, Import

Flujo ejemplo:

  1. Trigger -> Saludo -> Classify
  2. Classify se bifurca en: FAQ, Screening, Schedule
  3. Todas las ramas convergen en Closing

Buenas Practicas

Diseño UX

  1. Keep it Simple

    • Maximo 3 opciones por pregunta
  2. Progressive Disclosure

    • Revelar informacion gradualmente
  3. Error Recovery

    • Siempre ofrecer salida
  4. Confirmation

    • Confirmar acciones importantes
  5. Personalization

    • Usar nombre y contexto
  6. 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

¿No encontraste lo que buscabas?

Nuestro equipo de soporte está listo para ayudarte.

Contactar Soporte