LoginSignup
0
0

rails で slack command の request を受け取る

Last updated at Posted at 2022-09-24

概要

  • slack command など request end point を 設定する
  • slack command request から data を取得
  • slack command が投入された channel へ応答を返す
    • 別記事にて記述

app / slasch command の設定

  • slack app 設定画面を開く
  • [ craete new app ] を選択
    • [ from scratch ] を選択
    • [ app name ] へ名前を入力
    • [ work space ] を選択する
    • [ create app ] を選択
  • [ slash command ] を開く
    • [ Create New Command ] を選択し, 以下を埋める
      - Command           : command 名を設定
      - Request URL       : rails の url path を設定  # http://rails.path/ など
      - Short Description : command の簡易説明を設定
      - Usage Hint        : command の使用方法などを設定
      
    • [ save ] を選択
  • [ install app ] を左メニューから選択
    • [ install to workspace ] を実行
  • slack を開く
    • 上記 command を適用する channel を開く
    • チャット入力欄の左下の + ボタンを選択
    • 検索欄へ add と入力
    • [ add apps to channel ] を選択
    • 先程登録した slach command を選択する

以上で slach command が channel へ有効化される

interaction event 発生時の request URL を設定

command とは別に event 発生時の URL を設定可能.
event は, app が slack 上に投稿した message に付随する button を click した際などに発生する.

  • slack app 設定画面を開く
  • [ Interactivity & Shortcuts ] を開く
  • [ Ruquest URL ] を設定
  • [ Save Changes ] を選択

request data 取得

以下2つの手法を上げる

  • command
  • interaction event

command

  • slack から, 登録した command を実行
  • rails へ request が届く
  • 以下, params から取得できる data を抜粋
params["user_id"]       : 送信元 user id
params["user_name"]     : 送信元 user name
params["team_id"]       : team id
params["channel_id"]    : channel id   # 応答を返す際に用いる
params["api_app_id"]    : api app id
params["command"]       : 実行された command name
params["text"]          : command に続いて入力された text

得られる data は限定されている.
補足情報が必要な場合, 上記 text への入力が必要.

interaction event

  • slack から, app が作成した button などを click
  • rails へ request が届く
  • params['payload'] から request data を取得
    • json string のため, hash へ変換が容易
  • 以下, payload から取得できる data を抜粋
payload["type"]        : event type
payload["user"]["id"]  : user id
payload["team"]["id"]  : team id
payload["api_app_id"]  : api app id
payload["message_ts"]  : bot が投稿した message の更新などにもちいる

event type と payload 構造

例えば, 複数の block_actions を作成する場合, type 以外の何らかの判別方法を組み込む必要があると思われる.

channel へ応答を返す

前項で取得した, user_id, channel_id などが必要となる.

応答方法は以下記事へ
https://qiita.com/Satoshi_Numasawa/items/3fc9078beabff666280c

以上

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