Invia sondaggi per monitorare la soddisfazione degli utenti

Un sondaggio personalizzato in una conversazione di Business Messages.

Per assicurarsi che gli utenti abbiano interazioni soddisfacenti con il tuo agente, Google invia loro dei sondaggi al termine delle conversazioni con l'agente. Se vuoi raccogliere dati con tempistiche diverse, ad esempio alla fine di una conversazione, puoi inviare sondaggi nel contesto di una conversazione. I sondaggi vengono visualizzati nella conversazione e consentono agli utenti di fornire feedback con una serie di opzioni a seconda della domanda.

Le tempistiche dei sondaggi attivati da Google dipendono dalla disponibilità di messaggistica dell'agente:

Disponibilità Tempistiche del sondaggio
Solo bot 30 minuti dopo l'ultimo messaggio
Solo operatore umano 24 ore lavorative dopo l'ultimo messaggio
Bot e operatore umano 24 ore lavorative dopo l'ultimo messaggio

Se nei prossimi 7 giorni ci sono meno di 24 ore lavorative, utilizziamo 24 ore.

Puoi inviare un sondaggio per conversazione ogni 24 ore. Se invii un sondaggio in una conversazione prima di Google, Google non invia un sondaggio a quella conversazione. Se il tuo agente invia più sondaggi nella stessa conversazione entro 24 ore, Business Messages tenta di inviare all'utente solo il primo sondaggio.

La prossima volta che un utente avvia una conversazione con il tuo agente dopo aver completato un sondaggio, l'agente visualizza un saluto. Se un utente non risponde a un sondaggio, il sondaggio scade dopo 7 giorni e l'utente vede un saluto nella conversazione successiva alla scadenza del sondaggio.

Se un utente invia un messaggio non correlato a un sondaggio mentre un sondaggio è attivo nella conversazione, Business Messages annulla il sondaggio e invia il messaggio dell'utente al webhook dell'agente.

Se non invii sondaggi agli utenti, il tuo agente riceve comunque i risultati dei sondaggi di Google al tuo webhook e deve accettarli ed elaborarli di conseguenza.

Domande

I sondaggi possono includere fino a cinque domande, suddivise in tre categorie: obbligatorie, modello e personalizzate. Un sondaggio include sempre la domanda obbligatoria, poi visualizza fino a due domande modello e infine fino a due domande personalizzate.

Domanda obbligatoria

La domanda obbligatoria è localizzata in tutte le impostazioni internazionali supportate da Business Messages. Gli utenti possono rispondere con un Mi piace o un Non mi piace.

La domanda obbligatoria è: "Il servizio di messaggistica è in linea con le esigenze di AGENT_NAME?"

Domande modello

Le domande modello sono domande facoltative definite da Google e localizzate in tutte le impostazioni internazionali supportate da Business Messages. Un sondaggio può includere fino a due domande modello. I formati di risposta dell'utente variano a seconda della domanda.

Le domande modello includono:

  • Come valuti la tua esperienza di messaggistica con AGENT_NAME?
  • Quanto è probabile che tu possa consigliare AGENT_NAME a un amico?
  • La prossima volta che contatterai AGENT_NAME, quanto è probabile che tu scelga di utilizzare la messaggistica?
  • Nel complesso, quanto è stato facile interagire con AGENT_NAME?
  • In che misura sei d'accordo o in disaccordo con la seguente affermazione: AGENT_NAME ha gestito il mio problema in modo semplicissimo.
  • Valuta la tua soddisfazione complessiva circa l'operatore del servizio di assistenza.
  • Grazie a questa sessione di chat hai potuto evitare di chiamare AGENT_NAME?

Per visualizzare un elenco di tutte le domande modello disponibili e ottenere gli ID dei modelli:

  1. Apri la console per sviluppatori di Business Communications e accedi con il tuo Account Google di Business Messages.
  2. Scegli il tuo agente.
  3. Nel menu di navigazione a sinistra, fai clic su Sondaggio.

Domande personalizzate

Un sondaggio può includere fino a due domande personalizzate. Se specifichi una domanda personalizzata, includi le versioni della domanda per ogni impostazione internazionale supportata dal tuo agente. Devi specificare una versione di ogni domanda per l'impostazione internazionale predefinita. Se un utente riceve un sondaggio ma si trova in un'impostazione internazionale per cui non è stata specificata una versione di una domanda personalizzata, la domanda viene visualizzata così come è definita nell'impostazione internazionale predefinita dell'agente.

Le risposte alle domande personalizzate supportano dati di testo e postback separati, in modo simile a risposte suggerite.

