活動の様子

NUTMEG-SlackBot開発やってみた

NUTMEG-SlackBot開発やってみた

はじめに

はじめまして,この春NUTMEGに加入した飯田です. チャットツールとして使用しているSlackを便利にしよう!!ということで,SlackBotの開発をM2の後方腕組大臣から受け継ぎました!! 今回は,SlackBotで送信したメッセージをスプレッドシートに記録する機能を作りました.

GM2意見箱を作ってみた

要望

  • 意見・課題点を一覧に記録しておきたい.
  • SlackでBotをメンションしてメッセージが送信されると,スプレッドシートに書き込まれる.

SlackBotの仕組み

  1. Botが入っているチャンネル上でメッセージが送信されたら,SlackがBotのサーバーにリクエストを送信する.

  2. Botのサーバーは処理を行い,Slackに結果を送信(チャンネルにメッセージを送信とか)する.

ngrokのインストール

  1. ngrok - downloadからインストールする.

(ngrokをローカルにインストールせず,Dockerを使用する方法でもできそうなので,そっちのほうが簡単かも)

 docker run -it -e NGROK_AUTHTOKEN=<token> ngrok/ngrok http 3000 
  1. Slackはイベントに対応するHTTP POSTリクエストを”Request URL”エンドポイントに送信する. そのため,ワークスペースに常駐しているSlackBotがローカルPCのポートにアクセスする必要がある.

  2. ローカルPCのネットワークを外部に公開し,アクセスできるようにするためにngrokを使用する.

参考 : Slack BotをBoltで開発した

git cloneする

git clone [email protected]:NUTFes/nutmeg-slack.git

環境変数を設定する

  1. api/env/.env に以下を作成する
# 開発環境
DB_NAME="***************"
DB_USER="***"
DB_PASSWORD="*******" 
  1. env/.env に以下を作成する
SLACK_BOT_TOKEN=*******************************************
SLACK_SIGNING_SECRET=*****************
DB_NAME=*********
DB_USER=***
DB_PASSWORD=****
DB_PORT=27017
DB_HOST=mongo
SPREADSHEET_KEY=******************
  1. vite/.env に以下を作成する
VITE_API_URL=http://localhost:1323
VITE_KEYCLOAK_URL=********
VITE_KEYCLOAK_REALM=NUTFES
VITE_KEYCLOAK_CLIENT_ID=slack-auth

Slack APIの設定

  1. Slack Appの設定ページにアクセスし,Collaborators に名前を追加する.(招待する必要があるかも) (NUTMEGワークスペースの develop-nutfes_slack チャンネルのタブにピン留めされている)

  1. Boltサーバーの起動 docker compose upする

⚡Bolt app is runnning! と表示されると,Slack Botサーバーが起動している.

ngrokの起動・RequestURLの設定

  1. ubunutのタブをもう1つ開いて,ngrok http 3000 で3000番のポートにインターネット上からアクセスできるようにする.

(注意 : インターネット上に公開しているので,作業終了時には閉じるようにしたほうがいい)

Session Statusonline であれば,接続できている.

  1. Forwardinghttps://035....ngrok-free.app をコピーする.

  2. Slack appの設定ページの Event SubscriptionsRequest URLChange を押して, コピーしたURL + /slack/event を入力する. 入力した後,緑色の文字で Verified と表示されると,Slackからngrokに通信できている.

準備完了!!

これでSlack bot開発ができるようになります!!

おわりに

Slack Botで技大祭を円滑にというビジョンを持って,趣味程度に取り組んでいこうと思います.