Chat アプリとして認証する

このガイドでは、サービス アカウントを設定して、Chat アプリに代わって Google Chat REST API にアクセスする方法について説明します。まず、サービス アカウントの作成方法について説明します。次に、サービス アカウントを使用して Chat API で認証し、Chat スペースにメッセージを投稿するスクリプトを作成します。

チャットアプリは、Google Chat REST API を非同期的に呼び出す際に、サービス アカウントを使用して認証を行い、次のことを行えるようにします。

  • spaces.messages.create を使用して Google Chat にメッセージを送信し、次のことを行います。
    • 長時間実行のバックグラウンド ジョブの実行が終了したときにユーザーに通知します。
    • サーバーがオフラインになったことをユーザーに知らせる。
    • カスタマー サポート担当者に、新たに作成されたお客様のケースに対応するよう依頼する。
  • 以前に送信したメッセージを spaces.messages.update で次のように更新します。
    • 進行中のオペレーションのステータスを変更します。
    • タスクの割り当て先または期限を更新します。
  • spaces.members.list を使用してスペース内のユーザーを一覧表示するには、次の操作を行います。
    • スペースのメンバーを確認できます。
    • スペースのメンバーにチームの全員が含まれていることを確認します。

サービス アカウントで認証されている場合、Chat スペースのデータを取得したり、Chat スペースでアクションを実行したりするには、Chat アプリがスペースのメンバーである必要があります。たとえば、スペースのメンバーをリストしたり、スペースでメッセージを作成したりするには、Chat アプリがそれ自体がスペースのメンバーである必要があります。

チャットアプリがユーザーデータにアクセスしたり、ユーザーに代わってアクションを実行したりする必要がある場合は、代わりにユーザーとして認証してください。

ドメイン管理者は、ドメイン全体の権限を委任することで、アプリケーションのサービス アカウントにユーザーデータへのアクセスを承認できます。その際、各ユーザーに同意を求める必要はありません。ドメイン全体の委任を構成したら、サービス アカウントを使用して API 呼び出しを行い、ユーザー アカウントの権限を借用できます。サービス アカウントは認証に使用されますが、ドメイン全体の委任はユーザーの権限を借用するため、ユーザー認証とみなされます。ユーザー認証が必要な機能は、ドメイン全体の委任を使用できます。

Chat アプリに認証が必要な場合と、使用する認証の種類については、Chat API の認証と認可の概要で必要な認証の種類をご覧ください。

Prerequisites

このガイドの例を実行するには、次の前提条件が必要です。

Python

ステップ 1: Google Cloud Console でサービス アカウントを作成する

チャットアプリが Google API へのアクセスに使用するサービス アカウントを作成します。

サービス アカウントの作成:

サービス アカウントを作成するには、次の操作を行います。

  1. Google Cloud コンソールで、メニュー アイコン > [IAM と管理] > [サービス アカウント] に移動します。

    [サービス アカウント] に移動

  2. [サービス アカウントを作成] をクリックします。
  3. サービス アカウントの詳細を入力し、[作成して続行] をクリックします。
  4. (省略可)サービス アカウントにロールを割り当てて、Google Cloud プロジェクトのリソースへのアクセス権を付与します。詳しくは、リソースへのアクセス権の付与、変更、取り消しをご覧ください。
  5. [続行] をクリックします。
  6. (省略可)このサービス アカウントを使用してアクションを管理、実行できるユーザーまたはグループを入力します。詳しくは、サービス アカウントの権限借用の管理をご覧ください。
  7. [完了] をクリックします。サービス アカウントのメールアドレスをメモします。

サービス アカウントが [サービス アカウント] ページに表示されます。次に、サービス アカウントの秘密鍵を作成します。

秘密鍵を作成する

サービス アカウントの秘密鍵を作成する手順は次のとおりです。

  1. Google Cloud コンソールで、メニュー アイコン > [IAM と管理] > [サービス アカウント] に移動します。

    [サービス アカウント] に移動

  2. サービス アカウントを選択します。
  3. [] > [鍵を追加] > [新しい鍵を作成] の順にクリックします。
  4. [JSON] を選択し、[作成] をクリックします。

    新しい公開鍵/秘密鍵のペアが生成され、新しいファイルとしてマシンにダウンロードされます。このファイルはこの鍵の唯一のコピーです。鍵を安全に保存する方法については、サービス アカウント キーの管理をご覧ください。

  5. [閉じる] をクリックします。

サービス アカウントの詳細については、Google Cloud IAM ドキュメントのサービス アカウントをご覧ください。

ステップ 2: サービス アカウントを使用して Chat REST API で認証するスクリプトを作成する

次のコードは、サービス アカウントを使用して Chat REST API で認証し、Chat スペースにメッセージを送信します。

Python

  1. 作業ディレクトリに chat_app_auth.py という名前のファイルを作成します。
  2. chat_app_auth.py に次のコードを含めます。

    from httplib2 import Http
    from oauth2client.service_account import ServiceAccountCredentials
    from apiclient.discovery import build
    
    # Specify required scopes.
    SCOPES = ['https://www.googleapis.com/auth/chat.bot']
    
    # Specify service account details.
    CREDENTIALS = ServiceAccountCredentials.from_json_keyfile_name(
        'service_account.json', SCOPES)
    
    # Build the URI and authenticate with the service account.
    chat = build('chat', 'v1', http=CREDENTIALS.authorize(Http()))
    
    # Create a Chat message.
    result = chat.spaces().messages().create(
    
        # The space to create the message in.
        #
        # Replace SPACE_NAME with a space name.
        # Obtain the space name from the spaces resource of Chat API,
        # or from a space's URL.
        parent='spaces/SPACE_NAME',
    
        # The message to create.
        body={'text': 'Hello, world!'}
    
    ).execute()
    
    print(result)
    
  3. コード内で、SPACE_NAME はスペース名に置き換えます。スペース名は、Chat API の spaces.list メソッド、またはスペースの URL から取得できます。

ステップ 3: 完全なサンプルを実行する

作業ディレクトリで、サンプルをビルドして実行します。

Python

python3 chat_app_auth.py

このスクリプトは、Chat REST API に対して認証済みのリクエストを行います。このリクエストは、Chat スペースに Chat アプリとしてメッセージを投稿して応答します。

サンプルのトラブルシューティング

このセクションでは、このサンプルを実行しようとしたときに発生する可能性のある一般的な問題について説明します。

このアプリの使用は許可されていません

chat_app_auth.py の実行時に、次のようなエラーが発生することがあります。

<HttpError 403 when requesting https://chat.googleapis.com/v1/spaces/{space}/messages?alt=json returned "You are not permitted to use this app". Details: "You are not permitted to use this app">

このエラー メッセージは、Chat アプリは投稿しようとしている Chat スペースに Chat メッセージを送信する権限がないことを意味します。

このエラーを解決するには、chat_app_auth.py で指定された Chat スペースに Chat アプリを追加します。

次のステップ

Chat API でできることについては、Chat API のリファレンス ドキュメントをご覧ください。