שליחת סקרים כדי לבדוק את שביעות הרצון של המשתמשים

סקר מותאם אישית בשיחה ב-Business Messages.

כדי לוודא שהאינטראקציות עם הנציג שלך מתאימות למשתמשים, Google שולח סקרים למשתמשים אחרי שהם מסיימים את השיחות עם הנציג שלך. אם המיקום שרוצים לאסוף נתונים בתזמון שונה, כמו שיחה, תוכלו לשלוח סקרים בהקשר שיחה. הסקרים מוצגים בשיחה ומאפשרים למשתמשים לספק משוב עם מגוון אפשרויות, בהתאם לשאלה.

תזמון הסקרים ש-Google מפעילה תלוי בהעברת ההודעות של הנציג availability [זמינות]:

זמינות תזמון הסקר
בוט בלבד 30 דקות אחרי ההודעה האחרונה
לבני אדם בלבד 24 שעות עסקים אחרי ההודעה האחרונה
בוט וסרטון אנושי 24 שעות עסקים אחרי ההודעה האחרונה

אם יש < 24 שעות פעילות ב-7 הימים הבאים, אלא 24 שעות.

אפשר לשלוח סקר אחד בכל שיחה כל 24 שעות. אם שולחים סקר ב: שיחה לפני Google, Google לא שולחת סקר לשיחה הזו. אם הנציג ישלח כמה סקרים באותה שיחה תוך 24 שעות, אפליקציית Business Messages מנסה רק לשלוח את הסקר הראשון למשתמש.

בפעם הבאה שמשתמש מתחיל שיחה עם הנציג אחרי שהוא משלים שיחה הסקר, הנציג יציג הודעת פתיחה. אם משתמש לא עונה על סקר, התוקף שלו פג אחרי 7 ימים. משתמש יראה הודעת פתיחה בשיחה הבאה שלו אחרי שתוקף הסקר יפוג.

אם משתמש שולח הודעה שלא קשורה לסקר בזמן שהסקר פעיל שיחה, Business Messages מבטלת את הסקר ושולחת את ההודעה של המשתמש ל-webhook של הנציג.

גם אם לא שולחים סקרים למשתמשים, הנציג עדיין יקבל את תוצאות הסקרים של Google ב-webhook, ועליך לאשר ולעבד אותם בהתאם.

שאלות

הסקרים יכולים לכלול עד חמש שאלות, המחולקות לשלוש קטגוריות: חובה, תבנית ומותאם אישית. סקר כוללת תמיד את השאלה הנדרשת, ואז מציגה עד שתי תבניות שאלות מותאמות אישית, ואז מציג עד שתי שאלות מותאמות אישית.

שאלה נדרשת

השאלה הנדרשת מותאמת לשוק המקומי בכל הלוקאלים שבהם Business Messages נתמך. המשתמשים יכולים להגיב בלייק או דיסלייק.

שאלת השאלה הנדרשת: "האם שירות ההודעות הזה ענה על הצרכים שלך מול AGENT_NAME?"

שאלות על תבנית

שאלות התבנית הן שאלות אופציונליות המוגדרות על ידי Google שמתאימות לשוק המקומי בכל הלוקאלים שבהם Business Messages תומך. סקר יכול לכלול עד שתי שאלות תבנית. הפורמטים של תגובת המשתמשים משתנים בהתאם לשאלה.

שאלות התבנית כוללות

  • איך הייתה חוויית שליחת ההודעות אל AGENT_NAME?
  • מה הסבירות שחברים יקבלו ממך המלצה על AGENT_NAME?
  • בפעם הבאה שתיצרו קשר עם AGENT_NAME, מה הסבירות לבחור העברת הודעות?
  • באופן כללי, עד כמה היה לך קל לקיים אינטראקציה עם AGENT_NAME?
  • עד כמה המשפט הבא נכון לדעתך: היה לי קל לפתור את הבעיה של AGENT_NAME.
  • מה רמת שביעות הרצון הכללית שלך מנציג התמיכה?
  • האם שיחת הצ'אט הזו עזרה לך להימנע מהתקשרות אל AGENT_NAME?

כדי לראות רשימה של כל השאלות הזמינות בתבניות ולקבל מזהי תבניות:

  1. פותחים את מפתח התקשורת העסקית מסוף ונכנסים באמצעות חשבון Google ב-Business Messages.
  2. בוחרים נציג.
  3. בתפריט הניווט הימני, לוחצים על סקר.

שאלות מותאמות אישית

סקר יכול לכלול עד שתי שאלות מותאמות אישית. אם מציינים צריך לכלול גרסאות של השאלה בכל אחד מהם לוקאל שנתמך על ידי הנציג שלכם. עליך לציין גרסה של כל שאלה עבור לוקאל ברירת המחדל. אם משתמש מקבל סקר, אבל נמצא במיקום ללא גרסה ספציפית של שאלה מותאמת אישית, השאלה מוצגת כפי שהיא מוגדרת בלוקאל ברירת המחדל של הסוכן.

תשובות לשאלות מותאמות אישית תומכות בנתונים נפרדים של טקסט ודיווח חוזר, להצעות תשובות.

התאמה אישית של סקר

כדי להתאים אישית את הסקר לנציג:

  1. פותחים את מפתח התקשורת העסקית מסוף ונכנסים באמצעות חשבון Google ב-Business Messages.
  2. בוחרים נציג.
  3. בתפריט הניווט הימני, לוחצים על סקר.
  4. אפשר להוסיף לסקר עד שתי שאלות זמינות בתבנית.
  5. לוחצים על יצירת שאלה בהתאמה אישית כדי להוסיף שאלות מותאמות אישית לסקר.

לאפשרויות עיצוב וערך: surveyConfig

שליחת סקר

סקר

כדי לשלוח סקר, מריצים את הפקודה הבאה. החלפה של CONVERSATION_ID במזהה השיחה שאליה רוצים לשלוח את הסקר. SURVEY_ID עם מזהה ייחודי של הסקר.

# 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)"
/**
 * 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);
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();
    }
  }
}
"""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)

לאפשרויות עיצוב וערך: conversations.surveys

קבלת תשובות לסקר

כשמשתמש משיב על שאלה בסקר, הנציג מקבל תשובה ב-webhook שלו. לקבל ולעבד תשובות לסקרים באותו אופן שבו אתם מקבלים הודעות.

לכל השאלות בסקר יש ערך surveyResponse.survey זהה. אם המיקום הסקר שלכם כולל כמה שאלות, ודאו שהתשתית שלכם מקבלת כמה תגובות עם אותו ערך של surveyResponse.survey ומזהה לשאלות נפרדות בשדה surveyResponse.surveyQuestionId.

ערכי הטקסט של התשובות לסקר מופיעים כאן surveyResponse.questionResponseText לשאלות חובה ותבניות, התכונה Business Messages מחזירה תשובה של 'אהבתי' ו-VERY_SATISFIED תגובה למטה כ-VERY_DISSATISFIED. אם תשובה מותאמת אישית לשאלה כוללת מומלץ להסתמך על surveyResponse.questionResponsePostbackData במקום לנסות לנתח את ערך Unicode.

התשובות לסקר מופיעות בפורמט הבא.

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

לאפשרויות עיצוב וערך: UserMessage וגם SurveyResponse