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 savoir quand transférer une conversation à un superviseur humain. L'assistance pour les responsables est alors automatiquement alertée 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 responsable 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 Identity and Access Management (IAM) suivants.

  • dialogflow.virtualAgentMonitoringSupervisor
  • dialogflow.processor

Étape 1 : Configurez 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 ConversationProfile avec un objet HumanAgentAssistantConfig. Vous pouvez également effectuer ces actions à l'aide de la console Agent Assist si vous préférez ne pas appeler l'API directement.

Créer un profil de conversation

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

Voici un exemple 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 : Choisissez 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 d'escalade 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 un 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 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.

Une fois le générateur créé, copiez son nouvel ID et ajoutez-le à votre profil de conversation.

Étape 3 : Configurez 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 la surveillance des interactions avec la méthode UpdateConversationProfile. Votre demande 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 représentant Google Cloud 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 coaching par 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. L'assistance de l'agent utilise ce sujet Pub/Sub pour recevoir des alertes et des métriques. Notez l'ID de votre thème.
  2. Envoyez l'ID de votre projet et de votre sujet Pub/Sub à Google pour l'ajouter à la liste d'autorisation.

Le service de surveillance des interactions entre personnes 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 des utilisateurs finaux dans une conversation.
  • Les événements d'alerte sont des notifications contenant des détails sur les règles qu'Agent Assist génère lorsque le sentiment dépasse un seuil configuré.

L'assistance du responsable 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 la configuration de la 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. 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ètresParamètres, puis sélectionnez Agents humains.

  3. Ouvrez un nouvel onglet dans votre navigateur et accédez au simulateur de conversation 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

Suivez ces étapes pour tester l'assistance du superviseur avec le simulateur vocal.

  1. Accédez au simulateur de surveillance :

    https://agentassist.cloud.google.com/projects/project-id/locations/location-id/human-supervisor
    
  2. Cliquez sur ParamètresParamètres, 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 AppelPasser à 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 est une valeur à virgule flottante discrète comprise entre -1 et 1.
  • Le score de sentiment ponctuel est une valeur à virgule flottante continue comprise entre -1 et 1.

Vous pouvez mapper les scores de sentiment continus jusqu'à 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 éventuellement 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 qui en résultent au lieu de les configurer manuellement.

Notification d'événement Pub/Sub

Les métriques et les alertes sur le sentiment sont publiées dans un seul sujet Pub/Sub configuré. Les charges utiles diffèrent selon le 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 modification de la charge utile d'un message 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"
  }
}

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 la 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 l'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 la console : utilisez le simulateur vocal de la console Agent Assist.
    • Intégration de l'API : envoyez des requêtes HTTP ou RPC directes (voir l'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. Elle permet de vérifier les transcriptions finales et corrigées de chaque tour de conversation 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 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. Vous pouvez définir le champ d'application sur un projet entier ou filtrer une conversation spécifique.

Pour interroger toutes les alertes d'un projet :

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

**Pour interroger les alertes pour 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, comme l'état des alertes :

alert_state=CREATED,alert_state=ACKNOWLEDGED