Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Python Slack

SlackのBoltフレームワークとは?使い方をご紹介(ハンズオン形式)

投稿日:2022年12月12日 更新日:

<目次>

SlackのBoltフレームワークとは?使い方をご紹介(ハンズオン形式)
 SlackのBoltフレームワークの概要
 STEP0:作成するサンプルアプリの概要
 STEP1:Slackアプリの新規作成&権限付与
 STEP2~5:Python/ngrok/flask導入とSlack設定
 STEP6:Pythonコードの作成(最終版)
 STEP7:疎通テスト

SlackのBoltフレームワークとは?使い方をご紹介(ハンズオン形式)

SlackのBoltフレームワークの概要

まずはBoltの概要説明です。
BoltはSlackアプリ構築のためのフレームワークです。Boltのホームページ(https://api.slack.com/bolt)で紹介されている特徴(The Basics of Bolt)について、直感的に分かる補足をしてみます。

●①Effortless OAuthの一例
例として、Bolt側で認証をしやすくしてくれています。自力で実装する場合、認証情報(トークン等)をHTTPリクエストのヘッダーにセットする必要がありますが、Boltではそうした部分を簡素化するクラス・関数が多数用意されています。
(図111)例えば、トークンなどはインスタンス生成の引数に指定すればOK。

●②Instant interactivityの一例
・例えば、”hello slack”という投稿をトリガーに関数を実行したい場合は、関数の頭に下記デコレーション(@~)を付与するだけでOK。
@bolt_app.message("hello slack")
・例えば、「何かしらの投稿」を検知したのをトリガーに関数を実行したい場合は、関数の頭に下記デコレーション(@~)を付与するだけでOK。
@slack_event_adapter.on('message')

●③Simple Socket Modeの一例
「ソケットモード」はパブリックなHTTPリクエスト先を公開せずに、Slackの「Events API」や対話的な部品を使用できる機能です。
(図112)

ソケットモードについては、下記記事でもう少し詳細に紹介しています。
Slackのソケットモードとは?概要からHello Worldの手順までご紹介

目次にもどる

STEP0:作成するサンプルアプリの概要

今回はサーバを立てずに、ローカルPCをサーバに見立ててPythonアプリ(Boltフレームワーク使用)を動かします。そのためにngrokというローカルホストツールを用いて、グローバルIPとローカルIPを相互に変換して、外部(Slack)とのhttps通信を行います。
(図121)

目次にもどる

STEP1:Slackアプリの新規作成&権限付与

コチラの手順を参照

目次にもどる

STEP2~5:Python/ngrok/flask導入とSlack設定

各工程の手順リンクを以下にまとめます。

STEP2:Python⇒Slackへのメッセージ投稿の疎通
(手順) SlackのAPIでメッセージを投稿する方法

STEP3:ngrokのインストール
STEP4:Python環境にflaskをインストール
STEP5:Slackでイベント発行&受取りの準備
(手順) Slackで自動返信の投稿をするボットをPythonで作る手順

目次にもどる

STEP6:Pythonコードの作成(最終版)

(サンプル)最終形のコードは以下の通りです。

from flask import Flask, request
from slack_sdk import WebClient
from slack_bolt import App, Say
from slack_bolt.adapter.flask import SlackRequestHandler
SLACK_SIGNING_SECRET = 'xxxxxxxxxxx'
SLACK_BOT_TOKEN = 'xoxb-xxxxxxxxxxx'

app = Flask(__name__)
# トークンを指定してWebClientのインスタンスを生成
client = WebClient(token=SLACK_BOT_TOKEN)
bolt_app = App(token=SLACK_BOT_TOKEN, signing_secret=SLACK_SIGNING_SECRET)

# (参考)アダプター(SlackRequestHandler)の役割とは?
# Slackから流入するリクエストを受けて、Bolt用リクエストに変換すること。
# 更にそれをBoltのアプリにディスパッチすること。
# https://slack.dev/bolt-python/concepts

# SlackRequestHandlerのインスタンス生成
# ・Boltフレームワークで提供するFlask用アダプター
# ・WSGIリクエスト⇒BoltのIF(Boltのリクエスト)に変換する
# ・逆にBoltのレスポンス⇒WSGIレスポンスに変換する
handler = SlackRequestHandler(bolt_app)
# エンドポイントの登録
# Flaskアプリに、SlackがリクエストをPOSTする先のエンドポイントを登録
@app.route("/slack/events", methods=["POST"])
def slack_events():
    # ハンドラは、Slackリクエストを受けて、BoltRequestに変換し
    # 更にはディスパッチ処理を担います。
    # Flask,AWS Lambda,djangoなど様々なアダプタに対応したSlackRequestHandlerがある
    return handler.handle(request)

# Boltのデコレーター
# message("xxx")特定のメッセージリスナー(待ち受け)を追加
@bolt_app.message("hello slack")

# 第1引数:payloadはSlack⇒Flaskに送る、投稿内容に関する各種データ(例:投稿者、投稿内容)
def greetings(payload: dict, say: Say):
    # 投稿者のIDを取得
    user = payload.get("user")
    # say関数はメッセージリスナーの中でメッセージ投稿する場合に利用可能
    # メッセージリスナーの外で投稿する場合はclient.chat_postMessage()を使う
    say(f"Hi <@{user}>")

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)

(図131)

(補足)SlackRequestHandlerについて
SlackRequestHandlerについて「Flask, AWS Lambda, djangoなど様々なアダプタに対応した~」と記載していますが、具体的には下記のようなアダプタの種類が用意されています。
https://github.com/slackapi/bolt-python/tree/main/slack_bolt/adapter
(図132)

目次にもどる

STEP7:疎通テスト

試しに、ボットを入れたどこかのチャンネルで投稿をすると、ボットが反応してくれる事を確認します。

(動画141)

(図142)

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-Python, Slack
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

Slackでコマンドを作る方法をご紹介(自作スラッシュコマンド)

  <目次> (1) Slackでコマンドを作る方法をご紹介(自作スラッシュコマンド)  (1-0) やりたいこと  (1-1) STEP1:Slackボットの開発(所要時間:60分)  ( …

CondaHTTPError: HTTP 000 CONNECTION FAILED for url XXXXエラーの対処方法

  <目次> (1) CondaHTTPError: HTTP 000 CONNECTION FAILED for url XXXXエラーの対処方法  (1-1) 事象概要とエラーメッセージ …

Anacondaのインストール手順(Windows 10の例)

  <目次> (1) Anacondaのインストール手順(Windows 10の例)  (1-1) STEP1:インストーラーの入手と起動  (1-2) STEP2:インストール  (1-3 …

Pythonで複数の画像を結合する方法をご紹介

<目次> (1) Pythonで複数の画像を結合する方法  (1-1) STEP1:Pillowのインストール  (1-2) STEP2:画像の読み込み  (1-3) STEP3:画像を結合  (1- …

「pyenv」の導入後も「System Python」が有効になってしまう事象の原因と対処について

  <目次> (1) 「pyenv」の導入後も「System Python」が有効になってしまう事象の原因と対処について  (1-1) 問題点の整理  (1-2) 原因&対策(1つ目)  ( …

  • English (United States)
  • 日本語
Top