Slack APIでユーザインタラクションに対応する
以下のユーザアクションが行われたとき、Slackはアプリ開発者が事前に指定したエンドポイントに以下のペイロードを投げる:
- ユーザが Block Kit interactive component (in Posts, Modals, Home tab) を操作したとき
- →
block_actions
payload
- →
- ユーザが Shortcut を使ったとき
- →
shortcut
ormessage_actions
payload
- →
- ユーザが Slash command を送信したとき
- →
view_submittion
payload
- →
- ユーザが Modal を送信またはキャンセルしたとき
- →
view_closed
payload
- →
(これらのペイロードにはHMACの署名も付いている。)
Slackによって呼ばれるエンドポイントは以下の2つがある:
- Request URL: ユーザがアクションを起こしたときに呼ばれる。
- Options Load URL: select menu と multi-select menu のアイテムの読み込みに用いられる。使わなければ無指定でよい。
そして、ユーザのアクションに対して、アプリのエンドポイントは以下の反応ができる:
- Acknowledgement - (必須)アプリは3秒以内に 200 OK でレスポンスを返さなければならない(つまり時間のかかる処理は何らかの手法で非同期実行する必要がある)
- Message - メッセージの投稿または当該アクションが行われた投稿の書き換えを行う。これはペイロードに含まれる
response_url
に対してHTTP POSTすることによって行う。 - Modal - モーダルダイアログを開く。
views.open
APIを呼ぶ。 - Asynchronous - リクエストに対して直接的には何もせず、他のSlack APIを呼ぶ。
詳しい条件は忘れたけど、アプリによる投稿がアプリによって書き変えられた場合には「(編集済み)」のマークは付かない。