API による操作

CX 用 API の使用は ES 用 API の使用と似ていますが、新しい型、メソッド、フィールドに合わせて一部のリソースパスとメソッドが変更されています。

システムで次の処理を行う必要があります。

  • Dialogflow CX ではまだ統合をサポートしていないため、エンドユーザーと直接対話するユーザー インターフェースをシステムが提供する必要があります。
  • 会話ターンごとに Dialogflow API を呼び出して、エンドユーザー入力を API に送信する必要があります。
  • エージェントのレスポンスが純粋に静的な(一般的でない)場合を除き、webhook サービスをホストして、Webhook 対応フルフィルメントを処理する必要があります。

次の図は、セッションの 1 回の対話ターンで実行される手順を示しています。

API フロー図。

  1. エンドユーザーが、エンドユーザー入力と呼ばれる何かしらの情報を入力または発声します。
  2. ユーザー インターフェース システムが入力を受信し、インテント検出リクエストで Dialogflow API に転送します。
  3. Dialogflow API がインテント検出リクエストを受信します。入力とインテントまたはフォーム パラメータを照合し、必要に応じてパラメータを設定し、セッションの状態を更新します。Webhook 対応フルフィルメントを呼び出す必要がある場合、Webhook サービスに Webhook リクエストを送信します。それ以外の場合は、手順 6 に進みます。
  4. Webhook サービスが Webhook リクエストを受け取ります。サービスは、外部 API の呼び出し、データベースのクエリや更新など、必要なアクションを実行します。
  5. Webhook サービスがレスポンスを作成し、Webhook レスポンスを Dialogflow に返します。
  6. Dialogflow がインテント検出レスポンスを作成します。Webhook が呼び出された場合、Webhook レスポンスで提供されたレスポンスが使用されます。Webhook が呼び出されなかった場合は、エージェントで定義された静的レスポンスが使用されます。Dialogflow が、ユーザー インターフェース システムにインテント検出レスポンスを送信します。
  7. ユーザー インターフェース システムがインテント検出レスポンスを受信し、テキストまたは音声のレスポンスをエンドユーザーに転送します。
  8. エンドユーザーがレスポンスを確認または聞き取ります。

処理のためにエンドユーザー入力を CX API に送信する方法は、ES API とよく似ています。以下の例では、Sessions リソースの detectIntent メソッドを呼び出します。

REST とコマンドライン

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

  • project-id: GCP プロジェクト ID
  • agent-id: エージェント ID
  • session-id: セッション ID
  • end-user-input: エンドユーザーの入力

HTTP メソッドと URL:

POST https://dialogflow.googleapis.com/v3beta1/projects/project-id/locations/us/agents/agent-id/sessions/session-id:detectIntent

JSON 本文のリクエスト:

{
  "queryInput": {
    "text": {
      "text": "end-user-input"
    },
    "languageCode": "en"
  },
  "queryParams": {
    "timeZone": "America/Los_Angeles"
  }
}

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

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

{
  "responseId": "89dd432b-1df4-48c4-be6b-d6550c3422b0",
  "queryResult": {
    "text": "I want to ask about data plans for international travel.",
    "languageCode": "en",
    "responseMessages": [
      {
        "text": {
          "text": [
            "Sure! I can help with that. "
          ]
        }
      },
      {
        "text": {
          "text": [
            "I need to ask a few questions before I can find the best option for you."
          ]
        }
      },
      {
        "text": {
          "text": [
            "What's your name?"
          ]
        }
      }
    ],
    "currentPage": {
      "name": "projects/project-id/locations/us/agents/027ac861-f275-45ed-a879-92aeb554df4e/pages/48d4352f-c995-4e46-8857-999709882959",
      "displayName": "Collect Customer Info"
    },
    "intent": {
      "name": "projects/project-id/locations/us/agents/027ac861-f275-45ed-a879-92aeb554df4e/intents/d48acf76-10f6-491f-be0c-cb58e1ce74d6",
      "displayName": "Data Plan Intent"
    },
    "intentDetectionConfidence": 1
  }
}