カスタム ハイライトを使用して会話を分析する

概要

カスタム ハイライトは、スマート ハイライト機能と同様に機能します。ハイライトには、ユーザーの意図を判断するうえで重要であると CX Insights が認識したキーワード、フレーズ、文が含まれます。ハイライトがある場合は、返された文字起こしの中でラベル付けされます。スマート ハイライトは、さまざまなプリセット シナリオに基づいてハイライトを自動的に検出します。カスタム ハイライトでは、ハイライトとして認識されるカスタム条件を指定できます。

カスタム ハイライトは、1 つ以上のフレーズ一致ルールグループで構成できます。フレーズ一致ルールグループには、1 つ以上のルールが含まれています。次のパラメータを使用して、ルールの動作をカスタマイズできます。

一致を判断するルール

1 つのルールグループのみが true に解決される場合にハイライトを検出するか、すべてのルールグループが true に解決される場合にハイライトを検出するかを指定できます。同様に、ルール グループ内の 1 つのルールのみが満たされた場合にルール グループが true に解決されるように指定することも、ルール グループ内のすべてのルールの条件が満たされる必要があるように指定することもできます。

CX Insights API を使用してカスタム ハイライトを作成する

指定されたクエリ文字列のリストのいずれかを検出する

次のサンプルでは、会話に 2 つのフレーズのいずれかが表示されたときに、ハイライト ラベルを追加するように CX Insights に指示する PhraseMatcher オブジェクトを作成します。ハイライトとして検出されるために、両方のフレーズが表示される必要はありません。

REST

詳細については、PhraseMatcherTypePhraseMatchRuleGroupType のリファレンス ドキュメントをご覧ください。2 つの query フィールドを PHONECELLPHONE に置き換えると、サンプル出力が得られます。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
  • DISPLAY_NAME: フレーズ マッチャーの名前(人が読める形式)。
  • QUERY: 照合する単語またはフレーズ。

HTTP メソッドと URL:

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

リクエストの本文(JSON):

{
  "display_name": DISPLAY_NAME,
  "type": "ANY_OF",
  "active": true,
  "phrase_match_rule_groups": {
    "type": "ANY_OF",
    "phrase_match_rules": {
      "query": QUERY
      "config": {
        "exact_match_config": {}
      }
    },
    "phrase_match_rules": {
      "query": QUERY
      "config": {
        "exact_match_config": {}
      }
    }
  }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "name": "projects/PROJECT_ID/locations/us-central1/phraseMatchers/PHRASE_MATCHER_ID",
  "revisionId": "REVISION_ID",
  "revisionCreateTime": "2021-01-20T10:10:10.123000Z",
  "displayName": "PHONE_SERVICE",
  "type": "ANY_OF",
  "active": true,
  "phraseMatchRuleGroups": [
    {
      "type": "ANY_OF",
      "phraseMatchRules": [
        {
          "query": "PHONE",
          "config": {
            "exactMatchConfig": {}
          }
        },
        {
          "query": "CELLPHONE",
          "config": {
            "exactMatchConfig": {}
          }
        }
      ]
    }
  ],
  "activationUpdateTime": "2021-01-20T10:10:10.123000Z"
}

Python

CX Insights で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

from google.cloud import contact_center_insights_v1


def create_phrase_matcher_any_of(
    project_id: str,
) -> contact_center_insights_v1.PhraseMatcher:
    """Creates a phrase matcher that matches any of the specified queries.

    Args:
        project_id:
            The project identifier. For example, 'my-project'.

    Returns:
        A phrase matcher.
    """
    # Construct a parent resource.
    parent = (
        contact_center_insights_v1.ContactCenterInsightsClient.common_location_path(
            project_id, "us-central1"
        )
    )

    # Construct a phrase matcher that matches any of its rule groups.
    phrase_matcher = contact_center_insights_v1.PhraseMatcher()
    phrase_matcher.display_name = "PHONE_SERVICE"
    phrase_matcher.type_ = (
        contact_center_insights_v1.PhraseMatcher.PhraseMatcherType.ANY_OF
    )
    phrase_matcher.active = True

    # Construct a rule group to match the word "PHONE" or "CELLPHONE", ignoring case sensitivity.
    rule_group = contact_center_insights_v1.PhraseMatchRuleGroup()
    rule_group.type_ = (
        contact_center_insights_v1.PhraseMatchRuleGroup.PhraseMatchRuleGroupType.ANY_OF
    )

    for word in ["PHONE", "CELLPHONE"]:
        rule = contact_center_insights_v1.PhraseMatchRule()
        rule.query = word
        rule.config.exact_match_config = contact_center_insights_v1.ExactMatchConfig()
        rule_group.phrase_match_rules.append(rule)
    phrase_matcher.phrase_match_rule_groups.append(rule_group)

    # Call the Insights client to create a phrase matcher.
    insights_client = contact_center_insights_v1.ContactCenterInsightsClient()
    phrase_matcher = insights_client.create_phrase_matcher(
        parent=parent, phrase_matcher=phrase_matcher
    )

    print(f"Created {phrase_matcher.name}")
    return phrase_matcher

