このガイドでは、サービス アカウントを設定して使用し、Chat アプリに代わって Google Chat API にアクセスする方法について説明します。まず、 サービス アカウントを作成する手順について説明します。次に、サービス アカウントを使用して Chat API の認証を行い、Chat スペースにメッセージを投稿するスクリプトを作成する方法を示します。
サービス アカウントで認証する場合、Chat スペースに関するデータを取得したり、Chat スペースでアクションを実行したりするには、Chat アプリがスペースのメンバーである必要があります。たとえば、スペースのメンバーを一覧表示したり、スペースにメッセージを作成したりするには、Chat アプリ自体がスペースのメンバーである必要があります。唯一の例外は、Chat アプリがアプリ認証でスペースを作成する場合です。この場合、アプリがスペースを作成し、自動的にメンバーになります。
`https://www.googleapis.com/auth/chat.app.*` で始まる名前の認可スコープ
を使用してアプリの認可をサポートする Google Chat API メソッドでは、https://www.googleapis.com/auth/chat.app.*管理者の承認が 1 回必要です
。
https://www.googleapis.com/auth/chat.bot
認可スコープを使用してアプリの認可をサポートする Google Chat API メソッドでは、追加の承認は必要ありません。
Chat アプリがユーザーデータにアクセスしたり、ユーザーに代わって操作を実行したりする必要がある場合は、 ユーザーとして認証します 。ドメイン管理者は、ドメイン全体の権限委譲を付与して、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
- インタラクション イベントを受信して応答する Google Chat アプリ。HTTP サービスを使用してインタラクティブな Chat アプリを作成するには、この クイックスタートを完了してください。
- Chat アプリをスペースに追加します。Chat アプリを追加するには、 Google Chat アプリのインタラクティブ機能をテストするをご覧ください。
Python
- Python 3.6 以降
- pip パッケージ管理ツール
- インタラクション イベントを受信して応答する Google Chat アプリ。HTTP サービスを使用してインタラクティブな Chat アプリを作成するには、この クイックスタートを完了してください。
- Chat アプリをスペースに追加します。Chat アプリを追加するには、 Google Chat アプリのインタラクティブ機能をテストするをご覧ください。
Node.js
- Node.js 14 以降
- npm パッケージ管理ツール
-
初期化された Node.js プロジェクト。新しいプロジェクトを初期化するには、新しいフォルダを作成して切り替え、コマンドライン インターフェースで次のコマンドを実行します。
npm init
- インタラクション イベントを受信して応答する Google Chat アプリ。HTTP サービスを使用してインタラクティブな Chat アプリを作成するには、この クイックスタートを完了してください。
- Chat アプリをスペースに追加します。Chat アプリを追加するには、 Google Chat アプリのインタラクティブ機能をテストするをご覧ください。
Apps Script
- インタラクション イベントを受信して応答する Google Chat アプリ。Apps Script でインタラクティブな Chat アプリを作成するには、このクイックスタートを完了してください。
- Chat アプリをスペースに追加します。Chat アプリを追加するには、 Google Chat アプリのインタラクティブ機能をテストするをご覧ください。
ステップ 1: Google Cloud コンソールでサービス アカウントを作成する
Chat アプリが Google API にアクセスするために使用できるサービス アカウントを作成します。
サービス アカウントを作成する
サービス アカウントを作成するには、次の操作を行います。
Google Cloud コンソール
- Google Cloud コンソールで、メニュー > [IAM と管理] > [サービス アカウント] に移動します。
- [サービス アカウントを作成] をクリックします。
- サービス アカウントの詳細を入力し、[作成して続行] をクリックします。 フィールドで ID を変更します。
- 省略可: サービス アカウントにロールを割り当て、Google Cloud プロジェクトのリソースへのアクセス権を付与します。詳細については、リソースへのアクセス権の付与、変更、取り消しをご覧ください。
- [続行] をクリックします。
- 省略可: このサービス アカウントで管理とアクションの実行が可能なユーザーまたはグループを入力します。詳細については、サービス アカウントの権限借用を管理するをご覧ください。
- [完了] をクリックします。サービス アカウントのメールアドレスをメモします。
gcloud CLI
- サービス アカウントを作成します。
gcloud iam service-accounts createSERVICE_ACCOUNT_NAME\ --display-name="SERVICE_ACCOUNT_NAME" - 省略可: サービス アカウントにロールを割り当て、Google Cloud プロジェクトのリソースへのアクセス権を付与します。詳細については、リソースへのアクセス権の付与、変更、取り消しをご覧ください。
サービス アカウントが [サービス アカウント] ページに表示されます。次に、サービス アカウントの秘密鍵を作成します。
秘密鍵を作成する
サービス アカウントの秘密鍵を作成してダウンロードする手順は次のとおりです。
- Google Cloud コンソールで、メニュー > [**IAM と管理**] > [**サービス アカウント**] に移動します。
- サービス アカウントを選択します。
- [**鍵**] > [**鍵を追加**] > [**新しい鍵を作成**] の順にクリックします。
- [JSON] を選択し、[作成] をクリックします。
新しい公開鍵と秘密鍵のペアが生成され、新しいファイルとしてパソコンにダウンロードされます。ダウンロードした JSON ファイルを
credentials.jsonとして作業ディレクトリに保存します。このファイルは、この鍵の唯一のコピーです。鍵を安全に保管する方法については、サービス アカウント キーの管理をご覧ください。 - [閉じる] をクリックします。
サービス アカウントの詳細については、Google Cloud IAM ドキュメントの サービス アカウント をご覧ください。
次に、このサービス アカウント用に Google Workspace Marketplace 対応の OAuth クライアントを作成します。
管理者の承認を得る
https://www.googleapis.com/auth/chat.bot
認可スコープを使用する場合、管理者の承認は必要ありません。ステップ 2: Google クライアント ライブラリとその他の
依存関係をインストールするに進みます。
このガイドの例では、https://www.googleapis.com/auth/chat.bot
認可スコープを使用しているため、この例に沿って進める場合はステップ 2 に進みます。
https://www.googleapis.com/auth/chat.app.* で始まる認可スコープを使用するには、
Chat アプリで管理者の承認を 1 回取得する必要があります。
管理者の承認を得るには、次の情報を使用して Chat アプリのサービス アカウントを準備する必要があります。
- Google Workspace Marketplace 対応の OAuth クライアント。
- Google Workspace Marketplace SDK のアプリ構成。
Google Workspace Marketplace 対応の OAuth クライアントを作成する
Google Workspace Marketplace 対応の OAuth クライアントを作成する手順は次のとおりです。
Google Cloud コンソールで、メニュー > [IAM と管理] > [サービス アカウント]に移動します。
Chat アプリ用に作成したサービス アカウントをクリックします。
[詳細設定] をクリックします。
[Google Workspace Marketplace 対応の OAuth クライアントを作成] をクリックします。
[続行] をクリックします。
Google Workspace Marketplace 対応の OAuth クライアントが作成されたことを示す確認メッセージが表示されます。
Google Workspace Marketplace SDK で Chat アプリを構成する
Google Workspace Marketplace SDK で Chat アプリを構成する手順は次のとおりです。
Google Cloud コンソールで、Google Workspace Marketplace SDK を有効にします。
Google Cloud コンソールで、 [メニュー] > [API とサービス] > [有効な API とサービス] > [Google Workspace Marketplace SDK] > [アプリの構成] に移動します。
[アプリの構成] ページに情報を入力します。Chat アプリの構成方法は、対象ユーザーやその他の要因によって異なります。[アプリの構成] ページへの入力については、 [Google Workspace Marketplace SDK でアプリを構成する]をご覧ください。 このガイドでは、次の情報を入力します。
- [アプリの表示] で [限定公開] を選択します。
- [インストール設定] で [個別 + 管理者インストール] を選択します。
- [アプリの統合] で [Chat アプリ] を選択します。
[**OAuth スコープ**] に、Chat アプリが使用するすべての [認証スコープ] を入力します。
[デベロッパー情報] に、[デベロッパー名]、 [デベロッパー ウェブサイトの URL]、[デベロッパーのメールアドレス] を入力します。
[Save draft] をクリックします。
管理者の承認を得る
サービス アカウントが管理者の承認を受けられるように構成されたので、 承認を付与できる Google Workspace 管理者から承認を得ます Chat アプリの認可を設定するの手順に沿ってください。
ステップ 2: 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.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
</dependencies>
Python
Python 用の Google クライアント ライブラリをまだインストールしていない場合は、コマンドライン インターフェースで次のコマンドを実行します。
pip3 install --upgrade google-api-python-client google-authNode.js
Google クライアント ライブラリを Node.js プロジェクトに追加するには、プロジェクトのディレクトリに切り替えて、コマンドライン インターフェースで次のコマンドを実行します。
npm install "@googleapis/chat"Apps Script
このサンプルでは、 OAuth2 for Apps Script ライブラリ を使用して、サービス アカウント認証用の JWT トークンを生成します。ライブラリを Apps Script プロジェクトに追加する手順は次のとおりです。
- 左側の [Editor] をクリックします。
- 左側の [ライブラリ] の横にある [ライブラリを追加] をクリックします。
- スクリプト ID
1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDFを入力します。 - [検索] をクリックし、[追加] をクリックします。
このサンプルでは、 高度なチャット サービス を使用して Google Chat API を呼び出します。Apps Script プロジェクトでサービスを有効にする手順は次のとおりです。
- 左側の [Editor] をクリックします。
- 左側の [**サービス**] の横にある [**サービスを追加**] をクリックします。
- [Google Chat API] を選択します。
- [バージョン] で [v1] を選択します。
- [追加] をクリックします。
クライアント ライブラリでサポートされている言語を使用できます。
ステップ 3: サービス アカウントを使用して Chat API の認証を行うスクリプトを作成する
次のコードは、サービス アカウントを使用して Chat APIの認証を行い、Chat スペースにメッセージを投稿します。
Java
- プロジェクトのディレクトリで、ファイル
src/main/java/com/google/chat/app/authsample/App.javaを開きます。 App.javaの内容を次のコードに置き換えます。package com.google.chat.app.authsample; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpRequestInitializer; import com.google.api.client.json.gson.GsonFactory; import com.google.api.services.chat.v1.HangoutsChat; import com.google.api.services.chat.v1.model.Message; import com.google.auth.http.HttpCredentialsAdapter; import com.google.auth.oauth2.GoogleCredentials; /** * Authenticates with Chat API using service account credentials, * then creates a Chat message. */ public class App { // Specify required scopes. private static final String CHAT_SCOPE = "https://www.googleapis.com/auth/chat.bot"; // Specify service account details. private static final String PRIVATE_KEY_RESOURCE_URI = "/credentials.json"; public static void main( String[] args ) { try { // Run app. Message response = App.createChatMessage(); // Print details about the created message. System.out.println(response); } catch (Exception e) { e.printStackTrace(); } } private static Message createChatMessage() throws Exception { // Build the Chat API client and authenticate with the service account. GoogleCredentials credentials = GoogleCredentials.fromStream( App.class.getResourceAsStream(PRIVATE_KEY_RESOURCE_URI)) .createScoped(CHAT_SCOPE); HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(credentials); HangoutsChat chatService = new HangoutsChat.Builder( GoogleNetHttpTransport.newTrustedTransport(), GsonFactory.getDefaultInstance(), requestInitializer) .setApplicationName("auth-sample-app") .build(); // 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. String spaceName = "spaces/SPACE_NAME"; // Create a Chat message. Message message = new Message().setText("Hello, world!"); return chatService.spaces().messages().create(spaceName, message).execute(); } }コード内で、
SPACE_NAMEをスペース 名に置き換えます。スペース名は、Chat API のspaces.listメソッドまたはスペースの URL から取得できます。プロジェクトのディレクトリ内に
resourcesという名前の新しいサブディレクトリを作成します。サービス アカウントの秘密鍵ファイルの名前が
credentials.jsonであることを確認し、resourcesサブディレクトリにコピーします。プロジェクト パッケージに秘密鍵ファイルを含めるように Maven を構成するには、プロジェクトのディレクトリにあるファイル
pom.xmlを編集し、<build>セクションに次の 構成を追加します。<build> <!-- ... existing configurations ... --> <resources> <resource> <directory>resources</directory> </resource> </resources> </build>プロジェクト パッケージに依存関係を含め、 アプリケーションのメインクラスを実行するように 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
- 作業ディレクトリに
chat_app_auth.pyという名前のファイルを作成します。 chat_app_auth.pyに次のコードを追加します。from apiclient.discovery import build from google.oauth2 import service_account # Specify required scopes. SCOPES = ['https://www.googleapis.com/auth/chat.bot'] # Specify service account details. creds = service_account.Credentials.from_service_account_file( 'credentials.json', scopes=SCOPES) # Build the URI and authenticate with the service account. chat = build('chat', 'v1', credentials=creds) # 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() # Prints details about the created message. print(result)コード内で、
SPACE_NAMEをスペース 名に置き換えます。スペース名は、spaces.listメソッドまたはスペースの URL から取得できます。サービス アカウントの秘密鍵ファイルの名前がcredentials.jsonであることを確認します。
Node.js
- プロジェクトのディレクトリに
chat_app_auth.jsという名前のファイルを作成します。 chat_app_auth.jsに次のコードを追加します。const chat = require('@googleapis/chat'); async function createMessage() { const auth = new chat.auth.GoogleAuth({ // Specify service account details. keyFilename: 'credentials.json', // Specify required scopes. scopes: ['https://www.googleapis.com/auth/chat.bot'] }); const authClient = await auth.getClient(); // Create the Chat API client and authenticate with the service account. const chatClient = await chat.chat({ version: 'v1', auth: authClient }); // Create a Chat message. const result = await chatClient.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. requestBody: { 'text': 'Hello, world!' } }); return result; } // Execute function then print details about the created message. createMessage().then(console.log);コード内で、
SPACE_NAMEをスペース 名に置き換えます。スペース名は、spaces.listメソッドまたはスペースの URL から取得できます。サービス アカウントの秘密鍵ファイルの名前がcredentials.jsonであることを確認します。
Apps Script
Apps Script エディタでファイル
appsscript.jsonを編集し、外部リクエストを行ってサービス アカウントの OAuth トークンを取得するために必要な OAuth スコープを追加します。"oauthScopes": [ "https://www.googleapis.com/auth/script.external_request" ]次のコードを Apps Script プロジェクトの
ChatAppAuth.gsという名前のファイルに保存します。// Specify the contents of the file credentials.json. const CREDENTIALS = CREDENTIALS; const SCOPE = 'https://www.googleapis.com/auth/chat.bot'; // 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. const PARENT = 'spaces/SPACE_NAME' /** * Authenticates with Chat API using app credentials, then posts a message. */ function createMessageWithAppCredentials() { try { const service = getService_(); if (!service.hasAccess()) { console.error(service.getLastError()); return; } // Specify the message to create. const message = {'text': 'Hello world!'}; // Call Chat API with a service account to create a message. const result = Chat.Spaces.Messages.create( message, PARENT, {}, // Authenticate with the service account token. {'Authorization': 'Bearer ' + service.getAccessToken()}); // Log details about the created message. console.log(result); } catch (err) { // TODO (developer) - Handle exception. console.log('Failed to create message with error %s', err.message); } } /** * Configures the OAuth library to authenticate with the service account. */ function getService_() { return OAuth2.createService(CREDENTIALS.client_email) .setTokenUrl('https://oauth2.googleapis.com/token') .setPrivateKey(CREDENTIALS.private_key) .setIssuer(CREDENTIALS.client_email) .setSubject(CREDENTIALS.client_email) .setScope(SCOPE) .setPropertyStore(PropertiesService.getScriptProperties()); }コード内で、
CREDENTIALSをファイルcredentials.jsonの内容に置き換えます。コード内で、
SPACE_NAMEをスペース 名に置き換えます。スペース名は、Chat API のspaces.listメソッドまたはスペースの URL から取得できます。
ステップ 4: 完全なサンプルを実行する
作業ディレクトリで、サンプルをビルドして実行します。
Java
mvn compile assembly:singlejava -jar target/auth-sample-app-1.0-SNAPSHOT-jar-with-dependencies.jar
Python
python3 chat_app_auth.pyNode.js
node chat_app_auth.jsApps Script
Apps Script エディタでファイル ChatAppAuth.gs を開き、[実行] をクリックします。
スクリプトは Chat APIに認証済みリクエストを送信します。Chat API は、 Chat アプリとして Chat スペースにメッセージを投稿することで応答します。
サンプルのトラブルシューティング
このセクションでは、このサンプルの実行時に発生する可能性のある一般的な問題について説明します。
このアプリを使用する権限がありません
スクリプトを実行すると、次のエラーが表示されることがあります。
<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 スペースに Chat アプリを追加します。
管理者は、このアクションに必要な OAuth 認可スコープをアプリに付与する必要があります
スクリプトを実行すると、次のエラーが表示されることがあります。
<HttpError 403 when requesting https://chat.googleapis.com/v1/spaces/{space}?alt=json returned "The administrator must grant the app the required OAuth authorization scope for this action.". Details: "The administrator must grant the app the required OAuth authorization scope for this action.">
このエラー メッセージは、Google Workspace 管理者が、https://www.googleapis.com/auth/chat.app.*
という名前で始まる認可スコープを使用するために、Chat アプリに 1 回限りの承認をまだ付与していないことを意味します。
このエラーを解決するには:
- Google Workspace 管理者に Chat アプリの承認を付与するよう依頼します。Chat アプリのロジックでこのエラーを処理する場合は、リクエストされたアクションを実行するには管理者の承認が必要であることを通知するメッセージを送信することを検討してください。たとえば、
To perform this action, I need approval. <https://support.google.com/a?p=chat-app-auth|Learn more>. - Google Chat API メソッドが
https://www.googleapis.com/auth/chat.bot認可スコープ(管理者の承認は不要)をサポートしている場合は、代わりにそれを使用することを検討してください。メソッドがサポートする 認可スコープを確認するには、 Google Chat API リファレンス ドキュメントをご覧ください。
関連トピック
- Chat API リファレンス ドキュメントを確認して、Chat API でできることを確認する。
- OAuth 認可スコープを使用している場合は、
https://www.googleapis.com/auth/chat.app.*管理者が 1 回限りの承認を付与する方法を確認する。