Pythonとngrokを使ってSlack Botを作ってみる

はじめに

Slackは、チームコミュニケーションとコラボレーションを目的としたビジネス向けのメッセージングアプリです。さまざまなアプリやボットを追加することで、ユーザーのニーズに合わせてカスタマイズすることが可能です。

今回はボットを作成してSlackと接続してみたいと思います。この記事では、特にBolt for Pythonを活用してサーバーを構築し、ngrokを通じてこれをSlackと接続する方法に焦点を当て、Slackとの効果的な連携手法を解説します。

Bolt for Pythonとは、Slackアプリケーションの開発を加速するために設計された強力なフレームワークです。このツールを利用することで、開発者はSlack APIとの接続を簡単に確立し、メッセージの送受信やユーザーからのアクションに対応するロジックを容易に実装できます。

しかし、開発中のボットをSlackと直接やりとりさせるには、外部からアクセス可能なエンドポイント(ボットの連絡先のようなもの)が必要です。ここでngrokの出番です。ngrokはローカルで稼働するサーバーを安全にインターネット上に一時的に公開するツールです。

まずは、Bolt 入門ガイドを参考に進めていきたいと思います。

このガイドでは、Bolt for Python を使った Slack アプリの設定と起動する方法について説明します。ここで説明する手順は、新しい Slack アプリを作成し、ローカルの開発環境をセットアップし、Slack ワークスペースからのメッセージをリッスンして応答するアプリを開発するという流れになります。

Bolt 入門ガイド

アプリを作成する

まずは、Slack アプリを作成します。

いつもの仕事のさまたげにならないように、別の開発用のワークスペースを使用することをおすすめします。

Bolt 入門ガイド

こちらのリンクにアクセスすると"Create an app"と以下のような画面が表示されると思います。"From scratch"を選択してください。

https://api.slack.com/apps

アプリ名を入力し、インストール先のワークスペースを選択したら、"Create App"ボタンをクリックすると、アプリの Basic Information ページが表示されます。

ボットの名前を編集

左のサイドバーの"Features"の中にある"App Home"をクリックします。"Your App’s Presence in Slack:"の中に"App Display Name"があるので、"Edit"をクリックします。

App Home

Display Name(Bot Name): 表示名なので日本語でも問題ありません。

Default username: IDのようなものなので、すべて小文字で、21文字を超えることはできず、文字、数字、ピリオド、ハイフン、アンダースコアのみを含むことができます。

トークンとアプリのインストール

Slack アプリでは、Slack API へのアクセスの管理に OAuth を使用します。アプリがインストールされると、トークンが発行されます。アプリはそのトークンを使って API メソッドを呼び出すことができます。

Bolt 入門ガイド

左のサイドバーの"Features"の中にある"OAuth & Permissions"をクリックします。下にスクロールすると"Scopes"の中に"Bot Token Scopes"というセクションがあるので、"Add an OAuth Scope"をクリックします。

OAuth & Permissions

ここではchat:writeというスコープのみを追加します。このスコープは、アプリが参加しているチャンネルにメッセージを投稿することを許可します。

"OAuth & Permissions"ページの上まで戻って "OAuth Tokens for Your Workspace"にある"Install to Workspace"をクリックします。Slack の OAuth 確認画面 が表示されます。この画面で開発用ワークスペースへのアプリのインストールを承認します。

インストールを承認すると"OAuth & Permissions"ページが表示され、"Bot User OAuth Access Token"を確認できるでしょう。後で使うのでメモしておいてください。

Bolt 入門ガイド

左のサイドバーの"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が表示されるのでメモしておきます。

イベントを設定する

Slack ワークスペースで発生するイベント(メッセージが投稿されたときや、メッセージに対するリアクションがつけられたときなど)をリッスンするには、Events API を使って特定の種類のイベントをサブスクライブします。

Bolt 入門ガイド

左のサイドバーの"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と投稿してみると、ボットからの応答を確認することができると思います。

この記事が気に入ったらサポートをしてみませんか?