Java

CX Insights で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。


import com.google.cloud.contactcenterinsights.v1.ContactCenterInsightsClient;
import com.google.cloud.contactcenterinsights.v1.ExactMatchConfig;
import com.google.cloud.contactcenterinsights.v1.LocationName;
import com.google.cloud.contactcenterinsights.v1.PhraseMatchRule;
import com.google.cloud.contactcenterinsights.v1.PhraseMatchRuleConfig;
import com.google.cloud.contactcenterinsights.v1.PhraseMatchRuleGroup;
import com.google.cloud.contactcenterinsights.v1.PhraseMatcher;
import java.io.IOException;

public class CreatePhraseMatcherAnyOf {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace this variable before running the sample.
    String projectId = "my_project_id";

    createPhraseMatcherAnyOf(projectId);
  }

  public static PhraseMatcher createPhraseMatcherAnyOf(String projectId) 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 phrase matcher that matches any of its rule groups.
      PhraseMatcher.Builder phraseMatcher =
          PhraseMatcher.newBuilder()
              .setDisplayName("PHONE_SERVICE")
              .setTypeValue(2)
              .setActive(true);

      // Construct a rule group to match the word "PHONE" or "CELLPHONE", ignoring case sensitivity.
      PhraseMatchRuleGroup.Builder ruleGroup = PhraseMatchRuleGroup.newBuilder().setTypeValue(2);

      String[] words = {"PHONE", "CELLPHONE"};
      for (String w : words) {
        PhraseMatchRule.Builder rule =
            PhraseMatchRule.newBuilder()
                .setQuery(w)
                .setConfig(
                    PhraseMatchRuleConfig.newBuilder()
                        .setExactMatchConfig(ExactMatchConfig.newBuilder().build())
                        .build());
        ruleGroup.addPhraseMatchRules(rule.build());
      }
      phraseMatcher.addPhraseMatchRuleGroups(ruleGroup.build());

      // Construct a parent resource.
      LocationName parent = LocationName.of(projectId, "us-central1");

      // Call the Insights client to create a phrase matcher.
      PhraseMatcher response = client.createPhraseMatcher(parent, phraseMatcher.build());
      System.out.printf("Created %s%n", response.getName());
      return response;
    }
  }
}

Node.js

CX Insights で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

/**
 * TODO(developer): Uncomment this variable before running the sample.
 */
// const projectId = 'my_project_id';

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

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

async function createPhraseMatcherAnyOf() {
  const [phraseMatcher] = await client.createPhraseMatcher({
    parent: client.locationPath(projectId, 'us-central1'),
    phraseMatcher: {
      displayName: 'PHONE_SERVICE',
      type: 'ANY_OF',
      active: true,
      phraseMatchRuleGroups: [
        {
          type: 'ANY_OF',
          phraseMatchRules: [
            {
              query: 'PHONE',
              config: {
                exactMatchConfig: {},
              },
            },
            {
              query: 'CELLPHONE',
              config: {
                exactMatchConfig: {},
              },
            },
          ],
        },
      ],
    },
  });
  console.info(`Created ${phraseMatcher.name}`);
}
createPhraseMatcherAnyOf();

指定したクエリ文字列のリストの「すべて」を検出する

次のサンプルでは、最初の phraseMatchRuleGroups にクエリ語句が含まれており、2 番目の phraseMatchRuleGroups にクエリ語句が含まれていない会話にハイライト ラベルを追加するように CX Insights に指示する PhraseMatcher オブジェクトを作成します。

REST

詳細については、PhraseMatcherTypePhraseMatchRuleGroupType のリファレンス ドキュメントをご覧ください。2 つの query フィールドを PHONECELLPHONE に、残りの 2 つの query フィールドを SHIPPINGDELIVERY に置き換えると、サンプル出力が得られます。このサンプルでは、CX Insights に「phone」と「cellphone」を含むが、「shipping」または「delivery」を含まない会話にハイライト ラベルを追加するように指示しています。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
  • DISPLAY_NAME: フレーズ マッチャーの名前(人が読める形式)。
  • QUERY: 照合する単語またはフレーズ。

HTTP メソッドと URL:

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

