Guía del usuario: Supervisor Assist para agentes humanos

Con la asistencia del supervisor para agentes humanos, los supervisores humanos pueden supervisar las conversaciones entre los usuarios finales y los agentes humanos. Defines reglas para cuándo escalar una conversación a un supervisor humano. Luego, la asistencia del supervisor alerta automáticamente al supervisor humano cuando una conversación coincide con una de tus reglas.

Para cada turno de usuario final en una conversación, verás las puntuaciones de opinión y una transcripción. Tus reglas pueden usar estas puntuaciones de opinión o el coach potenciado por IA para determinar cuándo el supervisor humano recibe una alerta.

Antes de comenzar

Para usar la asistencia del supervisor, necesitas un perfil de conversación de Agent Assist y los siguientes roles de Identity and Access Management (IAM).

  • dialogflow.virtualAgentMonitoringSupervisor
  • dialogflow.processor

Paso 1: Configura un perfil de conversación

Un perfil de conversación configura un conjunto de parámetros que controlan las sugerencias que se le hacen a un agente durante una conversación. En los siguientes pasos, se crea un ConversationProfile con un HumanAgentAssistantConfig objeto. También puedes realizar estas acciones con la consola de Agent Assist si prefieres no llamar a la API directamente.

Crea un perfil de conversación

Para crear un perfil de conversación, llama al create método en el ConversationProfile recurso. Proporciona el ID de la base de conocimiento, el ID del documento, el ID del proyecto y el ID del modelo. La respuesta contiene el ID de tu nuevo perfil de conversación.

Este es un ejemplo de JSON:

{
  "displayName": "smart_compose_assist",
  "humanAgentAssistantConfig": {
    "humanAgentSuggestionConfig": {
      "featureConfigs": [
        {
          "suggestionFeature": {
            "type": "SMART_COMPOSE"
          },
          "queryConfig": {
            "documentQuerySource": {
              "documents": "projects/project-id/knowledgeBases/knowledge-base-id/documents/document-id"
            },
           "maxResults": "1"
          },
         "conversationModelConfig": {
           "model": "projects/project-id/conversationModels/model-id"
         }
        }
      ]
    }
  }
}

Paso 2: Elige la opinión o el coach potenciado por IA

Elige si deseas usar el análisis de sentimiento, el coach potenciado por IA o ambos para supervisar las conversaciones. Tus reglas de escalamiento también reflejan esta elección.

Opinión

Para analizar el sentimiento del usuario final durante una conversación, agrega el análisis de sentimiento a tu perfil de conversación.

Coach potenciado por IA

Para analizar conversaciones con el coach potenciado por IA, sigue las instrucciones para crear un generador de coach potenciado por IA. Solo puedes crear un generador de coach potenciado por IA a la vez para un solo perfil de conversación. Puedes agregar una cantidad ilimitada de instrucciones a tu generador de coach potenciado por IA, y cada instrucción debe incluir al menos un título visible y una condición.

Después de crear un generador, copia el ID del generador nuevo y agrégalo a tu perfil de conversación.

Paso 3: Configura reglas para supervisar conversaciones

