LoginSignup
7
5

More than 5 years have passed since last update.

Slack Bot でチャンネル作成等のイベントを通知

Last updated at Posted at 2018-06-03

会社でSlackを使っていてやっぱり誰かがチャンネルが作成したことが分からないので作成。
同じことを思ってインターネット上で既に色々な人が作成しているので、技術的には目新しくなく、アウトプットの管理として。

※次のようなページ等を参考にさせて貰いました。
http://coxcox.hatenablog.com/entry/2017/08/16/163719

概要

パブリックチャンネルに関するイベントを指定したチャンネルに通知。
下記は、チャンネル作成を #general に通知している例
image.png

他に、次のようなイベントに対応

  • チャンネル削除
  • チャンネル名の変更
  • チャンネルのアーカイブ
  • チャンネルのアーカイブからの復元

SlackのEvents API
https://api.slack.com/events-api

構成

上のページと同じ次の構成。ステートレス。
Slack <---> API Gateway <---> Lambda

AWS側

Node.js は 8.10。
Lambdaはコール元がどこであるかに依存せず汎用的に作成して、APIの利用側とのインタフェースは API Gateway で吸収するのが良いかなと思っていたので、API Gateway では Lambdaプロキシ統合を使用していないが、VTLでの定義そのものや、エラーレスポンスのマッピングが綺麗ではないことを考えると、プロキシ統合してしまった方がいいのだろうか。

制限的なこと

  • 削除は、通知されたチャンネルIDでチャンネル情報が既に取得できないので、チャンネル名等が取得できない。
    Bot側でチャンネル情報を保持しておく必要がありそう。ステートレスと相性が悪い。
  • プライベートチャンネルは、Bot Userが含まれていないと通知されない。
    作成イベントは通知を確認できなかった。

Slack Web API

チャンネル名やユーザ名を取得するのに、Web APIを使っている。
(Eventsでは、基本的にSlack内部で管理されるチャンネルIDやユーザIDが通知されるため ※Eventによる)
https://api.slack.com/web

使用したAPI
channels.info
users.profile.get
chat.postMessage

気づいたこと

Slack APIのTokenには、OAuth Access TokenBot User OAuth Access Token の2つがある。

  • OAuth Access Token:管理画面にログインしているユーザのToken
  • Bot User OAuth Access Token:Bot UserのToken

管理画面の Scopes から、スコープを設定しても、*のAPIは、Bot User OAuth Access Token だと、パーミッションエラーとなった。
Bot Userで OAuth を行えば良いのだろうけど、どう行えば良いのかわからなかった。
ログインユーザでOAuth Access Tokenを生成してそれを使用した。
逆に自分以外のユーザ情報も取れるのかな?と思ったけど、取得できていた。

ソースコード

Slack、API Gateway、Lambdaのセットアップ

Lambda コードは、一部を node_modules で 別リポジトリ にしてみた
なので、git clone 後、npm install を行って zip アップロードする必要がある。

やりたいこと

  • 盛り上がっているチャンネルを通知させたい
    メッセージ全てをイベント通知すると費用もかかりそうなので、どうかなと思った。 今のステートレス構成でそれ以外の Events API だけだと難しそう。
    Cloud Watch でスケジュールイベントと連動して、とかならできそう。(でも、全チャンネル分の情報を取得する必要がある。ので、イベントトリガにできた方がシンプル)
7
5
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
7
5