Guia do usuário: Supervisor Assist para agentes humanos

Com o Supervisor Assist para agentes humanos, os supervisores humanos podem monitorar conversas entre usuários finais e agentes humanos. Você define regras para quando encaminhar uma conversa a um supervisor humano. Em seguida, o Supervisor Assist alerta automaticamente o supervisor humano quando uma conversa corresponde a uma das suas regras.

Para cada turno de usuário final em uma conversa, você vê as pontuações de sentimento e uma transcrição. Suas regras podem usar essas pontuações de sentimento ou o coach de IA para determinar quando o supervisor humano recebe um alerta.

Antes de começar

Para usar o Supervisor Assist, você precisa de um perfil de conversa do Agent Assist e dos seguintes papéis do Identity and Access Management (IAM):

  • dialogflow.virtualAgentMonitoringSupervisor
  • dialogflow.processor

Etapa 1: configurar um perfil de conversa

Um perfil de conversa configura um conjunto de parâmetros que controlam as sugestões feitas a um agente durante uma conversa. As etapas a seguir criam um ConversationProfile com um HumanAgentAssistantConfig objeto. Você também pode realizar essas ações usando o console do Agent Assist se preferir não chamar a API diretamente.

Criar um perfil de conversa

Para criar um perfil de conversa, chame o create método no ConversationProfile recurso. Forneça o ID da base de conhecimento, o ID do documento, o ID do projeto e o ID do modelo. A resposta contém o novo ID do perfil de conversa.

Confira um exemplo 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"
         }
        }
      ]
    }
  }
}

Etapa 2: escolher o sentimento ou o coach de IA

Escolha se quer usar a análise de sentimento, o coach de IA ou ambos para monitorar conversas. Suas regras de escalonamento também refletem essa escolha.

Sentimento

Para analisar o sentimento do usuário final durante uma conversa, adicione a análise de sentimento ao seu perfil de conversa.

Coach de IA

Para analisar conversas com o coach de IA, siga as instruções para criar um gerador de coach de IA. Só é possível criar um gerador de coach de IA por vez para um único perfil de conversa. Você pode adicionar um número ilimitado de instruções ao gerador de coach de IA, e cada instrução precisa incluir pelo menos um título de exibição e uma condição.

Depois de criar um gerador, copie o novo ID e adicione-o ao seu perfil de conversa.

Etapa 3: configurar regras para monitorar conversas

Atualize seu perfil de conversa para ativar e configurar regras de monitoramento para conversas de suporte ao cliente que usam o sentimento ou o coach de IA. Escolha uma das seguintes opções para atualizar seu perfil de conversa com a API:

  • Chame o método update no recurso ConversationProfile.
  • Defina a configuração de monitoramento de interação com o UpdateConversationProfile método. Sua solicitação para definir a configuração de monitoramento de interação precisa ser semelhante ao exemplo a seguir.

    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"
    }
    }

Entre em contato com seu Google Cloud representante para receber mais ajuda.

Exemplos de configurações

Os exemplos a seguir ilustram configurações de perfil de conversa para várias combinações de regras de monitoramento.

Exemplo 1: regra de coach de IA correspondente

    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"
    }
    

Exemplo 2: pontuação de sentimento < -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"
    }
    

Exemplo 3: pontuação de sentimento < -0,01 e regra de coach de IA correspondente

    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"
    }
    

Exemplo 4: regra de coach de IA correspondente ou pontuação de sentimento < -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"
    }
    

Etapa 4: configurar o Supervisor Assist

  1. Crie um tópico do Pub/Sub para receber alertas. O Agent Assist usa esse tópico do Pub/Sub para receber alertas e métricas. Anote o ID do tópico.
  2. Envie o ID do projeto e do tópico do Pub/Sub ao Google para a lista de permissões.

O serviço de monitoramento humano-humano publica os seguintes tipos de eventos:

  • As métricas de sentimento são cálculos de sentimento agregados para todos os turnos de usuários finais em uma conversa.
  • Os eventos de alerta são notificações que contêm detalhes de regras que o Agent Assist gera quando o sentimento viola um limite configurado.

