今回はngrokを使用し、ローカルでSlack boltの開発環境を構築してみました。自分のメモ用に記事を投稿します。
ngrokのセットアップ(MacOS)
ngrokユーザ登録し、ngrok dashboardを開きます。
Setup & Installationの手順に従って、ngrokをインストール、ngrok.ymlファイルにauthtokenを追加します。
brew install ngrok/ngrok/ngrok
ngrok config add-authtoken xxxxxxxxxxxx
ターミナルを開き、実行可能かを確認してみます。
ngrok http 8080
下記が出力されことを確認できます。ForwardingにあるURLは外部に公開されますが、実行する度にURLが変わり毎回Slack boltの設定を変更しないといけません。
そのため、今回は固定のURLを利用しようと思います。ngrok dashboard左サイドバーのCloud EdgeにあるDomainsページを開き、「New Domain」で固定のURLを作成します。
Ctrl+Cで止めて、固定のURLを指定し、ngrokを立ち上げてみます。
ngrok http --domain=[Your URL] [port]
Slack Appの作成
Slackアプリを作成し、Your Apps画面から詳細設定を開きます。(後ほど使用)
Slack boltのPythonプログラムの用意
Python環境にslack_boltパッケージをインストールします。
pip install slack_bolt
app.pyという名前の新しいファイルを作成し、以下のコードを追加します。
import os
from slack_bolt import App
from dotenv import load_dotenv
import re
load_dotenv()
SLACK_BOT_TOKEN = os.getenv('SLACK_BOT_TOKEN')
SLACK_SIGNING_SECRET = os.getenv('SLACK_SIGNING_SECRET')
# Initializes your app with your bot token and signing secret
app = App(
token=SLACK_BOT_TOKEN,
signing_secret=SLACK_SIGNING_SECRET
)
@app.message(re.compile(".*"))
def message_repeat(message, say):
# say() sends a message to the channel where the event was triggered
text_contents = ''
for block in message['blocks']:
for element in block['elements']:
for elem in element['elements']:
text_contents += elem['text'] + '\n'
text = f"Hello <@{message['user']}>! A message from you has arrived as follows. \n {text_contents}"
say(
blocks=[
{
"type": "section",
"text": {"type": "mrkdwn", "text": text},
}
],
text=text,
)
# Start your app
if __name__ == "__main__":
app.start(port=int(os.environ.get("PORT", 8080)))
次にYour Apps画面の設定からslack_boltのApp変数初期化に使用したSLACK_BOT_TOKENとSLACK_SIGNING_SECRETの環境変数中身を取得してきます。
app.pyと同じフォルダに.envファイルを新規作成します。
touch .env
Basic Information画面を下にスクロールし、Signing Secret表示、コピーします。
.envファイルに以下の内容を追記します。
SLACK_SIGNING_SECRET=[Your Signing Secret]
画面左側のOAuth & Permissionsをクリックし、xoxbから始まるBot User OAuth Tokenをコピーします。
.envファイルに以下の内容を追記します。
SLACK_BOT_TOKEN=[Your Bot Token]
app.pyを実行してみます。
python app.py
Slack Appの設定
左のサイドバーのEvent Subscriptionsを開きます。Request URLにngrokの指定URLを入力し、後ろに「/slacks/events」を追記します。「Verified」との文言が出てきたらOKです。
画面を下にスクロールし、Subscribe to bot eventsでSlack Appにどのイベントを購読するかを追加設定し、設定を保存します。
各イベントの解説は以下になります。
message.channels アプリが参加しているパブリックチャンネルのメッセージをリッスン
message.groups アプリが参加しているプライベートチャンネルのメッセージをリッスン
message.im あなたのアプリとユーザーのダイレクトメッセージをリッスン
message.mpim あなたのアプリが追加されているグループ DM をリッスン