Enable Cloud Pub/Sub notifications for CCAI Insights events

Enabling Cloud Pub/Sub notifications allows you to receive a notification each time a CCAI Insights event completes. You can configure CCAI Insights to send a notification for all events or only specified events. To learn more about the events that can trigger Cloud Pub/Sub notifications, see the reference documentation.

Prerequisites

  1. Follow the instructions to create a Cloud Pub/Sub topic and a pull subscription.

Enable Cloud Pub/Sub notifications

You can configure CCAI Insights to send a notification for specific events only or for all events. The following code sample configures CCAI Insights to only send a notification each time a conversation or an analysis is created.

REST & CMD LINE

Before using any of the request data, make the following replacements:

  • PROJECT_ID: your GCP project ID.
  • LOCATION_ID: the location you chose for your Cloud Storage bucket. The only location currently available is us-central1.
  • TOPIC_ID: the ID for the notification topic (for example, notify each time a conversation is created). Each notification topic should have a unique ID.

HTTP method and URL:

POST https://contactcenterinsights.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/settings?updateMask=pubsub_notification_settings

Request JSON body:

{
  "pubsub_notification_settings": {
      "create-conversation": "projects/PROJECT_ID/topics/TOPIC_ID_1",
      "create-analysis": "projects/PROJECT_ID/topics/TOPIC_ID_2"
    },
}

To send your request, expand one of these options:

You should receive a JSON response similar to the following:

{
  "name": "projects/PROJECT_ID/locations/us-central1/settings",
  "createTime": "2021-01-20T10:10:10.123000Z",
  "updateTime": "2021-01-20T11:11:11.456000Z",
  "pubsubNotificationSettings": {
    "create-conversation": "projects/PROJECT_ID/topics/TOPIC_ID_1",
    "create-analysis": "projects/PROJECT_ID/topics/TOPIC_ID_2"
  }
}

Python

from google.api_core import protobuf_helpers
from google.cloud import contact_center_insights_v1


def enable_pubsub_notifications(
    project_id: str, topic_create_conversation: str, topic_create_analysis: str
) -> None:
    # Construct a settings resource.
    settings = contact_center_insights_v1.Settings()
    settings.name = contact_center_insights_v1.ContactCenterInsightsClient.settings_path(
        project_id, "us-central1"
    )
    settings.pubsub_notification_settings = {
        "create-conversation": topic_create_conversation,
        "create-analysis": topic_create_analysis,
    }

    update_mask = protobuf_helpers.field_mask(None, type(settings).pb(settings))

    # Call the Insights client to enable Pub/Sub notifications.
    insights_client = contact_center_insights_v1.ContactCenterInsightsClient()
    insights_client.update_settings(settings=settings, update_mask=update_mask)
    print("Enabled Pub/Sub notifications")

Java


import com.google.cloud.contactcenterinsights.v1.ContactCenterInsightsClient;
import com.google.cloud.contactcenterinsights.v1.Settings;
import com.google.cloud.contactcenterinsights.v1.SettingsName;
import com.google.protobuf.FieldMask;
import java.io.IOException;

public class EnablePubSubNotifications {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "my_project_id";
    String topicCreateConversation = "projects/my_project_id/topics/my_topic_id";
    String topicCreateAnalysis = "projects/my_project_id/topics/my_other_topic_id";

    enablePubSubNotifications(projectId, topicCreateConversation, topicCreateAnalysis);
  }

  public static void enablePubSubNotifications(
      String projectId, String topicCreateConversation, String topicCreateAnalysis)
      throws IOException {
    // 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()) {
      // Construct a settings resource.
      SettingsName name = SettingsName.of(projectId, "us-central1");
      Settings settings =
          Settings.newBuilder()
              .setName(name.toString())
              .putPubsubNotificationSettings("create-conversation", topicCreateConversation)
              .putPubsubNotificationSettings("create-analysis", topicCreateAnalysis)
              .build();

      // Construct an update mask.
      FieldMask updateMask =
          FieldMask.newBuilder().addPaths("pubsub_notification_settings").build();

      // Call the Insights client to enable Pub/Sub notifications.
      Settings response = client.updateSettings(settings, updateMask);
      System.out.printf("Enabled Pub/Sub notifications");
    }
  }
}

Node.js

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const projectId = 'my_project_id';
// const topicCreateConversation = 'projects/my_project_id/topics/my_topic_id';
// const topicCreateAnalysis = 'projects/my_project_id/topics/my_other_topic_id';

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

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

async function enablePubSubNotifications() {
  const [settings] = await client.updateSettings({
    settings: {
      name: client.settingsPath(projectId, 'us-central1'),
      pubsubNotificationSettings: {
        'create-conversation': topicCreateConversation,
        'create-analysis': topicCreateAnalysis,
      },
    },
    updateMask: {
      paths: ['pubsub_notification_settings'],
    },
  });
  console.info(`Enabled Pub/Sub notifications for ${settings.name}`);
}
enablePubSubNotifications();

Content of the Cloud Pub/Sub message

The content of the Cloud Pub/Sub message depends on the event that triggers that Cloud Pub/Sub notification.

Trigger Message Data Message Attributes
create-analysis Long-running operation whose response is an analysis {"operation_name": "projects/{project}/locations/{location}/operations/{operation}"}
create-conversation Conversation {"conversation_name": "projects/{project}/locations/{location}/conversations/{conversation}"}
export-insights-data Long-running operation whose response is empty {"operation_name": "projects/{project}/locations/{location}/operations/{operation}"}
update-conversation Conversation {"conversation_name": "projects/{project}/locations/{location}/conversations/{conversation}"}