2024年4月9日火曜日

Slack の Socket Mode を試してみた

Slack の Socket Mode を試してみた

概要

Python を使いました
Socket Mode は Bolt と呼ばれる SDK を使ったほうが扱いやすいので Bolt を使います
トークンは Bot トークンと App Level トークンを使います

環境

  • macOS 11.7.10
  • Python 3.11.6
  • slack-bolt 1.18.1

準備

  • アプリの作成
  • Bot トークンの権限と取得
    • app_mentions:read
    • アプリの管理ページ -> 左メニュー「Install App」
  • Socket モードの有効化
    • アプリの管理ページ -> 左メニュー「Socket Mode」
  • App Level トークの取得
    • アプリの管理ページ -> 左メニュー「Basic Information」

Event Subscriptions の設定

左メニューの「Event Subscriptions」から使用するイベントを設定します
今回は特定のメッセージに反応するようにしたいので「message.channels」を追加します

インストール

  • pipenv install slack_bolt

サンプルコード

from typing import Callable

from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler

# こっちは Bot トークンを設定
app = App(token="xoxb-xxxxxxxxx")


# メッセージへの反応
# Hello に対して Hi there を返す
@app.message("Hello")
def say_hello(message: dict, say: Callable):
    user = message["user"]
    say(f"Hi there, <@{user}>!")


if __name__ == "__main__":
    # Socket モードをスタートする
    SocketModeHandler(
        app,
        # こっちは App Level トークンを設定
        "xapp-xxxxxxxxx",
    ).start()

動作確認

  • pipenv run python app.py

で起動しましょう
アプリはチャネルに招待しておいてください

そしてメッセージで「Hello」と送信するとアプリが反応してメッセージが返ってくることが確認できると思います

最後に

Slack の Socket Mode を試してみました
最近作成したアプリでは RTM API が使えないので Socket Mode に慣れておくと良いかなと思います

RTM に似たような感じで特定のイベントに反応して返信するという動きができます
またプレーンテキストだけではなくボタンなどを含んだインタラクティブコンポーネントを送信することもできるようです

参考サイト

0 件のコメント:

コメントを投稿