Personalizzare un sondaggio

Per personalizzare il sondaggio per un agente:

  1. Apri la console per sviluppatori di Business Communications e accedi con il tuo Account Google di Business Messages.
  2. Scegli il tuo agente.
  3. Nel menu di navigazione a sinistra, fai clic su Sondaggio.
  4. Aggiungi al sondaggio fino a due domande modello disponibili.
  5. Fai clic su Crea una domanda personalizzata per aggiungere domande personalizzate al sondaggio.

Per le opzioni di formattazione e valore, consulta surveyConfig.

Inviare un sondaggio

Sondaggio

Per inviare un sondaggio, esegui il seguente comando. Sostituisci CONVERSATION_ID con l'identificatore della conversazione a cui vuoi inviare il sondaggio e SURVEY_ID con un identificatore univoco per il sondaggio.

cURL

# Copyright 2021 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at

#     https://www.apache.org/licenses/LICENSE-2.0

# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# This code sends a survey to the user:
# Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/surveys?hl=en

# Replace the __CONVERSATION_ID__ with a conversation id that you can send messages to
# Make sure a service account key file exists at ./service_account_key.json

curl -X POST "https://businessmessages.googleapis.com/v1/conversations/__CONVERSATION_ID__/surveys?surveyId=f4bd7576-6c2e-4674-9db4-d697166f63ce" \
-H "Content-Type: application/json" \
-H "User-Agent: curl/business-messages" \
-H "$(oauth2l header --json ./service_account_key.json businessmessages)"

Node.js

/**
 * This code sends a survey to the user:
 * Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/surveys?hl=en
 *
 * This code is based on the https://github.com/google-business-communications/nodejs-businessmessages Node.js
 * Business Messages client library.
 */

/**
 * Edit the values below:
 */
const PATH_TO_SERVICE_ACCOUNT_KEY = './service_account_key.json';
const CONVERSATION_ID = 'EDIT_HERE';

const businessmessages = require('businessmessages');
const uuidv4 = require('uuid').v4;
const {google} = require('googleapis');

// Initialize the Business Messages API
const bmApi = new businessmessages.businessmessages_v1.Businessmessages({});

// Set the scope that we need for the Business Messages API
const scopes = [
  'https://www.googleapis.com/auth/businessmessages',
];

// Set the private key to the service account file
const privatekey = require(PATH_TO_SERVICE_ACCOUNT_KEY);

/**
 * Posts a survey to the Business Messages API.
 *
 * @param {string} conversationId The unique id for this user and agent.
 */
async function sendSurvey(conversationId) {
  const authClient = await initCredentials();

  // Create the payload for creating a new survey
  const apiParams = {
    auth: authClient,
    parent: 'conversations/' + conversationId,
    surveyId: uuidv4(),
    resource: {}
  };

  // Call the message create function using the
  // Business Messages client library
  bmApi.conversations.surveys.create(apiParams,
    {auth: authClient}, (err, response) => {
    console.log(err);
    console.log(response);
  });
}

/**
 * Initializes the Google credentials for calling the
 * Business Messages API.
 */
 async function initCredentials() {
  // configure a JWT auth client
  const authClient = new google.auth.JWT(
    privatekey.client_email,
    null,
    privatekey.private_key,
    scopes,
  );

  return new Promise(function(resolve, reject) {
    // authenticate request
    authClient.authorize(function(err, tokens) {
      if (err) {
        reject(false);
      } else {
        resolve(authClient);
      }
    });
  });
}

sendSurvey(CONVERSATION_ID);

Java

import com.google.api.client.googleapis.services.AbstractGoogleClientRequest;
import com.google.api.client.http.HttpBackOffUnsuccessfulResponseHandler;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.client.util.ExponentialBackOff;
import com.google.api.services.businessmessages.v1.Businessmessages;
import com.google.api.services.businessmessages.v1.model.*;
import java.io.FileInputStream;
import java.util.Arrays;
import java.util.UUID;

class SendSurveySnippet {
  /**
   * Initializes credentials used by the Business Messages API.
   */
  private static Businessmessages.Builder getBusinessMessagesBuilder() {
    Businessmessages.Builder builder = null;
    try {
      GoogleCredential credential = GoogleCredential
            .fromStream(new FileInputStream("PATH_TO_SERVICE_ACCOUNT_KEY"));

      credential = credential.createScoped(Arrays.asList(
            "https://www.googleapis.com/auth/businessmessages"));

      credential.refreshToken();

      HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
      JacksonFactory jsonFactory = JacksonFactory.getDefaultInstance();

      // Create instance of the Business Messages API
      builder = new Businessmessages
        .Builder(httpTransport, jsonFactory, null)
        .setApplicationName("Sample Application");

      // Set the API credentials and endpoint
      builder.setHttpRequestInitializer(credential);
    } catch (Exception e) {
      e.printStackTrace();
    }

    return builder;
  }