リクエストの本文(JSON):

{
  "display_name": DISPLAY_NAME,
  "type": "ALL_OF",
  "active": true,
  "phrase_match_rule_groups": {
    "type": "ANY_OF",
    "phrase_match_rules": {
      "query": QUERY
      "config": {
        "exact_match_config": {}
      }
    },
    "phrase_match_rules": {
      "query": QUERY
      "config": {
        "exact_match_config": {}
      }
    },
    "phrase_match_rule_groups": {
      "type": "ALL_OF",
      "phrase_match_rules": {
        "query": QUERY
        "negated": "true"
        "config": {
          "exact_match_config": {}
        }
      },
      "phrase_match_rules": {
        "query": QUERY
        "negated": "true"
        "config": {
          "exact_match_config": {}
        }
      }
    }
  }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "name": "projects/PROJECT_ID/locations/us-central1/phraseMatchers/PHRASE_MATCHER_ID",
  "revisionId": "456456456",
  "revisionCreateTime": "2021-01-20T10:10:10.123000Z",
  "displayName": "NON_SHIPPING_PHONE_SERVICE",
  "type": "ALL_OF",
  "active": true,
  "phraseMatchRuleGroups": [
    {
      "type": "ANY_OF",
      "phraseMatchRules": [
        {
          "query": "PHONE",
          "config": {
            "exactMatchConfig": {}
          }
        },
        {
          "query": "CELLPHONE",
          "config": {
            "exactMatchConfig": {}
          }
        }
      ]
    },
    {
      "type": "ALL_OF",
      "phraseMatchRules": [
        {
          "query": "SHIPPING",
          "negated": true,
          "config": {
            "exactMatchConfig": {}
          }
        },
        {
          "query": "DELIVERY",
          "negated": true,
          "config": {
            "exactMatchConfig": {}
          }
        }
      ]
    }
  ],
  "activationUpdateTime": "2021-01-20T10:10:10.123000Z"
}

Python

CX Insights で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

from google.cloud import contact_center_insights_v1


def create_phrase_matcher_all_of(
    project_id: str,
) -> contact_center_insights_v1.PhraseMatcher:
    """Creates a phrase matcher that matches all specified queries.

    Args:
        project_id:
            The project identifier. For example, 'my-project'.

    Returns:
        A phrase matcher.
    """
    # Construct a parent resource.
    parent = (
        contact_center_insights_v1.ContactCenterInsightsClient.common_location_path(
            project_id, "us-central1"
        )
    )

    # Construct a phrase matcher that matches all of its rule groups.
    phrase_matcher = contact_center_insights_v1.PhraseMatcher()
    phrase_matcher.display_name = "NON_SHIPPING_PHONE_SERVICE"
    phrase_matcher.type_ = (
        contact_center_insights_v1.PhraseMatcher.PhraseMatcherType.ALL_OF
    )
    phrase_matcher.active = True

    # Construct a rule group to match the word "PHONE" or "CELLPHONE", ignoring case sensitivity.
    rule_group_phone_or_cellphone = contact_center_insights_v1.PhraseMatchRuleGroup()
    rule_group_phone_or_cellphone.type_ = (
        contact_center_insights_v1.PhraseMatchRuleGroup.PhraseMatchRuleGroupType.ANY_OF
    )

    for word in ["PHONE", "CELLPHONE"]:
        rule = contact_center_insights_v1.PhraseMatchRule()
        rule.query = word
        rule.config.exact_match_config = contact_center_insights_v1.ExactMatchConfig()
        rule_group_phone_or_cellphone.phrase_match_rules.append(rule)
    phrase_matcher.phrase_match_rule_groups.append(rule_group_phone_or_cellphone)

    # Construct another rule group to not match the word "SHIPPING" or "DELIVERY", ignoring case sensitivity.
    rule_group_not_shipping_or_delivery = (
        contact_center_insights_v1.PhraseMatchRuleGroup()
    )
    rule_group_not_shipping_or_delivery.type_ = (
        contact_center_insights_v1.PhraseMatchRuleGroup.PhraseMatchRuleGroupType.ALL_OF
    )

    for word in ["SHIPPING", "DELIVERY"]:
        rule = contact_center_insights_v1.PhraseMatchRule()
        rule.query = word
        rule.negated = True
        rule.config.exact_match_config = contact_center_insights_v1.ExactMatchConfig()
        rule_group_not_shipping_or_delivery.phrase_match_rules.append(rule)
    phrase_matcher.phrase_match_rule_groups.append(rule_group_not_shipping_or_delivery)

    # Call the Insights client to create a phrase matcher.
    insights_client = contact_center_insights_v1.ContactCenterInsightsClient()
    phrase_matcher = insights_client.create_phrase_matcher(
        parent=parent, phrase_matcher=phrase_matcher
    )

    print(f"Created {phrase_matcher.name}")
    return phrase_matcher

