高度なチャット サービス

高度なチャット サービスを使用すると、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 プロジェクトのマニフェスト ファイルに手動で追加する必要があります。明示的なスコープの設定をご覧ください。

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

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

制限事項と考慮事項

高度なチャット サービスでは、以下はサポートされていません。

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