Slackの他人のプロフィールアイコンをSCIM APIとGASを使って自動で更新する

Google Apps Script
この記事は約6分で読めます。
スポンサーリンク

やりたいこと

・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が使用可能か)

コメントの通知/購読設定
受け取る通知
guest
0 Comments
古い順
新しい順 評価順
Inline Feedbacks
すべてのコメントを見る
タイトルとURLをコピーしました