Google Chat ユーザーとして認証と認可を行う

このガイドでは、ユーザーの Google 認証情報を使用して OAuth 2.0 を使用して Chat API にアクセスする方法について説明します。ユーザー認証情報を使用して認証と認可を行うと、Chat アプリはユーザーデータにアクセスし、認証されたユーザーの代わりにオペレーションを実行できます。ユーザーの代わりに認証することで、アプリはそのユーザーと同じ権限を持ち、ユーザーが実行したかのようにアクションを実行できます。

ユーザー認証情報を使用して API 呼び出しを認証、認可すると、チャットアプリで次のことが可能になります。

  • Chat スペースを作成する。
  • Chat スペースとグループ会話にユーザーを追加する。
  • 次のような他の Workspace API でユーザーデータを扱う。

アプリがユーザー認証のあるアクション(スペースの作成など)を実行すると、承認したユーザーに代わってそのアクションを実行したアプリの名前を示すアトリビューション メッセージが Google Chat に表示されます。

Google Chat アプリでユーザー用のスペースが作成されます。
図 1. Chat アプリがユーザーに代わってスペースを作成する際に Google Chat に表示されるアトリビューション メッセージ。

Chat アプリが認証を必要とするタイミングと使用する認証の種類の詳細については、Chat API の認証と認可の概要で必要な認証のタイプをご覧ください。

ドメイン管理者は、ドメイン全体の権限の委任を付与して、各ユーザーの同意を求めることなく、アプリケーションのサービス アカウントにユーザーのデータへのアクセスを許可できます。ドメイン全体の委任を構成すると、サービス アカウントはユーザー アカウントの権限を借用できます。サービス アカウントは認証に使用されますが、ドメイン全体の委任はユーザーの権限を借用するため、ユーザー認証とみなされます。ユーザー認証を必要とする機能はすべて、ドメイン全体の委任を使用できます。

前提条件

このガイドの例を実行するには、次の前提条件を満たす必要があります。

さらに、次の言語固有の前提条件を満たす必要があります。

Java

  • JDK 1.7 以降
  • Maven パッケージ管理ツール
  • 初期化された Maven プロジェクト。新しいプロジェクトを初期化するには、コマンドライン インターフェースで次のコマンドを実行します。

    mvn archetype:generate -DgroupId=com.google.chat.app.authsample -DartifactId=auth-sample-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
    

Python

  • Python 3.6 以降
  • pip パッケージ管理ツール

Node.js

  • Node.js
  • npm パッケージ管理ツール
  • 初期化済みの Node.js プロジェクト。新しいプロジェクトを初期化するには、新しいフォルダを作成して切り替え、コマンドライン インターフェースで次のコマンドを実行します。

    npm init
    

Apps Script

ステップ 1: OAuth 同意画面を設定し、スコープを指定してアプリを登録する

認可に OAuth 2.0 を使用すると、プロジェクトの概要、そのポリシー、リクエストされた認可スコープを含む同意画面がユーザーに表示されます。アプリの OAuth 同意画面を構成すると、Google がユーザーやアプリの審査担当者に表示する内容を定義し、後で公開できるようにアプリを登録します。

OAuth 2.0 を使用するすべてのアプリには同意画面の構成が必要ですが、リストする必要があるのは、Google Workspace 組織外のユーザーが使用するアプリのスコープのみです。

  1. Google Cloud コンソールで、メニュー > [API とサービス] > [OAuth 同意画面] に移動します。

    OAuth 同意画面に移動

  2. アプリのユーザータイプを選択し、[作成] をクリックします。

  3. アプリ登録フォームに入力し、[保存して次へ] をクリックします。

  4. [スコープを追加または削除] をクリックします。アプリに必要な認可スコープを追加して検証し、[Update]、[Save and Continue] の順にクリックします。

  5. アプリ登録の概要を確認します。[編集] をクリックして変更するか、[ダッシュボードに戻る] をクリックします。

ステップ 2: Google Cloud コンソールで OAuth クライアント ID の認証情報を作成する

エンドユーザーとして認証を行い、アプリ内でユーザーデータにアクセスするには、OAuth 2.0 クライアント ID を 1 つ以上作成する必要があります。クライアント ID は、Google の OAuth サーバーで個々のアプリを識別するために使用します。アプリが複数のプラットフォーム(Android、iOS、ウェブなど)で実行されている場合は、プラットフォームごとに個別のクライアント ID を作成する必要があります。

OAuth クライアント ID の認証情報を作成する

