【Slack】新しいチャンネルが作成されたら通知できるようにしてみた!

社内でもSlackを導入しているのですが
新しいチャンネルが作成されても気づくことができず
後にこんなチャンネルがあったのか!?
ということがしばしばあったので
新しいチャンネルが作成されたら通知する仕組みを作ってみました😊

作成した構成


プログラムを書いてそれをサーバに配置しておくというパターンではなく
Slack Appを使用し、さらにサーバレスで実装してみました!

f:id:aym413:20170816152659p:plain

API GatewayとLambdaの設定


API Gateway
* メソッドは「POST」
* 統合リクエストの「統合タイプ」は「Lambda関数」を設定

Lambda
* 言語は「Node.js 6.10」
* Slack Appとの連携確認が必要なため、一旦下記のコードで作成

exports.handler = (event, context, callback) => {
    context.succeed(event["body-json"]);
};


⑵Slack Appを作成


下記URLにアクセスし、「Start Building」をクリック
https://api.slack.com/

「App Name」と「Development Slack Team」を入力し、「Create App」をクリックすると… f:id:aym413:20170816153143j:plain

アプリケーションが作成されました!

⑶Slack Appの設定 −その1− Bot User


続けてアプリケーションの設定をしていきます

メニューから「Bot Users」を選択
f:id:aym413:20170816155022j:plain

「Default username」にBotのユーザ名を入力

Botをリアルタイムに処理させるため
「Always Show My Bot as Online」を「On」にする

f:id:aym413:20170816163111j:plain

最後に「Add Bot User」をクリックして保存します

⑷Slack Appの設定 −その2− Event Subscriptions


メニューから「Event Subscriptions」を選択
f:id:aym413:20170816154958j:plain

「Enable Events」を「On」にして
「Request URL」に⑴API GatewayとLambdaを設定するで作成した
API Gatewayのエンドポイントを入力します
しばらくして「Verified」になればOKです!
f:id:aym413:20170816155417j:plain

ここで「Verified」にならなければLambdaのコードか
API Gatewayの設定にミスがあるかもしれませんーーー😥

少し下にいって「Subscribe to Bot Events」に
「channel_created」のイベントを追加します
f:id:aym413:20170816155636j:plain

最後に「Save Changes」をクリックして保存します

⑸Slack Appの設定 −その3− Install App


メニューから「Install App」を選択
f:id:aym413:20170816160142j:plain

「Install App to Team」をクリック!
f:id:aym413:20170816160139j:plain

アプリケーションインストールの確認画面が表示されるので
問題なければ「Authorize」をクリックします
f:id:aym413:20170816160603j:plain

インストールされるとSlackの画面で
アプリケーションが起動しているのを確認できます
f:id:aym413:20170816160822j:plain

⑹プログラムの作成


作成された新しいチャンネルを通知するコードを書いていきますー

その前に…Botのtokenが必要なのでそれをメモしておきます
メニューから「OAuth & Permissions」を選択して
f:id:aym413:20170816161208j:plain

Bot User OAuth Access Token」に書かれているtokenをメモメモ。。
f:id:aym413:20170816161202j:plain

いよいよコードの作成!
今回はBotkitを使って作成しました
Botkitのインストール方法はこちらの記事を参考にさせていただきました!
http://blog.duck8823.com/entry/2016/05/20/005734

コードはいたってシンプル↓

# vi index.js
//slack settings
var Botkit = require('botkit');
var controller = Botkit.slackbot({
  debug: true
});

var bot = controller.spawn({
    token: <メモしたBotのtoken>
});

// slack new channnel
exports.handler = (event, context, callback) => {
  var channelName = event["body-json"]["event"]["channel"]["name"]
  bot.say({
    text: 'new channel: #' + channelName,
    link_names: 1,
    channel: 'C2XXXX' //通知するチャンネルID
  });
};

作成したコードをzipにします

# zip -r xxxx.zip index.js node_modules

zipファイルをLambdaにアップロードすれば完了です!

⑺新しいチャンネルを作成すると通知されるか確認


早速動作するか確認しましょう
f:id:aym413:20170816162241j:plain

おっ!無事に新しいチャンネルの通知が来ました〜
f:id:aym413:20170816162238j:plain


感想


今回作成したものはPublicチャンネルのみ通知されます
もともとPrivateチャンネルは通知されないみたいです
Botのアクションをトリガーにして
他にも様々な仕掛けを作ることができそうです🤗