やりたいこと
- Slack APIの機能を使って、自分のプロフィールアイコンを更新する
- GASから起動し、Googleドライブに格納している画像を使う
- トリガーを設定し、定期的に自動でプロフィールアイコンを更新する
前提
- Slackのプランはビジネスプラン以上
⇒うちはエンタープライズグリッドプランだったので、
ビジネスプラスプランでの動作確認はしていないが、できるはず - このAPIで更新することができるのは自分のみ
⇒他人のプロフィールアイコンを更新したい場合は別のAPIを使用する。
事前準備
画像の用意
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を
・users.profile:read
・users.profile:write
・users:read
・users:write
アプリのインストール
「Install to "Workspace名"」をクリックしてアプリをワークスペースにインストール
「User OAuth Token」に表示されているUser Tokenを控えておく。
GASでスクリプトを作成
・Googleスプレッドシートを開く
・拡張機能>Apps Scriptをクリック
・以下のコードをコピー&ペーストする。
function updateSlackMyProfileImage() {
const token = "ここにUser Tokenを入力する"; // 取得したSlackのAPIトークン
const imageUrl = "ここに画像のURLを入力する";// 更新する画像のURLを入力
const url = 'https://slack.com/api/users.setPhoto';
const imageBlob = UrlFetchApp.fetch(imageUrl).getBlob(); // 画像URLから画像データを取得
const formData = {
image: imageBlob,
token: token
};
const options = {
method: 'post',
payload: formData
};
const response = UrlFetchApp.fetch(url, options);
const result = JSON.parse(response.getContentText());
if (result.ok) {
Logger.log('プロフィール画像が更新されました');
} else {
Logger.log('エラー: ' + result.error);
}}
・「保存」をクリックし、「実行」
※承認を求められた場合は承認する
プロフィールアイコンが更新される。
トリガーの設定
もし定期的に、あるいは特定のタイミングで反映したい場合はトリガーを設定する。
Apps Scriptの画面の左側から目覚まし時計のようなアイコンの「トリガー」をクリック
画面右下の「トリガーを追加」
実行する関数を選択:updateSlackMyProfileImage
実行するデプロイを選択:Head
イベントのソースを選択:適宜
残りの項目は↑で選択した項目に応じて設定
関数の方をいじって、毎日トリガー実行で違うアイコンが設定されるようにして遊ぶもよし。
1年に1回画像を最新版に更新するなどの場合にも、
画像を上書きしておけばトリガーで自動実行させて更新させることもできる。
もし動かない場合には
以下を確認してみてください。
・Slackの「アプリを追加する」から作成したアプリを追加しておく
・画像ファイルのサイズが512ピクセル以上1024ピクセル以下になっていることを確認
・Slackのプランの確認(ビジネスプラスプラン以上)
・Slackの自分に割り当てられた権限の確認(アプリ、APIが使用可能か)