OAuth クライアント ID の作成方法については、該当するアプリケーション タイプを選択してください。

ウェブ アプリケーション

  1. Google Cloud コンソールで、メニュー > [API とサービス] > [認証情報] に移動します。

    [認証情報] に移動

  2. [認証情報を作成] > [OAuth クライアント ID] の順にクリックします。
  3. [アプリケーションの種類] > [ウェブ アプリケーション] をクリックします。
  4. [名前] フィールドに、認証情報の名前を入力します。この名前は Google Cloud コンソールにのみ表示されます。
  5. アプリに関連する承認済み URI を追加します。
    • クライアントサイド アプリ(JavaScript) - [承認済みの JavaScript 生成元] で [URI を追加] をクリックします。次に、ブラウザ リクエストに使用する URI を入力します。これは、アプリケーションが OAuth 2.0 サーバーに API リクエストを送信できるドメインを示します。
    • サーバーサイド アプリ(Java、Python など) - [承認済みのリダイレクト URI] の下にある [URI を追加] をクリックします。次に、OAuth 2.0 サーバーがレスポンスを送信するエンドポイント URI を入力します。
  6. [作成] をクリックします。OAuth クライアントの作成画面が表示され、新しいクライアント ID とクライアント シークレットが表示されます。

    クライアント ID をメモします。クライアント シークレットはウェブ アプリケーションには使用されません。

  7. [OK] をクリックします。新しく作成された認証情報が [OAuth 2.0 クライアント ID] に表示されます。

Android

  1. Google Cloud コンソールで、メニュー > [API とサービス] > [認証情報] に移動します。

    [認証情報] に移動

  2. [認証情報を作成] > [OAuth クライアント ID] の順にクリックします。
  3. [アプリケーションの種類] > [Android] をクリックします。
  4. [名前] フィールドに、認証情報の名前を入力します。この名前は Google Cloud コンソールにのみ表示されます。
  5. [パッケージ名] フィールドに、AndroidManifest.xml ファイルにあるパッケージ名を入力します。
  6. [SHA-1 証明書のフィンガープリント] に、生成された SHA-1 証明書のフィンガープリントを入力します。
  7. [作成] をクリックします。[OAuth クライアントの作成] 画面が開き、新しいクライアント ID が表示されます。
  8. [OK] をクリックします。新しく作成された認証情報が [OAuth 2.0 クライアント ID] に表示されます。

iOS

  1. Google Cloud コンソールで、メニュー > [API とサービス] > [認証情報] に移動します。

    [認証情報] に移動

  2. [認証情報を作成] > [OAuth クライアント ID] の順にクリックします。
  3. [アプリケーションの種類] > [iOS] をクリックします。
  4. [名前] フィールドに、認証情報の名前を入力します。この名前は Google Cloud コンソールにのみ表示されます。
  5. [Bundle ID] フィールドに、アプリの Info.plist ファイルに記載されているバンドル ID を入力します。
  6. (省略可)アプリが Apple App Store に表示されている場合は、App Store ID を入力します。
  7. 省略可: [Team ID(チーム ID)] フィールドに、Apple によって生成され、チームに割り当てられた一意の 10 文字の文字列を入力します。
  8. [作成] をクリックします。[OAuth クライアントの作成] 画面が表示され、新しいクライアント ID とクライアント シークレットが表示されます。
  9. [OK] をクリックします。新しく作成された認証情報が [OAuth 2.0 クライアント ID] に表示されます。

Chrome アプリ

  1. Google Cloud コンソールで、メニュー > [API とサービス] > [認証情報] に移動します。

    [認証情報] に移動

  2. [認証情報を作成] > [OAuth クライアント ID] の順にクリックします。
  3. [アプリケーションの種類] > [Chrome アプリ] をクリックします。
  4. [名前] フィールドに、認証情報の名前を入力します。この名前は Google Cloud コンソールにのみ表示されます。
  5. [アプリケーション ID] に、アプリの一意の ID 文字列(32 文字)を入力します。この ID の値は、アプリの Chrome ウェブストアの URL や Chrome ウェブストアのデベロッパー ダッシュボードで確認できます。
  6. [作成] をクリックします。[OAuth クライアントの作成] 画面が表示され、新しいクライアント ID とクライアント シークレットが表示されます。
  7. [OK] をクリックします。新しく作成された認証情報が [OAuth 2.0 クライアント ID] に表示されます。

