ייצוא שיחות ל-BigQuery

בעזרת Customer Experience Insights (תובנות לגבי חוויית הלקוח, CX Insights) אתם יכולים לייצא את נתוני השיחות והניתוחים של CX Insights אל BigQuery כדי להריץ שאילתות גולמיות משלכם. תהליך הייצוא כותב סכימה שדומה למסגרת של ניתוח הדיבור. במדריך הזה מוסבר תהליך הייצוא.

יצירת טבלה ב-BigQuery ומערך נתונים חדשים

כדי שהייצוא של CX Insights יתבצע בהצלחה, צריך טבלה ב-BigQuery. אם אין לכם טבלת יעד, תוכלו להשתמש בדוגמה הזו כדי ליצור טבלה וערכת נתונים חדשות באמצעות כלי שורת הפקודה של bq.

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

יש הגבלות מסוימות על המיקום של מקור הנתונים ב-BigQuery. שיקולים בקשר למיקום ההגבלות שחלות על קטגוריות של Cloud Storage חלות גם על CX Insights. לדוגמה, אם מערך הנתונים ב-BigQuery נמצא במיקום EU במספר אזורים, אפשר לייצא נתונים מ-CX Insights רק מאחד ממיקומי europe-*.

bq mk --dataset --location=LOCATION PROJECT:DATASET

bq mk --table PROJECT:DATASET.TABLE

ייצוא נתוני שיחות ל-BigQuery

הכלי לייצוא תומך בסינון ובכתיבת נתונים לטבלאות שמוגנות באמצעות מפתחות הצפנה בניהול הלקוח (CMEK). אם לא רוצים להפעיל את התכונה הזו, אפשר לדלג קדימה ולייצא את הנתונים ל-BigQuery.

הוספת סינון לבקשה (אופציונלי)

הייצוא ל-BigQuery תואם לכל השילובים של מסננים שאפשר להחיל על שאילתות שיחה. לדוגמה, הדוגמה הבאה מייצאת את כל השיחות עם 10 תורות או יותר שטופלו על ידי agent_id "007" בין 1 בינואר 2021 ל-2 בינואר 2021 לפי שעון PST:

FILTER='create_time>"2021-01-01T00:00:00-08:00" create_time<"2021-01-02T00:00:00-08:00" agent_id="007" turn_count>="10"'

ייצוא נתונים לטבלה שמוגנת באמצעות CMEK (אופציונלי)

צריך להקצות לחשבון השירות של CX Insights את התפקיד Cloud KMS CryptoKey Encrypter/Decrypter. במסמכי העזרה בנושא בעיות ידועות יש מידע על הפורמט של חשבון שירות. אחרי שמקצים את התפקיד הנכון לחשבון השירות, מוסיפים לבקשת הייצוא את השם המלא של מפתח ה-KMS שמגן על הטבלה:

KMS_KEY='projects/<project>/locations/<location>/keyRings/<key_ring>/cryptoKeys/<key_name>'

ציון אפשרות של פעולת כתיבה בבקשה (אופציונלי)

ייצוא של נתוני CCAI Insights תומך באפשרויות הבאות של העברת נתונים מ-BigQuery:

  • WRITE_TRUNCATE: אם הטבלה כבר קיימת, BigQuery מחליף את נתוני הטבלה ומשתמש בסכימה מתוצאת השאילתה. זו האפשרות שמוגדרת כברירת המחדל.
  • WRITE_APPEND: אם הטבלה כבר קיימת, אפליקציית BigQuery מוסיפה את הנתונים לטבלה.

לדוגמה, בדוגמה הבאה הנתונים המיוצאים יצורפו לטבלת יעד קיימת:

WRITE_DISPOSITION='WRITE_APPEND'

ייצוא הנתונים ל-BigQuery

בדוגמת הקוד הבאה אפשר לראות איך לייצא את הנתונים. פרטים מלאים מופיעים במאמרי העזרה בנושא ייצוא.

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

REST

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • PROJECT_ID: מזהה הפרויקט ב-Google Cloud.
  • DATASET: השם של מערך הנתונים ב-BigQuery שאליו רוצים לייצא את הנתונים.
  • TABLE: שם הטבלה ב-BigQuery שאליה ייכתבו הנתונים של CX Insights.
  • FILTER_QUERY: שאילתה שמשמשת את CX Insights לייצוא רק של שיחות עם מאפיינים ספציפיים. לדוגמה, אם מזינים את הערך agent_id=\"007\" , רק שיחות שמשויכות לסוכן 007 ייצאו.

ה-method של ה-HTTP וכתובת ה-URL:

POST https://contactcenterinsights.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/insightsdata:export

תוכן בקשת JSON:

{
  "bigQueryDestination": {
    "projectId": "PROJECT_ID",
    "dataset": "DATASET",
    "table": "TABLE",
  },
  "filter": "FILTER_QUERY"
}

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "name": "projects/PROJECT_ID/locations/us-central1/operations/OPERATION_ID"
}

Python

כדי לבצע אימות ב-CX Insights, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.

from google.cloud import contact_center_insights_v1


