Gửi bản khảo sát để theo dõi mức độ hài lòng của người dùng

Một bản khảo sát tuỳ chỉnh trong một cuộc trò chuyện trên Business Messages.

Để đảm bảo người dùng hài lòng khi tương tác với nhân viên hỗ trợ của bạn, Google gửi bản khảo sát cho người dùng sau khi họ kết thúc cuộc trò chuyện với nhân viên hỗ trợ của bạn. Nếu mà bạn muốn thu thập dữ liệu theo thời gian khác nhau, chẳng hạn như ở cuối một cuộc trò chuyện, bạn có thể gửi bản khảo sát trong ngữ cảnh cuộc trò chuyện. Các bản khảo sát sẽ xuất hiện trong cuộc trò chuyện và cho phép người dùng cung cấp phản hồi với nhiều lựa chọn tuỳ theo câu hỏi.

Thời gian tiến hành các cuộc khảo sát do Google kích hoạt phụ thuộc vào hoạt động nhắn tin của nhân viên hỗ trợ tình trạng còn hàng:

Phạm vi cung cấp Thời gian khảo sát
Chỉ bot 30 phút sau tin nhắn cuối cùng
Chỉ người 24 giờ làm việc sau tin nhắn cuối cùng
Bot và con người 24 giờ làm việc sau tin nhắn cuối cùng

Nếu có < 24 giờ làm việc trong 7 ngày tiếp theo, chúng tôi sẽ sử dụng 24 giờ để thay thế.

Bạn có thể gửi một bản khảo sát cho mỗi cuộc trò chuyện 24 giờ một lần. Nếu bạn gửi một khảo sát trong một cuộc trò chuyện trước khi xuất hiện trước Google, thì Google sẽ không gửi bản khảo sát đến cuộc trò chuyện đó. Nếu nhân viên hỗ trợ của bạn gửi nhiều bản khảo sát trong cùng một cuộc trò chuyện trong vòng 24 giờ, Business Messages chỉ cố gắng gửi bản khảo sát đầu tiên cho người dùng.

Lần tiếp theo khi người dùng bắt đầu trò chuyện với nhân viên hỗ trợ của bạn sau khi hoàn thành trong bản khảo sát, nhân viên hỗ trợ sẽ hiển thị lời chào. Nếu người dùng không trả lời khảo sát, khảo sát sẽ hết hạn sau 7 ngày và người dùng thấy lời chào trong cuộc trò chuyện tiếp theo sau khi bản khảo sát hết hạn.

Nếu người dùng gửi một tin nhắn không liên quan đến khảo sát trong khi một khảo sát đang diễn ra trong cuộc trò chuyện, Business Messages sẽ huỷ khảo sát và gửi tin nhắn của người dùng vào webhook của nhân viên hỗ trợ.

Nếu bạn không gửi bản khảo sát cho người dùng, nhân viên hỗ trợ của bạn vẫn nhận được kết quả khảo sát của Google tại webhook của bạn. Bạn cần chấp nhận và xử lý kết quả cho phù hợp.

Câu hỏi

Bản khảo sát có thể bao gồm tối đa 5 câu hỏi, chia thành 3 danh mục: bắt buộc, mẫutuỳ chỉnh. Bài khảo sát luôn bao gồm câu hỏi bắt buộc, sau đó hiển thị tối đa 2 mẫu và sau đó hiển thị tối đa hai câu hỏi tuỳ chỉnh.

Câu hỏi bắt buộc

Câu hỏi bắt buộc được bản địa hoá trên tất cả các ngôn ngữ có trong Business Messages Google Cloud. Người dùng có thể trả lời bằng biểu tượng thích hoặc không thích.

Câu hỏi bắt buộc: "Dịch vụ nhắn tin này có đáp ứng nhu cầu của bạn với AGENT_NAME?"

Câu hỏi về mẫu

Các câu hỏi về mẫu là những câu hỏi không bắt buộc, do Google xác định và được bản địa hoá trên tất cả ngôn ngữ mà Business Messages hỗ trợ. Một cuộc khảo sát có thể bao gồm tối đa 2 mẫu câu hỏi. Định dạng câu trả lời của người dùng sẽ khác nhau tuỳ theo câu hỏi.