デスクトップ アプリ

  1. Google Cloud コンソールで、メニュー > [API とサービス] > [認証情報] に移動します。

    [認証情報] に移動

  2. [認証情報を作成] > [OAuth クライアント ID] の順にクリックします。
  3. [アプリケーションの種類] > [デスクトップ アプリ] をクリックします。
  4. [名前] フィールドに、認証情報の名前を入力します。この名前は Google Cloud コンソールにのみ表示されます。
  5. [作成] をクリックします。[OAuth クライアントの作成] 画面が表示され、新しいクライアント ID とクライアント シークレットが表示されます。
  6. [OK] をクリックします。新しく作成された認証情報が [OAuth 2.0 クライアント ID] に表示されます。

テレビ、入力制限のあるデバイス

  1. Google Cloud コンソールで、メニュー > [API とサービス] > [認証情報] に移動します。

    [認証情報] に移動

  2. [認証情報を作成] > [OAuth クライアント ID] の順にクリックします。
  3. [アプリケーションの種類] > [テレビと入力制限のあるデバイス] をクリックします。
  4. [名前] フィールドに、認証情報の名前を入力します。この名前は Google Cloud コンソールにのみ表示されます。
  5. [作成] をクリックします。[OAuth クライアントの作成] 画面が表示され、新しいクライアント ID とクライアント シークレットが表示されます。
  6. [OK] をクリックします。新しく作成された認証情報が [OAuth 2.0 クライアント ID] に表示されます。

ユニバーサル Windows プラットフォーム(UWP)

  1. Google Cloud コンソールで、メニュー > [API とサービス] > [認証情報] に移動します。

    [認証情報] に移動

  2. [認証情報を作成] > [OAuth クライアント ID] の順にクリックします。
  3. [アプリケーションの種類] > [Universal Windows Platform (UWP)] をクリックします。
  4. [名前] フィールドに、認証情報の名前を入力します。この名前は Google Cloud コンソールにのみ表示されます。
  5. [ストア ID] に、アプリに固有の 12 文字の Microsoft Store ID 値を入力します。この ID は、アプリの Microsoft Store URL とパートナー センターで確認できます。
  6. [作成] をクリックします。[OAuth クライアントの作成] 画面が表示され、新しいクライアント ID とクライアント シークレットが表示されます。
  7. [OK] をクリックします。新しく作成された認証情報が [OAuth 2.0 クライアント ID] に表示されます。

クライアント シークレットの JSON ファイルをダウンロードする

クライアント シークレット ファイルは、OAuth クライアント ID の認証情報を JSON 表現で表したものです。Chat アプリは、認証情報を提供する際にこの認証情報を参照できます。

  1. Google Cloud コンソールで、メニュー > [API とサービス] > [認証情報] に移動します。

    [認証情報] に移動

  2. [OAuth 2.0 クライアント ID] で、作成したクライアント ID をクリックします。

  3. [JSON をダウンロード] をクリックします。

  4. ファイルを client_secrets.json として保存します。

ステップ 3: Google クライアント ライブラリとその他の依存関係をインストールする

プロジェクトに必要な Google クライアント ライブラリとその他の依存関係をインストールします。

Java

Google クライアント ライブラリやその他の必要な依存関係を Maven プロジェクトに追加するには、プロジェクトのディレクトリにある pom.xml ファイルを編集して、次の依存関係を追加します。

<dependencies>
  <!-- ... existing dependencies ... -->
  <dependency>
    <groupId>com.google.apis</groupId>
    <artifactId>google-api-services-chat</artifactId>
    <version>v1-rev20230905-2.0.0</version>
  </dependency>
  <dependency>
    <groupId>com.google.auth</groupId>
    <artifactId>google-auth-library-oauth2-http</artifactId>
    <version>1.19.0</version>
  </dependency>
  <dependency>
    <groupId>com.google.oauth-client</groupId>
    <artifactId>google-oauth-client-jetty</artifactId>
    <version>1.34.1</version>
  </dependency>
  <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.10.1</version>
  </dependency>
</dependencies>

Python

Python 用 Google クライアント ライブラリをまだインストールしていない場合は、コマンドライン インターフェースで次のコマンドを実行します。

pip3 install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib oauth2client

Node.js

Google クライアント ライブラリやその他の必要な依存関係を Node.js プロジェクトに追加するには、プロジェクトのディレクトリに切り替えて、コマンドライン インターフェースで次のコマンドを実行します。

npm install "@googleapis/chat" open server-destroy

Apps Script