Java

CX Insights で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。


import com.google.cloud.contactcenterinsights.v1.ContactCenterInsightsClient;
import com.google.cloud.contactcenterinsights.v1.ExactMatchConfig;
import com.google.cloud.contactcenterinsights.v1.LocationName;
import com.google.cloud.contactcenterinsights.v1.PhraseMatchRule;
import com.google.cloud.contactcenterinsights.v1.PhraseMatchRuleConfig;
import com.google.cloud.contactcenterinsights.v1.PhraseMatchRuleGroup;
import com.google.cloud.contactcenterinsights.v1.PhraseMatcher;
import java.io.IOException;

public class CreatePhraseMatcherAllOf {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace this variable before running the sample.
    String projectId = "my_project_id";

    createPhraseMatcherAllOf(projectId);
  }

  public static PhraseMatcher createPhraseMatcherAllOf(String projectId) 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 phrase matcher that matches all of its rule groups.
      PhraseMatcher.Builder phraseMatcher =
          PhraseMatcher.newBuilder()
              .setDisplayName("NON_SHIPPING_PHONE_SERVICE")
              .setTypeValue(1)
              .setActive(true);

      // Construct a rule group to match the word "PHONE" or "CELLPHONE", ignoring case sensitivity.
      PhraseMatchRuleGroup.Builder ruleGroup1 = PhraseMatchRuleGroup.newBuilder().setTypeValue(2);

      String[] words1 = {"PHONE", "CELLPHONE"};
      for (String w : words1) {
        PhraseMatchRule.Builder rule =
            PhraseMatchRule.newBuilder()
                .setQuery(w)
                .setConfig(
                    PhraseMatchRuleConfig.newBuilder()
                        .setExactMatchConfig(ExactMatchConfig.newBuilder().build())
                        .build());
        ruleGroup1.addPhraseMatchRules(rule.build());
      }
      phraseMatcher.addPhraseMatchRuleGroups(ruleGroup1.build());

      // Construct another rule group to not match the word "SHIPPING" or "DELIVERY",
      // ignoring case sensitivity.
      PhraseMatchRuleGroup.Builder ruleGroup2 = PhraseMatchRuleGroup.newBuilder().setTypeValue(1);

      String[] words2 = {"SHIPPING", "DELIVERY"};
      for (String w : words2) {
        PhraseMatchRule.Builder rule =
            PhraseMatchRule.newBuilder()
                .setQuery(w)
                .setNegated(true)
                .setConfig(
                    PhraseMatchRuleConfig.newBuilder()
                        .setExactMatchConfig(ExactMatchConfig.newBuilder().build())
                        .build());
        ruleGroup2.addPhraseMatchRules(rule.build());
      }
      phraseMatcher.addPhraseMatchRuleGroups(ruleGroup2.build());

      // Construct a parent resource.
      LocationName parent = LocationName.of(projectId, "us-central1");

      // Call the Insights client to create a phrase matcher.
      PhraseMatcher response = client.createPhraseMatcher(parent, phraseMatcher.build());
      System.out.printf("Created %s%n", response.getName());
      return response;
    }
  }
}

Node.js

CX Insights で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

/**
 * TODO(developer): Uncomment this variable before running the sample.
 */
// const projectId = 'my_project_id';

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

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

async function createPhraseMatcherAllOf() {
  const [phraseMatcher] = await client.createPhraseMatcher({
    parent: client.locationPath(projectId, 'us-central1'),
    phraseMatcher: {
      displayName: 'NON_SHIPPING_PHONE_SERVICE',
      type: 'ALL_OF',
      active: true,
      phraseMatchRuleGroups: [
        {
          type: 'ANY_OF',
          phraseMatchRules: [
            {
              query: 'PHONE',
              config: {
                exactMatchConfig: {},
              },
            },
            {
              query: 'CELLPHONE',
              config: {
                exactMatchConfig: {},
              },
            },
          ],
        },
        {
          type: 'ALL_OF',
          phraseMatchRules: [
            {
              query: 'SHIPPING',
              negated: true,
              config: {
                exactMatchConfig: {},
              },
            },
            {
              query: 'DELIVERY',
              negated: true,
              config: {
                exactMatchConfig: {},
              },
            },
          ],
        },
      ],
    },
  });
  console.info(`Created ${phraseMatcher.name}`);
}
createPhraseMatcherAllOf();