Actualiza tu perfil de conversación para habilitar y configurar reglas de supervisión para tus conversaciones de asistencia al cliente que usan el sentimiento o el coach potenciado por IA. Elige una de las siguientes opciones para actualizar tu perfil de conversación con la API:

  • Llama al método update en el recurso ConversationProfile.
  • Configura la supervisión de interacciones con el UpdateConversationProfile método. Tu solicitud para configurar la supervisión de interacciones debería verse como el siguiente ejemplo.

    conversation_profile {
      name: "projects/agent-assist-console-demo/locations/global/conversationProfiles/your_new_conv_profile_id"
      interaction_monitoring_config {
        event_notification_config = {
        notification_config = { # If you want to enable notifications on your custom pub/sub topic, add it here.
        topic = 'ADD_YOUR_CUSTOM_PUBSUB_TOPIC'
            message_format = 'JSON'
          }
      # Optional: Leave both empty for *Default Mode*.
      # Other supported configurations:
      # 1. **Default Mode:** Always publish alert events when they are triggered and publish metric events only when an alert is triggered,
      #   - Metric event: `METRIC_EVENT_PUBLISH_IF_ALERT_TRIGGERED`
      #   - Alert event: `ALERT_EVENT_ALWAYS_PUBLISH`
      # 2. **Pure Monitoring Mode:** Publish all metric events, but never publish alert events.
      #   - Metric event: `METRIC_EVENT_ALWAYS_PUBLISH`
      #   - Alert event: `ALERT_EVENT_NEVER_PUBLISH`
      # 3. **Publish All Events:** Always publish both metric and alert     events.
      #   - Metric event: `METRIC_EVENT_ALWAYS_PUBLISH`
      #   - Alert event: `ALERT_EVENT_ALWAYS_PUBLISH`
      # Note: Avoid setting `metric_event_notification_mode` to `METRIC_EVENT_PUBLISH_IF_ALERT_TRIGGERED` while `alert_event_notification_mode` is `ALERT_EVENT_NEVER_PUBLISH`, as this combination will result in no events being published.
    metric_event_notification_mode = 'ADD'
    alert_event_notification_mode = 'ADD'
        }
        alerting_config {
          # Required.
          rules {
            alert_rule_id: "rule_1"
            description: "rule_1_description"
            trigger_condition {
            ...
            }
      rules {
            alert_rule_id: "rule_2"
            description: "rule_2_description"
            trigger_condition {
            ...
            }
          }
          # Optional Tool config to retrieve customer name. If not    required, skip setting the metadata_config
          metadata_config = {
            tool_configs = [
        {
          display_name = 'Customer Name'
          toolset_tool = {
            toolset = 'ADD_CUSTOM_TOOLSET'
            operation_id = 'load_profile'
          }
          response_key_path = 'sessionInfo.customerProfile.customerName'
        },
            ]
          }
    
        }
      }
    }
    update_mask {
      paths: "interaction_monitoring_config"
    }
    }

Comunícate con tu Google Cloud representante para obtener ayuda adicional.

Configuración de ejemplo

En los siguientes ejemplos, se ilustran las configuraciones de perfiles de conversación para una variedad de combinaciones de reglas de supervisión.

Ejemplo 1: Coincidencia con la regla del coach potenciado por IA

    conversation_profile     {
      name: "projects/agent-assist-console-demo/locations/global/conversationProfiles/your_new_conv_profile_id"
      interaction_monitoring_config {
        event_notification_config = {
            ...
        }
        alerting_config {
          rules {
            alert_rule_id: "agent coaching alert trigger rule(s) matched"
            description: "agent coaching alert trigger rule(s) matched"
            trigger_condition {
              metric_condition {
                metric_type: AGENT_COACHING_INSTRUCTIONS
                agent_coaching_config {
                  generator_name:    "projects/agent-assist-console-demo/locations/global/generators/newly_created_generator_id"
                }
                display_name: "agent coaching alert trigger rule(s) matched"
              }
            }
          }
          # Optional Tool config to retrieve customer name. If not required, skip setting the metadata_config.
          metadata_config = {
            ...
          }
        }
      }
    }
    update_mask {
      paths: "interaction_monitoring_config"
    }
    

Ejemplo 2: Puntuación de opinión < -0.01

    conversation_profile     {
      name: "projects/agent-assist-console-demo/locations/global/conversationProfiles/your_new_conv_profile_id"
      interaction_monitoring_config {
        event_notification_config = {
            ...
        }
        alerting_config {
          rules {
            alert_rule_id: "customer sentiment negative"
            description: "negative sentiment"
            trigger_condition {
              metric_condition {
                metric_type: SENTIMENT
                value_range {
                  max_threshold: -0.01
                }
                display_name: "negative sentiment"
              }
            }
          }
          # Optional Tool config to retrieve customer name. If not required, skip setting the metadata_config.
          metadata_config = {
            ...
          }
        }
      }
    }
    update_mask {
      paths: "interaction_monitoring_config"
    }
    