このサンプルでは、高度なチャットサービスを使用して Google Chat API を呼び出します。Apps Script プロジェクトのサービスを有効にするには:

  1. 左側のエディタ アイコン をクリックします。
  2. 左側の [サービス] の横にある [サービスを追加] をクリックします。
  3. [Google Chat API] を選択します。
  4. [バージョン] で [v1] を選択します。
  5. [追加] をクリックします。

Google のクライアント ライブラリでサポートされている任意の言語を使用できます。

ステップ 4: Chat API を呼び出すスクリプトを作成する

OAuth 認証を使用した API の呼び出しは、複数のステップからなるプロセスです。ウェブアプリやデスクトップ アプリケーションでは通常、次のようなプロセスが行われます。

  1. アプリは、認可スコープで指定されたユーザーデータへのアクセスをリクエストする認可ページにユーザーを誘導します。アプリはクライアント ID の認証情報で識別されます。
  2. ユーザーがアプリによってリクエストされた権限を確認し、リクエストを承認します。
  3. Google の認証サーバーは、認証コードとともにブラウザをアプリの HTTP エンドポイントにリダイレクトします。
  4. アプリケーションは Google の承認サーバーに別のリクエストを送信して、認証コードをアクセス トークンと交換します。
  5. アプリケーションがこのアクセス トークンを使用して、ユーザーに代わって API を呼び出します。

OAuth 承認プロセスの詳細については、OAuth 2.0 を使用した Google API へのアクセスガイドをご覧ください。

Java、Python、Node.js の次のコードサンプルでは、クライアント ライブラリを使用して OAuth 認可フローを実行します。ローカル HTTP サーバーを開いて認可サーバーから認証コードを受け取り、受け取ったコードをアクセス トークンと交換します。Apps Script コードサンプルでは、この承認フローは Apps Script によって処理されます。

認証フローが完了すると、スクリプトはユーザーのアクセス トークンを使用して Chat API で認証を行い、スペースを作成します。

Java

  1. プロジェクトのディレクトリで、src/main/java/com/google/chat/app/authsample/App.java ファイルを開きます。
  2. App.java の内容を次のコードに置き換えます。

    package com.google.chat.app.authsample;
    
    import com.google.api.client.auth.oauth2.Credential;
    import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
    import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
    import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
    import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
    import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
    import com.google.api.client.http.HttpTransport;
    import com.google.api.client.json.JsonFactory;
    import com.google.api.client.json.gson.GsonFactory;
    import com.google.api.client.util.store.FileDataStoreFactory;
    import com.google.api.services.chat.v1.HangoutsChat;
    import com.google.api.services.chat.v1.model.Space;
    
    import java.io.InputStreamReader;
    import java.util.Collection;
    import java.util.Collections;
    
    /**
     * Authenticates with Chat API via user credentials, then creates a Chat space.
     */
    public class App {
        // Application OAuth credentials.
        private static final String KEYS_RESOURCE_URI = "/client_secrets.json";
    
        // Define your app's authorization scopes.
        private static final Collection<String> SCOPES =
            Collections.singleton("https://www.googleapis.com/auth/chat.spaces.create");
    
        // Directory to store user credentials.
        private static final java.io.File DATA_STORE_DIR =
            new java.io.File(System.getProperty("user.home"), ".store/auth-sample-app");
    
        // Global instance of the JSON factory.
        private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
    
        // Global instance of the HTTP transport.
        private static HttpTransport httpTransport;
    
        // Global instance of the DataStoreFactory. The best practice is to make it a single
        // globally shared instance across your application.
        private static FileDataStoreFactory dataStoreFactory;
    
        public static void main( String[] args ) {
            try {
                // Run app.
                httpTransport = GoogleNetHttpTransport.newTrustedTransport();
                dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR);
                Credential userCredential = authorize();
                Space response = App.createChatSpace(userCredential);
                // Print details about the created space.
                System.out.println(response);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * Authorizes the installed application to access user's protected data.
         */
        private static Credential authorize() throws Exception {
            // Load client secrets.
            GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY,
                new InputStreamReader(App.class.getResourceAsStream("/client_secrets.json")));
            // Set up authorization code flow.
            GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
                httpTransport, JSON_FACTORY, clientSecrets, SCOPES)
                .setDataStoreFactory(dataStoreFactory)
                .build();
            // Authorize.
            return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
        }
    
        /**
         * Creates a Chat space.
         */
        private static Space createChatSpace(Credential userCredential) throws Exception {
            // Build the Chat API client and authenticate with the user account.
            HangoutsChat chatService = new HangoutsChat.Builder(
                httpTransport, JSON_FACTORY, userCredential)
                .setApplicationName("auth-sample-app")
                .build();
    
            // Create a Chat space.
            Space space = new Space()
                // To create a named space, set spaceType to SPACE.
                .setSpaceType("SPACE")
                // The user-visible name of the space.
                .setDisplayName("API-made");
            return chatService.spaces().create(space).execute();
        }
    }
    
  3. プロジェクトのディレクトリに resources という名前の新しいサブディレクトリを作成します。

  4. client_secrets.json ファイルを resources サブディレクトリにコピーします。

  5. クライアント シークレット ファイルをプロジェクト パッケージに含めるように Maven を構成するには、プロジェクトのディレクトリにあるファイル pom.xml を編集し、次の構成を <build> セクションに追加します。

    <build>
      <!-- ... existing configurations ... -->
      <resources>
        <resource>
          <directory>resources</directory>
        </resource>
      </resources>
    </build>
    
  6. プロジェクト パッケージに依存関係を含めてアプリケーションのメインクラスを実行するように Maven を構成するには、プロジェクトのディレクトリにある pom.xml ファイルを編集して、次の構成を <plugins> セクションに追加します。

    <plugins>
      <!-- ... existing configurations ... -->
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <archive>
            <manifest>
              <mainClass>com.google.chat.app.authsample.App</mainClass>
            </manifest>
          </archive>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
      </plugin>
    </plugins>
    