O Supervisor Assist oferece suporte às seguintes configurações padrão para atender a diferentes requisitos de integração para esses dois eventos. Você pode incluir essas configurações na configuração de monitoramento de interação.

  • Modo padrão: os alertas são publicados imediatamente quando uma condição é atendida. As métricas de sentimento são publicadas somente depois que um alerta é iniciado.
  • Modo de monitoramento puro: as métricas de sentimento são publicadas continuamente para cada turno. Os eventos de alerta são ignorados.
  • Comportamento do modo "Publicar tudo": os dois tipos de eventos são sempre publicados incondicionalmente.

Etapa 5a: testar o chat

Siga estas etapas para testar o Supervisor Assist com o simulador de chat.

  1. Acesse o simulador de monitoramento:

    https://agentassist.cloud.google.com/projects/project-id/locations/location-id/human-supervisor
    
  2. Clique em configuraçõesConfigurações e selecione Agentes humanos.

  3. Abra outra guia no navegador e acesse o Simulador de conversa de chat usando seu perfil de conversa.

  4. Inicie a conversa no simulador de conversa e observe que o simulador de monitoramento mostra transcrições e pontuações de sentimento.

Etapa 5b: testar a voz

Siga estas etapas para testar o Supervisor Assist com o simulador de voz.

  1. Acesse o simulador de monitoramento:

    https://agentassist.cloud.google.com/projects/project-id/locations/location-id/human-supervisor
    
  2. Clique em configuraçõesConfigurações e selecione Agentes humanos e Monitorar apenas chamadas telefônicas.

  3. Abra outra guia no navegador e acesse o Simulador de conversa de voz usando seu perfil de conversa.

  4. Clique em chamarMudar para voz.

  5. Insira o número de telefone de um agente.

  6. Use outro telefone com um número diferente para ligar para os novos números mostrados na tela.

Mapas de pontuação

O Supervisor Assist fornece duas pontuações:

  • A pontuação de sentimento por turno é um valor de ponto flutuante discreto de -1 a 1.
  • A pontuação de sentimento até o momento é um valor de ponto flutuante contínuo de -1 a 1.

É possível mapear as pontuações de sentimento contínuas até o momento para uma pontuação personalizada adequada a diferentes unidades de negócios. O exemplo a seguir ilustra uma abordagem de mapeamento.

Exemplo de código JavaScript para mapeamento:

/**
 * 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)

Opcionalmente, otimize o mapeamento usando o código a seguir para determinar automaticamente os limites que maximizam a correlação entre as previsões mapeadas e a pontuação de CX. Depois de realizar essa otimização única nos seus dados, você poderá usar os limites orientados a dados resultantes em vez de configurá-los manualmente.

Notificação de evento do Pub/Sub

As métricas de sentimento e os alertas são publicados em um único tópico do Pub/Sub configurado. Os payloads variam de acordo com o tipo de evento.

Payload de mensagem do Pub/Sub de métricas de sentimento:

{
  "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"
  }
}

Exemplo de payload de mensagem do Pub/Sub:

{"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"
  }
}

Referência da API

AnalyzeContent:

  • Caso de uso: monitora conversas de chat entre um usuário final e um agente humano.
  • Métodos de teste:
    • Simulador do console: use o simulador de chat do console do Agent Assist.
    • Integração da API: envie solicitações HTTP ou RPC diretas (consulte [Exemplo de código]).

StreamingAnalyzeContent

  • Caso de uso: monitora conversas de voz entre um usuário final e um agente humano.
  • Métodos de teste:
    • Simulador do console: use o simulador de voz do console do Agent Assist.
    • Integração da API: envie solicitações HTTP ou RPC diretas (consulte [Exemplo de código]).

ListMessages:

  • Recupera a lista completa de transcrições (turnos de agente e cliente) de uma conversa.
  • Prática recomendada: essa API é particularmente útil para conversas de voz para verificar as transcrições finais corrigidas de cada turno após a conclusão do stream.

ListInteractionMonitoringMetrics: recupera todas as métricas de sentimento calculadas e agregadas para uma conversa específica.

Exemplo de payload de solicitação:

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

Exemplo de payload de resposta:

{
  "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 alertas gerados. Isso pode ser definido para um projeto inteiro ou filtrado para uma conversa específica.

Para consultar todos os alertas em um projeto:

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

**Para consultar alertas de um ID de conversa específico **

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

Opções de filtragem. Os usuários podem aplicar outros critérios de filtro, como o status do alerta:

alert_state=CREATED,alert_state=ACKNOWLEDGED