Mensajes de Agente

Atribucion de mensajes, indicadores de escritura y confirmacion de lectura para agentes

mensajesagentetypingescrituralecturaatribucionwebsockettiempo real

Mensajes de Agente

Los agentes pueden enviar mensajes a candidatos con atribucion visual, indicadores de escritura y confirmaciones de lectura en tiempo real.

Atribucion de Mensajes

Identificacion Visual

Cuando un agente envia un mensaje, se muestra con un icono de robot para diferenciarlo de mensajes humanos.

TIPOS DE MENSAJES

OrigenIconoColorIdentificador
ChatbotRobotRosa (#eb2f96)channel="chatbot"
Agente WorkflowRobotMorado (#722ed1)senderAgentId presente
Reclutador HumanoAvatarAzulSin senderAgentId
CandidatoAvatarGrisdirection="inbound"

Parametros de Mensaje

Cuando un agente envia un mensaje, se incluyen estos campos:

{
  "content": "Hola! Soy tu asistente virtual.",
  "channel": "platform",
  "direction": "outbound",
  "senderAgentId": 5,        // ID del agente
  "senderName": "Maria"       // Nombre del agente para mostrar
}

Vista del Candidato

El candidato ve en su inbox:

┌─────────────────────────────────────┐
│ [Robot] Maria                       │
│ Hola! Soy tu asistente virtual.     │
│                          10:30 AM ✓✓│
└─────────────────────────────────────┘

Vista del Reclutador

El reclutador ve el mismo mensaje con contexto adicional:

┌─────────────────────────────────────┐
│ [Robot] Agente: Maria (ID: 5)       │
│ Hola! Soy tu asistente virtual.     │
│                          10:30 AM   │
│ Ejecucion #123                      │
└─────────────────────────────────────┘

Indicador de Escritura

Comportamiento

Cuando un agente esta procesando y a punto de enviar un mensaje:

  1. Se emite evento "agent:typing" con isTyping=true
  2. UI muestra "Maria escribiendo..."
  3. Agente procesa y envia mensaje
  4. Se emite evento "agent:typing" con isTyping=false
  5. UI oculta indicador

Destinatarios del Indicador

El indicador se emite a todos los participantes relevantes:

DestinatarioEventoUso
Owner (Reclutador)agent:typingVe actividad del agente
Candidatoagent:typingVe que alguien responde
Sesion Chatbotagent:typingWidget muestra indicador

Estructura del Evento

{
  "event": "agent:typing",
  "data": {
    "threadId": 123,
    "agentName": "Maria",
    "isTyping": true
  }
}

UI del Indicador

┌─────────────────────────────────────┐
│                                     │
│ Maria escribiendo...                │
│ ● ● ●                               │
│                                     │
└─────────────────────────────────────┘

Confirmacion de Lectura

Comportamiento Automatico

Cuando un agente responde a un mensaje del candidato:

  1. Agente recibe el mensaje entrante
  2. Agente procesa y genera respuesta
  3. Antes de enviar: marca mensajes entrantes como leidos
  4. Emite evento "message:statusChanged" al candidato
  5. Envia respuesta

Estados de Mensaje

EstadoIconoDescripcion
sentMensaje enviado al servidor
delivered✓✓Mensaje entregado (WebSocket activo)
read✓✓ (azul)Mensaje leido por el destinatario

Evento de Cambio de Estado

{
  "event": "message:statusChanged",
  "data": {
    "messageId": 456,
    "threadId": 123,
    "status": "read",
    "readAt": "2024-01-11T10:30:00Z"
  }
}

Vista del Candidato

Antes de que el agente lea:

Mis documentos estan listos ✓✓

Despues de que el agente lea:

Mis documentos estan listos ✓✓ (azul)
                        Leido 10:30

Flujo Completo de Interaccion

Secuencia de Eventos

1. Candidato envia mensaje
   → message:new emitido a owner
   → Agente detecta mensaje entrante

2. Agente comienza a procesar
   → agent:typing (isTyping=true) a candidato
   → UI muestra "Maria escribiendo..."

3. Agente marca mensaje como leido
   → message:statusChanged (status=read) a candidato
   → UI actualiza checks a azul

4. Agente envia respuesta
   → message:new emitido a candidato
   → agent:typing (isTyping=false) a candidato
   → UI oculta indicador y muestra mensaje

Diagrama de Tiempo

Candidato          Servidor           Agente
    │                  │                  │
    │──── mensaje ────▶│                  │
    │                  │──── detecta ────▶│
    │                  │                  │
    │◀─ typing:true ───│◀─── procesa ─────│
    │                  │                  │
    │◀── read:true ────│◀─── lee ─────────│
    │                  │                  │
    │◀── mensaje ──────│◀─── responde ────│
    │◀─ typing:false ──│                  │
    │                  │                  │

Configuracion

Habilitar Indicadores en Agente

En la accion send_message:

{
  "actionType": "send_message",
  "parameters": {
    "message": "{{response}}",
    "showTypingIndicator": true,
    "markAsRead": true
  }
}

Personalizar Nombre del Agente

En la configuracion del agente:

{
  "name": "Maria",
  "displayName": "Maria - Asistente de RRHH",
  "configuration": {
    "personality": "friendly",
    "showTypingDelay": 500
  }
}

WebSocket Events Reference

Eventos Emitidos

EventoPayloadDestinatarios
message:new{id, content, channel, senderAgentId, ...}Owner, Candidato
agent:typing{threadId, agentName, isTyping}Owner, Candidato, Chatbot Session
message:statusChanged{messageId, threadId, status, readAt}Candidato
thread:updated{threadId, lastMessage, unreadCount}Owner

Suscripcion en Frontend

// Escuchar typing
socket.on('agent:typing', (data) => {
  if (data.isTyping) {
    showTypingIndicator(data.threadId, data.agentName);
  } else {
    hideTypingIndicator(data.threadId);
  }
});

// Escuchar cambio de estado
socket.on('message:statusChanged', (data) => {
  updateMessageStatus(data.messageId, data.status, data.readAt);
});

Debugging

Logs Relevantes

[InboxService] Emitting agent typing indicator: threadId=123, agentName=Maria, isTyping=true
[MessageService] Agent marked 3 inbound messages as read
[WebSocketService] Emitting message:statusChanged to user:5
[InboxService] Emitting message:new to candidate 5 for outbound message
[InboxService] Emitting agent typing indicator: threadId=123, agentName=Maria, isTyping=false

Problemas Comunes

ProblemaCausaSolucion
No muestra robotsenderAgentId no incluidoVerificar WebSocket emission
Typing no apareceCandidato no suscritoVerificar conexion WebSocket
Read no actualizaEvento no emitidoVerificar markAsRead en MessageService
Indicador no desapareceisTyping=false no enviadoVerificar finally block

Proximos Pasos

¿No encontraste lo que buscabas?

Nuestro equipo de soporte está listo para ayudarte.

Contactar Soporte