Python

  1. client_secrets.json を保持しているディレクトリにある chat_space_create_named.py という名前のファイルに、次のコードを保存します。

    from __future__ import print_function
    
    import os.path
    
    from google.auth.transport.requests import Request
    from google.oauth2.credentials import Credentials
    from google_auth_oauthlib.flow import InstalledAppFlow
    from googleapiclient.discovery import build
    from googleapiclient.errors import HttpError
    
    # Define your app's authorization scopes.
    # When modifying these scopes, delete the file token.json, if it exists.
    SCOPES = ["https://www.googleapis.com/auth/chat.spaces.create"]
    
    def main():
      '''
      Authenticates with Chat API via user credentials,
      then creates a Chat space.
      '''
    
      flow = InstalledAppFlow.from_client_secrets_file(
                        'client_secrets.json', SCOPES)
      creds = flow.run_local_server()
    
      # Build a service endpoint for Chat API.
      service = build('chat', 'v1', credentials=creds)
    
      # Use the service endpoint to call Chat API.
      result = service.spaces().create(
    
        # Details about the space to create.
        body = {
    
          # To create a named space, set spaceType to SPACE.
          'spaceType': 'SPACE',
    
          # The user-visible name of the space.
          'displayName': 'API-made'
    
        }
    
      ).execute()
    
      # Prints details about the created space.
      print(result)
    
    if __name__ == '__main__':
      main()
    

Node.js

  1. Node.js プロジェクトと client_secrets.json が格納されている同じディレクトリにある chat_space_create_named.js という名前のファイルに次のコードを保存します。

    const fs = require('fs');
    const path = require('path');
    const http = require('http');
    const url = require('url');
    const destroyer = require('server-destroy');
    
    const chat = require('@googleapis/chat');
    
    // Application OAuth credentials.
    const keys = require('./client_secrets.json').installed;
    
    // Define your app's authorization scopes.
    // When modifying these scopes, delete the file token.json, if it exists.
    const scopes = ["https://www.googleapis.com/auth/chat.spaces.create"];
    
    // Create a new OAuth2 client with the configured keys.
    const oauth2Client = new chat.auth.OAuth2(
      keys.client_id,
      keys.client_secret,
      'http://localhost:3000'
    );
    
    /**
     * Opens an HTTP server to accept the OAuth callback.
     * In this simple example, the only request to our webserver is to /?code=<code>.
     */
    async function authenticate(scopes) {
      const opn = (await import('open')).default;
    
      return new Promise((resolve, reject) => {
        // Generate the URL for authorization.
        const authorizeUrl = oauth2Client.generateAuthUrl({
          access_type: 'offline',
          scope: scopes.join(' '),
        });
        // Start the HTTP server to listen for the callback.
        const server = http
          .createServer(async (req, res) => {
            try {
              const qs = new url.URL(req.url, 'http://localhost:3000').searchParams;
              res.end('Authentication successful! Please return to the console.');
              server.destroy();
              const { tokens } = await oauth2Client.getToken(qs.get('code'));
              oauth2Client.credentials = tokens;
              resolve(oauth2Client);
            } catch (e) {
              reject(e);
            }
          })
          .listen(3000, () => {
            // Open the browser to the authorize URL to start the workflow.
            opn(authorizeUrl, { wait: false }).then(cp => cp.unref());
          });
        destroyer(server);
      });
    }
    
    /**
     * Authenticates with Chat API via user credentials, then creates a Chat space.
     */
    async function createSpace() {
      // Create the Chat API client and authenticate with the authorized user.
      const chatClient = await chat.chat({
        version: 'v1',
        auth: oauth2Client
      });
    
      // Call the Chat API to create a space.
      const result = await chatClient.spaces.create({
    
        // Details about the space to create.
        requestBody: {
    
          // To create a named space, set spaceType to SPACE.
          'spaceType': 'SPACE',
    
          // The user-visible name of the space.
          'displayName': 'API-made'
    
        }
    
      });
      return result;
    }
    
    // Authenticate the user, execute the function,
    // then print details about the created space.
    authenticate(scopes)
      .then(createSpace)
      .then(console.log);
    