Ejemplo 3: Puntuación de opinión < -0.01 y coincidencia con la regla del coach potenciado por IA

    conversation_profile     {
      name: "projects/agent-assist-console-demo/locations/global/conversationProfiles/your_new_conv_profile_id"
      interaction_monitoring_config {
        event_notification_config = {
            ...
        }
        alerting_config {
          # Required.
          rules {
            alert_rule_id: "sentiment is negative and agent coaching alert trigger rule(s) matched"
            description: "agent coaching alert trigger rule(s) matched and customer is unhappy"
            trigger_condition {
              and_condition {
                alert_conditions {
                  metric_condition {
                    metric_type: SENTIMENT_SCORE
                    value_range {
                      max_threshold: -0.01
                    }
                    display_name: "negative sentiment and agent coaching alert trigger rule(s) matched"
                  }
                }
                alert_conditions {
                  metric_condition {
                    metric_type: AGENT_COACHING_INSTRUCTIONS
                    agent_coaching_config {
                      generator_name: "projects/agent-assist-console-demo/locations/global/generators/newly_created_generator_id"
                    }
                    display_name: "negative sentiment and agent coaching alert trigger rule(s) matched"
                  }
                }
              }
            }
          }
          # Optional Tool config to retrieve customer name. If not required, skip setting the metadata_config.
          metadata_config = {
            ...
          }
        }
      }
    }
    update_mask {
      paths: "interaction_monitoring_config"
    }
    

Ejemplo 4: Coincidencia con la regla del coach potenciado por IA o puntuación de opinión < -0.01

    conversation_profile     {
      name: "projects/agent-assist-console-demo/locations/global/conversationProfiles/your_new_conv_profile_id"
      interaction_monitoring_config {
        event_notification_config = {
            ...
        }
        alerting_config {
          rules {
            alert_rule_id: "agent coaching alert trigger rule(s) matched"
            description: "agent coaching alert trigger rule(s) matched"
            trigger_condition {
              metric_condition {
                metric_type: AGENT_COACHING_INSTRUCTIONS
                agent_coaching_config {
                  generator_name:    "projects/agent-assist-console-demo/locations/global/generators/newly_created_generator_id"
                }
                display_name: "agent coaching alert trigger rule(s) matched"
              }
            }
          }
          rules {
            alert_rule_id: "customer sentiment negative"
            description: "negative sentiment"
            trigger_condition {
              metric_condition {
                metric_type: SENTIMENT
                value_range {
                  max_threshold: -0.01
                }
                display_name: "negative sentiment"
              }
            }
          }
          # Optional Tool config to retrieve customer name. If not required, skip setting the metadata_config.
          metadata_config = {
            ...
          }
        }
      }
    }
    update_mask {
      paths: "interaction_monitoring_config"
    }
    

Paso 4: Configura la asistencia del supervisor

  1. Crea un tema de Pub/Sub para recibir alertas. Agent Assist usa este tema de Pub/Sub para recibir alertas y métricas. Toma nota del ID del tema.
  2. Envía tu proyecto y el ID del tema de Pub/Sub a Google para que se incluyan en la lista de entidades permitidas.

El servicio de supervisión de persona a persona publica los siguientes tipos de eventos:

  • Las métricas de opinión son cálculos de opinión agregados para todos los turnos de usuarios finales en una conversación.
  • Los eventos de alerta son notificaciones que contienen detalles de las reglas que genera Agent Assist cuando la opinión supera un umbral configurado.

La asistencia del supervisor admite las siguientes configuraciones estándar para abordar diferentes requisitos de integración para estos dos eventos. Puedes incluir estos parámetros de configuración en la configuración de supervisión de interacciones.

  • Modo predeterminado: Las alertas se publican de inmediato cuando se cumple una condición. Las métricas de opinión se publican solo después de que se inicia una alerta.
  • Modo de supervisión pura: Las métricas de opinión se publican de forma continua para cada turno. Se ignoran los eventos de alerta.
  • Comportamiento del modo Publicar todo: Ambos tipos de eventos siempre se publican de forma incondicional.

Paso 5a: Prueba el chat

Sigue estos pasos para probar la asistencia del supervisor con el simulador de chat.

  1. Navega al simulador de supervisión:

    https://agentassist.cloud.google.com/projects/project-id/locations/location-id/human-supervisor
    
  2. Haz clic en configuraciónConfiguración y selecciona Agentes humanos.

  3. Abre otra pestaña en tu navegador y navega al simulador de conversaciones de chat con tu perfil de conversación.

  4. Inicia la conversación en el simulador de conversaciones y observa que el simulador de supervisión muestra transcripciones y puntuaciones de opinión.

Paso 5b: Prueba la voz

