LoginSignup
0
0

Google Apps Scriptを使ったGoogle Chat APIのChat.Spaces.Membersのメソッド解説

Posted at

はじめに

今回はGoogle Apps Scriptを利用する際の、Google Chat APIのChat.Spaces.Membersリソースの6つのメソッド (create, get, list, patch, remove) の使い方について詳しく解説していきます。

UrlFetchAppを利用した記述方法はネットの記事で散見されますが、Google Apps Scriptで利用できるGoogle Chat APIを利用した実装に関する記事があまり見つけられませんでした。

ドキュメント探しなど利用方法を調べるのに苦労したので、これから実装する人の助けに少しでもなれば幸いです。

前提条件

Google Chat APIを使うためには、事前にGCPとApps Scriptの紐づけ作業が必要です。下記の作業を行っておいてください。

  1. Google Cloud Platform (GCP)でプロジェクトを作成し、Google Chat APIを有効にする
  2. OAuth 2.0クライアントIDを作成し、Google Apps Scriptプロジェクトに追加する
  3. Google Chat APIをGoogle Apps Scriptで有効にする

Build a Google Chat app with Google Apps Script  |  Google for Developers

上記のサイトを参考に作業を行えば、私の環境では大丈夫でした。
ここまで準備が整ったら以下のコードを使って実際にメソッドを試してみましょう。

前準備

まず設定からappsscript.jsonを表示するようにしましょう。
表示出来たらコードエディターから下記のように編集してください。
今回のメソッドに必要な権限を記述しておきます。

{
  "timeZone": "Asia/Tokyo",
  "dependencies": {
    "enabledAdvancedServices": [
      {
        "userSymbol": "Chat",
        "version": "v1",
        "serviceId": "chat"
      }
    ]
  },
  "oauthScopes": [
    "https://www.googleapis.com/auth/chat.spaces",
    "https://www.googleapis.com/auth/chat.memberships"
  ],
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8"
}

Chat.Spaces.Membersのメソッド

get

メンバー情報を取得する場合はgetメソッドを利用します。
引数としてはspaces/${スペース名}/members/${メールアドレス or userId}としてあげることがポイントです。
userId はメールアドレスを指定して get してあげれば取得できますが、メールアドレスが分かっていれば、そちらを使う方が良いかと思います。

const getMember = (spaceName, email) => {
  try {
    const member = Chat.Spaces.Members.get(`${spaceName}/members/${email}`);
    Logger.log(`Member details: ${member}`);
  } catch (error) {
    Logger.log(`Error getting member: ${error}`);
  }
};

const testGetMember = () => {
  const spaceName = 'spaces/XXXXXXX'; // 置き換えてください
  const email = 'example@example.com'; // 置き換えてください

  getMember(spaceName, email);
};

spaceNameは自分が確認できるスペースであればWeb版のGmailからChatのURLを見れば取得できます。
確認できないスペースであれば、Chat.Spaces.listメソッドで取得したレスポンスを確認すると取得できます。

Get details about a user's or Google Chat app's membership  |  Google for Developers

list

listメソッドもgetと似たような利用方法で利用できます。
スペース名を指定してあげるとメンバーやBOTの一覧を表示してくれます。

const listMembers = (spaceName) => {
  try {
    const response = Chat.Spaces.Members.list(spaceName);
    const members = response.memberships;
    members.forEach(member => {
      Logger.log(`Member: ${member.member.name}`);
    });
  } catch (error) {
    Logger.log(`Error listing members: ${error}`);
  }
};

const testListMembers = () => {
  const spaceName = 'spaces/XXXXXXX'; // 置き換えてください

  listMembers(spaceName);
};

List users and Google Chat apps in a space  |  Google for Developers

create

スペースに人やBOTを追加するときはcreateメソッドを利用します。
このメソッドが一番苦労しました。
下記のような記述方法で実行できます。

const addMember = (spaceName, email) => {
  const memberResource = {
    member: {
      name: `users/${email}`,
      type: 'HUMAN',
    }
  };

  try {
    const response = Chat.Spaces.Members.create(memberResource, spaceName);
    Logger.log(`Member added: ${response}`);
  } catch (error) {
    Logger.log(`Error adding member: ${error}`);
  }
};

const testAddMember = () => {
  const spaceName = 'spaces/XXXXXXX'; // 置き換えてください
  const email = 'example@example.com'; // 置き換えてください

  addMember(spaceName, email);
};

できたものを見ると簡単にできる感じがしますね。
spaceNameが2個目の引数に来るところがポイントです。

Invite or add a user or a Google Chat app to a space  |  Google for Developers

patch

ユーザーのロールを変更するメソッドです。
これはupdateMaskをつけるところがポイントですね。
エラー文をよく見るとなんか書いてあるなーってことに気づきます。

const updateMemberRole = (spaceName, email, newRole) => {
  const memberName = `${spaceName}/members/${email}`;
  const patchBody = {role: newRole};
  const updateMask = 'role';

  try {
    const response = Chat.Spaces.Members.patch(patchBody, memberName, {updateMask: updateMask});
    Logger.log(`Member role updated: ${response}`);
  } catch (error) {
    Logger.log(`Error updating member role: ${error}`);
  }
};

const testUpdateMemberRole = () => {
  const spaceName = 'spaces/XXXXXXX'; // 置き換えてください
  const email = 'example@example.com'; // 置き換えてください
  const newRole = 'ROLE_MEMBER'; // ROLE_MEMBER or ROLE_MANAGER

  updateMemberRole(spaceName, email, newRole);
};

Update a user's membership in a Google Chat space  |  Google for Developers

remove

スペースからユーザーを削除するメソッドです。
これはスペース名からメンバーのメールアドレスまでつなげた文字列として渡してあげれば機能します。

const removeMember = (spaceName, email) => {
  try {
    Chat.Spaces.Members.remove(`${spaceName}/members/${email}`);
    Logger.log(`Member removed: ${email}`);
  } catch (error) {
    Logger.log(`Error removing member: ${error}`);
  }
};

const testRemoveMember = () => {
  const spaceName = 'spaces/XXXXXXX'; // 置き換えてください
  const email = 'example@example.com'; // 置き換えてください

  removeMember(spaceName, email);
};

Remove a user or a Google Chat app from a space  |  Google for Developers

さいごに

今回の記事では、Google Apps Scriptを使ってGoogle Chat APIのChat.Spaces.Membersの5つのメソッドをどのように使用するかについて解説しました。すぐに実践で使えそうな具体的なコード例を記述したつもりです(ほぼほぼ自分のため)。これらのメソッドで効率的に管理できるようになりますね!

この記事が参考になれば幸いです。
質問やフィードバックがあれば、ぜひコメント欄で教えてください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0