Guide de l'utilisateur : Assistance du superviseur pour les agents humains

Grâce à l'assistance du superviseur pour les agents humains, les superviseurs humains peuvent surveiller les conversations entre les utilisateurs finaux et les agents humains. Vous définissez des règles pour déterminer quand une conversation doit être transférée à un superviseur humain. L'assistance du superviseur alerte automatiquement le superviseur humain lorsqu'une conversation correspond à l'une de vos règles.

Pour chaque tour de parole d'un utilisateur final dans une conversation, vous voyez des scores de sentiment et une transcription. Vos règles peuvent utiliser ces scores de sentiment ou le coach IA pour déterminer quand le superviseur humain reçoit une alerte.

Avant de commencer

Pour utiliser l'assistance du superviseur, vous avez besoin d'un profil de conversation Agent Assist et des rôles IAM (Identity and Access Management) suivants.

  • dialogflow.virtualAgentMonitoringSupervisor
  • dialogflow.processor

Étape 1 : Configurer un profil de conversation

Un profil de conversation configure un ensemble de paramètres qui contrôlent les suggestions adressées à un agent au cours d'une conversation. Les étapes suivantes permettent de créer un ConversationProfile avec un HumanAgentAssistantConfig objet. Vous pouvez également effectuer ces actions à l'aide de la console Agent Assist si vous préférez ne pas appeler directement l'API.

Créer un profil de conversation

Pour créer un profil de conversation, appelez la méthode create sur la ConversationProfile ressource. Indiquez l'ID de votre base de connaissances, l'ID du document, l'ID du projet et l'ID du modèle. La réponse contient le nouvel ID de votre profil de conversation.

Voici un exemple en 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"
         }
        }
      ]
    }
  }
}

Étape 2 : Choisir le sentiment ou le coach IA

Choisissez d'utiliser l'analyse des sentiments, le coach IA ou les deux pour surveiller les conversations. Vos règles de transfert reflètent également ce choix.

Sentiment

Pour analyser le sentiment de l'utilisateur final tout au long d'une conversation, ajoutez l'analyse des sentiments à votre profil de conversation.

coach IA

Pour analyser les conversations avec le coach IA, suivez les instructions pour créer un générateur de coach IA. Vous ne pouvez créer qu'un seul générateur de coach IA à la fois pour un seul profil de conversation. Vous pouvez ajouter un nombre illimité d'instructions à votre générateur de coach IA. Chaque instruction doit inclure au moins un titre à afficher et une condition.

Après avoir créé un générateur, copiez son nouvel ID et ajoutez-le à votre profil de conversation.

Étape 3 : Configurer des règles pour surveiller les conversations

Mettez à jour votre profil de conversation pour activer et configurer des règles de surveillance pour vos conversations d'assistance client qui utilisent le sentiment ou le coach IA. Choisissez l'une des options suivantes pour mettre à jour votre profil de conversation avec l'API :

  • Appelez la méthode update sur la ressource ConversationProfile.
  • Définissez la configuration de surveillance des interactions avec la UpdateConversationProfile méthode. Votre requête de configuration de la surveillance des interactions doit ressembler à l'exemple suivant.

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

Contactez votre Google Cloud représentant pour obtenir de l'aide.

Exemples de configurations

Les exemples suivants illustrent les configurations de profil de conversation pour différentes combinaisons de règles de surveillance.

Exemple 1 : Règle de coach IA correspondante

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

Exemple 2 : Score de sentiment < -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"
    }
    

Exemple 3 : Score de sentiment < -0,01 et règle de coach IA correspondante

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

Exemple 4 : Règle de coach IA correspondante ou score de sentiment < -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"
    }
    

Étape 4 : Configurer l'assistance du superviseur

  1. Créez un sujet Pub/Sub pour recevoir des alertes. Agent Assist utilise ce sujet Pub/Sub pour recevoir des alertes et des métriques. Notez l'ID de votre sujet.
  2. Envoyez votre projet et l'ID de sujet Pub/Sub à Google pour les ajouter à la liste d'autorisation.

Le service de surveillance des conversations entre humains publie les types d'événements suivants :

  • Les métriques de sentiment sont des calculs de sentiment agrégés pour tous les tours de parole de l'utilisateur final dans une conversation.
  • Les événements d'alerte sont des notifications contenant des détails de règles qu'Agent Assist génère lorsque le sentiment dépasse un seuil configuré.

