やりたいこと
・SCIM APIの機能を使って、他人のプロフィールアイコンを更新する。
・GASから起動することで、Googleドライブに格納している画像を使うことができる。
・トリガーを設定し、定期的に自動でプロフィールアイコンを更新する。
前提
・Slackのプランはエンタープライズグリッドプランのみ
・他人のプロフィールアイコンを更新する場合、アプリ作成者(=Tokenの発行者)の権限が更新対象のユーザーより上位の権限である必要がある
可能であればオーナー権限、少なくとも管理者等の権限以上にしておくこと
事前準備
画像の用意
APIから画像を設定する場合、URLを使って画像へアクセスできるものを使用する必要がある。
また、Googleドライブに格納された画像ファイルを使用する場合、共有設定とURLの変換をする必要がある。
画像の確認
・設定する画像に間違いがないか確認する。
・画像のサイズは縦、横ともに512ピクセル以上1024以下である必要がある。
⇒手動で更新するときはその場でトリミングできるが、APIから更新する場合は画像がそのままアイコンに適用されるため、正方形にしておいた方が良い。
(横長、あるいは縦長だとアイコンで端に帯ができてしまう。)
共有設定
・Googleドライブから、画像があるフォルダへアクセス
・ファイルの「共有」を選択
・一般的なアクセスを「制限付き」から「リンクを知っている全員」へ変更
※APIの仕様上、ファイルは公開されている必要があるため、
セキュリティ面の課題を考慮してください。
URLの変換
・Googleドライブのファイルから 共有>リンクをコピー をクリック
・この方法でコピーしたURLを以下のように変換する。
https://drive.google.com/file/d/fileID/view?usp=drive_link
↓
https://drive.google.com/uc?export=view&id=fileID
アプリの作成
・https://api.slack.com/apps/へアクセス
・Create New Appを押す
・From scratchを選択
・アプリ名とワークスペースを選択して「Create App」をクリック
Tokenの設定
・左側のメニューから「OAuth & Permissions」を選択
・ScopesのUser Token Scopesから以下を追加する。
Add an OAuth Scopeを
・admin
・users.profile:read
・users.profile:write
・users:read
・users:write
アプリのインストール
「Install to "Workspace名"」をクリックしてアプリをワークスペースにインストール
「User OAuth Token」に表示されているUser Tokenを控えておく。
GASでスクリプトを作成
・Googleスプレッドシートを開く
・拡張機能>Apps Scriptをクリック
・以下のコードをコピー&ペーストする。
function updateUserProfileImage() {
var scimToken = "ここにUser Tokenを入力する"; // 取得したSlackのAPIトークン
var userId = "ここに更新対象のユーザーIDを入力";// 更新したいユーザーのIDを入力
var newImageUrl = "ここに画像のURLを入力する";// 更新する画像のURLを入力
var url = 'https://api.slack.com/scim/v1/Users/' + userId;
var payload = {
schemas: [
"urn:scim:schemas:core:1.0"
,"urn:scim:schemas:extension:enterprise:1.0"
,"urn:scim:schemas:extension:slack:profile:1.0"
],
"photos": [
{
"value": newImageUrl,
"primary": true
}
]
};
var options = {
method: 'patch',
contentType: 'application/json',
headers: {
'Authorization': 'Bearer ' + scimToken
},
payload: JSON.stringify(payload),
muteHttpExceptions: true // エラーレスポンスの詳細を取得するオプション };
var response = UrlFetchApp.fetch(url, options);
Logger.log(response.getContentText());
}
・「保存」をクリックし、「実行」
※承認を求められた場合は承認する
プロフィールアイコンが更新される。
トリガーの設定
もし定期的に、あるいは特定のタイミングで反映したい場合はトリガーを設定する。
Apps Scriptの画面の左側から目覚まし時計のようなアイコンの「トリガー」をクリック
画面右下の「トリガーを追加」
実行する関数を選択:updateUserProfileImage
実行するデプロイを選択:Head
イベントのソースを選択:適宜
残りの項目は↑で選択した項目に応じて設定
1年に1回みんなの画像を最新版に更新するなどの場合にも、
画像をまとめて上書きしておけばトリガーで自動実行させて更新させることができる。
もし動かない場合には
以下を確認してみてください。
・Slackの「アプリを追加する」から作成したアプリを追加しておく
・画像ファイルのサイズが512ピクセル以上1024ピクセル以下になっていることを確認
・Slackのプランの確認(エンタープライズグリッドプランのみ)
・Slackの自分に割り当てられた権限の確認(アプリ、APIが使用可能か)