logo

Slack Boltを試してみる

2023/3/19

概要

ChatGPTのAPIをSlackbotを作って試してみたいと思って、先にSlack Boltを試すことになりました。

Boltとは

  • SlackにBotを待機させて、チャンネルの特定の文字が入力されたり、メンションが飛んだりするなどのイベントをリッスンして、サーバからSlackの方に操作を加えることができるます。
  • 質問という文字を検知し、解答を返す。などができます。

ドキュメント

Boltを試してみる

SlackのAppを作る

https://api.slack.com/app で新しくアプリを作成します。

From scratch > appの名前と、使うslackのworkspaceを選択します。

createapp

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に以下を追加する
    • scope
  • save changeを押すとreinstall your appが出るので必ず押す!

簡単に試す

Boltのドキュメントにあるコードをそのまま使ってみます。

Boltをinstall

$ npm install @slack/bolt

app.jsを作成し、貼り付ける。 envの情報は上記でコピーしたTokenたちを貼ります。もしくはdotenvを入れてenvファイルからTokenを取得します。

app.js
const { 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と投稿すると返事が返ってくることがわかります。

example

次はチャンネルにメンション付きの投稿がある場合、それを拾ってchatGPTと会話をさせるのを試してみます。

Ref