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

استطلاع مخصّص في محادثة على Business Messages

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

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

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

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

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

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

إذا أرسل مستخدم رسالة غير مرتبطة باستطلاع أثناء نشاط الاستطلاع في المحادثة، ستلغي Business Messages الاستطلاع وترسل رسالة المستخدم إلى الويب هوك الخاص بالوكيل.

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

أسئلة

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

سؤال مطلوب

يتم توفير السؤال المطلوب بلغات مختلفة في جميع المناطق التي تتيح فيها Business Messages استخدام لغات متعددة. يمكن للمستخدمين الردّ من خلال النقر على "يعجبني" أو "لا يعجبني".

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

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

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

تشمل أسئلة النموذج ما يلي:

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

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

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

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

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

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

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

لتخصيص الاستطلاع لأحد العملاء، اتّبِع الخطوات التالية:

  1. افتح وحدة تحكّم مطوّري Business Communications وسجِّل الدخول باستخدام حسابك على 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);

جافا

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.

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

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

تحتوي جميع الأسئلة في الاستطلاع على القيمة 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.