Apps Script

  1. Apps Script エディタで、appsscript.json ファイルを編集し、API の呼び出しに必要な OAuth スコープを追加します。

      "oauthScopes": [
        "https://www.googleapis.com/auth/chat.spaces.create"
      ]
    
  2. 次のコードを、Apps Script プロジェクトの ChatSpaceCreateNamed.gs という名前のファイルに保存します。

    /**
     * Authenticates with Chat API via user credentials, then creates a
     * Chat space.
     */
    function createSpace() {
      try {
        // Details about the space to create.
        // To create a named space, set spaceType to SPACE.
        // The user-visible name of the space is displayName.
        const space = {'displayName': 'API-made', 'spaceType': 'SPACE'};
    
        // Call Chat API with user credentials to create the space.
        const result = Chat.Spaces.create(space);
    
        // Log details about the created space.
        console.log(result);
      } catch (err) {
        // TODO (developer) - Handle exception
        console.log('Failed to create space with error %s', err.message);
      }
    }
    

ステップ 5: サンプル スクリプトを実行する

サンプルを実行するには、コマンドラインから、プロジェクト ファイルがあるディレクトリに移動して、次のコマンドを実行します。

Java

mvn compile assembly:single
java -jar target/auth-sample-app-1.0-SNAPSHOT-jar-with-dependencies.jar

Python

python3 chat_space_create_named.py

Node.js

node chat_space_create_named.js

Apps Script

Apps Script エディタで ChatSpaceCreateNamed.gs ファイルを開き、[実行] をクリックします。

ブラウザが開き、Google アカウントへのログインを求めるメッセージが表示されます。

ログインして Chat アプリを承認。

図 2. アプリを認証するアカウントを選択する OAuth 同意画面。

ログインすると、OAuth 同意画面が表示され、アプリに権限を付与するように求められます。

権限を付与すると、スクリプトは Chat API を呼び出します。これにより、表示名 API-made で Chat スペースが作成されます。API 呼び出しの詳細がコンソールに出力されます。スペースを見つけるには、Google Chat の [スペース] パネルに移動します。

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

chat_space_create_named.py を実行すると、次のようなエラーが表示される場合があります。

Expected a JSON object with a single property for a "web" or "installed" application

このエラー メッセージは、Google Cloud コンソールからダウンロードした client_secrets.json ファイルが "web" または "installed" プロパティで始まっていないことを意味します。ダウンロードしたファイルで認証した後、token.json などの新しいファイルにアクセス トークンを保存しない場合、アクセス トークンは client_secrets.json に書き込まれるため、その後の認証試行時にこのエラーが発生する可能性があります。

エラーを解決するには、Google Cloud コンソールからクライアント シークレット ファイルを再度ダウンロードし、新しいファイルを現在のファイルの場所に保存します。

  • アプリケーションで単一のフローの範囲外でユーザー トークンを引き続き使用する必要がある場合は、トークンを保存して後で再利用できます。この場合、アプリケーションはユーザー トークンを安全に処理し、更新トークンの取り消しと期限切れを処理する必要があります。詳しくは、OAuth 2.0 のベスト プラクティス ガイドの使用をご覧ください。

  • Chat API のリファレンス ドキュメントで、Chat API で何ができるかを確認する。