この記事は PMOB Advent Calendar 25日目の記事です.
チャンネルにbotを追加するだけで,そのチャンネルの発言を特定のチャンネルに流すことができるbotを作った.
こんな感じで,チャンネルの投稿を別のチャンネルに流すことができる
構成図
botがチャンネルの発言をAPI Gatewayに送信する
API GatewayからのイベントをLambdaが受け取る
チャンネルやユーザの情報がDynamoDBに保存されているか確認する
保存されていなければSlack APIに問い合わせる
問い合わせた情報をDynamo DBに保存
取得した情報を元に投稿先チャンネルへ投稿
何故作ったのか
- 複数チャンネルを巡回する手間の削減
- 分報チャンネル追うの大変
- TwitterのTLみたいに混ざったら面白そうという気持ち
使うためには
- Slack APIのtoken
- 投稿するためのincoming webhook
- slack botを追加しEvent Subscriptionsでmessage.channelsのイベントを受け取るようにする
ハマったところなど
ユーザやチャンネルの情報がidで渡されてくる
こういう構成にする事になった理由として,イベントではidが渡されてくるため,名前を引くためにAPIを使うことになった
Slackのイベントタイムアウトは3秒
タイムアウトが3秒しかなく,それまでにイベントに対してのレスポンスを返さないともう一度イベントが送信されてしまう
そうすると投稿先チャンネルへ二重投稿されてしまうため,できる限りすぐレスポンスを返せるようにしないといけない
今回はDynamo DBを使って,そこに情報が保存されていたらそれを使うことでタイムアウトまでにレスポンスを返せるようになった
終わりに
最初は遊びで作ってたものだったけれど,意外と面白いし実用性もあって良かった
分報が全部流れるとどのくらいの流量になるのか気になる
今回作ったリポジトリはこちら