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.virtualAgentMonitoringSupervisordialogflow.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
updateno recursoConversationProfile. Defina a configuração de monitoramento de interação com o
UpdateConversationProfilemé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
- 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.
- 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.
Acesse o simulador de monitoramento:
https://agentassist.cloud.google.com/projects/project-id/locations/location-id/human-supervisor
Clique em configuraçõesConfigurações e selecione Agentes humanos.
Abra outra guia no navegador e acesse o Simulador de conversa de chat usando seu perfil de conversa.
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.
Acesse o simulador de monitoramento:
https://agentassist.cloud.google.com/projects/project-id/locations/location-id/human-supervisor
Clique em configuraçõesConfigurações e selecione Agentes humanos e Monitorar apenas chamadas telefônicas.
Abra outra guia no navegador e acesse o Simulador de conversa de voz usando seu perfil de conversa.
Clique em chamarMudar para voz.
Insira o número de telefone de um agente.
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
- 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]).
- 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]).
- 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