Sigue estos pasos para probar la asistencia del supervisor con el simulador de voz.

  1. Navega al simulador de supervisión:

    https://agentassist.cloud.google.com/projects/project-id/locations/location-id/human-supervisor
    
  2. Haz clic en configuraciónConfiguración y, luego, selecciona Agentes humanos y Solo supervisar llamadas telefónicas.

  3. Abre otra pestaña en tu navegador y navega al simulador de conversaciones de voz con tu perfil de conversación.

  4. Haz clic en llamarCambiar a voz.

  5. Ingresa el número de teléfono de un agente.

  6. Usa otro teléfono con un número diferente para llamar a los números nuevos que aparecen en la pantalla.

Mapas de puntuación

La asistencia del supervisor proporciona dos puntuaciones:

  • La puntuación de opinión por turno es un valor de punto flotante discreto de -1 a 1.
  • La puntuación de opinión hasta el momento es un valor de punto flotante continuo de -1 a 1.

Puedes asignar las puntuaciones de sentimiento continuas hasta el momento a una puntuación personalizada que sea adecuada para diferentes unidades de negocios. En el siguiente ejemplo, se ilustra un enfoque de asignación.

Ejemplo de código JavaScript para la asignación:

/**
 * Maps a score to a bucket index (1-10) based on 11 boundary points.
 * * @param {number} score - The input score (between -1 and 1)
 * @param {number[]} boundaries - An array of exactly 11 numbers sorted in ascending order.
 * @return{number} The bucket index (1 to 10).
 */
function getBucketIndex(score, boundaries) {
  // 1. Validation: Ensure we have exactly 11 boundary points
  if (!Array.isArray(boundaries) || boundaries.length !== 11) {
    throw new Error("Boundaries must be an array of exactly 11 points.");
  }

  // 2. Validate Input Score Range 
  if (typeof score !== 'number' || score < -1 || score > 1) {
    throw new Error(`Input score ${score} is out of bounds. Must be between -1 and 1.`)
  }

  // 3. Iterate through boundaries to find the slot
  // We start checking from index 1 (the first upper bound)
  for (let i = 1; i < boundaries.length; i++) {
    // If the score is strictly less than the current boundary,
    // it belongs to the bucket corresponding to this index.
    if (score <= boundaries[i]) {
      return i;
    }
  }

  // Fallback (should be covered by step 2 validation, but ensures integer return)
  return -1;
}


// --- Example Usage ---

// Create 11 boundary points from -1 to 1
// [-1.0, -0.8, -0.6, -0.4, -0.2, 0.0, 0.2, 0.4, 0.6, 0.8, 1.0]
const boundaries = [];
for (let i = 0; i <= 10; i++) {
  // Creating points: -1 + (i * 0.2)
  boundaries.push(parseFloat((-1 + (i * 0.2)).toFixed(1))); 
}

console.log("Boundaries:", boundaries);

// Test Cases
console.log(`Score -0.9 maps to Bucket: ${getBucketIndex(-0.9, boundaries)}`); // Expected: 1
console.log(`Score -0.8 maps to Bucket: ${getBucketIndex(-0.8, boundaries)}`); // Expected: 2 (Inclusive lower)
console.log(`Score 0.0 maps to Bucket: ${getBucketIndex(0.0, boundaries)}`);   // Expected: 6
console.log(`Score 0.95 maps to Bucket: ${getBucketIndex(0.95, boundaries)}`); // Expected: 10
console.log(`Score 1.0 maps to Bucket: ${getBucketIndex(1.0, boundaries)}`);   // Expected: 10 (Inclusive upper)

De manera opcional, optimiza la asignación con el siguiente código para determinar automáticamente los umbrales que maximizan la correlación entre las predicciones asignadas y la puntuación de CX. Después de realizar esta optimización única en tus datos, puedes usar los límites basados en datos resultantes en lugar de configurarlos de forma manual.

Notificación de eventos de Pub/Sub

Tanto las métricas de opinión como las alertas se publican en un solo tema de Pub/Sub configurado. Las cargas útiles difieren según el tipo de evento.

Carga útil del mensaje de Pub/Sub de métricas de opinión:

