【GAS】Slackの複数チャンネルへメッセージを送信するアプリを作る

Engineering
この記事を書いた人

PharmaXというオンライン薬局のスタートアップで薬剤師・エンジニアとして働いています。Rails・React・TypeScriptなどを書きます。英語が得意でTOEIC900点・通訳案内士資格取得。主に薬剤師の働き方やプログラミング、英語学習について書きます。当サイトではアフィリエイトプログラムを利用して商品を紹介しています。
>> 詳しいプロフィール

Tomoyuki Katoをフォローする

 

Slackの複数チャンネルにメッセージを一斉送信したいというユースケースができてきたので、GASでSlackアプリを作ったので、どのように作ったかをメモ書きしておく。

 

Slackの下準備

GASでコードを書く前に、Slackでいくつか設定しなければいけないことがある。

 

1:Slackアプリを作成する

最初にSlack APIのページにアクセスして、Slackアプリを作成する。

 

まず、右上の方に「Create New App」というボタンがあるのでそれを押す。

 

次に「From scratch」を選択。

 

そして「アプリの名前」「どのワークスペースでアプリを使うか」を選択する。

2:パーミッションの設定をする

次にSlackアプリでができる権限を決める設定をする。

まず「OAuth & Permissons」を選択。

 

Scopesの「Add an OAuth Scope」をクリック。

 

そして以下3つの権限を付与する。

  • chat:write
    • チャットへの書き込み権限
  • chat:write.public
    • パブリックチャンネルに許可なしで書き込める権限
  • chat:write.customize
    • アプリのアイコンや表示名を変更す権限

 

 

3:Slack botをインストールする

次にSlack botをインストールする。

 

まずサイドバーの「App Home」をクリック。

 

「Edit」をクリック。

 

「Display Name(botの名前)」「Default username(@xxxxで表示される名前)」を入力して、「Save」をクリック。

 

Slackアプリのアイコンを設定する場合は、「Basic Information」をクリック。

 

「Add App Icon」をクリックし、画像をアップロード。

 

次にをクリック。

 

「Allow」をクリック。

 

最後にGASで使用するSlack APIのトークンを取得する。

「Bot User OAuth Token」に表示されている黒塗りの横の「Copy」ボタンをクリックして、このトークンをどこかに保存しておく。

 

これでSlack周りの下準備は終わり。

 

Slackの複数チャンネルへメッセージを送信するGASの書き方

 

Slackの下準備が終わったら、いよいよGASを書いていく。

 

1:GASでSlack APIを使うためのライブラリをインストールする

「ライブラリ」をクリック。

 

「スクリプト ID」を入力する。

 

SlackライブラリのスクリプトIDは↓なので、これをコピペして検索すれば良い。

1on93YOYfSmV92R5q59NpKmsyWIQD8qnoLYk-gkQBI92C58SPyA2x1-bq

 

「追加」をクリック。

 

サイドバーに「SlackApp」と表示されていたら成功。

 

2:コードを書く

次にコードを書く。

 

基本的には↓のコードをコピペすればOKだ。

ただし、以下の3つだけは自分のものに置き換えてほしい。

  • your-slackToken(下準備で作ったtoken)
  • 投稿するチャンネルのID(channelds)
  • message
function sendMessagesToSlack() {
  const slackToken = 'your-slackToken';
  const slackApp = SlackApp.create(slackToken);
  
  const channelIds = [
    "xxxxxxxxxxx", //チャンネル1
    "xxxxxxxxxxx", //チャンネル2
    "xxxxxxxxxxx", //チャンネル3
    "xxxxxxxxxxx", //チャンネル4
    "xxxxxxxxxxx", //チャンネル5
    "xxxxxxxxxxx", //チャンネル6
    "xxxxxxxxxxx", //チャンネル7
    "xxxxxxxxxxx", //チャンネル8
    "xxxxxxxxxxx", //チャンネル9
  ];
  
  const message ="送りたいメッセージ";

  channelIds.forEach((channelId) => {
     slackApp.postMessage(channelId, message);
    }
  )
}

 

ちなみに投稿するSlackチャンネルのIDを取得するには、チャンネル名を右クリックして「コピー」を押し、「リンクをコピー」をクリックする。


 

そうすると、以下のようなURLがコピーされる。

この太字になっているのがチャンネルIDだ。

https://xxxxxxx.slack.com/archives/C03P54T335H

投稿したいチャンネルのIDを先ほどのコードに書いて、「実行」を押すと、指定されたSlackチャンネルにメッセージが送信される。

プライベートチャンネルには投稿されないので注意

ちなみにパブリックなSlackチャンネルにはメッセージを送信できるけど、プライベートチャンネルには投稿できないので注意してほしい。

 

プライベートチャンネルにもメッセージを投稿したい場合は、今回作ったアプリをプライベートチャンネルのグループメンバーとして招待すれば良い。

 

アプリを招待した上でchannelIdsにそのSlackチャンネルのIDを追加しておけば、メッセージを送信することができる。

 

終わりに

複数のSlackチャンネルに対して一気にメッセージを送れるようになって本当に便利。

もっと早く作っておけば良かったなぁ。