背景
- Slack APIを使用したい。
- GAS (Google Apps Script)上で使用したい。
- Slack APIを使用するにはアプリ作成によりトークン発行が必要。
- 自分はそのSlackワークスペースの管理者ではない。
- 参加しているワークスペースでは、アプリのインストールに管理者承認が必要。
Slack APIの使い方については仕様変更があったようです。
(2018~2020年頃のどこかで?)
古い情報(レガシートークン・テストトークン使う方法)は使えないので、現時点での使用手順を整理しました。
ちなみに上記の通り、使用するslack ワークスペースは自分が管理者ではないケースを想定しています。
注意点
- Slackの無料プランでは、使用できるアプリは10個までです。
- アプリのインストールに管理者の承認が必要な場合があります。(管理者の設定次第)
- 管理者の使用承認がおりるか確認した上で着手されるのが良いと思います。
作業概要
- 事前確認
- アプリを新規作成
- 使用する権限を選択
- 管理者へ使用承認を申請
- (承認後)アプリをインストールしてトークンを取得
- GASでAPIを叩く
今回GASでは、チャンネルID一覧を取得するコードのみ記述します。
作業手順
事前確認
ワークスペースにインストール済みのアプリを確認
※ 既に非推奨となっている「カスタムインテグレーション」もアプリ数にカウントされるようです。
管理者へ確認
Slackのワークスペースの管理者へ「アプリを作成・インストールしたい」ことを伝えて承認を貰っておきましょう。
アプリを新規作成
-
Slack APIを開き、「Create New App」をクリック。
-
From scratchをクリック。
使用する権限を選択
-
Web API methodsから必要な権限を調べます。
※ Channel IDの取得には「conversations.list」メソッドを使うので、以下のように検索します。
↓
管理者へ使用承認を申請
-
左のメニューから「Install App」をクリックし、「Request to Install」をクリック。
※ 自分が管理者の場合は、ここでそのままインストールできます。
-
メッセージを入力し「Submit Request」をクリックして申請を送信。
※ 管理者へは「Slackbot」からのDMが届きます。
(承認後)アプリをインストールしてトークンを取得
-
承認されるとSlackbotからDMが届きます。
設定の続きを行うため、1. Slack APIを開きます。
-
該当するアプリをクリック。
-
権限の確認が表示されるので「許可する」をクリック。
-
※ トークンはセキュリティ対策上、誰かと共有しないで下さい。
GASでAPIを叩く
トークンを「プロジェクトのプロパティ」に設定
GASで使うために、トークンを設定します。
セキュリティ上、スクリプトに直接書くのはよろしくないので、「プロジェクトのプロパティ」に設定します。
ただ現在(2021年12月時点)、「新しいエディタ」では本機能を使用できないようなので、「以前のエディタ」に切り替えて登録します。
-
画面右端にある「以前のエディタを使用」をクリック。
-
「スクリプトのプロパティ」をクリック。
-
登録した値は、以下のようにスクリプト内で利用できます。
var ACCESS_TOKEN = PropertiesService.getScriptProperties().getProperty("XXXXX_TOKEN");
-
(任意)プロジェクトのプロパティを登録したら新しいエディタに戻しておきます。
Channel IDの取得
以下の関数で取得できます。
新しくスクリプトを作成する方は、元から入っているコードを消して上書きすれば大丈夫です。
// 登録したプロジェクトのプロパティから、アクセストークンを取得
var ACCESS_TOKEN = PropertiesService.getScriptProperties().getProperty("XXXXX_TOKEN");
// チャンネルIDを取得する関数
function getChannelId() {
var target_channel_name = 'IDを取得したいチャンネル名';
var headers = {
'Authorization': 'Bearer '+ ACCESS_TOKEN
};
var options = {
'method' : 'post',
'headers': headers,
'contentType': 'application/json',
};
// 全てのチャンネル情報を取得
var response = UrlFetchApp.fetch('https://slack.com/api/conversations.list', options);
var json = JSON.parse(response.getContentText());
// 対象のチャンネルのIDのみ表示する
for (i=0; i<json.channels.length; i++) {
if (json.channels[i].name == target_channel_name) {
// ここで行いたい処理をする。今回はログに表示するにとどめています。
Logger.log("Channel ID: " + json.channels[i].id);
}
}
}
さらに発展して
Web API methodsから欲しい情報の取り方を調べ、GAS上で処理することで様々なことができるはずです。
Slack以外のAPIも組み合わせれば、アプリ間の連携も可能です。