OpenAPI ツール

エージェントは、OpenAPI スキーマを提供することで、OpenAPI ツールを使用して外部 API に接続できます。エージェントがユーザーに代わって API を呼び出します。

制限事項:

  • 各 OpenAPI ツールには、オペレーションまたは関数を 1 つだけ指定できます。

サンプル スキーマ:

openapi: 3.0.0
info:
  title: Simple Pets API
  version: 1.0.0
servers:
  - url: 'https://api.pet-service-example.com/v1'
paths:
  /pets/{petId}:
    get:
      summary: Return a pet by ID.
      operationId: getPet
      parameters:
        - in: path
          name: petId
          required: true
          description: Pet id
          schema:
            type: integer
      responses:
        200:
          description: OK
  /pets:
    get:
      summary: List all pets
      operationId: listPets
      parameters:
        - name: petName
          in: query
          required: false
          description: Pet name
          schema:
            type: string
        - name: label
          in: query
          description: Pet label
          style: form
          explode: true
          required: false
          schema:
            type: array
            items:
              type: string
        - name: X-OWNER
          in: header
          description: Optional pet owner provided in the HTTP header
          required: false
          schema:
            type: string
        - name: X-SESSION
          in: header
          description: session id
          required: true
          schema:
            type: string
          x-ces-session-context: $context.session_id
      responses:
        '200':
          description: An array of pets
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Pet'
    post:
      summary: Create a new pet
      operationId: createPet
      requestBody:
        description: Pet to add to the store
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Pet'
      responses:
        '201':
          description: Pet created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pet'
components:
  schemas:
    Pet:
      type: object
      required:
        - id
        - name
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        owner:
          type: string
        label:
          type: array
          items:
            type: string

セッション コンテキスト変数の挿入

セッション ID などのセッション コンテキストから、OpenAPI リクエストに変数を挿入できます。パラメータ定義内で x-ces-session-context 拡張フィールドを使用します。値は、context オブジェクト内の変数へのパスにする必要があります。

次に例を示します。

      parameters:
        - name: X-SESSION
          in: header
          description: session id
          required: true
          schema:
            type: string
          # This extension injects the session ID
          x-ces-session-context: $context.session_id

セキュリティに関する考慮事項

OpenAPI ツールを構成する際は、権限の処理方法を理解することが重要です。

  • ツールの実行 ID: OpenAPI ツールによって実行されるアクションは、エージェントとやり取りするエンドユーザーの直接の権限ではなく、CX Agent Studio サービス アカウントに付与された権限を使用して実行されます。
  • 推移的アクセス リスク: CX Agent Studio サービス アカウントに Cloud Run functions を呼び出す権限がある場合、エンドユーザーが直接アクセスできない場合でも、そのサービス アカウントがアクセスできる任意の関数をツールが呼び出す可能性があります。

この動作に関連する潜在的なリスクを軽減するには:

  1. 専用プロジェクトを使用する: 他の重要なリソースや機密性の高い関数とは別に、専用のプロジェクトにエージェント アプリケーションをデプロイすることを強くおすすめします。この分離により、CX Agent Studio サービス アカウントで使用できる権限の範囲が制限されます。
  2. VPC Service Controls を実装する: VPC Service Controls を使用して、機密性の高いサービスの周囲にサービス境界を定義します。これにより、Cloud Run functions などのサービスへのアクセスを制御し、CX Agent Studio サービス アカウントからの不要な呼び出しを防ぐことができます。
  3. 最小権限に従う: CX Agent Studio サービス アカウントに、目的の機能に必要な最小限の Identity and Access Management ロールと権限のみが付与されていることを確認します。

API の認証

外部 API を呼び出す際は、次の認証オプションがサポートされています。

サービス エージェントの ID トークン

CX Agent Studio は、Customer Engagement Suite のサービス エージェントを使用して ID トークンを生成できます。トークンは、CX Agent Studio が外部 API を呼び出すときに認可 HTTP ヘッダーに追加されます。

Cloud Run functions と Cloud Run のサービスがエージェントと同じプロジェクト内にある場合、これらを呼び出すための追加の IAM 権限は必要ありません。異なるプロジェクトにある場合は、サービス エージェント アドレスに roles/cloudfunctions.invoker ロールと roles/run.invoker ロールを付与すると、ID トークンを使用して Cloud Run functions と Cloud Run サービスにアクセスできます。

サービス アカウントの認証

サービス アカウントは、サポートされている任意の Google API へのツール リクエストを認証するために使用できます。サービス アカウントのメールアドレスを指定します。

まだ作成していない場合は、サービス アカウントを作成します。

サービス アカウントはプリンシパルであるため、他のプリンシパルと同様に、ロールを付与することでプロジェクト内のリソースにアクセスできます。サービス アカウントのメールアドレスは、アクセス トークンを生成するために使用されます。このトークンは、ツール リクエストの Authorization ヘッダーで送信されます。

サービス アカウントを使用するようにツールを構成するユーザーには、次の権限が必要です。

  • roles/iam.serviceAccountUser

Dialogflow CX がトークンを生成するには、Customer Engagement Suite のサービス エージェントに次の権限が必要です。

  • roles/iam.serviceAccountTokenCreator

サービス アカウントには、ツールをホストしているサービスにアクセスする権限も必要です。

OAuth

使用しているサービスの OAuth 情報を入力します。

Google サービスに OAuth を使用している場合は、サービス用に OAuth を構成する必要があります。

API キー

API キー認証は、キー名、リクエストの場所(ヘッダーまたはクエリ文字列)、API キーを指定して、CX Agent Studio がリクエストで API キーを渡すことで構成できます。Secret Manager のシークレット バージョンを使用して API キーを指定します。

Secret Manager の認証

Secret Manager を使用して、認証情報をシークレットとして保存できます。シークレットを使用してツールを認証するために必要な手順は次のとおりです。

  1. シークレットをまだ作成していない場合は、シークレットを作成します。
  2. 新しいシークレットに対する Customer Engagement Suite サービス エージェントSecret Manager のシークレット アクセサーroles/secretmanager.secretAccessor)ロールを付与します。
  3. 認証情報をクリップボードにコピーします。
  4. シークレットに新しいシークレット バージョンを追加します。認証情報をシークレット値として貼り付けます。
    • 末尾の改行文字は省略します。
  5. 追加したシークレット バージョンの名前をコピーします。名前の形式は projects/{project_id}/secrets/{secret_id}/versions/{version_id} です。このシークレット バージョンをツール構成に使用します。