Exporter des conversations vers BigQuery

Customer Experience Insights (CX Insights) vous permet d'exporter vos données de conversation et d'analyse CX Insights vers BigQuery afin de pouvoir effectuer vos propres requêtes brutes. Le processus d'exportation écrit un schéma semblable au framework Speech Analysis. Ce guide décrit le processus d'exportation.

Créer un ensemble de données et une table BigQuery

Pour que l'opération réussisse, l'exportateur CX Insights nécessite une table BigQuery. Si vous ne disposez pas d'une table cible, utilisez cet exemple pour créer une table et un ensemble de données à l'aide de l' outil de ligne de commande bq. Consultez la documentation sur le schéma BigQuery pour connaître le schéma de sortie et les définitions de colonnes.

BigQuery impose certaines restrictions concernant l'emplacement de sa source de données. Consultez la section Considérations relatives aux zones. Les restrictions qui s'appliquent aux buckets Cloud Storage s'appliquent également à CX Insights. Par exemple, si votre ensemble de données BigQuery se trouve dans la zone multirégionale EU, vous ne pouvez exporter les données CX Insights que depuis l'un des emplacements europe-*.

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

bq mk --table PROJECT:DATASET.TABLE

Exporter les données de conversation vers BigQuery

L'outil d'exportation est compatible avec le filtrage et l'écriture de données dans des tables protégées par une clé de chiffrement gérée par le client (CMEK). Si vous ne souhaitez pas activer cette fonctionnalité, vous pouvez passer à l'étape suivante et exporter vos données vers BigQuery.

Ajouter un filtre à la requête (facultatif)

L'exportation vers BigQuery est compatible avec toutes les combinaisons de filtres pouvant être appliquées aux requêtes de conversation. Par exemple, l'exemple suivant exporte toutes les conversations comportant au moins 10 échanges gérés par l'agent_id "007" entre le 1er janvier 2021 et le 2 janvier 2021 (heure du Pacifique) :

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"'

Exporter des données vers une table protégée par une clé CMEK (facultatif)

Attribuez le rôle Chiffreur/Déchiffreur de CryptoKeys Cloud KMS à votre compte de service CX Insights. Consultez la documentation sur les problèmes connus concernant le format du compte de service. Une fois que vous avez attribué le rôle approprié à votre compte de service, ajoutez le nom complet de la clé KMS protégeant la table à la requête d'exportation :

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

Spécifier l'option de disposition en écriture dans la requête (facultatif)

L'exportation CCAI Insights est compatible avec les options de disposition en écriture suivantes de BigQuery :

  • WRITE_TRUNCATE : si la table existe déjà, BigQuery écrase les données de la table et utilise le schéma du résultat de la requête. Il s'agit de l'option par défaut.
  • WRITE_APPEND : si la table existe déjà, BigQuery ajoute les données à la table.

Par exemple, l'exemple suivant ajoute les données exportées à une table de destination existante :

WRITE_DISPOSITION='WRITE_APPEND'

Exporter vos données vers BigQuery

L'exemple de code suivant montre comment exporter vos données. Pour en savoir plus, consultez la documentation de référence sur l'exportation.

L'exportation crée un objet Operation de longue durée. Vous pouvez interroger l'opération pour vérifier son état.

REST

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : ID de votre projet Google Cloud.
  • DATASET : nom de l'ensemble de données BigQuery dans lequel les données doivent être exportées.
  • TABLE : nom de la table BigQuery dans laquelle vos données CX Insights doivent être écrites.
  • FILTER_QUERY : requête que CX Insights utilise pour n'exporter que les conversations présentant des propriétés spécifiques. Par exemple, si vous saisissez la valeur "agent_id=\"007\"" seules les conversations associées à l'agent 007 seront exportées.

Méthode HTTP et URL :

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

Corps JSON de la requête :

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

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

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

Python

Pour vous authentifier auprès de CX Insights, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

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

Pour vous authentifier auprès de CX Insights, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


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

Pour vous authentifier auprès de CX Insights, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

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

Exporter des données vers un autre projet (facultatif)

Par défaut, l'exportation BigQuery de CX Insights écrit les données dans le même projet que celui qui possède les données CX Insights. Toutefois, vous pouvez également exporter des données vers BigQuery dans un autre projet.

Assurez-vous que votre compte de service CX Insights dispose d'un accès BigQuery au projet destinataire à l'aide de la console Identity and Access Management (IAM) ou de gcloud :

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

Pour exporter vos données vers un projet spécifique, saisissez le numéro d'ID du projet destinataire dans le project_id champ de l'objet.BigQueryDestination

Interroger les données dans BigQuery

Exécutez cette commande pour interroger les données dans BigQuery. Pour en savoir plus sur les options de requête, consultez la documentation sur le démarrage rapide de BigQuery :

gcloud config set project PROJECT
bq show DATASET.TABLE

Interroger les conversations exportées :

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