إرسال الاستطلاعات لتتبُّع مدى رضا المستخدمين

استطلاع مخصّص في محادثة من خلال ميزة "الرسائل التجارية"

للتأكد من أنّ المستخدمين يحظون بتفاعلات مع وكيلك، ترسل Google الاستطلاعات إلى المستخدمين بعد انتهاء محادثاتهم مع وكيلك. إذا كنت تريد جمع البيانات بوقت مختلف، كما هو الحال في نهاية محادثة، يمكنك إرسال استطلاعات في سياق إحدى المحادثات. يتم عرض الاستطلاعات في المحادثة وتسمح للمستخدمين بتقديم ملاحظات بمجموعة متنوعة من الخيارات بناءً على السؤال.

يعتمد توقيت الاستطلاعات التي تعرضها Google على مدى توفّر ميزة المراسلة لدى الوكيل:

مدى التوفّر توقيت الاستطلاع
برنامج التتبُّع فقط 30 دقيقة بعد إرسال آخر رسالة
إنسان فقط بعد 24 ساعة عمل من إرسال آخر رسالة
روبوت وبشرة بعد 24 ساعة عمل من إرسال آخر رسالة

في حال كانت هناك أقل من 24 ساعة عمل خلال الأيام السبعة المقبلة، سنستخدم 24 ساعة بدلاً من ذلك.

يمكنك إرسال استطلاع واحد في كل محادثة كل 24 ساعة. إذا أرسلت استطلاعًا في محادثة قبل Google، لن ترسل Google استطلاعًا إلى تلك المحادثة. إذا أرسل وكيلك عدة استطلاعات في المحادثة نفسها خلال 24 ساعة، تحاول ميزة "الرسائل التجارية" فقط إرسال الاستطلاع الأول إلى المستخدم.

في المرة التالية التي يبدأ فيها أحد المستخدمين محادثة مع وكيلك بعد إكمال استطلاع، يعرض الوكيل greeting. وإذا لم يردّ المستخدم على الاستطلاع، تنتهي صلاحية الاستطلاع بعد 7 أيام، وتظهر رسالة ترحيب في محادثته التالية بعد انتهاء صلاحية الاستطلاع.

إذا أرسل أحد المستخدمين رسالة غير مرتبطة بالاستطلاع أثناء فعالية استطلاع في المحادثة، تلغي ميزة "الرسائل التجارية" الاستطلاع وتُرسل رسالة المستخدم إلى الرد التلقائي على الويب للوكيل.

في حال عدم إرسال الاستطلاعات إلى المستخدمين، سيظل وكيلك يتلقّى نتائج استطلاعات Google على الرد التلقائي على الويب وعلى أن يقبلها ويعالجها وفقًا لذلك.

الأسئلة

يمكن أن تتضمّن الاستطلاعات ما يصل إلى خمسة أسئلة، مقسّمة إلى ثلاث فئات: مطلوب والنموذج ومخصّص. يتضمن الاستطلاع دائمًا السؤال المطلوب، ثم يعرض ما يصل إلى سؤالين للنموذج، ثم يعرض ما يصل إلى سؤالين مخصصين.

السؤال المطلوب

تتم ترجمة السؤال المطلوب إلى جميع اللغات التي تتوفّر بها ميزة "الرسائل التجارية". ويمكن للمستخدمين الرد بـ "رائع" أو "لم يعجبني".

السؤال المطلوب: "هل تلبي خدمة المراسلة هذه احتياجاتك مع AGENT_NAME؟"

أسئلة النموذج

أسئلة النماذج هي أسئلة اختيارية تحدّدها Google وتتم ترجمتها في جميع اللغات التي تتوافق معها ميزة "الرسائل التجارية". يمكن أن يتضمن الاستبيان ما يصل إلى سؤالين للقالب. تختلف تنسيقات ردود المستخدمين حسب السؤال.

