Pythonとngrokを使ってSlack Botを作ってみる
はじめに
Slackは、チームコミュニケーションとコラボレーションを目的としたビジネス向けのメッセージングアプリです。さまざまなアプリやボットを追加することで、ユーザーのニーズに合わせてカスタマイズすることが可能です。
今回はボットを作成してSlackと接続してみたいと思います。この記事では、特にBolt for Pythonを活用してサーバーを構築し、ngrokを通じてこれをSlackと接続する方法に焦点を当て、Slackとの効果的な連携手法を解説します。
Bolt for Pythonとは、Slackアプリケーションの開発を加速するために設計された強力なフレームワークです。このツールを利用することで、開発者はSlack APIとの接続を簡単に確立し、メッセージの送受信やユーザーからのアクションに対応するロジックを容易に実装できます。
しかし、開発中のボットをSlackと直接やりとりさせるには、外部からアクセス可能なエンドポイント(ボットの連絡先のようなもの)が必要です。ここでngrokの出番です。ngrokはローカルで稼働するサーバーを安全にインターネット上に一時的に公開するツールです。
まずは、Bolt 入門ガイドを参考に進めていきたいと思います。
アプリを作成する
まずは、Slack アプリを作成します。
こちらのリンクにアクセスすると"Create an app"と以下のような画面が表示されると思います。"From scratch"を選択してください。
アプリ名を入力し、インストール先のワークスペースを選択したら、"Create App"ボタンをクリックすると、アプリの Basic Information ページが表示されます。
ボットの名前を編集
左のサイドバーの"Features"の中にある"App Home"をクリックします。"Your App’s Presence in Slack:"の中に"App Display Name"があるので、"Edit"をクリックします。
Display Name(Bot Name): 表示名なので日本語でも問題ありません。
Default username: IDのようなものなので、すべて小文字で、21文字を超えることはできず、文字、数字、ピリオド、ハイフン、アンダースコアのみを含むことができます。
トークンとアプリのインストール
左のサイドバーの"Features"の中にある"OAuth & Permissions"をクリックします。下にスクロールすると"Scopes"の中に"Bot Token Scopes"というセクションがあるので、"Add an OAuth Scope"をクリックします。
ここではchat:writeというスコープのみを追加します。このスコープは、アプリが参加しているチャンネルにメッセージを投稿することを許可します。
"OAuth & Permissions"ページの上まで戻って "OAuth Tokens for Your Workspace"にある"Install to Workspace"をクリックします。Slack の OAuth 確認画面 が表示されます。この画面で開発用ワークスペースへのアプリのインストールを承認します。
インストールを承認すると"OAuth & Permissions"ページが表示され、"Bot User OAuth Access Token"を確認できるでしょう。後で使うのでメモしておいてください。
左のサイドバーの"Settings"の中にある"Basic Information"をクリックします。
下にスクロールすると"App Credentials"の中に"Signing Secret"があるので、こちらもメモしておいてください。
プロジェクトをセットアップする
まずは、空のディレクトリを作成します。
mkdir sample-bot
cd sample-bot
condaを使って仮想環境を作成します。
conda create -n sample-bot python
conda activate sample-bot
必要なライブラリをインストールしておきます。
pip install python-dotenv
pip install slack_bolt
.envファイルを作成して、メモしておいた"Bot User OAuth Access Token"と"Signing Secret"を保存します。
SLACK_SIGNING_SECRET="<your-signing-secret>"
SLACK_BOT_TOKEN="<your-bot-token>"
app.pyファイルを作成して、以下のコードを書き込んでください。
import os
from dotenv import load_dotenv
from slack_bolt import App
load_dotenv()
app = App(
token=ps.environ.get("SLACK_BOT_TOKEN"),
signing_secret=os.environ.get("SLACK_SIGNING_SECRET")
)
@app.message("hello")
def message_hello(message, say):
say(f"Hey there <@{message['user']}>!")
if __name__ == "__main__":
app.start(port=int(os.environ.get("PORT", 3000)))
ボットを起動します。
python app.py
別のターミナルでngrokを起動します。
ngrok http 3000
ngrokのURLが表示されるのでメモしておきます。
イベントを設定する
左のサイドバーの"Features"の中にある"Event Subscriptions"をクリックします。"Enable Events"をオンにします。
"Request URL"に先ほどメモしておいたURLをhttps://<your-domain>/slack/eventsといった形で追加します。
下にスクロールすると"Subscribe to bot events"というセクションがあるので、"Add Bot User Event"をクリックします。
ここではmessage.channels, message.groups, message.im, message.mpimという4つのメッセージイベントを選択したら、右下にある"Save Changes"ボタンをクリックします。
再度アプリのインストールをするように言われるので、"reinstall your app"をクリックすると、Slack の OAuth 確認画面 が表示されます。この画面で開発用ワークスペースへのアプリのインストールを承認します。
メッセージをリッスンして応答する
ボットを利用するためにチャンネルを作成します。既にチャンネルがある場合は飛ばしてください。
Slackアプリにて、サイドバーにある+(プラスボタン)をクリックし、チャンネルを作成するを選択してください。チャンネルの名前を指定して次へをクリックし、チャンネルのタイプを選択して作成をクリックしてください。
チャンネルにSlack Appを追加します。サイドバーからボット追加したチャンネル名をクリックし、チャット画面の上部に表示されているチャンネル名をクリックしてください。インテグレーションをクリックし、アプリを追加するをクリックして、自分のアプリの横の追加をクリックしてください。
最後にチャンネルにhelloと投稿してみると、ボットからの応答を確認することができると思います。
この記事が気に入ったらサポートをしてみませんか?