0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ngrokを使用したローカル環境でのSlack bolt(Python)の開発

Posted at

今回は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の設定を変更しないといけません。
ngrok.png

そのため、今回は固定のURLを利用しようと思います。ngrok dashboard左サイドバーのCloud EdgeにあるDomainsページを開き、「New Domain」で固定のURLを作成します。
ngrok2.png

Ctrl+Cで止めて、固定のURLを指定し、ngrokを立ち上げてみます。

 ngrok http --domain=[Your URL] [port]

ngrok3.png

Slack Appの作成

Slackアプリを作成し、Your Apps画面から詳細設定を開きます。(後ほど使用)

スクリーンショット 2024-06-03 15.07.50.png

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表示、コピーします。
SlackApp.png

.envファイルに以下の内容を追記します。

SLACK_SIGNING_SECRET=[Your Signing Secret]

画面左側のOAuth & Permissionsをクリックし、xoxbから始まるBot User OAuth Tokenをコピーします。
SlackApp2.png

.envファイルに以下の内容を追記します。

SLACK_BOT_TOKEN=[Your Bot Token]

app.pyを実行してみます。

python app.py

app.png

Slack Appの設定

左のサイドバーのEvent Subscriptionsを開きます。Request URLにngrokの指定URLを入力し、後ろに「/slacks/events」を追記します。「Verified」との文言が出てきたらOKです。

SlackApp3.png

画面を下にスクロールし、Subscribe to bot eventsでSlack Appにどのイベントを購読するかを追加設定し、設定を保存します。

スクリーンショット 2024-06-03 16.08.11.png

各イベントの解説は以下になります。

 message.channels アプリが参加しているパブリックチャンネルのメッセージをリッスン
 message.groups アプリが参加しているプライベートチャンネルのメッセージをリッスン
 message.im あなたのアプリとユーザーのダイレクトメッセージをリッスン
 message.mpim あなたのアプリが追加されているグループ DM をリッスン

最後に、簡単なテストします。ユーザに送られてきたメッセージを受け取って内容を追加し、返信することを確認できます。
SlackApp4.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?