def export_to_bigquery(
    project_id: str,
    bigquery_project_id: str,
    bigquery_dataset_id: str,
    bigquery_table_id: str,
) -> None:
    """Exports data to BigQuery.

    Args:
        project_id:
            The project identifier that owns the data source to be exported.
            For example, 'my-project'.
        bigquery_project_id:
            The project identifier that owns the BigQuery sink to export data to.
            For example, 'my-project'.
        bigquery_dataset_id:
            The BigQuery dataset identifier. For example, 'my-dataset'.
        bigquery_table_id:
            The BigQuery table identifier. For example, 'my-table'.

    Returns:
        None.
    """
    # Construct an export request.
    request = contact_center_insights_v1.ExportInsightsDataRequest()
    request.parent = (
        contact_center_insights_v1.ContactCenterInsightsClient.common_location_path(
            project_id, "us-central1"
        )
    )
    request.big_query_destination.project_id = bigquery_project_id
    request.big_query_destination.dataset = bigquery_dataset_id
    request.big_query_destination.table = bigquery_table_id
    request.filter = 'agent_id="007"'

    # Call the Insights client to export data to BigQuery.
    insights_client = contact_center_insights_v1.ContactCenterInsightsClient()
    export_operation = insights_client.export_insights_data(request=request)
    export_operation.result(timeout=600000)
    print("Exported data to BigQuery")

Java

כדי לבצע אימות ב-CX Insights, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.


import com.google.api.gax.longrunning.OperationTimedPollAlgorithm;
import com.google.api.gax.retrying.RetrySettings;
import com.google.cloud.contactcenterinsights.v1.ContactCenterInsightsClient;
import com.google.cloud.contactcenterinsights.v1.ContactCenterInsightsSettings;
import com.google.cloud.contactcenterinsights.v1.ExportInsightsDataRequest;
import com.google.cloud.contactcenterinsights.v1.ExportInsightsDataResponse;
import com.google.cloud.contactcenterinsights.v1.LocationName;
import java.io.IOException;
import org.threeten.bp.Duration;

public class ExportToBigquery {

  public static void main(String[] args) throws Exception, IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "my_project_id";
    String bigqueryProjectId = "my_bigquery_project_id";
    String bigqueryDataset = "my_bigquery_dataset";
    String bigqueryTable = "my_bigquery_table";

    exportToBigquery(projectId, bigqueryProjectId, bigqueryDataset, bigqueryTable);
  }

  public static void exportToBigquery(
      String projectId, String bigqueryProjectId, String bigqueryDataset, String bigqueryTable)
      throws Exception, IOException {
    // Set the operation total polling timeout to 24 hours instead of the 5-minute default.
    // Other values are copied from the default values of {@link ContactCenterInsightsStubSettings}.
    ContactCenterInsightsSettings.Builder clientSettings =
        ContactCenterInsightsSettings.newBuilder();
    clientSettings
        .exportInsightsDataOperationSettings()
        .setPollingAlgorithm(
            OperationTimedPollAlgorithm.create(
                RetrySettings.newBuilder()
                    .setInitialRetryDelay(Duration.ofMillis(5000L))
                    .setRetryDelayMultiplier(1.5)
                    .setMaxRetryDelay(Duration.ofMillis(45000L))
                    .setInitialRpcTimeout(Duration.ZERO)
                    .setRpcTimeoutMultiplier(1.0)
                    .setMaxRpcTimeout(Duration.ZERO)
                    .setTotalTimeout(Duration.ofHours(24L))
                    .build()));

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (ContactCenterInsightsClient client =
        ContactCenterInsightsClient.create(clientSettings.build())) {
      // Construct an export request.
      LocationName parent = LocationName.of(projectId, "us-central1");
      ExportInsightsDataRequest request =
          ExportInsightsDataRequest.newBuilder()
              .setParent(parent.toString())
              .setBigQueryDestination(
                  ExportInsightsDataRequest.BigQueryDestination.newBuilder()
                      .setProjectId(bigqueryProjectId)
                      .setDataset(bigqueryDataset)
                      .setTable(bigqueryTable)
                      .build())
              .setFilter("agent_id=\"007\"")
              .build();

      // Call the Insights client to export data to BigQuery.
      ExportInsightsDataResponse response = client.exportInsightsDataAsync(request).get();
      System.out.printf("Exported data to BigQuery");
    }
  }
}

Node.js

כדי לבצע אימות ב-CX Insights, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const projectId = 'my_project_id';
// const bigqueryProjectId = 'my_bigquery_project_id';
// const bigqueryDataset = 'my_bigquery_dataset';
// const bigqueryTable = 'my_bigquery_table';

// Imports the Contact Center Insights client.
const {
  ContactCenterInsightsClient,
} = require('@google-cloud/contact-center-insights');

// Instantiates a client.
const client = new ContactCenterInsightsClient();

async function exportToBigquery() {
  const [operation] = await client.exportInsightsData({
    parent: client.locationPath(projectId, 'us-central1'),
    bigQueryDestination: {
      projectId: bigqueryProjectId,
      dataset: bigqueryDataset,
      table: bigqueryTable,
    },
    filter: 'agent_id="007"',
  });

  // Wait for the operation to complete.
  await operation.promise();
  console.info('Exported data to BigQuery');
}
exportToBigquery();

ייצוא נתונים לפרויקט אחר (אופציונלי)

כברירת מחדל, נתוני הייצוא של CX Insights ל-BigQuery נכתבים לאותו פרויקט שבו נמצאים נתוני CX Insights. עם זאת, אפשר גם לייצא ל-BigQuery בפרויקט אחר.

מוודאים שלחשבון השירות של CX Insights יש גישה ל-BigQuery בפרויקט של הנמען באמצעות מסוף ניהול הזהויות והרשאות הגישה (IAM) או באמצעות gcloud:

gcloud projects add-iam-policy-binding RECEIVER_PROJECT \
    --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-contactcenterinsights.iam.gserviceaccount.com \
    --role=roles/bigquery.admin

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

הרצת שאילתות על הנתונים ב-BigQuery

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

gcloud config set project PROJECT
bq show DATASET.TABLE

שאילתות לגבי שיחות שיוצאו:

bq query --use_legacy_sql=false \
   "SELECT conversationName FROM DATASET.TABLE"