はじめに
今回は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の紐づけ作業が必要です。下記の作業を行っておいてください。
- Google Cloud Platform (GCP)でプロジェクトを作成し、Google Chat APIを有効にする
- OAuth 2.0クライアントIDを作成し、Google Apps Scriptプロジェクトに追加する
- 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つのメソッドをどのように使用するかについて解説しました。すぐに実践で使えそうな具体的なコード例を記述したつもりです(ほぼほぼ自分のため)。これらのメソッドで効率的に管理できるようになりますね!
この記事が参考になれば幸いです。
質問やフィードバックがあれば、ぜひコメント欄で教えてください!