{
  "data": "{\"metric\":{\"metricType\":\"SENTIMENT_SCORE\",\"value\":{\"createTime\":\"2024-01-01T00:00:00.000Z\",\"sentiment\":{\"score\":0.5,\"magnitude\":0.5},\"advancedValues\":{\"exponentialMovingAverageValue\":0.5}},\"conversation\":\"projects/your-project-id/locations/global/conversations/conversation_id\",\"message\":{\"name\":\"projects/your-project-id/locations/global/conversations/conversation_id/messages/message_id\",\"content\":\"ok\",\"languageCode\":\"en-US\",\"participant\":\"projects/your-project-id/locations/global/conversations/conversation_id/participants/participant_id\",\"participantRole\":\"END_USER\",\"sendTime\":\"2024-01-01T00:00:00.000Z\"}}}",
  "attributes": {
    "conversation_id": "conversation_id"
  }
}

Ejemplo de carga útil del mensaje de Pub/Sub de alteración:

{"data": "{\"alert\":{\"name\":\"projects/project_id/locations/location_id/interactionMonitoringAlerts/alert_id\",\"conversation\":\"projects/project_id/locations/location_id/conversations/conversation_id\",\"alertState\":\"CREATED\",\"alertMetadata\":{\"alertTriggerRules\":[{\"alertRuleId\":\"negative-sentiment\",\"description\":\"dummy_description\",\"Strong negative sentiment detected in last 30 seconds\":[{\"metricType\":\"SENTIMENT_SCORE\",\"values\":[{\"createTime\":\"2024-01-01T00:00:00.000Z\",\"sentiment\":{\"score\":0.0,\"magnitude\":0.0}}]}]}],\"channelType\":\"CHAT\"},\"createTime\":\"2024-01-01T00:00:00.000Z\"}}",
  "attributes": {
    "conversation_id": "conversation_id"
  }
}

Referencia de la API

AnalyzeContent:

  • Caso de uso: Supervisa las conversaciones de chat entre un usuario final y un agente humano.
  • Métodos de prueba:
    • Simulador de la consola: Usa el simulador de chat de la consola de Agent Assist.
    • Integración de la API: Envía solicitudes HTTP o RPC directas (consulta el [código de ejemplo]).

StreamingAnalyzeContent

  • Caso de uso: Supervisa las conversaciones de voz entre un usuario final y un agente humano.
  • Métodos de prueba:
    • Simulador de la consola: Usa el simulador de voz de la consola de Agent Assist.
    • Integración de la API: Envía solicitudes HTTP o RPC directas (consulta el [código de ejemplo]).

ListMessages:

  • Recupera la lista completa de transcripciones (turnos del agente y del cliente) de una conversación.
  • Práctica recomendada: Esta API es particularmente útil para las conversaciones de voz para verificar las transcripciones finales y corregidas de cada turno después de que finaliza la transmisión.

ListInteractionMonitoringMetrics: Recupera todas las métricas de opinión calculadas y agregadas para una conversación específica.

Ejemplo de carga útil de la solicitud:

{
  "parent": "projects/{project-id}/locations/{location-id}",
  "conversation":
"projects/{project-id}/locations/{location-id}/conversations/{conversation-id}"
}

Ejemplo de carga útil de la respuesta:

{
  "interactionMonitoringMetrics": [{
    "metricType": "SENTIMENT_SCORE",
    "values": {
      "createTime": "2025-12-01T22:20:49.925Z",
      "sentiment": {
        "score": -1.0,
        "magnitude": 1.0
      },
      "advancedValues": {
        "movingAverageValue": -0.4994999999762513
      }
    }, {
      "createTime": "2025-12-01T22:20:21.027Z",
      "sentiment": {
        "score": 0.001,
        "magnitude": 0.001
      },
      "advancedValues": {
        "movingAverageValue": -0.4994999999762513
      }
    },
      "advancedValues": {
      }
    }]
}

ListInteractionMonitoringAlert: Recupera las alertas generadas. Esto se puede limitar a un proyecto completo o filtrar a una conversación específica.

Para consultar todas las alertas de un proyecto, haz lo siguiente:

{
  "parent": "projects/{project-id}/locations/{location-id}"
}

**Para consultar alertas de un ID de conversación específico, haz lo siguiente:**

{
  "parent": "projects/{project-id}/locations/{location-id}",
  "filter": "context_id=projects/{project-id}/locations/{location-id}/conversations/{conversation-id}"
}

Opciones de filtros. Los usuarios pueden aplicar criterios de filtro adicionales, como el estado de la alerta:

alert_state=CREATED,alert_state=ACKNOWLEDGED