Các câu hỏi về mẫu bao gồm

  • Bạn có trải nghiệm như thế nào khi nhắn tin cho AGENT_NAME?
  • Bạn có định giới thiệu AGENT_NAME cho bạn bè không?
  • Lần tới khi liên hệ với AGENT_NAME, bạn có khả năng chọn tính năng nhắn tin?
  • Nhìn chung, bạn có thể dễ dàng tương tác với AGENT_NAME không?
  • Bạn có đồng ý với nhận định sau đây không: AGENT_NAME giúp tôi dễ dàng xử lý vấn đề của mình.
  • Vui lòng đánh giá mức độ hài lòng tổng thể của bạn đối với nhân viên hỗ trợ.
  • Phiên trò chuyện này có giúp bạn không phải gọi điện cho AGENT_NAME không?

Để xem danh sách tất cả các câu hỏi có sẵn về mẫu và nhận ID mẫu,

  1. Mở ứng dụng Business Communications Developer Bảng điều khiển rồi đăng nhập bằng Tài khoản Google của bạn trong Business Messages.
  2. Chọn nhân viên hỗ trợ.
  3. Trong bảng điều hướng bên trái, hãy nhấp vào Khảo sát.

Câu hỏi tùy chỉnh

Một bản khảo sát có thể bao gồm tối đa 2 câu hỏi tuỳ chỉnh. Nếu bạn chỉ định một tuỳ chọn hãy thêm phiên bản của câu hỏi cho mỗi ngôn ngữ mà nhân viên hỗ trợ của bạn hỗ trợ. Bạn phải chỉ định phiên bản của mỗi câu hỏi cho ngôn ngữ mặc định. Nếu người dùng nhận được khảo sát nhưng ở ngôn ngữ không có phiên bản cụ thể của một câu hỏi tuỳ chỉnh, câu hỏi sẽ hiển thị như được định nghĩa bằng ngôn ngữ mặc định của tác nhân.

Câu trả lời cho các câu hỏi tuỳ chỉnh hỗ trợ dữ liệu đăng lại và văn bản riêng biệt, tương tự nhau đến được đề xuất trả lời.

Tuỳ chỉnh bài khảo sát

Cách tuỳ chỉnh bài khảo sát cho một nhân viên hỗ trợ:

  1. Mở ứng dụng Business Communications Developer Bảng điều khiển rồi đăng nhập bằng Tài khoản Google của bạn trong Business Messages.
  2. Chọn nhân viên hỗ trợ.
  3. Trong bảng điều hướng bên trái, hãy nhấp vào Khảo sát.
  4. Thêm tối đa 2 câu hỏi mẫu có sẵn vào bản khảo sát.
  5. Nhấp vào Tạo câu hỏi tuỳ chỉnh để thêm câu hỏi tuỳ chỉnh vào bản khảo sát của bạn.

Để biết các lựa chọn về định dạng và giá trị, hãy xem surveyConfig.

Gửi bản khảo sát

Khảo sát

Để gửi một bản khảo sát, hãy chạy lệnh sau. Thay thế CONVERSATION_ID bằng giá trị nhận dạng của cuộc trò chuyện mà bạn muốn gửi bản khảo sát đến và SURVEY_ID kèm theo một giá trị nhận dạng duy nhất cho bản khảo sát.

# 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)

Để biết các lựa chọn về định dạng và giá trị, hãy xem conversations.surveys.

Nhận câu trả lời khảo sát

Khi người dùng trả lời một câu hỏi trong bản khảo sát, nhân viên hỗ trợ của bạn sẽ nhận được câu trả lời tại webhook của nó. Nhận và xử lý các câu trả lời khảo sát giống như cách bạn nhận được tin nhắn.

Tất cả câu hỏi trong một bản khảo sát đều có cùng giá trị surveyResponse.survey. Nếu bản khảo sát của bạn có nhiều câu hỏi, hãy đảm bảo cơ sở hạ tầng của bạn chấp nhận nhiều phản hồi có cùng giá trị surveyResponse.survey và xác định riêng lẻ bằng trường surveyResponse.surveyQuestionId.

Giá trị văn bản cho các câu trả lời khảo sát xuất hiện trong surveyResponse.questionResponseText. Đối với các câu hỏi bắt buộc và câu hỏi mẫu, Business Messages trả về phản hồi thích VERY_SATISFIED và thích phản hồi xuống là VERY_DISSATISFIED. Nếu câu trả lời cho câu hỏi tuỳ chỉnh bao gồm biểu tượng cảm xúc. Phương pháp hay nhất là dựa vào surveyResponse.questionResponsePostbackData thay vì cố gắng phân tích cú pháp Giá trị Unicode.

Các câu trả lời khảo sát có định dạng như sau.

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

Để biết các lựa chọn về định dạng và giá trị, hãy xem UserMessageSurveyResponse.