تتضمن أسئلة القالب

  • كيف كانت تجربتك في مراسلة AGENT_NAME؟
  • ما مدى احتمالية أن تنصح صديقًا بـ AGENT_NAME؟
  • في المرة القادمة التي ستتواصل فيها مع AGENT_NAME، ما مدى احتمال أن تختار ميزة المراسلة؟
  • بشكل عام، ما مدى سهولة التفاعل مع AGENT_NAME؟
  • ما مدى موافقتك على العبارة التالية: "سهّل عليّ تطبيق AGENT_NAME معالجة مشكلتي"؟
  • يُرجى تقييم مدى رضاك بوجهٍ عام عن موظّف الدعم.
  • هل ساعدتك جلسة المحادثة هذه في تجنّب الاتصال برقم AGENT_NAME؟

للاطّلاع على قائمة بجميع أسئلة النماذج المتاحة والحصول على معرّفات النماذج،

  1. افتح وحدة تحكم مطوّر برامج اتصالات الأنشطة التجارية وسجِّل الدخول باستخدام حسابك على "الرسائل التجارية" على Google.
  2. اختَر وكيلك.
  3. في شريط التنقّل الأيمن، انقر على استطلاع.

الأسئلة المخصصة

يمكن أن يتضمّن الاستطلاع سؤالَين مخصّصَين على الأكثر. إذا حددت سؤالاً مخصّصًا، يمكنك تضمين نُسخ من السؤال لكل لغة يوفِّرها وكيلك. يجب تحديد نسخة من كل سؤال للغتك الافتراضية. إذا تلقّى أحد المستخدمين استطلاعًا ولكنّه يتحدّث في لغة ليس لديها نسخة محدّدة من سؤال مخصّص، يتم عرض السؤال على النحو المحدّد في اللغة التلقائية للوكيل.

تتيح الردود على الأسئلة المخصّصة بيانات منفصلة للنصوص وبيانات الإبلاغ عن الإحالات الناجحة، على غرار الردود المقترَحة.

تخصيص استطلاع

لتخصيص الاستطلاع لأحد موظّفي الدعم، عليك اتّباع الخطوات التالية:

  1. افتح وحدة تحكم مطوّر برامج اتصالات الأنشطة التجارية وسجِّل الدخول باستخدام حسابك على "الرسائل التجارية" على Google.
  2. اختَر وكيلك.
  3. في شريط التنقّل الأيمن، انقر على استطلاع.
  4. أضِف ما يصل إلى سؤالَين متاحَين للنموذج إلى الاستطلاع.
  5. انقر على إنشاء سؤال مخصّص لإضافة أسئلة مخصّصة إلى الاستطلاع.

للتعرّف على خيارات التنسيق والقيمة، يُرجى الاطّلاع على القسم surveyConfig.

إرسال استطلاع

الاستطلاع

لإرسال استطلاع، شغِّل الأمر التالي. استبدِل CONVERSATION_ID بمعرّف المحادثة التي تريد إرسال الاستطلاع إليها و SURVEY_ID بمعرّف فريد للاستطلاع.

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)

للتعرّف على خيارات التنسيق والقيمة، يُرجى الاطّلاع على القسم conversations.surveys.

تلقّي الردود على الاستطلاع

عندما يردّ مستخدم على سؤال في استطلاع، يتلقّى موظّف الدعم الردّ على الرد التلقائي على الويب. يمكنك تلقّي الردود على الاستطلاعات ومعالجتها بنفس الطريقة التي تتلقّى بها الرسائل.

تحتوي جميع الأسئلة في الاستطلاع على القيمة surveyResponse.survey نفسها. إذا تضمّن الاستطلاع عدة أسئلة، تأكّد من أنّ البنية الأساسية تقبل ردودًا متعدّدة بقيمة surveyResponse.survey نفسها وتحدّد الأسئلة الفردية من خلال الحقل surveyResponse.surveyQuestionId.

تظهر القيم النصية للردود على الاستطلاعات في surveyResponse.questionResponseText. بالنسبة إلى الأسئلة المطلوبة والأسئلة التي يتم طرحها في النماذج، يعرض تطبيق "الرسائل التجارية" ردّ "رائع" كـ 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.