Con l'assistenza del supervisore per gli agenti umani, i supervisori umani possono monitorare le conversazioni tra gli utenti finali e gli agenti umani. Definisci le regole per quando riassegnare una conversazione a un supervisore umano. A questo punto, l'assistenza del supervisore avvisa automaticamente il supervisore umano quando una conversazione corrisponde a una delle tue regole.
Per ogni intervento dell'utente finale in una conversazione, vengono visualizzati i punteggi del sentiment e una trascrizione. Le regole possono utilizzare questi punteggi del sentiment o il Coach AI per determinare quando il supervisore umano riceve un avviso.
Prima di iniziare
Per utilizzare l'assistenza supervisore, devi disporre di un profilo conversazionale di Agent Assist e dei seguenti ruoli Identity and Access Management (IAM).
dialogflow.virtualAgentMonitoringSupervisordialogflow.processor
Passaggio 1: configura un profilo di conversazione
Un profilo di conversazione configura un insieme di parametri che controllano i
suggerimenti forniti a un agente durante una conversazione. I seguenti passaggi creano un
ConversationProfile con un
HumanAgentAssistantConfig
oggetto. Puoi anche eseguire queste azioni utilizzando la
console Agent Assist se preferisci non chiamare direttamente l'API.
Creare un profilo di conversazione
Per creare un profilo di conversazione, chiama il metodo create sulla risorsa
ConversationProfile. Fornisci l'ID knowledge base, l'ID documento, l'ID progetto e l'ID modello. La risposta contiene il nuovo ID del profilo conversazione.
Di seguito è riportato un esempio di 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"
}
}
]
}
}
}
Passaggio 2: scegli il sentimento o il coach AI
Scegli se utilizzare l'analisi del sentiment, il coach AI o entrambi per monitorare le conversazioni. Anche le regole di riassegnazione riflettono questa scelta.
Sentiment
Per analizzare il sentiment dell'utente finale durante una conversazione, aggiungi l'analisi del sentiment al profilo della conversazione.
coach AI
Per analizzare le conversazioni con il coach AI, segui le istruzioni per creare un generatore di coach AI. Puoi creare un solo generatore di coach AI alla volta per un singolo profilo conversazione. Puoi aggiungere un numero illimitato di istruzioni al generatore di coach AI e ogni istruzione deve includere almeno un titolo visualizzato e una condizione.
Dopo aver creato un generatore, copia il nuovo ID generatore e aggiungilo al tuo profilo conversazionale.
Passaggio 3: configura le regole per monitorare le conversazioni
Aggiorna il profilo di conversazione per attivare e configurare le regole di monitoraggio per le conversazioni di assistenza clienti che utilizzano il sentiment o il coach AI. Scegli una delle seguenti opzioni per aggiornare il profilo della conversazione con l'API:
- Chiama il metodo
updatesulla risorsaConversationProfile. Imposta la configurazione del monitoraggio delle interazioni con il metodo
UpdateConversationProfile. La richiesta di impostazione della configurazione del monitoraggio delle interazioni dovrebbe essere simile all'esempio seguente.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" } }
Contatta il tuo rappresentante di Google Cloud per ulteriore assistenza.
Configurazioni di esempio
I seguenti esempi illustrano le configurazioni dei profili di conversazione per una serie di combinazioni di regole di monitoraggio.
Esempio 1: regola del coach AI corrispondente
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"
}
Esempio 2: punteggio di 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"
}
Esempio 3: Punteggio del sentiment < -0,01 e regola del coach AI corrispondente
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"
}
Esempio 4: Regola del coach AI corrispondente o Punteggio del 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"
}
Passaggio 4: configura l'assistenza supervisore
- Crea un argomento Pub/Sub per ricevere avvisi. Agent Assist utilizza questo argomento Pub/Sub per ricevere avvisi e metriche. Prendi nota dell'ID argomento.
- Invia a Google l'ID progetto e l'ID argomento Pub/Sub per l'inserimento nella lista consentita.
Il servizio di monitoraggio da persona a persona pubblica i seguenti tipi di eventi:
- Le metriche del sentiment sono calcoli aggregati del sentiment per tutti i turni dell'utente finale in una conversazione.
- Gli eventi di avviso sono notifiche contenenti i dettagli delle regole che Agent Assist genera quando il sentiment supera una soglia configurata.
Supervisor Assist supporta le seguenti configurazioni standard per soddisfare diversi requisiti di integrazione per questi due eventi. Puoi includere queste impostazioni nella configurazione del monitoraggio delle interazioni.
- Modalità predefinita: gli avvisi vengono pubblicati immediatamente quando una condizione è soddisfatta. Le metriche sul sentiment vengono pubblicate solo dopo l'avvio di un avviso.
- Modalità di monitoraggio puro: le metriche del sentiment vengono pubblicate continuamente per ogni svolta. Gli eventi di avviso vengono ignorati.
- Comportamento della modalità Pubblica tutto: entrambi i tipi di eventi vengono sempre pubblicati in modo incondizionato.
Passaggio 5a: prova la chat
Segui questi passaggi per testare l'assistenza del supervisore con il simulatore di chat.
Vai al simulatore di monitoraggio:
https://agentassist.cloud.google.com/projects/project-id/locations/location-id/human-supervisor
Fai clic su ImpostazioniImpostazioni e seleziona Agenti umani.
Apri un'altra scheda del browser e vai al simulatore di conversazioni di Chat utilizzando il tuo profilo conversazione.
Avvia la conversazione nel simulatore di conversazioni e nota che il simulatore di monitoraggio mostra le trascrizioni e i punteggi del sentiment.
Passaggio 5b: prova la voce
Segui questi passaggi per testare l'assistenza del supervisore con il simulatore vocale.
Vai al simulatore di monitoraggio:
https://agentassist.cloud.google.com/projects/project-id/locations/location-id/human-supervisor
Fai clic su ImpostazioniImpostazioni, quindi seleziona Operatori umani e Monitora solo le chiamate telefoniche.
Apri un'altra scheda del browser e vai al simulatore di conversazioni vocali utilizzando il tuo profilo di conversazione.
Fai clic su ChiamaPassa alla voce.
Inserisci il numero di telefono di un agente.
Utilizza un altro smartphone con un numero diverso per chiamare i nuovi numeri visualizzati sullo schermo.
Mappe dei punteggi
L'assistenza del supervisore fornisce due punteggi:
- Il punteggio del sentiment per turno è un valore in punti in virgola mobile discreto compreso tra -1 e 1.
- Il punteggio del sentiment aggiornato è un valore di rappresentazione in virgola mobile continuo compreso tra -1 e 1.
Puoi mappare i punteggi del sentiment continui fino al punto in questione a un punteggio personalizzato appropriato per le diverse unità aziendali. L'esempio seguente illustra un approccio di mappatura.
Esempio di codice JavaScript per la mappatura:
/**
* 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)
Se vuoi, puoi ottimizzare la mappatura utilizzando il seguente codice per determinare automaticamente le soglie che massimizzano la correlazione tra le previsioni mappate e il punteggio CX. Dopo aver eseguito questa ottimizzazione una tantum sui dati, puoi utilizzare i limiti basati sui dati risultanti anziché configurarli manualmente.
Notifica di un evento Pub/Sub
Sia le metriche del sentiment sia gli avvisi vengono pubblicati in un unico argomento Pub/Sub configurato. I payload variano in base al tipo di evento.
Payload del messaggio Pub/Sub delle metriche di analisi del 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"
}
}
Esempio di payload del messaggio Pub/Sub modificato:
{"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"
}
}
Riferimento API
- Caso d'uso: monitora le conversazioni di chat tra un utente finale e un agente umano.
- Metodi di test:
- Simulatore della console: utilizza il simulatore di chat della console di Agent Assist.
- Integrazione API: invia richieste HTTP o RPC dirette (vedi [Codice di esempio]).
- Caso d'uso: monitora le conversazioni vocali tra un utente finale e un agente umano.
- Metodi di test:
- Simulatore della console: utilizza il simulatore vocale della console Agent Assist.
- Integrazione API: invia richieste HTTP o RPC dirette (vedi [Esempio di codice]).
- Recupera l'elenco completo delle trascrizioni (sia dell'agente sia del cliente) per una conversazione.
- Best practice: questa API è particolarmente utile per le conversazioni vocali per verificare le trascrizioni finali corrette per ogni turno dopo la conclusione dello stream.
ListInteractionMonitoringMetrics: recupera tutte le metriche sul sentiment calcolate e aggregate per una conversazione specifica.
Esempio di payload della richiesta:
{
"parent": "projects/{project-id}/locations/{location-id}",
"conversation":
"projects/{project-id}/locations/{location-id}/conversations/{conversation-id}"
}
Esempio di payload di risposta:
{
"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 gli avvisi generati. Può essere limitato all'intero progetto o filtrato in base a una conversazione specifica.
Per eseguire una query su tutti gli avvisi in un progetto:
{
"parent": "projects/{project-id}/locations/{location-id}"
}
**Per eseguire query sugli avvisi per un ID conversazione specifico **
{
"parent": "projects/{project-id}/locations/{location-id}",
"filter": "context_id=projects/{project-id}/locations/{location-id}/conversations/{conversation-id}"
}
Opzioni di filtro. Gli utenti possono applicare criteri di filtro aggiuntivi, ad esempio lo stato dell'avviso:
alert_state=CREATED,alert_state=ACKNOWLEDGED