5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Google Apps Scriptを利用して、Slackチャンネル参加時にWelcomeメッセージを送信する

Last updated at Posted at 2019-03-22

TL;DR

zapierという便利なツールがあります :rolling_eyes:
SlackとかGASとかのバージョンの違いでつまづいた場合はこれを見るといいと思います。
https://www.youtube.com/watch?v=YOHsH8AnNgg

完成形

sample.mov.gif

参考

Slack API 公式doc
SlackのEventAPIとGASを利用して、特定のチャンネルにjoinするとwelcomeメッセージを表示するBotを作ってみた
Slack BotをGASでいい感じで書くためのライブラリを作った

やってくぞー

Slack Appの作成

"Create New App"をクリックし、"App Name","Development Slack Workspace"を入力。
スクリーンショット 2019-03-22 21.52.58.png

Bot Userの作成

サイドバーから"Bot Users"を選択し、"Add a Bot User"をクリック。
パラメータはそのまま"Add Bot User"でOK。
スクリーンショット 2019-03-22 21.55.55.png

この画面は開いたままにする。

Google Apps Script(GAS)の作成

Google Driveを開き、新規>その他>Google Apps Scriptを選択する。
その他の中にGoogle Apps Scriptがない場合は、"アプリを追加"から接続する。

一旦バリデーション用のコードを記述する。

コード.js
function doPost(e){
  var params = JSON.parse(e.postData.getDataAsString());
  return ContentService.createTextOutput(params.challenge);
}

function doGet(e){
  doPost(e);
}

GASの公開

  1. "公開"タブ>ウェブアプリケーションとして導入
スクリーンショット 2019-03-22 22.25.31.png ***必ず、プロジェクトバージョンはNew、アプリケーションにアクセスできるユーザには全員(匿名ユーザーを含む)を選択すること。*** ***2回目以降はプロジェクトが更新されなかったり、SlackからGASを実行できなくなったりする。***
  1. "導入"ボタンをクリックすると以下のページが出るので、"現在のウェブアプリケーションのURL"をコピーしておく。

Event Subscriptionsの設定

  1. Slack Botのページに戻り、サイドバーから"Event Subscriptions"を選択する。
  2. "Enable Events"の横のスイッチをONに変更する。
  3. Request URLにコピーしたURLを入力すると、Verifiedという緑文字が出る。

これが出なければ、なにかおかしいので見直す
スクリーンショット 2019-03-22 22.44.37.png

  1. "Add Bot User Event"をクリックし、"member_joined_channel"を選択する。
  2. "Save Changes"をクリックする。

GASを変更

コード.js
function doPost(e){
  var token = PropertiesService.getScriptProperties().getProperty('SLACK_ACCESS_TOKEN');
  var slackApp = SlackApp.create(token);

  var params = JSON.parse(e.postData.getDataAsString());
  var channelId = params.event.channel;
  var userId = params.event.user;
  

  var options = {
    channelId: channelId, // 参加したチャンネルのID、 #test などのチャンネル名でも投稿可能
    userName: "Welcome Bot", // 投稿するbotの名前
    message: "<@" + userId + "> Welcome!!! :zany_face:", // 投稿するメッセージ
  };

  slackApp.postMessage(options.channelId, options.message, {username: options.userName});
}

function doGet(e){
  doPost(e);
}

SlackAppライブラリを追加

  1. "リソース"タブ>ライブラリを開き、 M3W5Ut3Q39AaIwLquryEPMwV62A3znfOO を追加して保存
スクリーンショット 2019-03-22 22.33.36.png

SLACK_ACCESS_TOKENの設定

GAS内に

var token = PropertiesService.getScriptProperties().getProperty('SLACK_ACCESS_TOKEN');

と書いてあるが、今のままではSLACK_ACCESS_TOKENを取得できないため設定する。

  1. Slack Botのページで、サイドバーから"OAuth & Permissions"を選択する。
  2. "Install App to Workspace"をクリックし、Appからのアクセスを許可する。
  3. TOKENが出てくるので、"Bot User OAuth Access Token"をコピーする。
スクリーンショット 2019-03-22 22.17.08.png
  1. GASに戻り、ファイル>プロジェクトのプロパティ>スクリプトのプロパティを開く。
  2. "プロパティ"に"SLACK_ACCESS_TOKEN"、"値"にコピーしたTOKENを入れて保存する。
スクリーンショット 2019-03-22 22.20.44.png
  1. 再度、ウェブアプリケーションとして導入の手順を実施する。(プロジェクトバージョンは必ず"New"にすること)

実行してみる

アプリケーションをchannnelに呼ぶといい。
sample.mov.gif

Tips

  • SlackのchannelIdはブラウザで開くと確認できる(messages/のあとの文字列)
スクリーンショット 2019-03-23 14.08.43.png
- このチャンネルでだけWelcomeメッセージを送信したいよーって場合はこれで絞ればいいんじゃないかと。
    - アプリが入ってるチャンネルでのみ反応するので、そんなに必要はなさそう
5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?