L'assistance du superviseur est compatible avec les configurations standards suivantes pour répondre aux différentes exigences d'intégration de ces deux événements. Vous pouvez inclure ces paramètres dans votre configuration de surveillance des interactions.

  • Mode par défaut : les alertes sont publiées immédiatement lorsqu'une condition est remplie. Les métriques de sentiment ne sont publiées qu'après le déclenchement d'une alerte.
  • Mode de surveillance pure : les métriques de sentiment sont publiées en continu pour chaque tour de parole. Les événements d'alerte sont ignorés.
  • Comportement du mode "Tout publier" : les deux types d'événements sont toujours publiés sans condition.

Étape 5a : Tester le chat

Pour tester l'assistance du superviseur avec le simulateur de chat, procédez comme suit :

  1. Accédez au simulateur de surveillance :

    https://agentassist.cloud.google.com/projects/project-id/locations/location-id/human-supervisor
    
  2. Cliquez sur ParamètresSettings , puis sélectionnez Agents humains.

  3. Ouvrez un autre onglet dans votre navigateur et accédez au simulateur de conversation par chat à l'aide de votre profil de conversation.

  4. Démarrez la conversation dans le simulateur de conversation et notez que le simulateur de surveillance affiche les transcriptions et les scores de sentiment.

Étape 5b : Tester la voix

Pour tester l'assistance du superviseur avec le simulateur vocal, procédez comme suit :

  1. Accédez au simulateur de surveillance :

    https://agentassist.cloud.google.com/projects/project-id/locations/location-id/human-supervisor
    
  2. Cliquez sur ParamètresSettings, puis sélectionnez Agents humains et Surveiller uniquement les appels téléphoniques.

  3. Ouvrez un autre onglet dans votre navigateur et accédez au simulateur de conversation vocale à l'aide de votre profil de conversation.

  4. Cliquez sur AppelerSwitch to voice (Passer à la voix).

  5. Saisissez le numéro de téléphone d'un agent.

  6. Utilisez un autre téléphone avec un numéro différent pour appeler les nouveaux numéros affichés à l'écran.

Cartes de scores

L'assistance du superviseur fournit deux scores :

  • Le score de sentiment par tour de parole est une valeur à virgule flottante discrète comprise entre -1 et 1.
  • Le score de sentiment jusqu'à un point donné est une valeur à virgule flottante continue comprise entre -1 et 1.

Vous pouvez mapper les scores de sentiment continus jusqu'à un point donné à un score personnalisé adapté aux différentes unités commerciales. L'exemple suivant illustre une approche de mappage.

Exemple de code JavaScript pour le mappage :

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

Vous pouvez également optimiser le mappage à l'aide du code suivant pour déterminer automatiquement les seuils qui maximisent la corrélation entre les prédictions mappées et le score CX. Une fois cette optimisation ponctuelle effectuée sur vos données, vous pouvez utiliser les limites basées sur les données résultantes au lieu de les configurer manuellement.

Notification d'événement Pub/Sub

Les métriques de sentiment et les alertes sont publiées dans un seul sujet Pub/Sub configuré. Les charges utiles diffèrent en fonction du type d'événement.

Charge utile du message Pub/Sub des métriques de sentiment :

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

Exemple de charge utile du message Pub/Sub modifié :

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

Documentation de référence de l'API

AnalyzeContent:

  • Cas d'utilisation : surveille les conversations par chat entre un utilisateur final et un agent humain.
  • Méthodes de test :
    • Simulateur de console : utilisez le simulateur de chat de la console Agent Assist.
    • Intégration de l'API : envoyez des requêtes HTTP ou RPC directes (voir [Exemple de code]).

StreamingAnalyzeContent

  • Cas d'utilisation : surveille les conversations vocales entre un utilisateur final et un agent humain.
  • Méthodes de test :
    • Simulateur de console : utilisez le simulateur vocal de la console Agent Assist.
    • Intégration de l'API : envoyez des requêtes HTTP ou RPC directes (voir [Exemple de code]).

ListMessages:

  • Récupère la liste complète des transcriptions (tours de parole de l'agent et du client) pour une conversation.
  • Bonne pratique : cette API est particulièrement utile pour les conversations vocales afin de vérifier les transcriptions finales corrigées pour chaque tour de parole une fois le flux terminé.

ListInteractionMonitoringMetrics: récupère toutes les métriques de sentiment calculées et agrégées pour une conversation spécifique.

Exemple de charge utile de la requête :

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

Exemple de charge utile de la réponse :

{
  "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 : récupère les alertes générées. Cette requête peut être limitée à un projet entier ou filtrée pour une conversation spécifique.

Pour interroger toutes les alertes d'un projet :

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

**Pour interroger les alertes d'un ID de conversation spécifique **

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

Options de filtrage. Les utilisateurs peuvent appliquer des critères de filtrage supplémentaires, tels que l'état de l'alerte :

alert_state=CREATED,alert_state=ACKNOWLEDGED