  public static void main(String args[]) {
    try {
      String conversationId = "CONVERSATION_ID";

      // Create client library reference
      Businessmessages.Builder builder = getBusinessMessagesBuilder();

      // Create a new survey to send to the user associated with the conversationId
      Businessmessages.Conversations.Surveys.Create request
          = bmBuilder.build().conversations().surveys()
          .create("conversations/" + conversationId,
              new BusinessMessagesSurvey());

      request.setSurveyId(UUID.randomUUID().toString());

      // Setup retries with exponential backoff
      HttpRequest httpRequest =
          ((AbstractGoogleClientRequest) request).buildHttpRequest();

      httpRequest.setUnsuccessfulResponseHandler(new
          HttpBackOffUnsuccessfulResponseHandler(
          new ExponentialBackOff()));

      // Execute request
      httpRequest.execute();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

Python

"""This code sends a survey to the user.

Read more: https://developers.google.com/business-communications/business-messages/guides/how-to/message/surveys?hl=en

This code is based on the https://github.com/google-business-communications/python-businessmessages
Python Business Messages client library.
"""

import uuid

from businessmessages import businessmessages_v1_client as bm_client
from businessmessages.businessmessages_v1_messages import BusinessmessagesConversationsSurveysCreateRequest
from businessmessages.businessmessages_v1_messages import BusinessMessagesSurvey
from oauth2client.service_account import ServiceAccountCredentials

# Edit the values below:
path_to_service_account_key = './service_account_key.json'
conversation_id = 'EDIT_HERE'

credentials = ServiceAccountCredentials.from_json_keyfile_name(
    path_to_service_account_key,
    scopes=['https://www.googleapis.com/auth/businessmessages'])

client = bm_client.BusinessmessagesV1(credentials=credentials)

# Create the survey request
survey_request = BusinessmessagesConversationsSurveysCreateRequest(
    surveyId=str(uuid.uuid4().int),
    parent='conversations/' + conversation_id,
    businessMessagesSurvey=BusinessMessagesSurvey())

# Send the survey
bm_client.BusinessmessagesV1.ConversationsSurveysService(
    client=client).Create(request=survey_request)

Per le opzioni di formattazione e valore, consulta conversations.surveys.

Ricevere le risposte ai sondaggi

Quando un utente risponde a una domanda in un sondaggio, il tuo agente riceve la risposta al suo webhook. Ricevi ed elabora le risposte ai sondaggi nello stesso modo in cui ricevi i messaggi.

Tutte le domande di un sondaggio hanno lo stesso valore surveyResponse.survey. Se il sondaggio include più domande, assicurati che la tua infrastruttura accetti più risposte con lo stesso valore surveyResponse.survey e identifichi le singole domande tramite il campo surveyResponse.surveyQuestionId.

I valori di testo per le risposte ai sondaggi vengono visualizzati in surveyResponse.questionResponseText. Per le domande obbligatorie e modello, Business Messages restituisce una risposta con Mi piace come VERY_SATISFIED e una risposta con Non mi piace come VERY_DISSATISFIED. Se una risposta a una domanda personalizzata include un'emoji, è consigliabile utilizzare surveyResponse.questionResponsePostbackData anziché provare ad analizzare il valore Unicode.

Le risposte ai sondaggi hanno il seguente formato.

{
  "agent": "brands/BRAND_ID/agents/AGENT_ID",
  "sendTime": "SEND_TIME",
  "conversationId": "CONVERSATION_ID",
  "requestId": "REQUEST_ID",
  "surveyResponse": {
    "survey": "conversations/CONVERSATION_ID/surveys/SURVEY_ID",
    "rating": "SURVEY_RATING",
    "createTime": "CREATE_TIME",
    "surveyQuestionId": "QUESTION_ID",
    "questionResponseText": "RESPONSE_TEXT",
    "questionResponsePostbackData": "RESPONSE_POSTBACK_DATA",
    "questionType": "QUESTION_TYPE",
    "questionIndex": QUESTION_INDEX,
    "totalQuestionCount": TOTAL_QUESTION_COUNT,
    "surveyTriggerSource": "TRIGGER_SOURCE"
  }
}

Per le opzioni di formattazione e valore, consulta UserMessage e SurveyResponse.