概要
ChatGPTのAPIをSlackbotを作って試してみたいと思って、先にSlack Boltを試すことになりました。
Boltとは
- SlackにBotを待機させて、チャンネルの特定の文字が入力されたり、メンションが飛んだりするなどのイベントをリッスンして、サーバからSlackの方に操作を加えることができるます。
- 質問という文字を検知し、解答を返す。などができます。
Boltを試してみる
SlackのAppを作る
https://api.slack.com/app で新しくアプリを作成します。
From scratch > appの名前と、使うslackのworkspaceを選択します。
Tokenの設定
Boltで必要なtokenは以下の三つです。
const app = new App({ token: process.env.SLACK_BOT_TOKEN, // ① signingSecret: process.env.SLACK_SIGNING_SECRET, // ② socketMode: true, appToken: process.env.SLACK_APP_TOKEN, // ③ port: 3000, });
設定していきましょう。番号がついているのは後で利用するため、ちゃんと残します。
- Basic Information > App Credentials > Signing Secret
- copyしておく⇒ ②
- Basic Information > App-Level Tokens > Generate Token and Scopes
connections:write
のscopeを追加- Tokenをcopyしておく ⇒ ③
- Basic Information > Display Information
- slack Appの名前やiconを追加する
- OAuth & Permissions > Scopes
- 以下を追加する
chat:write
app_mentions:read
channels:history
channels:history
groups:history
im:history
mpim:history
Install App to Workspace
でtokenが表示されるのでcopyしておく ⇒ ①
- 以下を追加する
Event 設定
-
Socket Mode
- onにする
-
Event Subscription
- onにする
- Subscribe to bot eventsに以下を追加する
-
save change
を押すとreinstall your app
が出るので必ず押す!
簡単に試す
Boltのドキュメントにあるコードをそのまま使ってみます。
Boltをinstall
$ npm install @slack/bolt
app.jsを作成し、貼り付ける。 envの情報は上記でコピーしたTokenたちを貼ります。もしくはdotenvを入れてenvファイルからTokenを取得します。
app.jsconst { App } = require('@slack/bolt'); const app = new App({ token: process.env.SLACK_BOT_TOKEN, signingSecret: process.env.SLACK_SIGNING_SECRET, socketMode: true, appToken: process.env.SLACK_APP_TOKEN, // ソケットモードではポートをリッスンしませんが、アプリを OAuth フローに対応させる場合、 // 何らかのポートをリッスンする必要があります port: process.env.PORT || 3000 }); // "hello" を含むメッセージをリッスンします app.message('hello', async ({ message, say }) => { // イベントがトリガーされたチャンネルに say() でメッセージを送信します await say(`Hey there <@${message.user}>!`); }); (async () => { // アプリを起動します await app.start(); console.log('⚡️ Bolt app is running!'); })();
Boltを立ち上げる
$ node app.js [INFO] socket-mode:SocketModeClient:0 Going to establish a new connection to Slack ... ⚡️ Bolt app is running! [INFO] socket-mode:SocketModeClient:0 Now connected to Slack
helloと投稿すると返事が返ってくることがわかります。
次はチャンネルにメンション付きの投稿がある場合、それを拾ってchatGPTと会話をさせるのを試してみます。
Ref
- Bolt tutorial
- https://api.slack.com/lang/ja-jp
- velog
- Bolt利用準備が詳しく書いてある(韓国語)