高度なチャット サービス

高度なチャット サービスを使用すると、Apps Script で Google Chat API を使用できます。この API を使用すると、スクリプトで Chat スペースの検索、作成、変更、スペースへのメンバーの追加または削除、テキスト、カード、添付ファイル、リアクションを含むメッセージの読み取りまたは投稿を行えます。

前提条件

リファレンス

このサービスの詳細については、Chat API リファレンス ドキュメントをご覧ください。Apps Script のすべての高度なサービスと同様に、Chat サービスでは、公開 API と同じオブジェクト、メソッド、パラメータを使用します。

サンプルコード

これらのサンプルは、高度なサービスを使用して一般的な Google Chat API アクションを実行する方法を示しています。

ユーザーの認証情報を使用してメッセージを投稿する

次の例は、ユーザーに代わって Chat スペースにメッセージを投稿する方法を示しています。

  1. chat.messages.create 認可スコープを Apps Script プロジェクトの appsscript.json ファイルに追加します。

    "oauthScopes": [
      "https://www.googleapis.com/auth/chat.messages.create"
    ]
    
  2. 次のような関数を Apps Script プロジェクトのコードに追加します。

    advanced/chat.gs
    /**
     * Posts a new message to the specified space on behalf of the user.
     * @param {string} spaceName The resource name of the space.
     */
    function postMessageWithUserCredentials(spaceName) {
      try {
        const message = {'text': 'Hello world!'};
        Chat.Spaces.Messages.create(message, spaceName);
      } catch (err) {
        // TODO (developer) - Handle exception
        console.log('Failed to create message with error %s', err.message);
      }
    }

アプリの認証情報を使用してメッセージを投稿する

次の例は、アプリに代わって Chat スペースにメッセージを投稿する方法を示しています。サービス アカウントで高度な Chat サービスを使用する場合、appsscript.json で認可スコープを指定する必要はありません。サービス アカウントによる認証の詳細については、Google Chat アプリとして認証するをご覧ください。

advanced/chat.gs
/**
 * Posts a new message to the specified space on behalf of the app.
 * @param {string} spaceName The resource name of the space.
 */
function postMessageWithAppCredentials(spaceName) {
  try {
    // See https://developers.google.com/chat/api/guides/auth/service-accounts
    // for details on how to obtain a service account OAuth token.
    const appToken = getToken_();
    const message = {'text': 'Hello world!'};
    Chat.Spaces.Messages.create(
        message,
        spaceName,
        {},
        // Authenticate with the service account token.
        {'Authorization': 'Bearer ' + appToken});
  } catch (err) {
    // TODO (developer) - Handle exception
    console.log('Failed to create message with error %s', err.message);
  }
}

スペースを取得する

次の例は、Chat スペースに関する情報を取得する方法を示しています。

  1. chat.spaces.readonly 認可スコープを Apps Script プロジェクトの appsscript.json ファイルに追加します。

    "oauthScopes": [
      "https://www.googleapis.com/auth/chat.spaces.readonly"
    ]
    
  2. 次のような関数を Apps Script プロジェクトのコードに追加します。

    advanced/chat.gs
    /**
     * Gets information about a Chat space.
     * @param {string} spaceName The resource name of the space.
     */
    function getSpace(spaceName) {
      try {
        const space = Chat.Spaces.get(spaceName);
        console.log('Space display name: %s', space.displayName);
        console.log('Space type: %s', space.spaceType);
      } catch (err) {
        // TODO (developer) - Handle exception
        console.log('Failed to get space with error %s', err.message);
      }
    }

スペースを作成

次の例は、Chat スペースを作成する方法を示しています。

  1. chat.spaces.create 認可スコープを Apps Script プロジェクトの appsscript.json ファイルに追加します。

    "oauthScopes": [
      "https://www.googleapis.com/auth/chat.spaces.create"
    ]
    
  2. 次のような関数を Apps Script プロジェクトのコードに追加します。

    advanced/chat.gs
    /**
     * Creates a new Chat space.
     */
    function createSpace() {
      try {
        const space = {'displayName': 'New Space', 'spaceType': 'SPACE'};
        Chat.Spaces.create(space);
      } catch (err) {
        // TODO (developer) - Handle exception
        console.log('Failed to create space with error %s', err.message);
      }
    }

メンバーシップを一覧表示する

次の例は、Chat スペースのすべてのメンバーを一覧表示する方法を示しています。

  1. chat.memberships.readonly 認可スコープを Apps Script プロジェクトの appsscript.json ファイルに追加します。

    "oauthScopes": [
      "https://www.googleapis.com/auth/chat.memberships.readonly"
    ]
    
  2. 次のような関数を Apps Script プロジェクトのコードに追加します。

    advanced/chat.gs
    /**
     * Lists all the members of a Chat space.
     * @param {string} spaceName The resource name of the space.
     */
    function listMemberships(spaceName) {
      let response;
      let pageToken = null;
      try {
        do {
          response = Chat.Spaces.Members.list(spaceName, {
            pageSize: 10,
            pageToken: pageToken
          });
          if (!response.memberships || response.memberships.length === 0) {
            pageToken = response.nextPageToken;
            continue;
          }
          response.memberships.forEach((membership) => console.log(
              'Member resource name: %s (type: %s)',
              membership.name,
              membership.member.type));
          pageToken = response.nextPageToken;
        } while (pageToken);
      } catch (err) {
        // TODO (developer) - Handle exception
        console.log('Failed with error %s', err.message);
      }
    }

トラブルシューティング

エラー メッセージ Some requested scopes cannot be shown とともに Error 400: invalid_scope が表示された場合は、Apps Script プロジェクトの appsscript.json ファイルに承認スコープが指定されていないことを意味します。ほとんどの場合、スクリプトに必要なスコープは Apps Script によって自動的に決定されますが、Chat の高度なサービスを使用する場合、スクリプトで使用する認可スコープを Apps Script プロジェクトのマニフェスト ファイルに手動で追加する必要があります。明示的なスコープを設定するをご覧ください。

このエラーを解決するには、適切な認可スコープを oauthScopes 配列の一部として Apps Script プロジェクトの appsscript.json ファイルに追加します。たとえば、spaces.messages.create メソッドを呼び出すには、次のように追加します。

"oauthScopes": [
  "https://www.googleapis.com/auth/chat.messages.create"
]

制限と考慮事項

高度なチャット サービスは、次の機能をサポートしていません。

メッセージの添付ファイルをダウンロードする場合や、デベロッパー プレビュー メソッドを呼び出す場合は、代わりに UrlFetchApp を使用してください。